diff --git a/.well-known/security.txt b/.well-known/security.txt new file mode 100644 index 000000000..71e46f3ec --- /dev/null +++ b/.well-known/security.txt @@ -0,0 +1,5 @@ +Contact: mailto:dsf-security@hs-heilbronn.de +Expires: 2040-12-31T22:59:00.000Z +Preferred-Languages: de,en +Canonical: https://dsf.dev/.well-known/security.txt +Policy: https://dsf.dev/security \ No newline at end of file diff --git a/404.html b/404.html new file mode 100644 index 000000000..9071c8ecb --- /dev/null +++ b/404.html @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + +
Skip to main content

404

Page not found

That’s a Four-Oh-Four.

+ + + diff --git a/CNAME b/CNAME new file mode 100644 index 000000000..fa8ac487c --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +dsf.dev \ No newline at end of file diff --git a/about/index.html b/about/index.html new file mode 100644 index 000000000..54627f7df --- /dev/null +++ b/about/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + About + + + + + +
Skip to main content

About

DSF-TeamLess than 1 minute

Last update:
+ + + diff --git a/about/learnmore/contact.html b/about/learnmore/contact.html new file mode 100644 index 000000000..cadaee2ce --- /dev/null +++ b/about/learnmore/contact.html @@ -0,0 +1,40 @@ + + + + + + + + + + Contact & Community + + + + + +
Skip to main content

Contact & Community

DSF-TeamLess than 1 minute

✉️ E-MAIL

Feel free to contact us via E-Mail (dsf-gecko@hs-heilbronn.de) and we will take care of your request as soon as possible.

👥 COMMUNITY

DSF's community is growing and we welcome anyone who would like to join! 🚀

Stay up to Date

Contribute Code

You can get familiar with the DSF code on GitHub. Branching follows the git-flow model, for the latest development version see branch developopen in new window. Additionally, you can find more information here in the documentation.

Share your Experience & Get support

You´re welcome to share your experience with the Community. If you have a bug to report or feature to request, that's what the GitHub issuesopen in new window are for.

Last update:
+ + + diff --git a/about/learnmore/index.html b/about/learnmore/index.html new file mode 100644 index 000000000..2d4470e07 --- /dev/null +++ b/about/learnmore/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Learn more + + + + + +
Skip to main content

Learn more

DSF-TeamLess than 1 minute

Last update:
+ + + diff --git a/about/learnmore/partners.html b/about/learnmore/partners.html new file mode 100644 index 000000000..7f575eab2 --- /dev/null +++ b/about/learnmore/partners.html @@ -0,0 +1,40 @@ + + + + + + + + + + Partners + + + + + +
Skip to main content

Partners

DSF-TeamLess than 1 minute

Funded for further development of the Data Sharing Framework are:

Heilbronn University of Applied Sciences | Gecko Institute

The GECKO Instituteopen in new window is a research institution of Heilbronn University of Applied Sciencesopen in new window and conducts research and development at the interfaces between medicine, economics and computer science. The DSF is part of Prof. Fegeler's research area: Interoperability and Digital Processes in Medicine. Other areas of research include educational technologies, health economics, and consumer health informatics.

University of Heidelberg | Institute of Medical Informatics

The Institute of Medical Informaticsopen in new window belongs to the University of Heidelberg. The scientific focus of the institute is on structured patient data, e.g.

  • in the Medical Data Integration Center (MeDIC),
  • structured acquisition and transformation of biomedical data,
  • medical information systems and data models
  • and much more.

University of Leipzig | LIFE Institute

The LIFE Instituteopen in new window of the University of Leipzig manages collaborative and follow-on projects in the fields of medicine, public health, medical informatics, and biobanking.

Last update:
+ + + diff --git a/about/learnmore/public.html b/about/learnmore/public.html new file mode 100644 index 000000000..77ffdacfb --- /dev/null +++ b/about/learnmore/public.html @@ -0,0 +1,40 @@ + + + + + + + + + + Public Funding + + + + + +
Skip to main content

Public Funding

DSF-TeamAbout 1 min

DSF - Medical Informatics Structure "Data Sharing Framework Community" (2023-2026)

The DSF Community connects the DSF competencies of the entire Medical Informatics Initiative (MII)open in new window so that new use cases, in particular from Module 3 or the Network University Medicine (NUM)open in new window, are better supported in creating the respective DSF plugins. In the context of Module 2b, the DSF Community contributes to the further development of the common digital infrastructure of the MII together with the FDPG+open in new window and TRANSITopen in new window projects. BMBFopen in new window

Heilbronn University (HHN) focuses on the connecting of DSF related topics and competencies in the MII with the community management. The quality assurance of new DSF plugins and further development of the application and core components aim at a scalable, stable and secure operation of the DSF (Funding code: 01ZZ2307A).

Heidelberg University is focusing on the further development of the DSF core components as well as the rollout of the DSF plugins, in particular also from the perspective of a data integration center in consultation with the FDGP+ and TRANSIT projects (Funding code: 01ZZ2307B).

The University of Leipzig will further develop and adapt the DSF plugin for the Research Data Portal for Health FDPG according to specifications resulting from the FDPG+ project and enable Data Integration Centers (DIC) to operate the FDPG plugin (Funding code: 01ZZ2307C).





Development of the DSF in the HiGHmed consortium -Contribution Heilbronn University and Heidelberg University (2018-2022)

HiGHmedopen in new window aims to increase the efficiency of clinical research and improve patient care through new medical informatics solutions and cross-organizational data exchange. The concept will be developed on the basis of three defined prototypical use cases, which will ensure close integration with the requirements of patient care and medical research. The GECKO Instituteopen in new window of HHN will establish a trusted third party with pseudonymization service to implement the goals of HiGHmed and is involved in the technical development of the DSF together with the partners (Funding code: 01ZZ1802E). Heidelberg University is in particular involved in the technical development of the DSF (Funding code: 01ZZ1802A).

Last update:
+ + + diff --git a/about/learnmore/team.html b/about/learnmore/team.html new file mode 100644 index 000000000..ec1ee4cf1 --- /dev/null +++ b/about/learnmore/team.html @@ -0,0 +1,40 @@ + + + + + + + + + + Team + + + + + +
Skip to main content

Team

DSF-TeamLess than 1 minute

The funded project team includes:

We thank additional contributors, including:

Last update:
+ + + diff --git a/assets/404.html-CMAq4TQ3.js b/assets/404.html-CMAq4TQ3.js new file mode 100644 index 000000000..fbe252f85 --- /dev/null +++ b/assets/404.html-CMAq4TQ3.js @@ -0,0 +1 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as o,a as n}from"./app-kq9lCQfY.js";const a={},r=n("p",null,"404 Not Found",-1),s=[r];function c(l,_){return e(),o("div",null,s)}const m=t(a,[["render",c],["__file","404.html.vue"]]),p=JSON.parse('{"path":"/404.html","title":"","lang":"en-US","frontmatter":{"layout":"NotFound"},"headers":[],"git":{},"readingTime":{"minutes":0.01,"words":3},"filePathRelative":null,"excerpt":"

404 Not Found

\\n"}');export{m as comp,p as data}; diff --git a/assets/GMDS2022-dev.html-DlHHIr-I.js b/assets/GMDS2022-dev.html-DlHHIr-I.js new file mode 100644 index 000000000..dbb137813 --- /dev/null +++ b/assets/GMDS2022-dev.html-DlHHIr-I.js @@ -0,0 +1 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as n,c as r,a as t,b as e,d as s,w as l}from"./app-kq9lCQfY.js";const c={},m=t("meta",{"http-equiv":"refresh",content:"0; URL=/oldstable/tutorial/"},null,-1);function d(h,u){const o=i("RouteLink");return n(),r("div",null,[t("p",null,[e("Redirect to "),s(o,{to:"/oldstable/tutorial/"},{default:l(()=>[e("this webpage")]),_:1}),e(".")]),m])}const f=a(c,[["render",d],["__file","GMDS2022-dev.html.vue"]]),b=JSON.parse('{"path":"/intro/tutorials/GMDS2022-dev.html","title":"GMDS2022 - Process Development","lang":"en-US","frontmatter":{"title":"GMDS2022 - Process Development","icon":"code"},"headers":[],"git":{"createdTime":1690461865000,"updatedTime":1699955216000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.07,"words":20},"filePathRelative":"intro/tutorials/GMDS2022-dev.md","localizedDate":"July 27, 2023","excerpt":"

Redirect to this webpage.

\\n\\n"}');export{f as comp,b as data}; diff --git a/assets/MIE2023.html-MrPY5Efy.js b/assets/MIE2023.html-MrPY5Efy.js new file mode 100644 index 000000000..0de228329 --- /dev/null +++ b/assets/MIE2023.html-MrPY5Efy.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as n,c as o,a as e,b as t,d as i,e as l}from"./app-kq9lCQfY.js";const d="/photos/tutorials/dsf-architecture.svg",c={},h=e("h2",{id:"abstract",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#abstract"},[e("span",null,"Abstract")])],-1),u={href:"https://github.com/highmed/highmed-dsf",target:"_blank",rel:"noopener noreferrer"},p={href:"https://www.medizininformatik-initiative.de/en/start",target:"_blank",rel:"noopener noreferrer"},m=l('

Topic

The use of real-world data collected by healthcare providers for bio-medical research requires the data to be available and accessible. This is especially important when considering the usage of data across organizations. Distributed processes such as feasibility studies, record linkage, and data sharing need to be established for effective consolidation and analysis.
While even multi-center retrospective studies using real-world data become commonplace, maintaining infrastructure components for every project conducted is not sustainable. To address this, the Data Sharing Framework (DSF) was developed as an open source, use case independent distributed business process engine to execute cross-organizational research and healthcare delivery processes.

The tutorial will cover the fundamental concepts of distributed processes and will provide an overview of the DSF's architecture and key standards such as HL7 FHIR and BPMN 2.0 that are used in the framework. The tutorial will present real-world examples to illustrate the DSFs capabilities and delve into specific issues the DSF addresses for the German Medical Informatics Initiative (MII).

Participants will have the opportunity to gain hands-on experience with the DSF by working with different processes in a lab setting. Technical aspects such as authentication and authorization, onboarding of new organizations and guidance on using the DSF for other use cases, such as specific research projects or new infrastructure developments, will be covered.
Finally, the tutorial will present lessons learned from the last years of using the DSF in test and production environments in multiple research consortia and will present ideas for future improvements based on feedback from end-users, process developers, project managers and administrative staff.

Target Group

Decision makers and project members with data sharing ideas looking for an architecture, as well as medical informatics professionals and software developers tasked with building multi-centric data sharing applications, are the target audience for this tutorial.

What you need

You need a laptop with a web browser for the hands-on portion of the tutorial.

What you will learn

You will...

',12);function f(g,w){const a=s("ExternalLinkIcon");return n(),o("div",null,[h,e("p",null,[t("With this tutorial, participants will gain a detailed insight into the Data Sharing Framework (DSF) ("),e("a",u,[t("https://github.com/highmed/highmed-dsf"),i(a)]),t("). The open source DSF enables users to execute biomedical research and healthcare delivery processes across organizations, and the tutorial will demonstrate this with examples from the German Medical Informatics Initiative (MII) ("),e("a",p,[t("https://www.medizininformatik-initiative.de/en/start"),i(a)]),t(") funded by the Federal Ministry of Education and Research (BMBF). The tutorial will cover fundamental concepts of distributed processes, the DSFs architecture and key standards such as HL7 FHIR and BPMN 2.0. Participants will have the opportunity to gain hands-on experience with the DSF by working with different processes in a lab setting. Technical aspects such as authentication and authorization will be covered, as well as guidance on using the DSF for other use cases. This tutorial is designed for those involved in distributed research projects, including project members and software developers, as well as individuals interested in multi-organizational research projects.")]),m])}const y=r(c,[["render",f],["__file","MIE2023.html.vue"]]),k=JSON.parse('{"path":"/intro/tutorials/MIE2023.html","title":"MIE May 2023","lang":"en-US","frontmatter":{"title":"MIE May 2023","icon":"info"},"headers":[{"level":2,"title":"Abstract","slug":"abstract","link":"#abstract","children":[]},{"level":2,"title":"Topic","slug":"topic","link":"#topic","children":[]},{"level":2,"title":"Target Group","slug":"target-group","link":"#target-group","children":[]},{"level":2,"title":"What you need","slug":"what-you-need","link":"#what-you-need","children":[]},{"level":2,"title":"What you will learn","slug":"what-you-will-learn","link":"#what-you-will-learn","children":[]}],"git":{"createdTime":1690461865000,"updatedTime":1690461865000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.95,"words":585},"filePathRelative":"intro/tutorials/MIE2023.md","localizedDate":"July 27, 2023","excerpt":"

Abstract

\\n

With this tutorial, participants will gain a detailed insight into the Data Sharing Framework (DSF) (https://github.com/highmed/highmed-dsf). The open source DSF enables users to execute biomedical research and healthcare delivery processes across organizations, and the tutorial will demonstrate this with examples from the German Medical Informatics Initiative (MII) (https://www.medizininformatik-initiative.de/en/start) funded by the Federal Ministry of Education and Research (BMBF). The tutorial will cover fundamental concepts of distributed processes, the DSFs architecture and key standards such as HL7 FHIR and BPMN 2.0. Participants will have the opportunity to gain hands-on experience with the DSF by working with different processes in a lab setting. Technical aspects such as authentication and authorization will be covered, as well as guidance on using the DSF for other use cases. This tutorial is designed for those involved in distributed research projects, including project members and software developers, as well as individuals interested in multi-organizational research projects.

"}');export{y as comp,k as data}; diff --git a/assets/SearchResult-CAA_SdMH.js b/assets/SearchResult-CAA_SdMH.js new file mode 100644 index 000000000..4293e055f --- /dev/null +++ b/assets/SearchResult-CAA_SdMH.js @@ -0,0 +1 @@ +import{u as G,f as Z,g as ee,h as _,i as te,j as ae,t as ie,k as le,l as P,m as D,n as ne,p as N,q as a,s as re,R as O,v as oe,x as se,y as me,z as j,A as B,B as ve,C as he,D as ue,E as ce,O as de,F as pe,G as fe,P as ge,H as be,I as ye,J as L}from"./app-kq9lCQfY.js";const xe=["/","/about/","/for-you/","/for-you/learn.html","/hackathon/","/intro/","/intro/publications.html","/oldstable/","/oldstable/introduction.html","/security/","/sprechstunde/","/stable/dsf-for-dev.html","/stable/","/stable/process-plugins-advanced.html","/v1.0.0/dsf-for-dev.html","/v1.0.0/","/v1.0.0/process-plugins-advanced.html","/v1.1.0/dsf-for-dev.html","/v1.1.0/","/v1.1.0/process-plugins-advanced.html","/v1.2.0/dsf-for-dev.html","/v1.2.0/","/v1.2.0/process-plugins-advanced.html","/v1.3.0/dsf-for-dev.html","/v1.3.0/","/v1.3.0/process-plugins-advanced.html","/v1.3.1/dsf-for-dev.html","/v1.3.1/","/v1.3.1/process-plugins-advanced.html","/v1.3.2/dsf-for-dev.html","/v1.3.2/","/v1.3.2/process-plugins-advanced.html","/v1.4.0/dsf-for-dev.html","/v1.4.0/","/v1.4.0/process-plugins-advanced.html","/v1.5.0/dsf-for-dev.html","/v1.5.0/","/v1.5.0/process-plugins-advanced.html","/v1.5.1/dsf-for-dev.html","/v1.5.1/","/v1.5.1/process-plugins-advanced.html","/v1.5.2/dsf-for-dev.html","/v1.5.2/","/v1.5.2/process-plugins-advanced.html","/about/learnmore/","/about/learnmore/contact.html","/about/learnmore/partners.html","/about/learnmore/public.html","/about/learnmore/team.html","/intro/info/allowList.html","/intro/info/architecture.html","/intro/info/basics.html","/intro/info/introduction.html","/intro/info/networkSetup.html","/intro/info/process-plugins.html","/intro/info/security.html","/intro/tutorials/GMDS2022-dev.html","/intro/tutorials/MIE2023.html","/intro/tutorials/","/intro/tutorials/Talks.html","/intro/use-cases/","/intro/use-cases/feasibility.html","/intro/use-cases/num.html","/oldstable/build/","/oldstable/build/build.html","/oldstable/build/proxyTestTool.html","/oldstable/build/releaseANewVersion.html","/oldstable/code/","/oldstable/code/addingANewFhirR.html","/oldstable/code/addingANewMpiClient.html","/oldstable/code/addingANewOpenEhrClient.html","/oldstable/code/changingBpmnProcesses.html","/oldstable/code/code.html","/oldstable/code/eclipseContent.html","/oldstable/code/intelliJContent.html","/oldstable/code/libraries.html","/oldstable/code/usingTheGitHubMaven.html","/oldstable/generalinformation/","/oldstable/generalinformation/authentication.html","/oldstable/generalinformation/networkSetup.html","/oldstable/releases/","/oldstable/releases/configBpe.html","/oldstable/releases/configFhir.html","/oldstable/releases/configFhirReverseProxy.html","/oldstable/releases/highmedInstall.html","/oldstable/releases/num-codexInstall.html","/oldstable/releases/upgradeFrom7.html","/oldstable/releases/upgradeFrom8.html","/oldstable/releases/upgradeFrom90.html","/oldstable/releases/upgradeFrom91.html","/oldstable/releases/upgradeFrom92.html","/oldstable/tutorial/","/oldstable/tutorial/ex11-docker-composeyml.html","/oldstable/tutorial/exercise1-simpleProcess.html","/oldstable/tutorial/exercise11-processDebugging.html","/oldstable/tutorial/exercise2-inputParameters.html","/oldstable/tutorial/exercise3-messageEvents.html","/oldstable/tutorial/exercise4-exclusiveGateways.html","/oldstable/tutorial/exercise5-eventBasedGateways.html","/oldstable/tutorial/prerequisites.html","/stable/contribute/code.html","/stable/contribute/documentation.html","/stable/contribute/","/stable/develop/","/stable/develop/create.html","/stable/develop/upgrade-from-0.html","/stable/maintain/","/stable/maintain/allowList-mgm.html","/stable/maintain/install-plugins.html","/stable/maintain/install.html","/stable/maintain/upgrade-from-0.html","/stable/maintain/upgrade-from-1.html","/v1.0.0/develop/","/v1.0.0/develop/create.html","/v1.0.0/develop/upgrade-from-0.html","/v1.0.0/maintain/","/v1.0.0/maintain/allowList-mgm.html","/v1.0.0/maintain/install.html","/v1.0.0/maintain/upgrade-from-0.html","/v1.1.0/develop/","/v1.1.0/develop/create.html","/v1.1.0/develop/upgrade-from-0.html","/v1.1.0/maintain/","/v1.1.0/maintain/allowList-mgm.html","/v1.1.0/maintain/install.html","/v1.1.0/maintain/upgrade-from-0.html","/v1.1.0/maintain/upgrade-from-1.html","/v1.2.0/develop/","/v1.2.0/develop/create.html","/v1.2.0/develop/upgrade-from-0.html","/v1.2.0/maintain/","/v1.2.0/maintain/allowList-mgm.html","/v1.2.0/maintain/install.html","/v1.2.0/maintain/upgrade-from-0.html","/v1.2.0/maintain/upgrade-from-1.html","/v1.3.0/develop/","/v1.3.0/develop/create.html","/v1.3.0/develop/upgrade-from-0.html","/v1.3.0/maintain/","/v1.3.0/maintain/allowList-mgm.html","/v1.3.0/maintain/install-plugins.html","/v1.3.0/maintain/install.html","/v1.3.0/maintain/upgrade-from-0.html","/v1.3.0/maintain/upgrade-from-1.html","/v1.3.1/develop/","/v1.3.1/develop/create.html","/v1.3.1/develop/upgrade-from-0.html","/v1.3.1/maintain/","/v1.3.1/maintain/allowList-mgm.html","/v1.3.1/maintain/install-plugins.html","/v1.3.1/maintain/install.html","/v1.3.1/maintain/upgrade-from-0.html","/v1.3.1/maintain/upgrade-from-1.html","/v1.3.2/develop/","/v1.3.2/develop/create.html","/v1.3.2/develop/upgrade-from-0.html","/v1.3.2/maintain/","/v1.3.2/maintain/allowList-mgm.html","/v1.3.2/maintain/install-plugins.html","/v1.3.2/maintain/install.html","/v1.3.2/maintain/upgrade-from-0.html","/v1.3.2/maintain/upgrade-from-1.html","/v1.4.0/contribute/code.html","/v1.4.0/contribute/documentation.html","/v1.4.0/contribute/","/v1.4.0/develop/","/v1.4.0/develop/create.html","/v1.4.0/develop/upgrade-from-0.html","/v1.4.0/maintain/","/v1.4.0/maintain/allowList-mgm.html","/v1.4.0/maintain/install-plugins.html","/v1.4.0/maintain/install.html","/v1.4.0/maintain/upgrade-from-0.html","/v1.4.0/maintain/upgrade-from-1.html","/v1.5.0/contribute/code.html","/v1.5.0/contribute/documentation.html","/v1.5.0/contribute/","/v1.5.0/develop/","/v1.5.0/develop/create.html","/v1.5.0/develop/upgrade-from-0.html","/v1.5.0/maintain/","/v1.5.0/maintain/allowList-mgm.html","/v1.5.0/maintain/install-plugins.html","/v1.5.0/maintain/install.html","/v1.5.0/maintain/upgrade-from-0.html","/v1.5.0/maintain/upgrade-from-1.html","/v1.5.1/contribute/code.html","/v1.5.1/contribute/documentation.html","/v1.5.1/contribute/","/v1.5.1/develop/","/v1.5.1/develop/create.html","/v1.5.1/develop/upgrade-from-0.html","/v1.5.1/maintain/","/v1.5.1/maintain/allowList-mgm.html","/v1.5.1/maintain/install-plugins.html","/v1.5.1/maintain/install.html","/v1.5.1/maintain/upgrade-from-0.html","/v1.5.1/maintain/upgrade-from-1.html","/v1.5.2/contribute/code.html","/v1.5.2/contribute/documentation.html","/v1.5.2/contribute/","/v1.5.2/develop/","/v1.5.2/develop/create.html","/v1.5.2/develop/upgrade-from-0.html","/v1.5.2/maintain/","/v1.5.2/maintain/allowList-mgm.html","/v1.5.2/maintain/install-plugins.html","/v1.5.2/maintain/install.html","/v1.5.2/maintain/upgrade-from-0.html","/v1.5.2/maintain/upgrade-from-1.html","/stable/maintain/bpe/","/stable/maintain/bpe/access-control.html","/stable/maintain/bpe/configuration.html","/stable/maintain/bpe/oidc.html","/stable/maintain/bpe-reverse-proxy/","/stable/maintain/bpe-reverse-proxy/configuration.html","/stable/maintain/fhir/","/stable/maintain/fhir/access-control.html","/stable/maintain/fhir/configuration.html","/stable/maintain/fhir/oidc.html","/stable/maintain/fhir-reverse-proxy/","/stable/maintain/fhir-reverse-proxy/configuration.html","/v1.0.0/maintain/configuration/","/v1.0.0/maintain/configuration/bpe.html","/v1.0.0/maintain/configuration/common.html","/v1.0.0/maintain/configuration/fhir.html","/v1.0.0/maintain/configuration/reverseproxy.html","/v1.1.0/maintain/bpe/","/v1.1.0/maintain/bpe/configuration.html","/v1.1.0/maintain/fhir/","/v1.1.0/maintain/fhir/access-control.html","/v1.1.0/maintain/fhir/configuration.html","/v1.1.0/maintain/fhir/oidc.html","/v1.1.0/maintain/fhir-reverse-proxy/","/v1.1.0/maintain/fhir-reverse-proxy/configuration.html","/v1.2.0/maintain/bpe/","/v1.2.0/maintain/bpe/configuration.html","/v1.2.0/maintain/fhir/","/v1.2.0/maintain/fhir/access-control.html","/v1.2.0/maintain/fhir/configuration.html","/v1.2.0/maintain/fhir/oidc.html","/v1.2.0/maintain/fhir-reverse-proxy/","/v1.2.0/maintain/fhir-reverse-proxy/configuration.html","/v1.3.0/maintain/bpe/","/v1.3.0/maintain/bpe/configuration.html","/v1.3.0/maintain/fhir/","/v1.3.0/maintain/fhir/access-control.html","/v1.3.0/maintain/fhir/configuration.html","/v1.3.0/maintain/fhir/oidc.html","/v1.3.0/maintain/fhir-reverse-proxy/","/v1.3.0/maintain/fhir-reverse-proxy/configuration.html","/v1.3.1/maintain/bpe/","/v1.3.1/maintain/bpe/configuration.html","/v1.3.1/maintain/fhir/","/v1.3.1/maintain/fhir/access-control.html","/v1.3.1/maintain/fhir/configuration.html","/v1.3.1/maintain/fhir/oidc.html","/v1.3.1/maintain/fhir-reverse-proxy/","/v1.3.1/maintain/fhir-reverse-proxy/configuration.html","/v1.3.2/maintain/bpe/","/v1.3.2/maintain/bpe/configuration.html","/v1.3.2/maintain/fhir/","/v1.3.2/maintain/fhir/access-control.html","/v1.3.2/maintain/fhir/configuration.html","/v1.3.2/maintain/fhir/oidc.html","/v1.3.2/maintain/fhir-reverse-proxy/","/v1.3.2/maintain/fhir-reverse-proxy/configuration.html","/v1.4.0/maintain/bpe/","/v1.4.0/maintain/bpe/configuration.html","/v1.4.0/maintain/fhir/","/v1.4.0/maintain/fhir/access-control.html","/v1.4.0/maintain/fhir/configuration.html","/v1.4.0/maintain/fhir/oidc.html","/v1.4.0/maintain/fhir-reverse-proxy/","/v1.4.0/maintain/fhir-reverse-proxy/configuration.html","/v1.5.0/maintain/bpe/","/v1.5.0/maintain/bpe/access-control.html","/v1.5.0/maintain/bpe/configuration.html","/v1.5.0/maintain/bpe/oidc.html","/v1.5.0/maintain/bpe-reverse-proxy/","/v1.5.0/maintain/bpe-reverse-proxy/configuration.html","/v1.5.0/maintain/fhir/","/v1.5.0/maintain/fhir/access-control.html","/v1.5.0/maintain/fhir/configuration.html","/v1.5.0/maintain/fhir/oidc.html","/v1.5.0/maintain/fhir-reverse-proxy/","/v1.5.0/maintain/fhir-reverse-proxy/configuration.html","/v1.5.1/maintain/bpe/","/v1.5.1/maintain/bpe/access-control.html","/v1.5.1/maintain/bpe/configuration.html","/v1.5.1/maintain/bpe/oidc.html","/v1.5.1/maintain/bpe-reverse-proxy/","/v1.5.1/maintain/bpe-reverse-proxy/configuration.html","/v1.5.1/maintain/fhir/","/v1.5.1/maintain/fhir/access-control.html","/v1.5.1/maintain/fhir/configuration.html","/v1.5.1/maintain/fhir/oidc.html","/v1.5.1/maintain/fhir-reverse-proxy/","/v1.5.1/maintain/fhir-reverse-proxy/configuration.html","/v1.5.2/maintain/bpe/","/v1.5.2/maintain/bpe/access-control.html","/v1.5.2/maintain/bpe/configuration.html","/v1.5.2/maintain/bpe/oidc.html","/v1.5.2/maintain/bpe-reverse-proxy/","/v1.5.2/maintain/bpe-reverse-proxy/configuration.html","/v1.5.2/maintain/fhir/","/v1.5.2/maintain/fhir/access-control.html","/v1.5.2/maintain/fhir/configuration.html","/v1.5.2/maintain/fhir/oidc.html","/v1.5.2/maintain/fhir-reverse-proxy/","/v1.5.2/maintain/fhir-reverse-proxy/configuration.html","/404.html","/intro/info/"],we="SEARCH_PRO_QUERY_HISTORY",d=G(we,[]),He=()=>{const{queryHistoryCount:i}=L,l=i>0;return{enabled:l,queryHistory:d,addQueryHistory:n=>{l&&(d.value.length{d.value=[...d.value.slice(0,n),...d.value.slice(n+1)]}}},T=i=>xe[i.id]+("anchor"in i?`#${i.anchor}`:""),Re="SEARCH_PRO_RESULT_HISTORY",{resultHistoryCount:E}=L,p=G(Re,[]),ke=()=>{const i=E>0;return{enabled:i,resultHistory:p,addResultHistory:l=>{if(i){const n={link:T(l),display:l.display};"header"in l&&(n.header=l.header),p.value.length{p.value=[...p.value.slice(0,l),...p.value.slice(l+1)]}}},Le=i=>{const l=ve(),n=_(),Q=he(),o=P(!1),b=ue([]);return ce(()=>{const{search:w,terminate:f}=de(),H=()=>{b.value=[],o.value=!1},y=ye(v=>{const x=v.join(" "),{searchFilter:C=c=>c,splitWord:S,suggestionsFilter:I,...g}=l.value;o.value=!0,x?w(v.join(" "),n.value,g).then(c=>C(c,x,n.value,Q.value)).then(c=>{b.value=c,o.value=!1}).catch(c=>{console.error(c),H()}):H()},L.searchDelay-L.suggestDelay);N([i,n],([v])=>y(v),{immediate:!0}),pe(()=>{f()})}),{searching:o,results:b}};var Ce=Z({name:"SearchResult",props:{queries:{type:Array,required:!0},isFocusing:Boolean},emits:["close","updateQuery"],setup(i,{emit:l}){const n=ee(),Q=_(),o=te(ae),{enabled:b,addQueryHistory:w,queryHistory:f,removeQueryHistory:H}=He(),{enabled:y,resultHistory:v,addResultHistory:x,removeResultHistory:C}=ke(),S=b||y,I=ie(i,"queries"),{results:g,searching:c}=Le(I),r=le({isQuery:!0,index:0}),h=P(0),u=P(0),$=D(()=>S&&(f.value.length>0||v.value.length>0)),q=D(()=>g.value.length>0),F=D(()=>g.value[h.value]||null),U=()=>{const{isQuery:e,index:t}=r;t===0?(r.isQuery=!e,r.index=e?v.value.length-1:f.value.length-1):r.index=t-1},J=()=>{const{isQuery:e,index:t}=r;t===(e?f.value.length-1:v.value.length-1)?(r.isQuery=!e,r.index=0):r.index=t+1},V=()=>{h.value=h.value>0?h.value-1:g.value.length-1,u.value=F.value.contents.length-1},Y=()=>{h.value=h.value{u.value{u.value>0?u.value-=1:V()},A=e=>e.map(t=>fe(t)?t:a(t[0],t[1])),W=e=>{if(e.type==="customField"){const t=ge[e.index]||"$content",[s,k=""]=be(t)?t[Q.value].split("$content"):t.split("$content");return e.display.map(m=>a("div",A([s,...m,k])))}return e.display.map(t=>a("div",A(t)))},R=()=>{h.value=0,u.value=0,l("updateQuery",""),l("close")};return ne("keydown",e=>{if(i.isFocusing){if(q.value){if(e.key==="ArrowUp")K();else if(e.key==="ArrowDown")z();else if(e.key==="Enter"){const t=F.value.contents[u.value];w(i.queries.join(" ")),x(t),n.push(T(t)),R()}}else if(y){if(e.key==="ArrowUp")U();else if(e.key==="ArrowDown")J();else if(e.key==="Enter"){const{index:t}=r;r.isQuery?(l("updateQuery",f.value[t]),e.preventDefault()):(n.push(v.value[t].link),R())}}}}),N([h,u],()=>{var e;(e=document.querySelector(".search-pro-result-list-item.active .search-pro-result-item.active"))==null||e.scrollIntoView(!1)},{flush:"post"}),()=>a("div",{class:["search-pro-result-wrapper",{empty:i.queries.length?!q.value:!$.value}],id:"search-pro-results"},i.queries.length?c.value?a(re,{hint:o.value.searching}):q.value?a("ul",{class:"search-pro-result-list"},g.value.map(({title:e,contents:t},s)=>{const k=h.value===s;return a("li",{class:["search-pro-result-list-item",{active:k}]},[a("div",{class:"search-pro-result-title"},e||o.value.defaultTitle),t.map((m,X)=>{const M=k&&u.value===X;return a(O,{to:T(m),class:["search-pro-result-item",{active:M,"aria-selected":M}],onClick:()=>{w(i.queries.join(" ")),x(m),R()}},()=>[m.type==="text"?null:a(m.type==="title"?oe:m.type==="heading"?se:me,{class:"search-pro-result-type"}),a("div",{class:"search-pro-result-content"},[m.type==="text"&&m.header?a("div",{class:"content-header"},m.header):null,a("div",W(m))])])})])})):o.value.emptyResult:S?$.value?[b?a("ul",{class:"search-pro-result-list"},a("li",{class:"search-pro-result-list-item"},[a("div",{class:"search-pro-result-title"},o.value.queryHistory),f.value.map((e,t)=>a("div",{class:["search-pro-result-item",{active:r.isQuery&&r.index===t}],onClick:()=>{l("updateQuery",e)}},[a(j,{class:"search-pro-result-type"}),a("div",{class:"search-pro-result-content"},e),a("button",{class:"search-pro-remove-icon",innerHTML:B,onClick:s=>{s.preventDefault(),s.stopPropagation(),H(t)}})]))])):null,y?a("ul",{class:"search-pro-result-list"},a("li",{class:"search-pro-result-list-item"},[a("div",{class:"search-pro-result-title"},o.value.resultHistory),v.value.map((e,t)=>a(O,{to:e.link,class:["search-pro-result-item",{active:!r.isQuery&&r.index===t}],onClick:()=>{R()}},()=>[a(j,{class:"search-pro-result-type"}),a("div",{class:"search-pro-result-content"},[e.header?a("div",{class:"content-header"},e.header):null,a("div",e.display.map(s=>A(s)).flat())]),a("button",{class:"search-pro-remove-icon",innerHTML:B,onClick:s=>{s.preventDefault(),s.stopPropagation(),C(t)}})]))])):null]:o.value.emptyHistory:o.value.emptyResult)}});export{Ce as default}; diff --git a/assets/Talks.html-35con64A.js b/assets/Talks.html-35con64A.js new file mode 100644 index 000000000..2ea04b177 --- /dev/null +++ b/assets/Talks.html-35con64A.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as l,o as i,c as s,a as t,b as e,d as n,w as r}from"./app-kq9lCQfY.js";const d={},c=t("meta",{"http-equiv":"refresh",content:"0; URL=/oldstable/guideline/publications.html#recorded-talks"},null,-1);function m(u,p){const a=l("RouteLink");return i(),s("div",null,[t("p",null,[e("Redirect to "),n(a,{to:"/oldstable/guideline/publications.html#recorded-talks"},{default:r(()=>[e("this webpage")]),_:1}),e(".")]),c])}const b=o(d,[["render",m],["__file","Talks.html.vue"]]),k=JSON.parse('{"path":"/intro/tutorials/Talks.html","title":"Recorded talks","lang":"en-US","frontmatter":{"title":"Recorded talks","icon":"globe"},"headers":[],"git":{"createdTime":1690461865000,"updatedTime":1690461865000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.08,"words":23},"filePathRelative":"intro/tutorials/Talks.md","localizedDate":"July 27, 2023","excerpt":"

Redirect to this webpage.

\\n\\n"}');export{b as comp,k as data}; diff --git a/assets/access-control.html-B8WDW2yd.js b/assets/access-control.html-B8WDW2yd.js new file mode 100644 index 000000000..df650df20 --- /dev/null +++ b/assets/access-control.html-B8WDW2yd.js @@ -0,0 +1,46 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o,c,a,b as e,d as s,e as i}from"./app-kq9lCQfY.js";const l={},d=a("h2",{id:"overview",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#overview"},[a("span",null,"Overview")])],-1),p={href:"http://hl7.org/fhir/R4/http.html",target:"_blank",rel:"noopener noreferrer"},h=a("a",{href:"configuration#dev-dsf-fhir-server-organization-thumbprint"},"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT",-1),u=i(`

OpenID Connect

To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

The listing below shows a minimal configuration to enable read access for a specific client-certificate:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - example_read_only_role:
+            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+

The list of user roles above contains a single entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles.

Certificate Thumbprints

SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

certtool --fingerprint --hash=sha512 --infile=certificate.pem
+

Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

Matching Users

To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

thumbprint

The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

email

`,12),m=a("code",null,"email",-1),f=a("code",null,"email",-1),v={href:"https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims",target:"_blank",rel:"noopener noreferrer"},b=i('

token-role and token-group

With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

DSF and Practitioner Roles

To types of roles can be applied to matched users.

dsf-role

DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

practitioner-role

',8),g=a("code",null,"practitioner-role",-1),_={href:"http://hl7.org/fhir/R4/codesystem.html",target:"_blank",rel:"noopener noreferrer"},E=a("code",null,"system-url|code",-1),R=a("br",null,null,-1),S=a("code",null,"requester",-1),k={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},D=a("code",null,"dsf-role",-1),I=a("code",null,"CREATE",-1),A=i(`

Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

Examples

The first example defines a group of DSF administrators. Two client certificates match against this role:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - certificate-admins:
+            thumbprint: 
+              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
+              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - token-role-admins:
+            token-role: admin
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - read-only:
+            email:
+              - first.user@test.org
+              - second.user@test.org
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+
`,9);function y(T,F){const n=r("ExternalLinkIcon");return o(),c("div",null,[d,a("p",null,[e("The DSF FHIR server implements a subset of the FHIR R4 "),a("a",p,[e("REST API"),s(n)]),e(". When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: "),h]),u,a("p",null,[e("Using the property "),m,e(" users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the "),f,e(),a("a",v,[e("claim"),s(n)]),e(" from the access token will be matched against the property values.")]),b,a("p",null,[e("In order to allow users to start processes, the property "),g,e(" can be used to assign codes from FHIR "),a("a",_,[e("CodeSystem"),s(n)]),e(" resources. Codes are specified in the form "),E,e("."),R,e(" If the uses has a code specified here that match with a "),S,e(" extension within the process plugin's "),a("a",k,[e("ActivityDefinition"),s(n)]),e(" resource, the user can start the process if he also has the "),D,e(),I,e(".")]),A])}const w=t(l,[["render",y],["__file","access-control.html.vue"]]),x=JSON.parse('{"path":"/v1.3.1/maintain/fhir/access-control.html","title":"Access Control","lang":"en-US","frontmatter":{"title":"Access Control","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Matching Users","slug":"matching-users","link":"#matching-users","children":[]},{"level":2,"title":"DSF and Practitioner Roles","slug":"dsf-and-practitioner-roles","link":"#dsf-and-practitioner-roles","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[]}],"git":{"createdTime":1698748420000,"updatedTime":1698748420000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":2.47,"words":742},"filePathRelative":"v1.3.1/maintain/fhir/access-control.md","localizedDate":"October 31, 2023","excerpt":"

Overview

\\n

The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

"}');export{w as comp,x as data}; diff --git a/assets/access-control.html-B_zcP1LF.js b/assets/access-control.html-B_zcP1LF.js new file mode 100644 index 000000000..f34092a0f --- /dev/null +++ b/assets/access-control.html-B_zcP1LF.js @@ -0,0 +1,46 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o,c,a,b as e,d as s,e as i}from"./app-kq9lCQfY.js";const l={},d=a("h2",{id:"overview",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#overview"},[a("span",null,"Overview")])],-1),p={href:"http://hl7.org/fhir/R4/http.html",target:"_blank",rel:"noopener noreferrer"},h=a("a",{href:"configuration#dev-dsf-fhir-server-organization-thumbprint"},"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT",-1),u=i(`

OpenID Connect

To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

The listing below shows a minimal configuration to enable read access for a specific client-certificate:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - example_read_only_role:
+            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+

The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.

Certificate Thumbprints

SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

certtool --fingerprint --hash=sha512 --infile=certificate.pem
+

Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

Matching Users

To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

thumbprint

The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

email

`,12),m=a("code",null,"email",-1),f=a("code",null,"email",-1),v={href:"https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims",target:"_blank",rel:"noopener noreferrer"},b=i('

token-role and token-group

With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

DSF and Practitioner Roles

Two types of roles can be applied to matched users.

dsf-role

DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

practitioner-role

',8),g=a("code",null,"practitioner-role",-1),_={href:"http://hl7.org/fhir/R4/codesystem.html",target:"_blank",rel:"noopener noreferrer"},E=a("code",null,"system-url|code",-1),R=a("br",null,null,-1),S=a("code",null,"requester",-1),k={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},D=a("code",null,"dsf-role",-1),I=a("code",null,"CREATE",-1),y=i(`

Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

Examples

The first example defines a group of DSF administrators. Two client certificates match against this role:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - certificate-admins:
+            thumbprint: 
+              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
+              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - token-role-admins:
+            token-role: admin
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - read-only:
+            email:
+              - first.user@test.org
+              - second.user@test.org
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+
`,9);function A(T,F){const n=r("ExternalLinkIcon");return o(),c("div",null,[d,a("p",null,[e("The DSF FHIR server implements a subset of the FHIR R4 "),a("a",p,[e("REST API"),s(n)]),e(". When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: "),h]),u,a("p",null,[e("Using the property "),m,e(" users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the "),f,e(),a("a",v,[e("claim"),s(n)]),e(" from the access token will be matched against the property values.")]),b,a("p",null,[e("In order to allow users to start processes, the property "),g,e(" can be used to assign codes from FHIR "),a("a",_,[e("CodeSystem"),s(n)]),e(" resources. Codes are specified in the form "),E,e("."),R,e(" If the uses has a code specified here that match with a "),S,e(" extension within the process plugin's "),a("a",k,[e("ActivityDefinition"),s(n)]),e(" resource, the user can start the process if he also has the "),D,e(),I,e(".")]),y])}const w=t(l,[["render",A],["__file","access-control.html.vue"]]),x=JSON.parse('{"path":"/stable/maintain/fhir/access-control.html","title":"Access Control","lang":"en-US","frontmatter":{"title":"Access Control","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Matching Users","slug":"matching-users","link":"#matching-users","children":[]},{"level":2,"title":"DSF and Practitioner Roles","slug":"dsf-and-practitioner-roles","link":"#dsf-and-practitioner-roles","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[]}],"git":{"createdTime":null,"updatedTime":null,"contributors":[]},"readingTime":{"minutes":2.52,"words":755},"filePathRelative":"stable/maintain/fhir/access-control.md","excerpt":"

Overview

\\n

The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

"}');export{w as comp,x as data}; diff --git a/assets/access-control.html-CG007Yhx.js b/assets/access-control.html-CG007Yhx.js new file mode 100644 index 000000000..9fa9c1d9e --- /dev/null +++ b/assets/access-control.html-CG007Yhx.js @@ -0,0 +1,46 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o,c,a,b as e,d as s,e as i}from"./app-kq9lCQfY.js";const l={},d=a("h2",{id:"overview",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#overview"},[a("span",null,"Overview")])],-1),p={href:"http://hl7.org/fhir/R4/http.html",target:"_blank",rel:"noopener noreferrer"},h=a("a",{href:"configuration#dev-dsf-fhir-server-organization-thumbprint"},"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT",-1),u=i(`

OpenID Connect

To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

The listing below shows a minimal configuration to enable read access for a specific client-certificate:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - example_read_only_role:
+            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+

The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.

Certificate Thumbprints

SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

certtool --fingerprint --hash=sha512 --infile=certificate.pem
+

Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

Matching Users

To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

thumbprint

The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

email

`,12),m=a("code",null,"email",-1),f=a("code",null,"email",-1),v={href:"https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims",target:"_blank",rel:"noopener noreferrer"},b=i('

token-role and token-group

With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

DSF and Practitioner Roles

Two types of roles can be applied to matched users.

dsf-role

DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

practitioner-role

',8),g=a("code",null,"practitioner-role",-1),_={href:"http://hl7.org/fhir/R4/codesystem.html",target:"_blank",rel:"noopener noreferrer"},E=a("code",null,"system-url|code",-1),R=a("br",null,null,-1),S=a("code",null,"requester",-1),k={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},D=a("code",null,"dsf-role",-1),I=a("code",null,"CREATE",-1),A=i(`

Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

Examples

The first example defines a group of DSF administrators. Two client certificates match against this role:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - certificate-admins:
+            thumbprint: 
+              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
+              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - token-role-admins:
+            token-role: admin
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - read-only:
+            email:
+              - first.user@test.org
+              - second.user@test.org
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+
`,9);function y(T,F){const n=r("ExternalLinkIcon");return o(),c("div",null,[d,a("p",null,[e("The DSF FHIR server implements a subset of the FHIR R4 "),a("a",p,[e("REST API"),s(n)]),e(". When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: "),h]),u,a("p",null,[e("Using the property "),m,e(" users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the "),f,e(),a("a",v,[e("claim"),s(n)]),e(" from the access token will be matched against the property values.")]),b,a("p",null,[e("In order to allow users to start processes, the property "),g,e(" can be used to assign codes from FHIR "),a("a",_,[e("CodeSystem"),s(n)]),e(" resources. Codes are specified in the form "),E,e("."),R,e(" If the uses has a code specified here that match with a "),S,e(" extension within the process plugin's "),a("a",k,[e("ActivityDefinition"),s(n)]),e(" resource, the user can start the process if he also has the "),D,e(),I,e(".")]),A])}const O=t(l,[["render",y],["__file","access-control.html.vue"]]),x=JSON.parse('{"path":"/v1.5.1/maintain/fhir/access-control.html","title":"Access Control","lang":"en-US","frontmatter":{"title":"Access Control","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Matching Users","slug":"matching-users","link":"#matching-users","children":[]},{"level":2,"title":"DSF and Practitioner Roles","slug":"dsf-and-practitioner-roles","link":"#dsf-and-practitioner-roles","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":2.52,"words":755},"filePathRelative":"v1.5.1/maintain/fhir/access-control.md","localizedDate":"April 17, 2024","excerpt":"

Overview

\\n

The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

"}');export{O as comp,x as data}; diff --git a/assets/access-control.html-CM5qpa53.js b/assets/access-control.html-CM5qpa53.js new file mode 100644 index 000000000..be21fac51 --- /dev/null +++ b/assets/access-control.html-CM5qpa53.js @@ -0,0 +1,46 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o,c,a,b as e,d as s,e as i}from"./app-kq9lCQfY.js";const l={},d=a("h2",{id:"overview",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#overview"},[a("span",null,"Overview")])],-1),p={href:"http://hl7.org/fhir/R4/http.html",target:"_blank",rel:"noopener noreferrer"},h=a("a",{href:"configuration#dev-dsf-fhir-server-organization-thumbprint"},"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT",-1),u=i(`

OpenID Connect

To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

The listing below shows a minimal configuration to enable read access for a specific client-certificate:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - example_read_only_role:
+            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+

The list of user roles above contains a single entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles.

Certificate Thumbprints

SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

certtool --fingerprint --hash=sha512 --infile=certificate.pem
+

Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

Matching Users

To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

thumbprint

The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

email

`,12),m=a("code",null,"email",-1),f=a("code",null,"email",-1),v={href:"https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims",target:"_blank",rel:"noopener noreferrer"},b=i('

token-role and token-group

With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

DSF and Practitioner Roles

To types of roles can be applied to matched users.

dsf-role

DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

practitioner-role

',8),g=a("code",null,"practitioner-role",-1),_={href:"http://hl7.org/fhir/R4/codesystem.html",target:"_blank",rel:"noopener noreferrer"},E=a("code",null,"system-url|code",-1),R=a("br",null,null,-1),S=a("code",null,"requester",-1),k={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},D=a("code",null,"dsf-role",-1),I=a("code",null,"CREATE",-1),A=i(`

Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

Examples

The first example defines a group of DSF administrators. Two client certificates match against this role:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - certificate-admins:
+            thumbprint: 
+              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
+              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - token-role-admins:
+            token-role: admin
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - read-only:
+            email:
+              - first.user@test.org
+              - second.user@test.org
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+
`,9);function y(T,F){const n=r("ExternalLinkIcon");return o(),c("div",null,[d,a("p",null,[e("The DSF FHIR server implements a subset of the FHIR R4 "),a("a",p,[e("REST API"),s(n)]),e(". When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: "),h]),u,a("p",null,[e("Using the property "),m,e(" users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the "),f,e(),a("a",v,[e("claim"),s(n)]),e(" from the access token will be matched against the property values.")]),b,a("p",null,[e("In order to allow users to start processes, the property "),g,e(" can be used to assign codes from FHIR "),a("a",_,[e("CodeSystem"),s(n)]),e(" resources. Codes are specified in the form "),E,e("."),R,e(" If the uses has a code specified here that match with a "),S,e(" extension within the process plugin's "),a("a",k,[e("ActivityDefinition"),s(n)]),e(" resource, the user can start the process if he also has the "),D,e(),I,e(".")]),A])}const w=t(l,[["render",y],["__file","access-control.html.vue"]]),x=JSON.parse('{"path":"/v1.3.0/maintain/fhir/access-control.html","title":"Access Control","lang":"en-US","frontmatter":{"title":"Access Control","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Matching Users","slug":"matching-users","link":"#matching-users","children":[]},{"level":2,"title":"DSF and Practitioner Roles","slug":"dsf-and-practitioner-roles","link":"#dsf-and-practitioner-roles","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[]}],"git":{"createdTime":1696944513000,"updatedTime":1696944513000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":2.47,"words":742},"filePathRelative":"v1.3.0/maintain/fhir/access-control.md","localizedDate":"October 10, 2023","excerpt":"

Overview

\\n

The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

"}');export{w as comp,x as data}; diff --git a/assets/access-control.html-Ci80SYtc.js b/assets/access-control.html-Ci80SYtc.js new file mode 100644 index 000000000..3de58b2d1 --- /dev/null +++ b/assets/access-control.html-Ci80SYtc.js @@ -0,0 +1,46 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o,c,a,b as e,d as s,e as i}from"./app-kq9lCQfY.js";const l={},d=a("h2",{id:"overview",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#overview"},[a("span",null,"Overview")])],-1),p={href:"http://hl7.org/fhir/R4/http.html",target:"_blank",rel:"noopener noreferrer"},h=a("a",{href:"configuration#dev-dsf-fhir-server-organization-thumbprint"},"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT",-1),u=i(`

OpenID Connect

To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

The listing below shows a minimal configuration to enable read access for a specific client-certificate:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - example_read_only_role:
+            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+

The list of user roles above contains a single entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles.

Certificate Thumbprints

SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

certtool --fingerprint --hash=sha512 --infile=certificate.pem
+

Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

Matching Users

To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

thumbprint

The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

email

`,12),m=a("code",null,"email",-1),f=a("code",null,"email",-1),v={href:"https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims",target:"_blank",rel:"noopener noreferrer"},b=i('

token-role and token-group

With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

DSF and Practitioner Roles

To types of roles can be applied to matched users.

dsf-role

DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

practitioner-role

',8),g=a("code",null,"practitioner-role",-1),_={href:"http://hl7.org/fhir/R4/codesystem.html",target:"_blank",rel:"noopener noreferrer"},E=a("code",null,"system-url|code",-1),R=a("br",null,null,-1),S=a("code",null,"requester",-1),k={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},D=a("code",null,"dsf-role",-1),I=a("code",null,"CREATE",-1),A=i(`

Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

Examples

The first example defines a group of DSF administrators. Two client certificates match against this role:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - certificate-admins:
+            thumbprint: 
+              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
+              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - token-role-admins:
+            token-role: admin
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - read-only:
+            email:
+              - first.user@test.org
+              - second.user@test.org
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+
`,9);function y(T,F){const n=r("ExternalLinkIcon");return o(),c("div",null,[d,a("p",null,[e("The DSF FHIR server implements a subset of the FHIR R4 "),a("a",p,[e("REST API"),s(n)]),e(". When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: "),h]),u,a("p",null,[e("Using the property "),m,e(" users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the "),f,e(),a("a",v,[e("claim"),s(n)]),e(" from the access token will be matched against the property values.")]),b,a("p",null,[e("In order to allow users to start processes, the property "),g,e(" can be used to assign codes from FHIR "),a("a",_,[e("CodeSystem"),s(n)]),e(" resources. Codes are specified in the form "),E,e("."),R,e(" If the uses has a code specified here that match with a "),S,e(" extension within the process plugin's "),a("a",k,[e("ActivityDefinition"),s(n)]),e(" resource, the user can start the process if he also has the "),D,e(),I,e(".")]),A])}const O=t(l,[["render",y],["__file","access-control.html.vue"]]),x=JSON.parse('{"path":"/v1.3.2/maintain/fhir/access-control.html","title":"Access Control","lang":"en-US","frontmatter":{"title":"Access Control","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Matching Users","slug":"matching-users","link":"#matching-users","children":[]},{"level":2,"title":"DSF and Practitioner Roles","slug":"dsf-and-practitioner-roles","link":"#dsf-and-practitioner-roles","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[]}],"git":{"createdTime":1701710218000,"updatedTime":1701710218000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":2.47,"words":742},"filePathRelative":"v1.3.2/maintain/fhir/access-control.md","localizedDate":"December 4, 2023","excerpt":"

Overview

\\n

The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

"}');export{O as comp,x as data}; diff --git a/assets/access-control.html-CpcmB-vr.js b/assets/access-control.html-CpcmB-vr.js new file mode 100644 index 000000000..386a57feb --- /dev/null +++ b/assets/access-control.html-CpcmB-vr.js @@ -0,0 +1,26 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as t,o as r,c,a,b as e,d as o,e as n}from"./app-kq9lCQfY.js";const l={},d=n(`

Overview

The DSF BPE server provides a user interface for administrators. Without any additional configuration the user interface is not accessible with the organizations X.509 client certificate or any other certificate or OpenID Connect authenticated user.

OpenID Connect

To enable OpenID Connect authentication of local user, see the DSF BPE server OpenID Connect configuration page.

Access to the user interface can be enabled for client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

The listing below shows a minimal configuration to enable access for a specific client-certificate:

      DEV_DSF_BPE_SERVER_ROLECONFIG: |
+        - example_read_only_role:
+            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
+            dsf-role:
+              - ADMIN
+

The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.

Certificate Thumbprints

SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

certtool --fingerprint --hash=sha512 --infile=certificate.pem
+

Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG if no roles should be configured.

Matching Users

To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

thumbprint

The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

email

`,14),p=a("code",null,"email",-1),h=a("code",null,"email",-1),u={href:"https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims",target:"_blank",rel:"noopener noreferrer"},m=n(`

token-role and token-group

With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

DSF and Practitioner Roles

Two types of roles can be applied to matched users.

dsf-role

DSF roles specified via the dsf-role property define general access to the user interface. Allowed values are:

ADMIN.

practitioner-role

The BPE server currently does not support any practionier-roles.

Examples

The first example defines a group of DSF administrators. Two client certificates match against this role:

      DEV_DSF_BPE_SERVER_ROLECONFIG: |
+        - certificate-admins:
+            thumbprint: 
+              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
+              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
+            dsf-role:
+              - ADMIN
+

The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

      DEV_DSF_BPE_SERVER_ROLECONFIG: |
+        - token-role-admins:
+            token-role: admin
+            dsf-role:
+              - ADMIN
+

The third example allows administrator access and users e-mail addresses to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

      DEV_DSF_BPE_SERVER_ROLECONFIG: |
+        - email-admins:
+            email:
+              - first.user@test.org
+              - second.user@test.org
+            dsf-role:
+              - ADMIN
+
`,16);function f(v,b){const s=t("ExternalLinkIcon");return r(),c("div",null,[d,a("p",null,[e("Using the property "),p,e(" users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the "),h,e(),a("a",u,[e("claim"),o(s)]),e(" from the access token will be matched against the property values.")]),m])}const k=i(l,[["render",f],["__file","access-control.html.vue"]]),E=JSON.parse('{"path":"/v1.5.1/maintain/bpe/access-control.html","title":"Access Control","lang":"en-US","frontmatter":{"title":"Access Control","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Matching Users","slug":"matching-users","link":"#matching-users","children":[]},{"level":2,"title":"DSF and Practitioner Roles","slug":"dsf-and-practitioner-roles","link":"#dsf-and-practitioner-roles","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.94,"words":583},"filePathRelative":"v1.5.1/maintain/bpe/access-control.md","localizedDate":"April 17, 2024","excerpt":"

Overview

\\n

The DSF BPE server provides a user interface for administrators. Without any additional configuration the user interface is not accessible with the organizations X.509 client certificate or any other certificate or OpenID Connect authenticated user.

\\n
\\n

OpenID Connect

\\n

To enable OpenID Connect authentication of local user, see the DSF BPE server OpenID Connect configuration page.

\\n
"}');export{k as comp,E as data}; diff --git a/assets/access-control.html-D-piCDJX.js b/assets/access-control.html-D-piCDJX.js new file mode 100644 index 000000000..c987d43ca --- /dev/null +++ b/assets/access-control.html-D-piCDJX.js @@ -0,0 +1,46 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o,c,a,b as e,d as s,e as i}from"./app-kq9lCQfY.js";const l={},d=a("h2",{id:"overview",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#overview"},[a("span",null,"Overview")])],-1),p={href:"http://hl7.org/fhir/R4/http.html",target:"_blank",rel:"noopener noreferrer"},h=a("a",{href:"configuration#dev-dsf-fhir-server-organization-thumbprint"},"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT",-1),u=i(`

OpenID Connect

To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

The listing below shows a minimal configuration to enable read access for a specific client-certificate:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - example_read_only_role:
+            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+

The list of user roles above contains a single entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles.

Certificate Thumbprints

SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

certtool --fingerprint --hash=sha512 --infile=certificate.pem
+

Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

Matching Users

To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

thumbprint

The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

email

`,12),m=a("code",null,"email",-1),f=a("code",null,"email",-1),v={href:"https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims",target:"_blank",rel:"noopener noreferrer"},b=i('

token-role and token-group

With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

DSF and Practitioner Roles

To types of roles can be applied to matched users.

dsf-role

DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

practitioner-role

',8),g=a("code",null,"practitioner-role",-1),_={href:"http://hl7.org/fhir/R4/codesystem.html",target:"_blank",rel:"noopener noreferrer"},E=a("code",null,"system-url|code",-1),R=a("br",null,null,-1),S=a("code",null,"requester",-1),k={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},D=a("code",null,"dsf-role",-1),I=a("code",null,"CREATE",-1),A=i(`

Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

Examples

The first example defines a group of DSF administrators. Two client certificates match against this role:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - certificate-admins:
+            thumbprint: 
+              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
+              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - token-role-admins:
+            token-role: admin
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - read-only:
+            email:
+              - first.user@test.org
+              - second.user@test.org
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+
`,9);function y(T,F){const n=r("ExternalLinkIcon");return o(),c("div",null,[d,a("p",null,[e("The DSF FHIR server implements a subset of the FHIR R4 "),a("a",p,[e("REST API"),s(n)]),e(". When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: "),h]),u,a("p",null,[e("Using the property "),m,e(" users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the "),f,e(),a("a",v,[e("claim"),s(n)]),e(" from the access token will be matched against the property values.")]),b,a("p",null,[e("In order to allow users to start processes, the property "),g,e(" can be used to assign codes from FHIR "),a("a",_,[e("CodeSystem"),s(n)]),e(" resources. Codes are specified in the form "),E,e("."),R,e(" If the uses has a code specified here that match with a "),S,e(" extension within the process plugin's "),a("a",k,[e("ActivityDefinition"),s(n)]),e(" resource, the user can start the process if he also has the "),D,e(),I,e(".")]),A])}const O=t(l,[["render",y],["__file","access-control.html.vue"]]),x=JSON.parse('{"path":"/v1.2.0/maintain/fhir/access-control.html","title":"Access Control","lang":"en-US","frontmatter":{"title":"Access Control","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Matching Users","slug":"matching-users","link":"#matching-users","children":[]},{"level":2,"title":"DSF and Practitioner Roles","slug":"dsf-and-practitioner-roles","link":"#dsf-and-practitioner-roles","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[]}],"git":{"createdTime":1694544770000,"updatedTime":1694544770000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":2.47,"words":742},"filePathRelative":"v1.2.0/maintain/fhir/access-control.md","localizedDate":"September 12, 2023","excerpt":"

Overview

\\n

The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

"}');export{O as comp,x as data}; diff --git a/assets/access-control.html-DMHcMgwJ.js b/assets/access-control.html-DMHcMgwJ.js new file mode 100644 index 000000000..34274a5a8 --- /dev/null +++ b/assets/access-control.html-DMHcMgwJ.js @@ -0,0 +1,26 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as t,o as r,c,a,b as e,d as o,e as n}from"./app-kq9lCQfY.js";const l={},d=n(`

Overview

The DSF BPE server provides a user interface for administrators. Without any additional configuration the user interface is not accessible with the organizations X.509 client certificate or any other certificate or OpenID Connect authenticated user.

OpenID Connect

To enable OpenID Connect authentication of local user, see the DSF BPE server OpenID Connect configuration page.

Access to the user interface can be enabled for client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

The listing below shows a minimal configuration to enable access for a specific client-certificate:

      DEV_DSF_BPE_SERVER_ROLECONFIG: |
+        - example_read_only_role:
+            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
+            dsf-role:
+              - ADMIN
+

The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.

Certificate Thumbprints

SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

certtool --fingerprint --hash=sha512 --infile=certificate.pem
+

Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG if no roles should be configured.

Matching Users

To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

thumbprint

The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

email

`,14),p=a("code",null,"email",-1),h=a("code",null,"email",-1),u={href:"https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims",target:"_blank",rel:"noopener noreferrer"},m=n(`

token-role and token-group

With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

DSF and Practitioner Roles

Two types of roles can be applied to matched users.

dsf-role

DSF roles specified via the dsf-role property define general access to the user interface. Allowed values are:

ADMIN.

practitioner-role

The BPE server currently does not support any practionier-roles.

Examples

The first example defines a group of DSF administrators. Two client certificates match against this role:

      DEV_DSF_BPE_SERVER_ROLECONFIG: |
+        - certificate-admins:
+            thumbprint: 
+              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
+              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
+            dsf-role:
+              - ADMIN
+

The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

      DEV_DSF_BPE_SERVER_ROLECONFIG: |
+        - token-role-admins:
+            token-role: admin
+            dsf-role:
+              - ADMIN
+

The third example allows administrator access and users e-mail addresses to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

      DEV_DSF_BPE_SERVER_ROLECONFIG: |
+        - email-admins:
+            email:
+              - first.user@test.org
+              - second.user@test.org
+            dsf-role:
+              - ADMIN
+
`,16);function f(v,b){const s=t("ExternalLinkIcon");return r(),c("div",null,[d,a("p",null,[e("Using the property "),p,e(" users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the "),h,e(),a("a",u,[e("claim"),o(s)]),e(" from the access token will be matched against the property values.")]),m])}const k=i(l,[["render",f],["__file","access-control.html.vue"]]),y=JSON.parse('{"path":"/v1.5.2/maintain/bpe/access-control.html","title":"Access Control","lang":"en-US","frontmatter":{"title":"Access Control","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Matching Users","slug":"matching-users","link":"#matching-users","children":[]},{"level":2,"title":"DSF and Practitioner Roles","slug":"dsf-and-practitioner-roles","link":"#dsf-and-practitioner-roles","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.94,"words":583},"filePathRelative":"v1.5.2/maintain/bpe/access-control.md","localizedDate":"July 8, 2024","excerpt":"

Overview

\\n

The DSF BPE server provides a user interface for administrators. Without any additional configuration the user interface is not accessible with the organizations X.509 client certificate or any other certificate or OpenID Connect authenticated user.

\\n
\\n

OpenID Connect

\\n

To enable OpenID Connect authentication of local user, see the DSF BPE server OpenID Connect configuration page.

\\n
"}');export{k as comp,y as data}; diff --git a/assets/access-control.html-DMJizDq8.js b/assets/access-control.html-DMJizDq8.js new file mode 100644 index 000000000..5205c1496 --- /dev/null +++ b/assets/access-control.html-DMJizDq8.js @@ -0,0 +1,26 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as t,o as r,c,a,b as e,d as o,e as n}from"./app-kq9lCQfY.js";const l={},d=n(`

Overview

The DSF BPE server provides a user interface for administrators. Without any additional configuration the user interface is not accessible with the organizations X.509 client certificate or any other certificate or OpenID Connect authenticated user.

OpenID Connect

To enable OpenID Connect authentication of local user, see the DSF BPE server OpenID Connect configuration page.

Access to the user interface can be enabled for client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

The listing below shows a minimal configuration to enable access for a specific client-certificate:

      DEV_DSF_BPE_SERVER_ROLECONFIG: |
+        - example_read_only_role:
+            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
+            dsf-role:
+              - ADMIN
+

The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.

Certificate Thumbprints

SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

certtool --fingerprint --hash=sha512 --infile=certificate.pem
+

Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG if no roles should be configured.

Matching Users

To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

thumbprint

The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

email

`,14),p=a("code",null,"email",-1),h=a("code",null,"email",-1),u={href:"https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims",target:"_blank",rel:"noopener noreferrer"},m=n(`

token-role and token-group

With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

DSF and Practitioner Roles

Two types of roles can be applied to matched users.

dsf-role

DSF roles specified via the dsf-role property define general access to the user interface. Allowed values are:

ADMIN.

practitioner-role

The BPE server currently does not support any practionier-roles.

Examples

The first example defines a group of DSF administrators. Two client certificates match against this role:

      DEV_DSF_BPE_SERVER_ROLECONFIG: |
+        - certificate-admins:
+            thumbprint: 
+              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
+              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
+            dsf-role:
+              - ADMIN
+

The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

      DEV_DSF_BPE_SERVER_ROLECONFIG: |
+        - token-role-admins:
+            token-role: admin
+            dsf-role:
+              - ADMIN
+

The third example allows administrator access and users e-mail addresses to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

      DEV_DSF_BPE_SERVER_ROLECONFIG: |
+        - email-admins:
+            email:
+              - first.user@test.org
+              - second.user@test.org
+            dsf-role:
+              - ADMIN
+
`,16);function f(v,b){const s=t("ExternalLinkIcon");return r(),c("div",null,[d,a("p",null,[e("Using the property "),p,e(" users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the "),h,e(),a("a",u,[e("claim"),o(s)]),e(" from the access token will be matched against the property values.")]),m])}const k=i(l,[["render",f],["__file","access-control.html.vue"]]),y=JSON.parse('{"path":"/v1.5.0/maintain/bpe/access-control.html","title":"Access Control","lang":"en-US","frontmatter":{"title":"Access Control","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Matching Users","slug":"matching-users","link":"#matching-users","children":[]},{"level":2,"title":"DSF and Practitioner Roles","slug":"dsf-and-practitioner-roles","link":"#dsf-and-practitioner-roles","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[]}],"git":{"createdTime":1708517817000,"updatedTime":1708517817000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.94,"words":583},"filePathRelative":"v1.5.0/maintain/bpe/access-control.md","localizedDate":"February 21, 2024","excerpt":"

Overview

\\n

The DSF BPE server provides a user interface for administrators. Without any additional configuration the user interface is not accessible with the organizations X.509 client certificate or any other certificate or OpenID Connect authenticated user.

\\n
\\n

OpenID Connect

\\n

To enable OpenID Connect authentication of local user, see the DSF BPE server OpenID Connect configuration page.

\\n
"}');export{k as comp,y as data}; diff --git a/assets/access-control.html-DyFJhXMW.js b/assets/access-control.html-DyFJhXMW.js new file mode 100644 index 000000000..dc84a55d9 --- /dev/null +++ b/assets/access-control.html-DyFJhXMW.js @@ -0,0 +1,46 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o,c,a,b as e,d as s,e as i}from"./app-kq9lCQfY.js";const l={},d=a("h2",{id:"overview",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#overview"},[a("span",null,"Overview")])],-1),h={href:"http://hl7.org/fhir/R4/http.html",target:"_blank",rel:"noopener noreferrer"},p=a("a",{href:"configuration#dev-dsf-fhir-server-organization-thumbprint"},"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT",-1),u=i(`

OpenID Connect

To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

The listing below shows a minimal configuration to enable read access for a specific client-certificate:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - example_read_only_role:
+            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+

The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.

Certificate Thumbprints

SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

certtool --fingerprint --hash=sha512 --infile=certificate.pem
+

Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

Matching Users

To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

thumbprint

The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

email

`,12),m=a("code",null,"email",-1),f=a("code",null,"email",-1),v={href:"https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims",target:"_blank",rel:"noopener noreferrer"},b=i('

token-role and token-group

With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

DSF and Practitioner Roles

Two types of roles can be applied to matched users.

dsf-role

DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

practitioner-role

',8),g=a("code",null,"practitioner-role",-1),_={href:"http://hl7.org/fhir/R4/codesystem.html",target:"_blank",rel:"noopener noreferrer"},E=a("code",null,"system-url|code",-1),R=a("br",null,null,-1),S=a("code",null,"requester",-1),k={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},D=a("code",null,"dsf-role",-1),I=a("code",null,"CREATE",-1),y=i(`

Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

Examples

The first example defines a group of DSF administrators. Two client certificates match against this role:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - certificate-admins:
+            thumbprint: 
+              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
+              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - token-role-admins:
+            token-role: admin
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - read-only:
+            email:
+              - first.user@test.org
+              - second.user@test.org
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+
`,9);function A(T,F){const n=r("ExternalLinkIcon");return o(),c("div",null,[d,a("p",null,[e("The DSF FHIR server implements a subset of the FHIR R4 "),a("a",h,[e("REST API"),s(n)]),e(". When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: "),p]),u,a("p",null,[e("Using the property "),m,e(" users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the "),f,e(),a("a",v,[e("claim"),s(n)]),e(" from the access token will be matched against the property values.")]),b,a("p",null,[e("In order to allow users to start processes, the property "),g,e(" can be used to assign codes from FHIR "),a("a",_,[e("CodeSystem"),s(n)]),e(" resources. Codes are specified in the form "),E,e("."),R,e(" If the uses has a code specified here that match with a "),S,e(" extension within the process plugin's "),a("a",k,[e("ActivityDefinition"),s(n)]),e(" resource, the user can start the process if he also has the "),D,e(),I,e(".")]),y])}const O=t(l,[["render",A],["__file","access-control.html.vue"]]),x=JSON.parse('{"path":"/v1.5.0/maintain/fhir/access-control.html","title":"Access Control","lang":"en-US","frontmatter":{"title":"Access Control","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Matching Users","slug":"matching-users","link":"#matching-users","children":[]},{"level":2,"title":"DSF and Practitioner Roles","slug":"dsf-and-practitioner-roles","link":"#dsf-and-practitioner-roles","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[]}],"git":{"createdTime":1708419681000,"updatedTime":1708517817000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":2.52,"words":755},"filePathRelative":"v1.5.0/maintain/fhir/access-control.md","localizedDate":"February 20, 2024","excerpt":"

Overview

\\n

The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

"}');export{O as comp,x as data}; diff --git a/assets/access-control.html-Dzq0BBpF.js b/assets/access-control.html-Dzq0BBpF.js new file mode 100644 index 000000000..7d6d0474b --- /dev/null +++ b/assets/access-control.html-Dzq0BBpF.js @@ -0,0 +1,46 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o,c,a,b as e,d as s,e as i}from"./app-kq9lCQfY.js";const l={},d=a("h2",{id:"overview",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#overview"},[a("span",null,"Overview")])],-1),p={href:"http://hl7.org/fhir/R4/http.html",target:"_blank",rel:"noopener noreferrer"},h=a("a",{href:"configuration#dev-dsf-fhir-server-organization-thumbprint"},"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT",-1),u=i(`

OpenID Connect

To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

The listing below shows a minimal configuration to enable read access for a specific client-certificate:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - example_read_only_role:
+            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+

The list of user roles above contains a single entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles.

Certificate Thumbprints

SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

certtool --fingerprint --hash=sha512 --infile=certificate.pem
+

Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

Matching Users

To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

thumbprint

The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

email

`,12),m=a("code",null,"email",-1),f=a("code",null,"email",-1),v={href:"https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims",target:"_blank",rel:"noopener noreferrer"},b=i('

token-role and token-group

With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

DSF and Practitioner Roles

To types of roles can be applied to matched users.

dsf-role

DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

practitioner-role

',8),g=a("code",null,"practitioner-role",-1),_={href:"http://hl7.org/fhir/R4/codesystem.html",target:"_blank",rel:"noopener noreferrer"},E=a("code",null,"system-url|code",-1),R=a("br",null,null,-1),S=a("code",null,"requester",-1),k={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},D=a("code",null,"dsf-role",-1),I=a("code",null,"CREATE",-1),A=i(`

Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

Examples

The first example defines a group of DSF administrators. Two client certificates match against this role:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - certificate-admins:
+            thumbprint: 
+              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
+              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - token-role-admins:
+            token-role: admin
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - read-only:
+            email:
+              - first.user@test.org
+              - second.user@test.org
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+
`,9);function y(T,F){const n=r("ExternalLinkIcon");return o(),c("div",null,[d,a("p",null,[e("The DSF FHIR server implements a subset of the FHIR R4 "),a("a",p,[e("REST API"),s(n)]),e(". When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: "),h]),u,a("p",null,[e("Using the property "),m,e(" users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the "),f,e(),a("a",v,[e("claim"),s(n)]),e(" from the access token will be matched against the property values.")]),b,a("p",null,[e("In order to allow users to start processes, the property "),g,e(" can be used to assign codes from FHIR "),a("a",_,[e("CodeSystem"),s(n)]),e(" resources. Codes are specified in the form "),E,e("."),R,e(" If the uses has a code specified here that match with a "),S,e(" extension within the process plugin's "),a("a",k,[e("ActivityDefinition"),s(n)]),e(" resource, the user can start the process if he also has the "),D,e(),I,e(".")]),A])}const O=t(l,[["render",y],["__file","access-control.html.vue"]]),x=JSON.parse('{"path":"/v1.4.0/maintain/fhir/access-control.html","title":"Access Control","lang":"en-US","frontmatter":{"title":"Access Control","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Matching Users","slug":"matching-users","link":"#matching-users","children":[]},{"level":2,"title":"DSF and Practitioner Roles","slug":"dsf-and-practitioner-roles","link":"#dsf-and-practitioner-roles","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[]}],"git":{"createdTime":1702917645000,"updatedTime":1702917645000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":2.47,"words":742},"filePathRelative":"v1.4.0/maintain/fhir/access-control.md","localizedDate":"December 18, 2023","excerpt":"

Overview

\\n

The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

"}');export{O as comp,x as data}; diff --git a/assets/access-control.html-TnCObO8b.js b/assets/access-control.html-TnCObO8b.js new file mode 100644 index 000000000..b7cb34cb1 --- /dev/null +++ b/assets/access-control.html-TnCObO8b.js @@ -0,0 +1,46 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o,c,a,b as e,d as s,e as i}from"./app-kq9lCQfY.js";const l={},d=a("h2",{id:"overview",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#overview"},[a("span",null,"Overview")])],-1),h={href:"http://hl7.org/fhir/R4/http.html",target:"_blank",rel:"noopener noreferrer"},p=a("a",{href:"configuration#dev-dsf-fhir-server-organization-thumbprint"},"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT",-1),u=i(`

OpenID Connect

To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

The listing below shows a minimal configuration to enable read access for a specific client-certificate:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - example_read_only_role:
+            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+

The list of user roles above contains a single entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles.

Certificate Thumbprints

SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

certtool --fingerprint --hash=sha512 --infile=certificate.pem
+

Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

Matching Users

To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

thumbprint

The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

email

`,12),m=a("code",null,"email",-1),f=a("code",null,"email",-1),v={href:"https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims",target:"_blank",rel:"noopener noreferrer"},b=i('

token-role and token-group

With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

DSF and Practitioner Roles

To types of roles can be applied to matched users.

dsf-role

DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

practitioner-role

',8),g=a("code",null,"practitioner-role",-1),_={href:"http://hl7.org/fhir/R4/codesystem.html",target:"_blank",rel:"noopener noreferrer"},E=a("code",null,"system-url|code",-1),R=a("br",null,null,-1),S=a("code",null,"requester",-1),k={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},D=a("code",null,"dsf-role",-1),I=a("code",null,"CREATE",-1),A=i(`

Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

Examples

The first example defines a group of DSF administrators. Two client certificates match against this role:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - certificate-admins:
+            thumbprint: 
+              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
+              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - token-role-admins:
+            token-role: admin
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - read-only:
+            email:
+              - first.user@test.org
+              - second.user@test.org
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+
`,9);function y(T,F){const n=r("ExternalLinkIcon");return o(),c("div",null,[d,a("p",null,[e("The DSF FHIR server implements a subset of the FHIR R4 "),a("a",h,[e("REST API"),s(n)]),e(". When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: "),p]),u,a("p",null,[e("Using the property "),m,e(" users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the "),f,e(),a("a",v,[e("claim"),s(n)]),e(" from the access token will be matched against the property values.")]),b,a("p",null,[e("In order to allow users to start processes, the property "),g,e(" can be used to assign codes from FHIR "),a("a",_,[e("CodeSystem"),s(n)]),e(" resources. Codes are specified in the form "),E,e("."),R,e(" If the uses has a code specified here that match with a "),S,e(" extension within the process plugin's "),a("a",k,[e("ActivityDefinition"),s(n)]),e(" resource, the user can start the process if he also has the "),D,e(),I,e(".")]),A])}const O=t(l,[["render",y],["__file","access-control.html.vue"]]),x=JSON.parse('{"path":"/v1.1.0/maintain/fhir/access-control.html","title":"Access Control","lang":"en-US","frontmatter":{"title":"Access Control","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Matching Users","slug":"matching-users","link":"#matching-users","children":[]},{"level":2,"title":"DSF and Practitioner Roles","slug":"dsf-and-practitioner-roles","link":"#dsf-and-practitioner-roles","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[]}],"git":{"createdTime":1693251017000,"updatedTime":1693555301000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":2},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":2.47,"words":742},"filePathRelative":"v1.1.0/maintain/fhir/access-control.md","localizedDate":"August 28, 2023","excerpt":"

Overview

\\n

The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

"}');export{O as comp,x as data}; diff --git a/assets/access-control.html-WWQBmNVa.js b/assets/access-control.html-WWQBmNVa.js new file mode 100644 index 000000000..45b9e9a37 --- /dev/null +++ b/assets/access-control.html-WWQBmNVa.js @@ -0,0 +1,46 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o,c,a,b as e,d as s,e as i}from"./app-kq9lCQfY.js";const l={},d=a("h2",{id:"overview",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#overview"},[a("span",null,"Overview")])],-1),p={href:"http://hl7.org/fhir/R4/http.html",target:"_blank",rel:"noopener noreferrer"},h=a("a",{href:"configuration#dev-dsf-fhir-server-organization-thumbprint"},"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT",-1),u=i(`

OpenID Connect

To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

The listing below shows a minimal configuration to enable read access for a specific client-certificate:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - example_read_only_role:
+            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+

The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.

Certificate Thumbprints

SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

certtool --fingerprint --hash=sha512 --infile=certificate.pem
+

Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

Matching Users

To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

thumbprint

The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

email

`,12),m=a("code",null,"email",-1),f=a("code",null,"email",-1),v={href:"https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims",target:"_blank",rel:"noopener noreferrer"},b=i('

token-role and token-group

With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

DSF and Practitioner Roles

Two types of roles can be applied to matched users.

dsf-role

DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

practitioner-role

',8),g=a("code",null,"practitioner-role",-1),_={href:"http://hl7.org/fhir/R4/codesystem.html",target:"_blank",rel:"noopener noreferrer"},E=a("code",null,"system-url|code",-1),R=a("br",null,null,-1),S=a("code",null,"requester",-1),k={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},D=a("code",null,"dsf-role",-1),I=a("code",null,"CREATE",-1),y=i(`

Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

Examples

The first example defines a group of DSF administrators. Two client certificates match against this role:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - certificate-admins:
+            thumbprint: 
+              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
+              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - token-role-admins:
+            token-role: admin
+            dsf-role:
+              - CREATE
+              - READ
+              - UPDATE
+              - DELETE
+              - SEARCH
+              - HISTORY
+            practitioner-role:
+              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
+
+

The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

      DEV_DSF_FHIR_SERVER_ROLECONFIG: |
+        - read-only:
+            email:
+              - first.user@test.org
+              - second.user@test.org
+            dsf-role:
+              - READ
+              - SEARCH
+              - HISTORY
+
`,9);function A(T,F){const n=r("ExternalLinkIcon");return o(),c("div",null,[d,a("p",null,[e("The DSF FHIR server implements a subset of the FHIR R4 "),a("a",p,[e("REST API"),s(n)]),e(". When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: "),h]),u,a("p",null,[e("Using the property "),m,e(" users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the "),f,e(),a("a",v,[e("claim"),s(n)]),e(" from the access token will be matched against the property values.")]),b,a("p",null,[e("In order to allow users to start processes, the property "),g,e(" can be used to assign codes from FHIR "),a("a",_,[e("CodeSystem"),s(n)]),e(" resources. Codes are specified in the form "),E,e("."),R,e(" If the uses has a code specified here that match with a "),S,e(" extension within the process plugin's "),a("a",k,[e("ActivityDefinition"),s(n)]),e(" resource, the user can start the process if he also has the "),D,e(),I,e(".")]),y])}const w=t(l,[["render",A],["__file","access-control.html.vue"]]),x=JSON.parse('{"path":"/v1.5.2/maintain/fhir/access-control.html","title":"Access Control","lang":"en-US","frontmatter":{"title":"Access Control","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Matching Users","slug":"matching-users","link":"#matching-users","children":[]},{"level":2,"title":"DSF and Practitioner Roles","slug":"dsf-and-practitioner-roles","link":"#dsf-and-practitioner-roles","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":2.52,"words":755},"filePathRelative":"v1.5.2/maintain/fhir/access-control.md","localizedDate":"July 8, 2024","excerpt":"

Overview

\\n

The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

"}');export{w as comp,x as data}; diff --git a/assets/access-control.html-hritXxa7.js b/assets/access-control.html-hritXxa7.js new file mode 100644 index 000000000..400194909 --- /dev/null +++ b/assets/access-control.html-hritXxa7.js @@ -0,0 +1,26 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as t,o as r,c,a,b as e,d as o,e as n}from"./app-kq9lCQfY.js";const l={},d=n(`

Overview

The DSF BPE server provides a user interface for administrators. Without any additional configuration the user interface is not accessible with the organizations X.509 client certificate or any other certificate or OpenID Connect authenticated user.

OpenID Connect

To enable OpenID Connect authentication of local user, see the DSF BPE server OpenID Connect configuration page.

Access to the user interface can be enabled for client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

The listing below shows a minimal configuration to enable access for a specific client-certificate:

      DEV_DSF_BPE_SERVER_ROLECONFIG: |
+        - example_read_only_role:
+            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
+            dsf-role:
+              - ADMIN
+

The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.

Certificate Thumbprints

SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

certtool --fingerprint --hash=sha512 --infile=certificate.pem
+

Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG if no roles should be configured.

Matching Users

To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

thumbprint

The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

email

`,14),p=a("code",null,"email",-1),h=a("code",null,"email",-1),u={href:"https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims",target:"_blank",rel:"noopener noreferrer"},m=n(`

token-role and token-group

With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

DSF and Practitioner Roles

Two types of roles can be applied to matched users.

dsf-role

DSF roles specified via the dsf-role property define general access to the user interface. Allowed values are:

ADMIN.

practitioner-role

The BPE server currently does not support any practionier-roles.

Examples

The first example defines a group of DSF administrators. Two client certificates match against this role:

      DEV_DSF_BPE_SERVER_ROLECONFIG: |
+        - certificate-admins:
+            thumbprint: 
+              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
+              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
+            dsf-role:
+              - ADMIN
+

The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

      DEV_DSF_BPE_SERVER_ROLECONFIG: |
+        - token-role-admins:
+            token-role: admin
+            dsf-role:
+              - ADMIN
+

The third example allows administrator access and users e-mail addresses to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

      DEV_DSF_BPE_SERVER_ROLECONFIG: |
+        - email-admins:
+            email:
+              - first.user@test.org
+              - second.user@test.org
+            dsf-role:
+              - ADMIN
+
`,16);function f(v,b){const s=t("ExternalLinkIcon");return r(),c("div",null,[d,a("p",null,[e("Using the property "),p,e(" users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the "),h,e(),a("a",u,[e("claim"),o(s)]),e(" from the access token will be matched against the property values.")]),m])}const k=i(l,[["render",f],["__file","access-control.html.vue"]]),E=JSON.parse('{"path":"/stable/maintain/bpe/access-control.html","title":"Access Control","lang":"en-US","frontmatter":{"title":"Access Control","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Matching Users","slug":"matching-users","link":"#matching-users","children":[]},{"level":2,"title":"DSF and Practitioner Roles","slug":"dsf-and-practitioner-roles","link":"#dsf-and-practitioner-roles","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[]}],"git":{"createdTime":null,"updatedTime":null,"contributors":[]},"readingTime":{"minutes":1.94,"words":583},"filePathRelative":"stable/maintain/bpe/access-control.md","excerpt":"

Overview

\\n

The DSF BPE server provides a user interface for administrators. Without any additional configuration the user interface is not accessible with the organizations X.509 client certificate or any other certificate or OpenID Connect authenticated user.

\\n
\\n

OpenID Connect

\\n

To enable OpenID Connect authentication of local user, see the DSF BPE server OpenID Connect configuration page.

\\n
"}');export{k as comp,E as data}; diff --git a/assets/addingANewFhirR.html-DKFGMdMx.js b/assets/addingANewFhirR.html-DKFGMdMx.js new file mode 100644 index 000000000..6e12d4795 --- /dev/null +++ b/assets/addingANewFhirR.html-DKFGMdMx.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,e as r}from"./app-kq9lCQfY.js";const o={},i=r('

This wiki entry walks through the steps to add a new FHIR resource to the server

Database

  • dsf-fhir-server > resources > db copy/past one file and change content to new resource (don't forget to allow permanent deletes like in db.questionnaires.changelog-0.6.0.xml)
  • dsf-fhir-server > resources > db > db.changelog.xml include new generated db changelog file (are in alphabetic order)
  • dsf-fhir-server > resources > db > trigger_functions copy/paste existing functions for insert/update triggers and change content to new resource
  • dsf-fhir-server > resources > db > db.read_access.changelog.xml include new generated functions for insert/update triggers (are in alphabetic order)

JSON/XML Adapter

  • dsf-fhir-rest-adapter > java copy/paste existing adapter for json/xml/html and change content to new resource
  • dsf-fhir-webservice-client > java > FhirWebserviceClientJersey.javaregister generated json/xml (not html) adapters according to existing registrations (are in alphabetic order)

DAO

  • dsf-fhir-server > java > dao copy/paste dao interface and change content to new resource
  • dsf-fhir-server > java > search > parameters copy/paste a search parameter class based on type of the parameter (extends abstract search parameter type) and change content to new resource (existing search parameters can be found on the resources specification website)
  • dsf-fhir-server > java > search > parameters > rev > include copy/paste rev include class and adapt content to resource to be rev included
  • dsf-fhir-server > java > search > parameters > user copy/paste a search user filter class and adapt content to new resource
  • dsf-fhir-server > java > dao > jdbc copy/paste dao jdbc class and adapt content (add search user filter and parameter)
  • dsf-fhir-server > java > spring > config > DaoConfig.java register bean by adding a method according to existing resource bean methods (are in alphabetic order) and add it in the `daoProvider()´ method
  • dsf-fhir-server > java > spring > config > EventConfig.java add the new created bean from the DaoConfig to the MatcherFactory according to existing dao's (are in alphabetic order)
  • dsf-fhir-server > java > dao > provider > DaoProvider.java add a method similar to the existing one
  • dsf-fhir-server > java > dao > provider > DaoProviderImpl.java adapt the class according to the other resource and implement the method similar to the existing one

Resolve Resource References if needed

  • dsf-fhir-rest-adapter > java > service > ReferenceExtractor.java add a method similar to the existing ones
  • dsf-fhir-rest-adapter > java > service > ReferenceExtractorImpl.java implement the method similar to the existing ones

Authorization

  • dsf-fhir-server > java > authorization copy/paste class and change content to new resource
  • dsf-fhir-server > java > spring > config > AuthorizationConfig.java register bean by adding a method according to existing resource bean methods (are in alphabetic order) and add it in the authorizationRuleProvider() and the binaryAuthorizationRule() method

Webservice

  • dsf-fhir-server > java > webservice > specification copy/paste interface and change content to new resource
  • dsf-fhir-server > java > webservice > impl copy/paste class and change content to new resource
  • dsf-fhir-server > java > webservice > jaxrs copy/paste class and change content to new resource
  • dsf-fhir-server > java > webservice > secure copy/paste class and change content to new resource
  • dsf-fhir-server > java > webservice > impl > ConformanceServiceImpl add new Resource to list and add Search Parameter created above
  • dsf-fhir-server > java > spring > config > WebserviceConfig.java register bean by adding a method according to existing resource bean methods (are in alphabetic order)

Test

  • dsf-fhir-server > test-java > dao copy/paste class and change tests to new resource
  • dsf-fhir-server > test-java > integration copy/paste class and change tests to new resource and above create search parameters
',15),s=[i];function d(n,c){return t(),a("div",null,s)}const h=e(o,[["render",d],["__file","addingANewFhirR.html.vue"]]),f=JSON.parse(`{"path":"/oldstable/code/addingANewFhirR.html","title":"Adding FHIR Resources","lang":"en-US","frontmatter":{"title":"Adding FHIR Resources","icon":"code"},"headers":[{"level":2,"title":"Database","slug":"database","link":"#database","children":[]},{"level":2,"title":"JSON/XML Adapter","slug":"json-xml-adapter","link":"#json-xml-adapter","children":[]},{"level":2,"title":"DAO","slug":"dao","link":"#dao","children":[]},{"level":2,"title":"Resolve Resource References if needed","slug":"resolve-resource-references-if-needed","link":"#resolve-resource-references-if-needed","children":[]},{"level":2,"title":"Authorization","slug":"authorization","link":"#authorization","children":[]},{"level":2,"title":"Webservice","slug":"webservice","link":"#webservice","children":[]},{"level":2,"title":"Test","slug":"test","link":"#test","children":[]}],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.87,"words":560},"filePathRelative":"oldstable/code/addingANewFhirR.md","localizedDate":"August 23, 2023","excerpt":"

This wiki entry walks through the steps to add a new FHIR resource to the server

\\n

Database

\\n
    \\n
  • dsf-fhir-server > resources > db copy/past one file and change content to new resource (don't forget to allow permanent deletes like in db.questionnaires.changelog-0.6.0.xml)
  • \\n
  • dsf-fhir-server > resources > db > db.changelog.xml include new generated db changelog file (are in alphabetic order)
  • \\n
  • dsf-fhir-server > resources > db > trigger_functions copy/paste existing functions for insert/update triggers and change content to new resource
  • \\n
  • dsf-fhir-server > resources > db > db.read_access.changelog.xml include new generated functions for insert/update triggers (are in alphabetic order)
  • \\n
"}`);export{h as comp,f as data}; diff --git a/assets/addingANewMpiClient.html-Dly4qn4C.js b/assets/addingANewMpiClient.html-Dly4qn4C.js new file mode 100644 index 000000000..0c5ef9934 --- /dev/null +++ b/assets/addingANewMpiClient.html-Dly4qn4C.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as r,c as s,a as e,b as t,d as i}from"./app-kq9lCQfY.js";const d={},l=e("code",null,"org.highmed.dsf.bpe.mpi.webservice.factory.class",-1),c={href:"https://github.com/highmed/highmed-dsf/blob/master/dsf-mpi/dsf-mpi-client/src/main/java/org/highmed/mpi/client/MasterPatientIndexClientFactory.java",target:"_blank",rel:"noopener noreferrer"},h=e("code",null,"MasterPatientIndexClientFactory",-1),m=e("p",null,[t("The framework currently includes an MPI client using the IHE PDQ interface, also supporting client certificate authentication. To use it, add the jar of the "),e("code",null,"dsf-mpi-client-pdq"),t(" module to the "),e("code",null,"plugin"),t(" configuration folder and set the property value to "),e("code",null,"org.highmed.mpi.client.pdq.MasterPatientIndexClientPdqFactory"),t(".")],-1),p=e("p",null,"To implement a new MPI client, the following has to be taken into account:",-1),f={href:"https://github.com/highmed/highmed-dsf/blob/master/dsf-mpi/dsf-mpi-client/src/main/java/org/highmed/mpi/client/MasterPatientIndexClientFactory.java",target:"_blank",rel:"noopener noreferrer"},g=e("code",null,"MasterPatientIndexClientFactory",-1),u={href:"https://github.com/highmed/highmed-dsf/tree/master/dsf-mpi/dsf-mpi-client",target:"_blank",rel:"noopener noreferrer"},_=e("code",null,"dsf-mpi-client",-1),b=e("li",null,[t("The resources folder must contain a file with the name "),e("code",null,"META-INF/services/org.highmed.mpi.client.MasterPatientIndexClientFactory"),t(" containing the name of the new MPI client factory including the full package name.")],-1),P={href:"https://github.com/highmed/highmed-dsf/blob/master/dsf-mpi/dsf-mpi-client/src/main/java/org/highmed/mpi/client/MasterPatientIndexClient.java",target:"_blank",rel:"noopener noreferrer"},I=e("code",null,"MasterPatientIndexClient",-1),M={href:"https://github.com/highmed/highmed-dsf/blob/master/dsf-mpi/dsf-mpi-client/src/main/java/org/highmed/mpi/client/Idat.java",target:"_blank",rel:"noopener noreferrer"},y=e("code",null,"Idat",-1),v={href:"https://github.com/highmed/highmed-dsf/tree/master/dsf-mpi/dsf-mpi-client-pdq",target:"_blank",rel:"noopener noreferrer"},x=e("code",null,"dsf-mpi-client-pdq",-1);function w(C,k){const n=a("ExternalLinkIcon");return r(),s("div",null,[e("p",null,[t("The Master Patient Index (MPI) client that will be used by the Business Process Engine (BPE) is determined by the property "),l,t(" and loaded using a service loader, which searches for a class of type "),e("a",c,[h,i(n)]),t(" on startup of the BPE.")]),m,p,e("ul",null,[e("li",null,[t("The plugin needs to supply an MPI client factory implementing the interface "),e("a",f,[g,i(n)]),t(" from the "),e("a",u,[_,i(n)]),t(" module.")]),b,e("li",null,[t("The client needs to implement the interface "),e("a",P,[I,i(n)]),t(". The interface defines a method returning instances of the interface "),e("a",M,[y,i(n)]),t(" based on patient-ids used within the openEHR repository.")])]),e("p",null,[t("An example of an MPI client implementation can be found in the "),e("a",v,[x,i(n)]),t(" module.")])])}const j=o(d,[["render",w],["__file","addingANewMpiClient.html.vue"]]),A=JSON.parse('{"path":"/oldstable/code/addingANewMpiClient.html","title":"Adding MPI Clients","lang":"en-US","frontmatter":{"title":"Adding MPI Clients","icon":"code"},"headers":[],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.77,"words":232},"filePathRelative":"oldstable/code/addingANewMpiClient.md","localizedDate":"August 23, 2023","excerpt":"

The Master Patient Index (MPI) client that will be used by the Business Process Engine (BPE) is determined by the property org.highmed.dsf.bpe.mpi.webservice.factory.class and loaded using a service loader, which searches for a class of type MasterPatientIndexClientFactory on startup of the BPE.

"}');export{j as comp,A as data}; diff --git a/assets/addingANewOpenEhrClient.html-C1usEhCm.js b/assets/addingANewOpenEhrClient.html-C1usEhCm.js new file mode 100644 index 000000000..85d93f70d --- /dev/null +++ b/assets/addingANewOpenEhrClient.html-C1usEhCm.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as h,c as l,a as e,b as n,d as o}from"./app-kq9lCQfY.js";const a={},s=e("code",null,"org.highmed.dsf.bpe.openehr.webservice.factory.class",-1),d={href:"https://github.com/highmed/highmed-dsf/blob/master/dsf-openehr/dsf-openehr-client/src/main/java/org/highmed/openehr/client/OpenEhrClientFactory.java",target:"_blank",rel:"noopener noreferrer"},c=e("code",null,"OpenEhrClientFactory",-1),p=e("p",null,[n("The framework currently includes an openEHR Jersey REST client using basic authentication. To use it, add the jar of the "),e("code",null,"dsf-openehr-client-impl"),n(" module to the "),e("code",null,"plugin"),n(" configuration folder and set the property value to "),e("code",null,"org.highmed.openehr.client.impl.OpenEhrClientJerseyFactory"),n(".")],-1),m=e("p",null,"To implement a new openEHR client, the following has to be taken into account:",-1),f={href:"https://github.com/highmed/highmed-dsf/blob/master/dsf-openehr/dsf-openehr-client/src/main/java/org/highmed/openehr/client/OpenEhrClientFactory.java",target:"_blank",rel:"noopener noreferrer"},u=e("code",null,"OpenEhrClientFactory",-1),g={href:"https://github.com/highmed/highmed-dsf/tree/master/dsf-openehr/dsf-openehr-client",target:"_blank",rel:"noopener noreferrer"},_=e("code",null,"dsf-openehr-client",-1),b=e("li",null,[n("The resources folder must contain a file with the name "),e("code",null,"META-INF/services/org.highmed.openehr.client.OpenEhrClientFactory"),n(" containing the name of the new openehr client factory including the full package name.")],-1),E={href:"https://github.com/highmed/highmed-dsf/blob/master/dsf-openehr/dsf-openehr-client/src/main/java/org/highmed/openehr/client/OpenEhrClient.java",target:"_blank",rel:"noopener noreferrer"},y=e("code",null,"OpenEhrClient",-1),v={href:"https://github.com/highmed/highmed-dsf/blob/master/dsf-openehr/dsf-openehr-model/src/main/java/org/highmed/openehr/model/structure/ResultSet.java",target:"_blank",rel:"noopener noreferrer"},C=e("code",null,"ResultSet",-1),k={href:"https://github.com/highmed/highmed-dsf/tree/master/dsf-openehr/dsf-openehr-client-impl",target:"_blank",rel:"noopener noreferrer"},w=e("code",null,"dsf-openehr-client-impl",-1);function O(T,R){const t=i("ExternalLinkIcon");return h(),l("div",null,[e("p",null,[n("The openEHR client that will be used by the Business Process Engine (BPE) is determined by the property "),s,n(" and loaded using a service loader, which searches for a class of type "),e("a",d,[c,o(t)]),n(" on startup of the BPE.")]),p,m,e("ul",null,[e("li",null,[n("The plugin needs to supply an openEHR client factory implementing the interface "),e("a",f,[u,o(t)]),n(" from the "),e("a",g,[_,o(t)]),n(" module.")]),b,e("li",null,[n("The client needs to implement the interface "),e("a",E,[y,o(t)]),n(". The interface defines a method executing an openEHR query returning an instance of an openEHR "),e("a",v,[C,o(t)]),n(".")])]),e("p",null,[n("An example of an openEHR client implementation can be found in the "),e("a",k,[w,o(t)]),n(" module.")])])}const x=r(a,[["render",O],["__file","addingANewOpenEhrClient.html.vue"]]),A=JSON.parse('{"path":"/oldstable/code/addingANewOpenEhrClient.html","title":"Adding openEHR Clients","lang":"en-US","frontmatter":{"title":"Adding openEHR Clients","icon":"code"},"headers":[],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.74,"words":221},"filePathRelative":"oldstable/code/addingANewOpenEhrClient.md","localizedDate":"August 23, 2023","excerpt":"

The openEHR client that will be used by the Business Process Engine (BPE) is determined by the property org.highmed.dsf.bpe.openehr.webservice.factory.class and loaded using a service loader, which searches for a class of type OpenEhrClientFactory on startup of the BPE.

"}');export{x as comp,A as data}; diff --git a/assets/allowList-mgm.html--HvZHaB9.js b/assets/allowList-mgm.html--HvZHaB9.js new file mode 100644 index 000000000..ac6b08fbd --- /dev/null +++ b/assets/allowList-mgm.html--HvZHaB9.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as s,c as l,a as e,b as t,d as i,w as c,e as h}from"./app-kq9lCQfY.js";const u={},d=h('

Overview

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.

Prerequisites

  1. Deployed DSF instance (test or production infrastructure)
    1.1 If none exists yet, read the installation guide
  2. Certificate
    2.1 If none exists yet, read the certificate requirements
  3. Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de
  4. FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir
  5. Contact details from a responsible person of your organization
  6. Access to the E-Mail address from your organization for verification

Start here

When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:

',7),m={href:"https://allowlist-test.gecko.hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},f=e("strong",null,"Test",-1),p={href:"https://allowlist.gecko.hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},w=e("strong",null,"Production",-1),g=e("p",null,[t("We use different highlight colors for the DSF Allow List Management Tool: Green for the "),e("strong",null,"Test"),t(" environment and blue for the "),e("strong",null,"Production"),t(" infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.")],-1),b=e("div",{class:"hint-container tip"},[e("p",{class:"hint-container-title"},"Ideas for improvement?"),e("p",null,[t("Have you found an error or is something unclear to you? Then please feel free to contact us on the "),e("a",{href:"https://mii.zulipchat.com/#narrow/stream/392426-Data-Sharing-Framework-.28DSF.29"},"MII-Zulip Channel"),t(" or write us at "),e("a",{href:"mailto:dsf-gecko@hs-heilbronn.de"},"gth-gecko@hs-heilbronn.de"),t(". Thank you very much!")])],-1);function v(_,y){const a=r("RouteLink"),o=r("ExternalLinkIcon");return s(),l("div",null,[e("p",null,[t("You can read all about the concept of Allow Lists "),i(a,{to:"/intro/info/allowList.html"},{default:c(()=>[t("in our introduction")]),_:1}),t(".")]),d,e("ul",null,[e("li",null,[e("a",m,[f,t(" infrastructure"),i(o)])]),e("li",null,[e("a",p,[w,t(" infrastructure"),i(o)])])]),g,b])}const T=n(u,[["render",v],["__file","allowList-mgm.html.vue"]]),S=JSON.parse('{"path":"/v1.3.1/maintain/allowList-mgm.html","title":"Allow List Management","lang":"en-US","frontmatter":{"title":"Allow List Management","icon":"share"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[]},{"level":2,"title":"Start here","slug":"start-here","link":"#start-here","children":[]}],"git":{"createdTime":1698748420000,"updatedTime":1699815669000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.15,"words":345},"filePathRelative":"v1.3.1/maintain/allowList-mgm.md","localizedDate":"October 31, 2023","excerpt":"

You can read all about the concept of Allow Lists in our introduction.

\\n

Overview

\\n

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

"}');export{T as comp,S as data}; diff --git a/assets/allowList-mgm.html-9siK4PZs.js b/assets/allowList-mgm.html-9siK4PZs.js new file mode 100644 index 000000000..99b082543 --- /dev/null +++ b/assets/allowList-mgm.html-9siK4PZs.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as l,c as h,a as e,b as t,d as o,w as c,e as n}from"./app-kq9lCQfY.js";const u={},d=n('

Overview

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the Gecko Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

The DSF Allow List management tool uses client certificates for authentication. You can either use your personal client certificate or the client certificate from your DSF BPE, which needs to be added to your webbrowser. For instructions on how to add a client certificate to your browser, please follow here.

Prerequisites

',4),p=e("li",null,[t("Deployed DSF instance (test or production infrastructure)"),e("br"),t(" 1.1 If none exists yet, read "),e("a",{href:"install"},"the installation guide")],-1),f=e("li",null,[t("Certificate"),e("br"),t(" 2.1 If none exists yet, read "),e("a",{href:"install#client-server-certificates"},"the certificate requirements")],-1),m={href:"http://hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},w={href:"https://gth.gecko.hs-heilbronn.de/fhir",target:"_blank",rel:"noopener noreferrer"},g=e("li",null,"Contact details from a responsible person of your organization",-1),b=e("li",null,"Access to the E-Mail address from your organization for verification",-1),v=n('

Start here

When you have fulfilled all the prerequisites, you can start managing your Allow Lists respective Allow List Management Tool.

Click here to open the DSF Allow List Management Tool for the Test infrastructure.

Click here to open the DSF Allow List Management Tool for the Production infrastructure.

We use different colors for the DSF Allow List Management Tools in the Test (green) and Production (blue) infastructure.

At the beginning, a popup will appear where you have to select your certificate. Only then you will have access to the website.

Ideas for improvement?

Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!

',7);function _(y,L){const a=r("RouteLink"),i=r("ExternalLinkIcon");return l(),h("div",null,[e("p",null,[t("You can read all about the concept of Allow Lists "),o(a,{to:"/intro/info/allowList.html"},{default:c(()=>[t("in our introduction")]),_:1}),t(".")]),d,e("ol",null,[p,f,e("li",null,[t("Organization identifier (FQDN of your organization website, e.g. "),e("em",null,[e("a",m,[t("hs-heilbronn.de"),o(i)])]),t(")")]),e("li",null,[t("FHIR Endpoint URL (e.g. "),e("em",null,[e("a",w,[t("https://gth.gecko.hs-heilbronn.de/fhir"),o(i)])]),t(" )")]),g,b]),v])}const T=s(u,[["render",_],["__file","allowList-mgm.html.vue"]]),A=JSON.parse('{"path":"/v1.3.0/maintain/allowList-mgm.html","title":"Allow List Management","lang":"en-US","frontmatter":{"title":"Allow List Management","icon":"share"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[]},{"level":2,"title":"Start here","slug":"start-here","link":"#start-here","children":[]}],"git":{"createdTime":1696944513000,"updatedTime":1698658900000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":1.31,"words":392},"filePathRelative":"v1.3.0/maintain/allowList-mgm.md","localizedDate":"October 10, 2023","excerpt":"

You can read all about the concept of Allow Lists in our introduction.

\\n

Overview

\\n

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the Gecko Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

"}');export{T as comp,A as data}; diff --git a/assets/allowList-mgm.html-Bkt24hWo.js b/assets/allowList-mgm.html-Bkt24hWo.js new file mode 100644 index 000000000..e4ec4e656 --- /dev/null +++ b/assets/allowList-mgm.html-Bkt24hWo.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as s,c as l,a as e,b as t,d as i,w as c,e as h}from"./app-kq9lCQfY.js";const u={},d=h('

Overview

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.

Prerequisites

  1. Deployed DSF instance (test or production infrastructure)
    1.1 If none exists yet, read the installation guide
  2. Certificate
    2.1 If none exists yet, read the certificate requirements
  3. Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de
  4. FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir
  5. Contact details from a responsible person of your organization
  6. Access to the E-Mail address from your organization for verification

Start here

When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:

',7),m={href:"https://allowlist-test.gecko.hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},f=e("strong",null,"Test",-1),p={href:"https://allowlist.gecko.hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},w=e("strong",null,"Production",-1),g=e("p",null,[t("We use different highlight colors for the DSF Allow List Management Tool: Green for the "),e("strong",null,"Test"),t(" environment and blue for the "),e("strong",null,"Production"),t(" infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.")],-1),b=e("div",{class:"hint-container tip"},[e("p",{class:"hint-container-title"},"Ideas for improvement?"),e("p",null,[t("Have you found an error or is something unclear to you? Then please feel free to contact us on the "),e("a",{href:"https://mii.zulipchat.com/#narrow/stream/392426-Data-Sharing-Framework-.28DSF.29"},"MII-Zulip Channel"),t(" or write us at "),e("a",{href:"mailto:dsf-gecko@hs-heilbronn.de"},"gth-gecko@hs-heilbronn.de"),t(". Thank you very much!")])],-1);function v(_,y){const a=r("RouteLink"),o=r("ExternalLinkIcon");return s(),l("div",null,[e("p",null,[t("You can read all about the concept of Allow Lists "),i(a,{to:"/intro/info/allowList.html"},{default:c(()=>[t("in our introduction")]),_:1}),t(".")]),d,e("ul",null,[e("li",null,[e("a",m,[f,t(" infrastructure"),i(o)])]),e("li",null,[e("a",p,[w,t(" infrastructure"),i(o)])])]),g,b])}const T=n(u,[["render",v],["__file","allowList-mgm.html.vue"]]),S=JSON.parse('{"path":"/v1.4.0/maintain/allowList-mgm.html","title":"Allow List Management","lang":"en-US","frontmatter":{"title":"Allow List Management","icon":"share"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[]},{"level":2,"title":"Start here","slug":"start-here","link":"#start-here","children":[]}],"git":{"createdTime":1702917645000,"updatedTime":1702917645000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.15,"words":345},"filePathRelative":"v1.4.0/maintain/allowList-mgm.md","localizedDate":"December 18, 2023","excerpt":"

You can read all about the concept of Allow Lists in our introduction.

\\n

Overview

\\n

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

"}');export{T as comp,S as data}; diff --git a/assets/allowList-mgm.html-BtC1Sjv9.js b/assets/allowList-mgm.html-BtC1Sjv9.js new file mode 100644 index 000000000..4a5c42284 --- /dev/null +++ b/assets/allowList-mgm.html-BtC1Sjv9.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as s,c as l,a as e,b as t,d as i,w as c,e as h}from"./app-kq9lCQfY.js";const u={},d=h('

Overview

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.

Prerequisites

  1. Deployed DSF instance (test or production infrastructure)
    1.1 If none exists yet, read the installation guide
  2. Certificate
    2.1 If none exists yet, read the certificate requirements
  3. Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de
  4. FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir
  5. Contact details from a responsible person of your organization
  6. Access to the E-Mail address from your organization for verification

Start here

When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:

',7),f={href:"https://allowlist-test.gecko.hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},m=e("strong",null,"Test",-1),p={href:"https://allowlist.gecko.hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},w=e("strong",null,"Production",-1),g=e("p",null,[t("We use different highlight colors for the DSF Allow List Management Tool: Green for the "),e("strong",null,"Test"),t(" environment and blue for the "),e("strong",null,"Production"),t(" infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.")],-1),b=e("div",{class:"hint-container tip"},[e("p",{class:"hint-container-title"},"Ideas for improvement?"),e("p",null,[t("Have you found an error or is something unclear to you? Then please feel free to contact us on the "),e("a",{href:"https://mii.zulipchat.com/#narrow/stream/392426-Data-Sharing-Framework-.28DSF.29"},"MII-Zulip Channel"),t(" or write us at "),e("a",{href:"mailto:dsf-gecko@hs-heilbronn.de"},"gth-gecko@hs-heilbronn.de"),t(". Thank you very much!")])],-1);function v(_,y){const a=r("RouteLink"),o=r("ExternalLinkIcon");return s(),l("div",null,[e("p",null,[t("You can read all about the concept of Allow Lists "),i(a,{to:"/intro/info/allowList.html"},{default:c(()=>[t("in our introduction")]),_:1}),t(".")]),d,e("ul",null,[e("li",null,[e("a",f,[m,t(" infrastructure"),i(o)])]),e("li",null,[e("a",p,[w,t(" infrastructure"),i(o)])])]),g,b])}const T=n(u,[["render",v],["__file","allowList-mgm.html.vue"]]),S=JSON.parse('{"path":"/v1.5.0/maintain/allowList-mgm.html","title":"Allow List Management","lang":"en-US","frontmatter":{"title":"Allow List Management","icon":"share"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[]},{"level":2,"title":"Start here","slug":"start-here","link":"#start-here","children":[]}],"git":{"createdTime":1708419681000,"updatedTime":1708419681000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.15,"words":345},"filePathRelative":"v1.5.0/maintain/allowList-mgm.md","localizedDate":"February 20, 2024","excerpt":"

You can read all about the concept of Allow Lists in our introduction.

\\n

Overview

\\n

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

"}');export{T as comp,S as data}; diff --git a/assets/allowList-mgm.html-CIV-y8qc.js b/assets/allowList-mgm.html-CIV-y8qc.js new file mode 100644 index 000000000..4e2c64116 --- /dev/null +++ b/assets/allowList-mgm.html-CIV-y8qc.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as s,c as l,a as e,b as t,d as i,w as c,e as h}from"./app-kq9lCQfY.js";const u={},d=h('

Overview

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.

Prerequisites

  1. Deployed DSF instance (test or production infrastructure)
    1.1 If none exists yet, read the installation guide
  2. Certificate
    2.1 If none exists yet, read the certificate requirements
  3. Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de
  4. FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir
  5. Contact details from a responsible person of your organization
  6. Access to the E-Mail address from your organization for verification

Start here

When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:

',7),m={href:"https://allowlist-test.gecko.hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},f=e("strong",null,"Test",-1),p={href:"https://allowlist.gecko.hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},w=e("strong",null,"Production",-1),g=e("p",null,[t("We use different highlight colors for the DSF Allow List Management Tool: Green for the "),e("strong",null,"Test"),t(" environment and blue for the "),e("strong",null,"Production"),t(" infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.")],-1),b=e("div",{class:"hint-container tip"},[e("p",{class:"hint-container-title"},"Ideas for improvement?"),e("p",null,[t("Have you found an error or is something unclear to you? Then please feel free to contact us on the "),e("a",{href:"https://mii.zulipchat.com/#narrow/stream/392426-Data-Sharing-Framework-.28DSF.29"},"MII-Zulip Channel"),t(" or write us at "),e("a",{href:"mailto:dsf-gecko@hs-heilbronn.de"},"gth-gecko@hs-heilbronn.de"),t(". Thank you very much!")])],-1);function v(_,y){const a=r("RouteLink"),o=r("ExternalLinkIcon");return s(),l("div",null,[e("p",null,[t("You can read all about the concept of Allow Lists "),i(a,{to:"/intro/info/allowList.html"},{default:c(()=>[t("in our introduction")]),_:1}),t(".")]),d,e("ul",null,[e("li",null,[e("a",m,[f,t(" infrastructure"),i(o)])]),e("li",null,[e("a",p,[w,t(" infrastructure"),i(o)])])]),g,b])}const S=n(u,[["render",v],["__file","allowList-mgm.html.vue"]]),T=JSON.parse('{"path":"/stable/maintain/allowList-mgm.html","title":"Allow List Management","lang":"en-US","frontmatter":{"title":"Allow List Management","icon":"share"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[]},{"level":2,"title":"Start here","slug":"start-here","link":"#start-here","children":[]}],"git":{"createdTime":1691410780000,"updatedTime":1692790324000,"contributors":[{"name":"Maximilian Kurscheidt","email":"maximilian.kurscheidt@hs-heilbronn.de","commits":3},{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":2},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.15,"words":345},"filePathRelative":"stable/maintain/allowList-mgm.md","localizedDate":"August 7, 2023","excerpt":"

You can read all about the concept of Allow Lists in our introduction.

\\n

Overview

\\n

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

"}');export{S as comp,T as data}; diff --git a/assets/allowList-mgm.html-CYJul8nr.js b/assets/allowList-mgm.html-CYJul8nr.js new file mode 100644 index 000000000..3755e4a9e --- /dev/null +++ b/assets/allowList-mgm.html-CYJul8nr.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as s,c as l,a as e,b as t,d as i,w as c,e as h}from"./app-kq9lCQfY.js";const u={},d=h('

Overview

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.

Prerequisites

  1. Deployed DSF instance (test or production infrastructure)
    1.1 If none exists yet, read the installation guide
  2. Certificate
    2.1 If none exists yet, read the certificate requirements
  3. Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de
  4. FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir
  5. Contact details from a responsible person of your organization
  6. Access to the E-Mail address from your organization for verification

Start here

When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:

',7),f={href:"https://allowlist-test.gecko.hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},m=e("strong",null,"Test",-1),p={href:"https://allowlist.gecko.hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},w=e("strong",null,"Production",-1),g=e("p",null,[t("We use different highlight colors for the DSF Allow List Management Tool: Green for the "),e("strong",null,"Test"),t(" environment and blue for the "),e("strong",null,"Production"),t(" infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.")],-1),b=e("div",{class:"hint-container tip"},[e("p",{class:"hint-container-title"},"Ideas for improvement?"),e("p",null,[t("Have you found an error or is something unclear to you? Then please feel free to contact us on the "),e("a",{href:"https://mii.zulipchat.com/#narrow/stream/392426-Data-Sharing-Framework-.28DSF.29"},"MII-Zulip Channel"),t(" or write us at "),e("a",{href:"mailto:dsf-gecko@hs-heilbronn.de"},"gth-gecko@hs-heilbronn.de"),t(". Thank you very much!")])],-1);function v(_,y){const a=r("RouteLink"),o=r("ExternalLinkIcon");return s(),l("div",null,[e("p",null,[t("You can read all about the concept of Allow Lists "),i(a,{to:"/intro/info/allowList.html"},{default:c(()=>[t("in our introduction")]),_:1}),t(".")]),d,e("ul",null,[e("li",null,[e("a",f,[m,t(" infrastructure"),i(o)])]),e("li",null,[e("a",p,[w,t(" infrastructure"),i(o)])])]),g,b])}const T=n(u,[["render",v],["__file","allowList-mgm.html.vue"]]),A=JSON.parse('{"path":"/v1.5.2/maintain/allowList-mgm.html","title":"Allow List Management","lang":"en-US","frontmatter":{"title":"Allow List Management","icon":"share"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[]},{"level":2,"title":"Start here","slug":"start-here","link":"#start-here","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.15,"words":345},"filePathRelative":"v1.5.2/maintain/allowList-mgm.md","localizedDate":"July 8, 2024","excerpt":"

You can read all about the concept of Allow Lists in our introduction.

\\n

Overview

\\n

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

"}');export{T as comp,A as data}; diff --git a/assets/allowList-mgm.html-Cdtf6CP2.js b/assets/allowList-mgm.html-Cdtf6CP2.js new file mode 100644 index 000000000..9a6556ccf --- /dev/null +++ b/assets/allowList-mgm.html-Cdtf6CP2.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as l,c as h,a as e,b as t,d as i,w as c,e as a}from"./app-kq9lCQfY.js";const u={},d=e("div",{class:"hint-container caution"},[e("p",{class:"hint-container-title"},"Caution"),e("p",null,[t("This is an outdated version of the Allow List Management documentation. Please use "),e("a",{href:"/stable//maintain/allowList-mgm"},"the current version"),t(", even if you use an outdated DSF version.")])],-1),m=a('

Overview

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the Gecko Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

The DSF Allow List management tool uses client certificates for authentication. You can either use your personal client certificate or the client certificate from your DSF BPE, which needs to be added to your webbrowser. For instructions on how to add a client certificate to your browser, please follow here.
Currently, the Allow List Management Tool is only for DSF TEST infrastructure. For production, please write us an E-Mail with your information.

Prerequisites

',4),p=e("li",null,[t("Deployed DSF instance (test infrastructure)"),e("br"),t(" 1.1 If none exists yet, read "),e("a",{href:"install"},"here")],-1),f=e("li",null,[t("Certificate"),e("br"),t(" 2.1 If none exists yet, read "),e("a",{href:"install#client-server-certificates"},"here")],-1),w={href:"http://hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},g={href:"https://gth.gecko.hs-heilbronn.de/fhir",target:"_blank",rel:"noopener noreferrer"},b=e("li",null,"Contact details from a responsible person of your organization",-1),v=e("li",null,"Access to the E-Mail address from your organization for verification",-1),_=a('

Start here

When you have fulfilled all the prerequisites, you can start managing your Allow Lists on the DSF Allow List Management Tool.
At the beginning, a popup will appear where you have to select your certificate. Only then you will have access to the website.

Ideas for improvement?

Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!

',3);function y(L,k){const r=o("RouteLink"),n=o("ExternalLinkIcon");return l(),h("div",null,[d,e("p",null,[t("You can read all about the concept of Allow Lists "),i(r,{to:"/intro/info/allowList.html"},{default:c(()=>[t("here")]),_:1}),t(".")]),m,e("ol",null,[p,f,e("li",null,[t("Organization identifier (FQDN of your organization website, e.g. "),e("em",null,[e("a",w,[t("hs-heilbronn.de"),i(n)])]),t(")")]),e("li",null,[t("FHIR Endpoint URL (e.g. "),e("em",null,[e("a",g,[t("https://gth.gecko.hs-heilbronn.de/fhir"),i(n)])]),t(" )")]),b,v]),_])}const T=s(u,[["render",y],["__file","allowList-mgm.html.vue"]]),F=JSON.parse('{"path":"/v1.1.0/maintain/allowList-mgm.html","title":"Allow List Management","lang":"en-US","frontmatter":{"title":"Allow List Management","icon":"share"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[]},{"level":2,"title":"Start here","slug":"start-here","link":"#start-here","children":[]}],"git":{"createdTime":1692790324000,"updatedTime":1698658900000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":3}]},"readingTime":{"minutes":1.3,"words":391},"filePathRelative":"v1.1.0/maintain/allowList-mgm.md","localizedDate":"August 23, 2023","excerpt":"
\\n

Caution

\\n

This is an outdated version of the Allow List Management documentation. Please use the current version, even if you use an outdated DSF version.

\\n
\\n

You can read all about the concept of Allow Lists here.

"}');export{T as comp,F as data}; diff --git a/assets/allowList-mgm.html-D3owzJ3j.js b/assets/allowList-mgm.html-D3owzJ3j.js new file mode 100644 index 000000000..a92d8a5bc --- /dev/null +++ b/assets/allowList-mgm.html-D3owzJ3j.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as s,c as l,a as e,b as t,d as i,w as c,e as h}from"./app-kq9lCQfY.js";const u={},d=h('

Overview

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.

Prerequisites

  1. Deployed DSF instance (test or production infrastructure)
    1.1 If none exists yet, read the installation guide
  2. Certificate
    2.1 If none exists yet, read the certificate requirements
  3. Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de
  4. FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir
  5. Contact details from a responsible person of your organization
  6. Access to the E-Mail address from your organization for verification

Start here

When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:

',7),f={href:"https://allowlist-test.gecko.hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},m=e("strong",null,"Test",-1),p={href:"https://allowlist.gecko.hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},w=e("strong",null,"Production",-1),g=e("p",null,[t("We use different highlight colors for the DSF Allow List Management Tool: Green for the "),e("strong",null,"Test"),t(" environment and blue for the "),e("strong",null,"Production"),t(" infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.")],-1),b=e("div",{class:"hint-container tip"},[e("p",{class:"hint-container-title"},"Ideas for improvement?"),e("p",null,[t("Have you found an error or is something unclear to you? Then please feel free to contact us on the "),e("a",{href:"https://mii.zulipchat.com/#narrow/stream/392426-Data-Sharing-Framework-.28DSF.29"},"MII-Zulip Channel"),t(" or write us at "),e("a",{href:"mailto:dsf-gecko@hs-heilbronn.de"},"gth-gecko@hs-heilbronn.de"),t(". Thank you very much!")])],-1);function v(_,y){const a=r("RouteLink"),o=r("ExternalLinkIcon");return s(),l("div",null,[e("p",null,[t("You can read all about the concept of Allow Lists "),i(a,{to:"/intro/info/allowList.html"},{default:c(()=>[t("in our introduction")]),_:1}),t(".")]),d,e("ul",null,[e("li",null,[e("a",f,[m,t(" infrastructure"),i(o)])]),e("li",null,[e("a",p,[w,t(" infrastructure"),i(o)])])]),g,b])}const T=n(u,[["render",v],["__file","allowList-mgm.html.vue"]]),S=JSON.parse('{"path":"/v1.5.1/maintain/allowList-mgm.html","title":"Allow List Management","lang":"en-US","frontmatter":{"title":"Allow List Management","icon":"share"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[]},{"level":2,"title":"Start here","slug":"start-here","link":"#start-here","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.15,"words":345},"filePathRelative":"v1.5.1/maintain/allowList-mgm.md","localizedDate":"April 17, 2024","excerpt":"

You can read all about the concept of Allow Lists in our introduction.

\\n

Overview

\\n

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

"}');export{T as comp,S as data}; diff --git a/assets/allowList-mgm.html-DG2rpePj.js b/assets/allowList-mgm.html-DG2rpePj.js new file mode 100644 index 000000000..89563a9fc --- /dev/null +++ b/assets/allowList-mgm.html-DG2rpePj.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as s,c as l,a as e,b as t,d as i,w as c,e as h}from"./app-kq9lCQfY.js";const u={},d=h('

Overview

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.

Prerequisites

  1. Deployed DSF instance (test or production infrastructure)
    1.1 If none exists yet, read the installation guide
  2. Certificate
    2.1 If none exists yet, read the certificate requirements
  3. Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de
  4. FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir
  5. Contact details from a responsible person of your organization
  6. Access to the E-Mail address from your organization for verification

Start here

When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:

',7),m={href:"https://allowlist-test.gecko.hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},f=e("strong",null,"Test",-1),p={href:"https://allowlist.gecko.hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},w=e("strong",null,"Production",-1),g=e("p",null,[t("We use different highlight colors for the DSF Allow List Management Tool: Green for the "),e("strong",null,"Test"),t(" environment and blue for the "),e("strong",null,"Production"),t(" infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.")],-1),b=e("div",{class:"hint-container tip"},[e("p",{class:"hint-container-title"},"Ideas for improvement?"),e("p",null,[t("Have you found an error or is something unclear to you? Then please feel free to contact us on the "),e("a",{href:"https://mii.zulipchat.com/#narrow/stream/392426-Data-Sharing-Framework-.28DSF.29"},"MII-Zulip Channel"),t(" or write us at "),e("a",{href:"mailto:dsf-gecko@hs-heilbronn.de"},"gth-gecko@hs-heilbronn.de"),t(". Thank you very much!")])],-1);function v(_,y){const a=r("RouteLink"),o=r("ExternalLinkIcon");return s(),l("div",null,[e("p",null,[t("You can read all about the concept of Allow Lists "),i(a,{to:"/intro/info/allowList.html"},{default:c(()=>[t("in our introduction")]),_:1}),t(".")]),d,e("ul",null,[e("li",null,[e("a",m,[f,t(" infrastructure"),i(o)])]),e("li",null,[e("a",p,[w,t(" infrastructure"),i(o)])])]),g,b])}const T=n(u,[["render",v],["__file","allowList-mgm.html.vue"]]),S=JSON.parse('{"path":"/v1.3.2/maintain/allowList-mgm.html","title":"Allow List Management","lang":"en-US","frontmatter":{"title":"Allow List Management","icon":"share"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[]},{"level":2,"title":"Start here","slug":"start-here","link":"#start-here","children":[]}],"git":{"createdTime":1701710218000,"updatedTime":1701710218000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.15,"words":345},"filePathRelative":"v1.3.2/maintain/allowList-mgm.md","localizedDate":"December 4, 2023","excerpt":"

You can read all about the concept of Allow Lists in our introduction.

\\n

Overview

\\n

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

"}');export{T as comp,S as data}; diff --git a/assets/allowList-mgm.html-LVnwVTAs.js b/assets/allowList-mgm.html-LVnwVTAs.js new file mode 100644 index 000000000..48f9ad5ae --- /dev/null +++ b/assets/allowList-mgm.html-LVnwVTAs.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as l,c as h,a as e,b as t,d as i,w as c,e as a}from"./app-kq9lCQfY.js";const u={},d=e("div",{class:"hint-container caution"},[e("p",{class:"hint-container-title"},"Caution"),e("p",null,[t("This is an outdated version of the Allow List Management documentation. Please use "),e("a",{href:"/stable//maintain/allowList-mgm"},"the current version"),t(", even if you use an outdated DSF version.")])],-1),m=a('

Overview

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the Gecko Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

The DSF Allow List management tool uses client certificates for authentication. You can either use your personal client certificate or the client certificate from your DSF BPE, which needs to be added to your webbrowser. For instructions on how to add a client certificate to your browser, please follow here.
Currently, the Allow List Management Tool is only for DSF TEST infrastructure. For production, please write us an E-Mail with your information.

Prerequisites

',4),p=e("li",null,[t("Deployed DSF instance (test infrastructure)"),e("br"),t(" 1.1 If none exists yet, read "),e("a",{href:"install"},"here")],-1),f=e("li",null,[t("Certificate"),e("br"),t(" 2.1 If none exists yet, read "),e("a",{href:"install#client-server-certificates"},"here")],-1),w={href:"http://hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},g={href:"https://gth.gecko.hs-heilbronn.de/fhir",target:"_blank",rel:"noopener noreferrer"},b=e("li",null,"Contact details from a responsible person of your organization",-1),v=e("li",null,"Access to the E-Mail address from your organization for verification",-1),_=a('

Start here

When you have fulfilled all the prerequisites, you can start managing your Allow Lists on the DSF Allow List Management Tool.
At the beginning, a popup will appear where you have to select your certificate. Only then you will have access to the website.

Ideas for improvement?

Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!

',3);function y(L,k){const r=o("RouteLink"),n=o("ExternalLinkIcon");return l(),h("div",null,[d,e("p",null,[t("You can read all about the concept of Allow Lists "),i(r,{to:"/intro/info/allowList.html"},{default:c(()=>[t("here")]),_:1}),t(".")]),m,e("ol",null,[p,f,e("li",null,[t("Organization identifier (FQDN of your organization, e.g. "),e("em",null,[e("a",w,[t("hs-heilbronn.de"),i(n)])]),t(")")]),e("li",null,[t("FHIR Endpoint URL (e.g. "),e("em",null,[e("a",g,[t("https://gth.gecko.hs-heilbronn.de/fhir"),i(n)])]),t(" )")]),b,v]),_])}const T=s(u,[["render",y],["__file","allowList-mgm.html.vue"]]),F=JSON.parse('{"path":"/v1.0.0/maintain/allowList-mgm.html","title":"Allow List Management","lang":"en-US","frontmatter":{"title":"Allow List Management","icon":"share"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[]},{"level":2,"title":"Start here","slug":"start-here","link":"#start-here","children":[]}],"git":{"createdTime":1692708510000,"updatedTime":1698658900000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":1.3,"words":390},"filePathRelative":"v1.0.0/maintain/allowList-mgm.md","localizedDate":"August 22, 2023","excerpt":"
\\n

Caution

\\n

This is an outdated version of the Allow List Management documentation. Please use the current version, even if you use an outdated DSF version.

\\n
\\n

You can read all about the concept of Allow Lists here.

"}');export{T as comp,F as data}; diff --git a/assets/allowList-mgm.html-rjZU3I6G.js b/assets/allowList-mgm.html-rjZU3I6G.js new file mode 100644 index 000000000..59d0d1c2a --- /dev/null +++ b/assets/allowList-mgm.html-rjZU3I6G.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as l,c as h,a as e,b as t,d as i,w as c,e as a}from"./app-kq9lCQfY.js";const u={},d=e("div",{class:"hint-container caution"},[e("p",{class:"hint-container-title"},"Caution"),e("p",null,[t("This is an outdated version of the Allow List Management documentation. Please use "),e("a",{href:"/stable//maintain/allowList-mgm"},"the current version"),t(", even if you use an outdated DSF version.")])],-1),m=a('

Overview

To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the Gecko Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

The DSF Allow List management tool uses client certificates for authentication. You can either use your personal client certificate or the client certificate from your DSF BPE, which needs to be added to your webbrowser. For instructions on how to add a client certificate to your browser, please follow here.
Currently, the Allow List Management Tool is only for DSF TEST infrastructure. For production, please write us an E-Mail with your information.

Prerequisites

',4),p=e("li",null,[t("Deployed DSF instance (test infrastructure)"),e("br"),t(" 1.1 If none exists yet, read "),e("a",{href:"install"},"here")],-1),f=e("li",null,[t("Certificate"),e("br"),t(" 2.1 If none exists yet, read "),e("a",{href:"install#client-server-certificates"},"here")],-1),w={href:"http://hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},b={href:"https://gth.gecko.hs-heilbronn.de/fhir",target:"_blank",rel:"noopener noreferrer"},g=e("li",null,"Contact details from a responsible person of your organization",-1),v=e("li",null,"Access to the E-Mail address from your organization for verification",-1),_=a('

Start here

When you have fulfilled all the prerequisites, you can start managing your Allow Lists on the DSF Allow List Management Tool.
At the beginning, a popup will appear where you have to select your certificate. Only then you will have access to the website.

Ideas for improvement?

Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!

',3);function y(L,k){const r=o("RouteLink"),n=o("ExternalLinkIcon");return l(),h("div",null,[d,e("p",null,[t("You can read all about the concept of Allow Lists "),i(r,{to:"/intro/info/allowList.html"},{default:c(()=>[t("here")]),_:1}),t(".")]),m,e("ol",null,[p,f,e("li",null,[t("Organization identifier (FQDN of your organization website, e.g. "),e("em",null,[e("a",w,[t("hs-heilbronn.de"),i(n)])]),t(")")]),e("li",null,[t("FHIR Endpoint URL (e.g. "),e("em",null,[e("a",b,[t("https://gth.gecko.hs-heilbronn.de/fhir"),i(n)])]),t(" )")]),g,v]),_])}const A=s(u,[["render",y],["__file","allowList-mgm.html.vue"]]),F=JSON.parse('{"path":"/v1.2.0/maintain/allowList-mgm.html","title":"Allow List Management","lang":"en-US","frontmatter":{"title":"Allow List Management","icon":"share"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[]},{"level":2,"title":"Start here","slug":"start-here","link":"#start-here","children":[]}],"git":{"createdTime":1694544770000,"updatedTime":1698658900000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":1.3,"words":391},"filePathRelative":"v1.2.0/maintain/allowList-mgm.md","localizedDate":"September 12, 2023","excerpt":"
\\n

Caution

\\n

This is an outdated version of the Allow List Management documentation. Please use the current version, even if you use an outdated DSF version.

\\n
\\n

You can read all about the concept of Allow Lists here.

"}');export{A as comp,F as data}; diff --git a/assets/allowList.html-B_rp1UUL.js b/assets/allowList.html-B_rp1UUL.js new file mode 100644 index 000000000..e55f75183 --- /dev/null +++ b/assets/allowList.html-B_rp1UUL.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as n,c as s,a as e,d as l,w as r,b as a,e as c}from"./app-kq9lCQfY.js";const h="/photos/info/allowList/allowList-architecture.png",d={},m=c('

Goal

The main objective is to allow only authorized organizations to do what "we" allow them to do (e.g. query data).
First, we need a list of organizations that we trust. Secondly, we need a way to ensure that the other party is a member of the parent organization. Thirdly, a list of actions we want to allow the organization to perform is needed. An organization can have different roles in different use cases.

The Allow List consists of Organization-, Endpoint- and OrganisationAffiliation- resources. With these resources the allow list defines communication partners and and parent organizations like research consortia and groups as well as the roles of each organization. Each DSF FHIR server stores their own allow list. To make sure that processes can be executed, parties must allow access via their allow list.

Architecture
Architecture

Allow List Managment

',5),w=e("h4",{id:"feel-free-to-contact-us-via-e-mail-dsf-gecko-hs-heilbronn-de-and-we-will-take-care-of-your-request-as-soon-as-possible",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#feel-free-to-contact-us-via-e-mail-dsf-gecko-hs-heilbronn-de-and-we-will-take-care-of-your-request-as-soon-as-possible"},[e("span",null,[a("Feel free to contact us via "),e("a",{href:"mailto:dsf-gecko@hs-heilbronn.de"}," E-Mail (dsf-gecko@hs-heilbronn.de)"),a(" and we will take care of your request as soon as possible.")])])],-1);function f(u,g){const t=i("RouteLink");return n(),s("div",null,[m,e("p",null,[l(t,{to:"/stable/maintain/allowList-mgm.html"},{default:r(()=>[a("Here")]),_:1}),a(" you can read all the information if you want to create or update an Allow List.")]),w])}const _=o(d,[["render",f],["__file","allowList.html.vue"]]),y=JSON.parse('{"path":"/intro/info/allowList.html","title":"Allow Lists","lang":"en-US","frontmatter":{"title":"Allow Lists","icon":"share"},"headers":[{"level":2,"title":"Goal","slug":"goal","link":"#goal","children":[]},{"level":2,"title":"Allow List Managment","slug":"allow-list-managment","link":"#allow-list-managment","children":[]}],"git":{"createdTime":1690473388000,"updatedTime":1699815669000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":6},{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.65,"words":196},"filePathRelative":"intro/info/allowList.md","localizedDate":"July 27, 2023","excerpt":"

Goal

\\n

The main objective is to allow only authorized organizations to do what \\"we\\" allow them to do (e.g. query data).
\\nFirst, we need a list of organizations that we trust. Secondly, we need a way to ensure that the other party is a member of the parent organization. Thirdly, a list of actions we want to allow the organization to perform is needed. An organization can have different roles in different use cases.

"}');export{_ as comp,y as data}; diff --git a/assets/app-kq9lCQfY.js b/assets/app-kq9lCQfY.js new file mode 100644 index 000000000..fdeb1e89b --- /dev/null +++ b/assets/app-kq9lCQfY.js @@ -0,0 +1,31 @@ +function __vite__mapDeps(indexes) { + if (!__vite__mapDeps.viteFileDeps) { + __vite__mapDeps.viteFileDeps = ["assets/index.html-BA9Y-W0Q.js","assets/dsf-concept-Dbcu0twt.js","assets/plugin-vue_export-helper-DlAUqK2U.js","assets/index.html-Dsh9Qj5c.js","assets/index.html--WxwSsgq.js","assets/learn.html-BCytgQB3.js","assets/index.html-C6oGyzQN.js","assets/index.html-D4_ALXNF.js","assets/publications.html-CWGWwyve.js","assets/index.html-BM8BVXez.js","assets/introduction.html-B5k_PK4x.js","assets/index.html-7wErRCxo.js","assets/index.html-Czmcnse8.js","assets/dsf-for-dev.html-CM31T0vP.js","assets/index.html-DszwQS_b.js","assets/process-plugins-advanced.html-4Prol2h5.js","assets/dsf-for-dev.html-DtYXgtPv.js","assets/index.html-DoJu9D4T.js","assets/process-plugins-advanced.html-D0pCDuaN.js","assets/dsf-for-dev.html-BY2mYYLX.js","assets/index.html-D0FWjIyg.js","assets/process-plugins-advanced.html-W6uvf7xk.js","assets/dsf-for-dev.html-ztYNqQri.js","assets/index.html-a6s0XPGA.js","assets/process-plugins-advanced.html-BC3FU9gh.js","assets/dsf-for-dev.html-mtyY8dnA.js","assets/index.html-D1odJbGw.js","assets/process-plugins-advanced.html-BUm0RhL8.js","assets/dsf-for-dev.html-Cwbe2fMU.js","assets/index.html-CEEtxclz.js","assets/process-plugins-advanced.html-D6ZVnnoI.js","assets/dsf-for-dev.html-gVMw1jIa.js","assets/index.html-4tMg7LJV.js","assets/process-plugins-advanced.html-BfqgRQbf.js","assets/dsf-for-dev.html-DiPpVl74.js","assets/index.html-BgN128oA.js","assets/process-plugins-advanced.html-BAq1SVRv.js","assets/dsf-for-dev.html-B0G-bUeQ.js","assets/index.html-CCBpJJly.js","assets/process-plugins-advanced.html-CyU9Nv_o.js","assets/dsf-for-dev.html-DU7CIKrg.js","assets/index.html-1GNavLp5.js","assets/process-plugins-advanced.html-Dw-obtVz.js","assets/dsf-for-dev.html-DyM8l128.js","assets/index.html-CuwFjDT4.js","assets/process-plugins-advanced.html-D1AIXOF4.js","assets/index.html-DLtnb5Tv.js","assets/contact.html-BIg2xi0b.js","assets/partners.html-B-l0TZk2.js","assets/public.html-BOk6SNIO.js","assets/mii-bWzWhniO.js","assets/team.html-BVqb5cyl.js","assets/allowList.html-B_rp1UUL.js","assets/architecture.html-Df8jd6ox.js","assets/basics.html-DiVFM6ZX.js","assets/introduction.html-BctNGTS-.js","assets/networkSetup.html-DO8WTfe0.js","assets/highmed_dsf_network_setup_ext_dmz-DyQZOoIs.js","assets/process-plugins.html-DS2-s-JK.js","assets/security.html-Qj_akVd-.js","assets/GMDS2022-dev.html-DlHHIr-I.js","assets/MIE2023.html-MrPY5Efy.js","assets/index.html-BkHpX9Lh.js","assets/Talks.html-35con64A.js","assets/index.html-GWKEUDpV.js","assets/feasibility.html-fV-0rrxS.js","assets/num.html-BDSaH26q.js","assets/index.html-CLQDCC8z.js","assets/build.html-B99lTZFD.js","assets/proxyTestTool.html-C_Ex6mgz.js","assets/releaseANewVersion.html-jLnIfCDT.js","assets/index.html-DjKgBgX-.js","assets/addingANewFhirR.html-DKFGMdMx.js","assets/addingANewMpiClient.html-Dly4qn4C.js","assets/addingANewOpenEhrClient.html-C1usEhCm.js","assets/changingBpmnProcesses.html-BwQhn7Qm.js","assets/code.html-Da8veOhR.js","assets/eclipseContent.html-kdqNoPL9.js","assets/intelliJContent.html-yFdXbKGw.js","assets/libraries.html-DXRhGNT1.js","assets/usingTheGitHubMaven.html-_DTrQqeM.js","assets/index.html-C-fzjFRH.js","assets/authentication.html-BWH7DDfb.js","assets/networkSetup.html-BRividmW.js","assets/index.html-qeoKr5lU.js","assets/configBpe.html-CkJloQiY.js","assets/configFhir.html-DWtvgUJO.js","assets/configFhirReverseProxy.html-D6mB2ojQ.js","assets/highmedInstall.html-Bw-puBe4.js","assets/num-codexInstall.html-Bw_nn2le.js","assets/upgradeFrom7.html-CEFLW_mR.js","assets/upgradeFrom8.html-1Y_v8e3q.js","assets/upgradeFrom90.html-RKmk-LJj.js","assets/upgradeFrom91.html-C4vCWdyC.js","assets/upgradeFrom92.html-CoFcIWbe.js","assets/index.html-DnEeG4Ei.js","assets/ex11-docker-composeyml.html-MLKKlt0T.js","assets/exercise1-simpleProcess.html-1gmKbyng.js","assets/exercise11-processDebugging.html-H4aFbuic.js","assets/exercise2-inputParameters.html-D05ppcsc.js","assets/exercise3-messageEvents.html-BvCPZCXY.js","assets/exercise4-exclusiveGateways.html-CNjavIrD.js","assets/exercise5-eventBasedGateways.html-TXYnwT8n.js","assets/prerequisites.html-BOHWoSg0.js","assets/code.html-CSLPHq93.js","assets/documentation.html-DZPnnDjT.js","assets/index.html-C7I1gN0A.js","assets/index.html-IZP11Pen.js","assets/create.html-DYPU2UUv.js","assets/upgrade-from-0.html-Uv4WDNVz.js","assets/index.html-CL_NobEX.js","assets/allowList-mgm.html-CIV-y8qc.js","assets/install-plugins.html-DiPcZpIN.js","assets/install.html-BrMS_Ond.js","assets/upgrade-from-0.html-D9NWv8w7.js","assets/upgrade-from-1.html-UX0GM5eH.js","assets/index.html-wY8EFJdx.js","assets/create.html-BBL4dAdr.js","assets/upgrade-from-0.html-BLIdrZVI.js","assets/index.html-DH7l0GC4.js","assets/allowList-mgm.html-LVnwVTAs.js","assets/install.html-CRFtEX6d.js","assets/upgrade-from-0.html-BU67otYx.js","assets/index.html-Dm-P1F5T.js","assets/create.html-Cd0lu8lU.js","assets/upgrade-from-0.html-B6n07FQd.js","assets/index.html-B0FSLKVu.js","assets/allowList-mgm.html-Cdtf6CP2.js","assets/install.html-v-wtBUsw.js","assets/upgrade-from-0.html-Ct5W8opP.js","assets/upgrade-from-1.html-3neSA-BB.js","assets/index.html-DEarre1O.js","assets/create.html-B8YWfO5m.js","assets/upgrade-from-0.html-CXaHlGc8.js","assets/index.html-BxKmwZz7.js","assets/allowList-mgm.html-rjZU3I6G.js","assets/install.html-Ci01uV9w.js","assets/upgrade-from-0.html-D4zkI0hy.js","assets/upgrade-from-1.html-CLS-rGPo.js","assets/index.html-BL-TOoxL.js","assets/create.html-CYJ8kogk.js","assets/upgrade-from-0.html-D5p1Fyxp.js","assets/index.html-DpTEcA7O.js","assets/allowList-mgm.html-9siK4PZs.js","assets/install-plugins.html-C_QOcnfk.js","assets/install.html-BaXMdr7u.js","assets/upgrade-from-0.html-Qee7uBnc.js","assets/upgrade-from-1.html-CpUfeiok.js","assets/index.html-Bt8TXjqJ.js","assets/create.html-D-hEIIMO.js","assets/upgrade-from-0.html-CRAe3DJ7.js","assets/index.html-Bmlmhagb.js","assets/allowList-mgm.html--HvZHaB9.js","assets/install-plugins.html-CZL_USfs.js","assets/install.html-CaUAgN_g.js","assets/upgrade-from-0.html-hTNkwIzD.js","assets/upgrade-from-1.html-DVhYYBK6.js","assets/index.html-Bc9IQ5FT.js","assets/create.html-STcXv8Ol.js","assets/upgrade-from-0.html-LF0qk2hq.js","assets/index.html-qJV9JEXu.js","assets/allowList-mgm.html-DG2rpePj.js","assets/install-plugins.html-BPtVjAQJ.js","assets/install.html-CPYdjQIY.js","assets/upgrade-from-0.html-C6LY6wwR.js","assets/upgrade-from-1.html-DO57QWSu.js","assets/code.html-_JHNqXPS.js","assets/documentation.html-C_QbE0N7.js","assets/index.html-DyvczhN7.js","assets/index.html-DTXLO3BP.js","assets/create.html-Dk6P19fM.js","assets/upgrade-from-0.html-1FImxnbl.js","assets/index.html-BALcS47z.js","assets/allowList-mgm.html-Bkt24hWo.js","assets/install-plugins.html-OqBmbFsQ.js","assets/install.html-tuyuTpsb.js","assets/upgrade-from-0.html-Ccchte1p.js","assets/upgrade-from-1.html-DG_FtmPQ.js","assets/code.html-CmhEnLZF.js","assets/documentation.html-BhU3Negt.js","assets/index.html-CsrqLo4K.js","assets/index.html-D6_187T3.js","assets/create.html-DTtN2S-o.js","assets/upgrade-from-0.html-Dyi1OPIG.js","assets/index.html-CrhbZRDu.js","assets/allowList-mgm.html-BtC1Sjv9.js","assets/install-plugins.html-BKaaUPRu.js","assets/install.html-DPutC4Ur.js","assets/upgrade-from-0.html-CPvp7H4y.js","assets/upgrade-from-1.html-Bn629slA.js","assets/code.html-D_-BLqzB.js","assets/documentation.html-DQT8Cd3U.js","assets/index.html-V7hpoftb.js","assets/index.html-CsDDghLt.js","assets/create.html-BKJiEx7Q.js","assets/upgrade-from-0.html-3oJ76TSs.js","assets/index.html-6QqXTGgD.js","assets/allowList-mgm.html-D3owzJ3j.js","assets/install-plugins.html-B1EGf8eh.js","assets/install.html-BKqC2SR0.js","assets/upgrade-from-0.html-y0bCUoag.js","assets/upgrade-from-1.html-Bedy_Kcy.js","assets/code.html-D79wY7A-.js","assets/documentation.html-D45C1fbl.js","assets/index.html-CBRQ-c2y.js","assets/index.html-BCPmXfDv.js","assets/create.html-DM1ZPu4j.js","assets/upgrade-from-0.html-BAE2R3EL.js","assets/index.html-DjU5vY4A.js","assets/allowList-mgm.html-CYJul8nr.js","assets/install-plugins.html-D05-EGzR.js","assets/install.html-CJf5u1D5.js","assets/upgrade-from-0.html-COvMZ4yo.js","assets/upgrade-from-1.html-BybCxOQT.js","assets/index.html-Cgi8v7QL.js","assets/access-control.html-hritXxa7.js","assets/configuration.html-CNdymila.js","assets/oidc.html-DVMEndoa.js","assets/index.html-45LbeiHE.js","assets/configuration.html-DBRn85K3.js","assets/index.html-59Lw0KGh.js","assets/access-control.html-B_zcP1LF.js","assets/configuration.html-JO85txHz.js","assets/oidc.html-BYqZILbt.js","assets/index.html-B7cuodVw.js","assets/configuration.html-CtDCRuS7.js","assets/index.html-3a35NisQ.js","assets/bpe.html-B_WYZYIU.js","assets/common.html-BjAsQZeB.js","assets/fhir.html-CTifciWc.js","assets/reverseproxy.html-BBN9Od3-.js","assets/index.html-COO8K8yZ.js","assets/configuration.html-DhKNa3Mm.js","assets/index.html-CwMc33-B.js","assets/access-control.html-TnCObO8b.js","assets/configuration.html-BdZ0J6H6.js","assets/oidc.html-DdP4mKTW.js","assets/index.html-BGgrJkzc.js","assets/configuration.html-C9PtkIpc.js","assets/index.html-DzF4QZJU.js","assets/configuration.html-D3nBgzQc.js","assets/index.html-DxxlE-F7.js","assets/access-control.html-D-piCDJX.js","assets/configuration.html-DLYIRIRZ.js","assets/oidc.html-CZf70zLH.js","assets/index.html-KCeNgCsq.js","assets/configuration.html-AER2SVO7.js","assets/index.html-COrpehOa.js","assets/configuration.html-6D1Lu82s.js","assets/index.html-BsAx9IPS.js","assets/access-control.html-CM5qpa53.js","assets/configuration.html-BCx-1jdB.js","assets/oidc.html-7KqJffk_.js","assets/index.html-BUoh0Qls.js","assets/configuration.html-BeW8pTce.js","assets/index.html-DAA5Q191.js","assets/configuration.html-BLaLcEWM.js","assets/index.html-CQqVJHUS.js","assets/access-control.html-B8WDW2yd.js","assets/configuration.html-DRsDJDIQ.js","assets/oidc.html-DPFGyyJT.js","assets/index.html-BuS8pc67.js","assets/configuration.html-DuKh6Fgm.js","assets/index.html-PHxnGzin.js","assets/configuration.html-DWRgeTav.js","assets/index.html-DiajQsgt.js","assets/access-control.html-Ci80SYtc.js","assets/configuration.html-CuSzWF3M.js","assets/oidc.html-DDgGRVZ0.js","assets/index.html-D0XaREn8.js","assets/configuration.html-JHRlAgB7.js","assets/index.html-Beuqigim.js","assets/configuration.html-BW2fNxdU.js","assets/index.html-0F9WiFvk.js","assets/access-control.html-Dzq0BBpF.js","assets/configuration.html-CRtcdzwb.js","assets/oidc.html-CXM5MBWF.js","assets/index.html-DgILuDyN.js","assets/configuration.html-B9hAN6Qn.js","assets/index.html-DNh52AH1.js","assets/access-control.html-DMJizDq8.js","assets/configuration.html-BV76pvkE.js","assets/oidc.html-DxM6kWsg.js","assets/index.html-NndMGsGt.js","assets/configuration.html-Djb_ityZ.js","assets/index.html-HEmADpRs.js","assets/access-control.html-DyFJhXMW.js","assets/configuration.html-1YBSJGs3.js","assets/oidc.html-BCFFNQSE.js","assets/index.html-BTL8SJ98.js","assets/configuration.html-Ckb_V_64.js","assets/index.html-Bv1aj902.js","assets/access-control.html-CpcmB-vr.js","assets/configuration.html-D3kNqaHh.js","assets/oidc.html-CpxbdObG.js","assets/index.html-CJo6ER2h.js","assets/configuration.html-DTrhBlyo.js","assets/index.html-Oq1aOvOs.js","assets/access-control.html-CG007Yhx.js","assets/configuration.html-B6IQGRyt.js","assets/oidc.html-BW3uDMyZ.js","assets/index.html-CP8c3pUz.js","assets/configuration.html-DkcRMl9h.js","assets/index.html-DPXv6obM.js","assets/access-control.html-DMHcMgwJ.js","assets/configuration.html-SiknXzZc.js","assets/oidc.html-DEex2PUu.js","assets/index.html-FYN7o675.js","assets/configuration.html-CTyYG9BU.js","assets/index.html-Djr1tYSO.js","assets/access-control.html-WWQBmNVa.js","assets/configuration.html-BwxW1XeX.js","assets/oidc.html-9DP6k1sI.js","assets/index.html-BN2y9VB2.js","assets/configuration.html-BXSsgalC.js","assets/404.html-CMAq4TQ3.js","assets/index.html-C0hIsdj5.js"] + } + return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) +} +/** +* @vue/shared v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Ur(e,t){const n=new Set(e.split(","));return t?o=>n.has(o.toLowerCase()):o=>n.has(o)}const ve={},cn=[],Ye=()=>{},Dc=()=>!1,Qn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Kr=e=>e.startsWith("onUpdate:"),xe=Object.assign,qr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},kc=Object.prototype.hasOwnProperty,se=(e,t)=>kc.call(e,t),te=Array.isArray,kn=e=>$o(e)==="[object Map]",Oc=e=>$o(e)==="[object Set]",ne=e=>typeof e=="function",Re=e=>typeof e=="string",No=e=>typeof e=="symbol",ge=e=>e!==null&&typeof e=="object",Yl=e=>(ge(e)||ne(e))&&ne(e.then)&&ne(e.catch),Sc=Object.prototype.toString,$o=e=>Sc.call(e),Vc=e=>$o(e).slice(8,-1),Mc=e=>$o(e)==="[object Object]",Zr=e=>Re(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,un=Ur(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Bo=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Fc=/-(\w)/g,Qe=Bo(e=>e.replace(Fc,(t,n)=>n?n.toUpperCase():"")),Hc=/\B([A-Z])/g,En=Bo(e=>e.replace(Hc,"-$1").toLowerCase()),eo=Bo(e=>e.charAt(0).toUpperCase()+e.slice(1)),or=Bo(e=>e?`on${eo(e)}`:""),St=(e,t)=>!Object.is(e,t),rr=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Nc=e=>{const t=parseFloat(e);return isNaN(t)?e:t},$c=e=>{const t=Re(e)?Number(e):NaN;return isNaN(t)?e:t};let ki;const Xl=()=>ki||(ki=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Yr(e){if(te(e)){const t={};for(let n=0;n{if(n){const o=n.split(jc);o.length>1&&(t[o[0].trim()]=o[1].trim())}}),t}function Xr(e){let t="";if(Re(e))t=e;else if(te(e))for(let n=0;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),Yt()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=kt,n=Gt;try{return kt=!0,Gt=this,this._runnings++,Oi(this),this.fn()}finally{Si(this),this._runnings--,Gt=n,kt=t}}stop(){var t;this.active&&(Oi(this),Si(this),(t=this.onStop)==null||t.call(this),this.active=!1)}}function Yc(e){return e.value}function Oi(e){e._trackId++,e._depsLength=0}function Si(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},Ro=new WeakMap,Ut=Symbol(""),Ir=Symbol("");function je(e,t,n){if(kt&&Gt){let o=Ro.get(e);o||Ro.set(e,o=new Map);let r=o.get(n);r||o.set(n,r=ra(()=>o.delete(n))),na(Gt,r)}}function bt(e,t,n,o,r,i){const l=Ro.get(e);if(!l)return;let a=[];if(t==="clear")a=[...l.values()];else if(n==="length"&&te(e)){const s=Number(o);l.forEach((u,d)=>{(d==="length"||!No(d)&&d>=s)&&a.push(u)})}else switch(n!==void 0&&a.push(l.get(n)),t){case"add":te(e)?Zr(n)&&a.push(l.get("length")):(a.push(l.get(Ut)),kn(e)&&a.push(l.get(Ir)));break;case"delete":te(e)||(a.push(l.get(Ut)),kn(e)&&a.push(l.get(Ir)));break;case"set":kn(e)&&a.push(l.get(Ut));break}Qr();for(const s of a)s&&oa(s,4);ei()}function Xc(e,t){var n;return(n=Ro.get(e))==null?void 0:n.get(t)}const Jc=Ur("__proto__,__v_isRef,__isVue"),ia=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(No)),Vi=Qc();function Qc(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const o=ie(this);for(let i=0,l=this.length;i{e[t]=function(...n){Zt(),Qr();const o=ie(this)[t].apply(this,n);return ei(),Yt(),o}}),e}function eu(e){const t=ie(this);return je(t,"has",e),t.hasOwnProperty(e)}class la{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,o){const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return o===(r?i?pu:ua:i?ca:sa).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(o)?t:void 0;const l=te(t);if(!r){if(l&&se(Vi,n))return Reflect.get(Vi,n,o);if(n==="hasOwnProperty")return eu}const a=Reflect.get(t,n,o);return(No(n)?ia.has(n):Jc(n))||(r||je(t,"get",n),i)?a:De(a)?l&&Zr(n)?a:a.value:ge(a)?r?yn(a):to(a):a}}class aa extends la{constructor(t=!1){super(!1,t)}set(t,n,o,r){let i=t[n];if(!this._isShallow){const s=mn(i);if(!Do(o)&&!mn(o)&&(i=ie(i),o=ie(o)),!te(t)&&De(i)&&!De(o))return s?!1:(i.value=o,!0)}const l=te(t)&&Zr(n)?Number(n)e,jo=e=>Reflect.getPrototypeOf(e);function fo(e,t,n=!1,o=!1){e=e.__v_raw;const r=ie(e),i=ie(t);n||(St(t,i)&&je(r,"get",t),je(r,"get",i));const{has:l}=jo(r),a=o?ti:n?ri:Bn;if(l.call(r,t))return a(e.get(t));if(l.call(r,i))return a(e.get(i));e!==r&&e.get(t)}function po(e,t=!1){const n=this.__v_raw,o=ie(n),r=ie(e);return t||(St(e,r)&&je(o,"has",e),je(o,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function mo(e,t=!1){return e=e.__v_raw,!t&&je(ie(e),"iterate",Ut),Reflect.get(e,"size",e)}function Mi(e){e=ie(e);const t=ie(this);return jo(t).has.call(t,e)||(t.add(e),bt(t,"add",e,e)),this}function Fi(e,t){t=ie(t);const n=ie(this),{has:o,get:r}=jo(n);let i=o.call(n,e);i||(e=ie(e),i=o.call(n,e));const l=r.call(n,e);return n.set(e,t),i?St(t,l)&&bt(n,"set",e,t):bt(n,"add",e,t),this}function Hi(e){const t=ie(this),{has:n,get:o}=jo(t);let r=n.call(t,e);r||(e=ie(e),r=n.call(t,e)),o&&o.call(t,e);const i=t.delete(e);return r&&bt(t,"delete",e,void 0),i}function Ni(){const e=ie(this),t=e.size!==0,n=e.clear();return t&&bt(e,"clear",void 0,void 0),n}function ho(e,t){return function(o,r){const i=this,l=i.__v_raw,a=ie(l),s=t?ti:e?ri:Bn;return!e&&je(a,"iterate",Ut),l.forEach((u,d)=>o.call(r,s(u),s(d),i))}}function vo(e,t,n){return function(...o){const r=this.__v_raw,i=ie(r),l=kn(i),a=e==="entries"||e===Symbol.iterator&&l,s=e==="keys"&&l,u=r[e](...o),d=n?ti:t?ri:Bn;return!t&&je(i,"iterate",s?Ir:Ut),{next(){const{value:f,done:p}=u.next();return p?{value:f,done:p}:{value:a?[d(f[0]),d(f[1])]:d(f),done:p}},[Symbol.iterator](){return this}}}}function xt(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function iu(){const e={get(i){return fo(this,i)},get size(){return mo(this)},has:po,add:Mi,set:Fi,delete:Hi,clear:Ni,forEach:ho(!1,!1)},t={get(i){return fo(this,i,!1,!0)},get size(){return mo(this)},has:po,add:Mi,set:Fi,delete:Hi,clear:Ni,forEach:ho(!1,!0)},n={get(i){return fo(this,i,!0)},get size(){return mo(this,!0)},has(i){return po.call(this,i,!0)},add:xt("add"),set:xt("set"),delete:xt("delete"),clear:xt("clear"),forEach:ho(!0,!1)},o={get(i){return fo(this,i,!0,!0)},get size(){return mo(this,!0)},has(i){return po.call(this,i,!0)},add:xt("add"),set:xt("set"),delete:xt("delete"),clear:xt("clear"),forEach:ho(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=vo(i,!1,!1),n[i]=vo(i,!0,!1),t[i]=vo(i,!1,!0),o[i]=vo(i,!0,!0)}),[e,n,t,o]}const[lu,au,su,cu]=iu();function ni(e,t){const n=t?e?cu:su:e?au:lu;return(o,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?o:Reflect.get(se(n,r)&&r in o?n:o,r,i)}const uu={get:ni(!1,!1)},du={get:ni(!1,!0)},fu={get:ni(!0,!1)},sa=new WeakMap,ca=new WeakMap,ua=new WeakMap,pu=new WeakMap;function mu(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function hu(e){return e.__v_skip||!Object.isExtensible(e)?0:mu(Vc(e))}function to(e){return mn(e)?e:oi(e,!1,nu,uu,sa)}function da(e){return oi(e,!1,ru,du,ca)}function yn(e){return oi(e,!0,ou,fu,ua)}function oi(e,t,n,o,r){if(!ge(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const l=hu(e);if(l===0)return e;const a=new Proxy(e,l===2?o:n);return r.set(e,a),a}function dn(e){return mn(e)?dn(e.__v_raw):!!(e&&e.__v_isReactive)}function mn(e){return!!(e&&e.__v_isReadonly)}function Do(e){return!!(e&&e.__v_isShallow)}function fa(e){return dn(e)||mn(e)}function ie(e){const t=e&&e.__v_raw;return t?ie(t):e}function pa(e){return Object.isExtensible(e)&&wo(e,"__v_skip",!0),e}const Bn=e=>ge(e)?to(e):e,ri=e=>ge(e)?yn(e):e;class ma{constructor(t,n,o,r){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new Jr(()=>t(this._value),()=>On(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=o}get value(){const t=ie(this);return(!t._cacheable||t.effect.dirty)&&St(t._value,t._value=t.effect.run())&&On(t,4),ii(t),t.effect._dirtyLevel>=2&&On(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function vu(e,t,n=!1){let o,r;const i=ne(e);return i?(o=e,r=Ye):(o=e.get,r=e.set),new ma(o,r,i||!r,n)}function ii(e){var t;kt&&Gt&&(e=ie(e),na(Gt,(t=e.dep)!=null?t:e.dep=ra(()=>e.dep=void 0,e instanceof ma?e:void 0)))}function On(e,t=4,n){e=ie(e);const o=e.dep;o&&oa(o,t)}function De(e){return!!(e&&e.__v_isRef===!0)}function J(e){return ha(e,!1)}function Se(e){return ha(e,!0)}function ha(e,t){return De(e)?e:new gu(e,t)}class gu{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:ie(t),this._value=n?t:Bn(t)}get value(){return ii(this),this._value}set value(t){const n=this.__v_isShallow||Do(t)||mn(t);t=n?t:ie(t),St(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:Bn(t),On(this,4))}}function Kt(e){return De(e)?e.value:e}const _u={get:(e,t,n)=>Kt(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return De(r)&&!De(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function va(e){return dn(e)?e:new Proxy(e,_u)}class bu{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:o}=t(()=>ii(this),()=>On(this));this._get=n,this._set=o}get value(){return this._get()}set value(t){this._set(t)}}function li(e){return new bu(e)}class Eu{constructor(t,n,o){this._object=t,this._key=n,this._defaultValue=o,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Xc(ie(this._object),this._key)}}class yu{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function zo(e,t,n){return De(e)?e:ne(e)?new yu(e):ge(e)&&arguments.length>1?Pu(e,t,n):J(e)}function Pu(e,t,n){const o=e[t];return De(o)?o:new Eu(e,t,n)}/** +* @vue/runtime-core v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Ot(e,t,n,o){try{return o?e(...o):e()}catch(r){no(r,t,n)}}function Je(e,t,n,o){if(ne(e)){const i=Ot(e,t,n,o);return i&&Yl(i)&&i.catch(l=>{no(l,t,n)}),i}const r=[];for(let i=0;i>>1,r=Oe[o],i=zn(r);iut&&Oe.splice(t,1)}function Iu(e){te(e)?fn.push(...e):(!At||!At.includes(e,e.allowRecurse?jt+1:jt))&&fn.push(e),_a()}function $i(e,t,n=jn?ut+1:0){for(;nzn(n)-zn(o));if(fn.length=0,At){At.push(...t);return}for(At=t,jt=0;jte.id==null?1/0:e.id,Au=(e,t)=>{const n=zn(e)-zn(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function ba(e){Ar=!1,jn=!0,Oe.sort(Au);try{for(ut=0;utRe(v)?v.trim():v)),f&&(r=n.map(Nc))}let a,s=o[a=or(t)]||o[a=or(Qe(t))];!s&&i&&(s=o[a=or(En(t))]),s&&Je(s,e,6,r);const u=o[a+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[a])return;e.emitted[a]=!0,Je(u,e,6,r)}}function Ea(e,t,n=!1){const o=t.emitsCache,r=o.get(e);if(r!==void 0)return r;const i=e.emits;let l={},a=!1;if(!ne(e)){const s=u=>{const d=Ea(u,t,!0);d&&(a=!0,xe(l,d))};!n&&t.mixins.length&&t.mixins.forEach(s),e.extends&&s(e.extends),e.mixins&&e.mixins.forEach(s)}return!i&&!a?(ge(e)&&o.set(e,null),null):(te(i)?i.forEach(s=>l[s]=null):xe(l,i),ge(e)&&o.set(e,l),l)}function Go(e,t){return!e||!Qn(t)?!1:(t=t.slice(2).replace(/Once$/,""),se(e,t[0].toLowerCase()+t.slice(1))||se(e,En(t))||se(e,t))}let Xe=null,ya=null;function Oo(e){const t=Xe;return Xe=e,ya=e&&e.type.__scopeId||null,t}function wu(e,t=Xe,n){if(!t||e._n)return e;const o=(...r)=>{o._d&&Ji(-1);const i=Oo(t);let l;try{l=e(...r)}finally{Oo(i),o._d&&Ji(1)}return l};return o._n=!0,o._c=!0,o._d=!0,o}function ir(e){const{type:t,vnode:n,proxy:o,withProxy:r,props:i,propsOptions:[l],slots:a,attrs:s,emit:u,render:d,renderCache:f,data:p,setupState:v,ctx:_,inheritAttrs:x}=e;let E,b;const L=Oo(e);try{if(n.shapeFlag&4){const A=r||o,F=A;E=nt(d.call(F,A,f,i,v,p,_)),b=s}else{const A=t;E=nt(A.length>1?A(i,{attrs:s,slots:a,emit:u}):A(i,null)),b=t.props?s:Ru(s)}}catch(A){Hn.length=0,no(A,e,1),E=Le(ft)}let y=E;if(b&&x!==!1){const A=Object.keys(b),{shapeFlag:F}=y;A.length&&F&7&&(l&&A.some(Kr)&&(b=Du(b,l)),y=Vt(y,b))}return n.dirs&&(y=Vt(y),y.dirs=y.dirs?y.dirs.concat(n.dirs):n.dirs),n.transition&&(y.transition=n.transition),E=y,Oo(L),E}const Ru=e=>{let t;for(const n in e)(n==="class"||n==="style"||Qn(n))&&((t||(t={}))[n]=e[n]);return t},Du=(e,t)=>{const n={};for(const o in e)(!Kr(o)||!(o.slice(9)in t))&&(n[o]=e[o]);return n};function ku(e,t,n){const{props:o,children:r,component:i}=e,{props:l,children:a,patchFlag:s}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&s>=0){if(s&1024)return!0;if(s&16)return o?Bi(o,l,u):!!l;if(s&8){const d=t.dynamicProps;for(let f=0;fe.__isSuspense;function xa(e,t){t&&t.pendingBranch?te(e)?t.effects.push(...e):t.effects.push(e):Iu(e)}const Fu=Symbol.for("v-scx"),Hu=()=>Te(Fu);function La(e,t){return si(e,null,t)}const go={};function le(e,t,n){return si(e,t,n)}function si(e,t,{immediate:n,deep:o,flush:r,once:i,onTrack:l,onTrigger:a}=ve){if(t&&i){const T=t;t=(...z)=>{T(...z),F()}}const s=Ce,u=T=>o===!0?T:an(T,o===!1?1:void 0);let d,f=!1,p=!1;if(De(e)?(d=()=>e.value,f=Do(e)):dn(e)?(d=()=>u(e),f=!0):te(e)?(p=!0,f=e.some(T=>dn(T)||Do(T)),d=()=>e.map(T=>{if(De(T))return T.value;if(dn(T))return u(T);if(ne(T))return Ot(T,s,2)})):ne(e)?t?d=()=>Ot(e,s,2):d=()=>(v&&v(),Je(e,s,3,[_])):d=Ye,t&&o){const T=d;d=()=>an(T())}let v,_=T=>{v=y.onStop=()=>{Ot(T,s,4),v=y.onStop=void 0}},x;if(io)if(_=Ye,t?n&&Je(t,s,3,[d(),p?[]:void 0,_]):d(),r==="sync"){const T=Hu();x=T.__watcherHandles||(T.__watcherHandles=[])}else return Ye;let E=p?new Array(e.length).fill(go):go;const b=()=>{if(!(!y.active||!y.dirty))if(t){const T=y.run();(o||f||(p?T.some((z,H)=>St(z,E[H])):St(T,E)))&&(v&&v(),Je(t,s,3,[T,E===go?void 0:p&&E[0]===go?[]:E,_]),E=T)}else y.run()};b.allowRecurse=!!t;let L;r==="sync"?L=b:r==="post"?L=()=>He(b,s&&s.suspense):(b.pre=!0,s&&(b.id=s.uid),L=()=>Wo(b));const y=new Jr(d,Ye,L),A=Ql(),F=()=>{y.stop(),A&&qr(A.effects,y)};return t?n?b():E=y.run():r==="post"?He(y.run.bind(y),s&&s.suspense):y.run(),x&&x.push(F),F}function Nu(e,t,n){const o=this.proxy,r=Re(e)?e.includes(".")?Ta(o,e):()=>o[e]:e.bind(o,o);let i;ne(t)?i=t:(i=t.handler,n=t);const l=ro(this),a=si(r,i.bind(o),n);return l(),a}function Ta(e,t){const n=t.split(".");return()=>{let o=e;for(let r=0;r0){if(n>=t)return e;n++}if(o=o||new Set,o.has(e))return e;if(o.add(e),De(e))an(e.value,t,n,o);else if(te(e))for(let r=0;r{an(r,t,n,o)});else if(Mc(e))for(const r in e)an(e[r],t,n,o);return e}function ct(e,t,n,o){const r=e.dirs,i=t&&t.dirs;for(let l=0;l{e.isMounted=!0}),ka(()=>{e.isUnmounting=!0}),e}const qe=[Function,Array],Aa={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:qe,onEnter:qe,onAfterEnter:qe,onEnterCancelled:qe,onBeforeLeave:qe,onLeave:qe,onAfterLeave:qe,onLeaveCancelled:qe,onBeforeAppear:qe,onAppear:qe,onAfterAppear:qe,onAppearCancelled:qe},$u={name:"BaseTransition",props:Aa,setup(e,{slots:t}){const n=xn(),o=Ia();return()=>{const r=t.default&&ci(t.default(),!0);if(!r||!r.length)return;let i=r[0];if(r.length>1){for(const p of r)if(p.type!==ft){i=p;break}}const l=ie(e),{mode:a}=l;if(o.isLeaving)return lr(i);const s=zi(i);if(!s)return lr(i);const u=Wn(s,l,o,n);Gn(s,u);const d=n.subTree,f=d&&zi(d);if(f&&f.type!==ft&&!zt(s,f)){const p=Wn(f,l,o,n);if(Gn(f,p),a==="out-in")return o.isLeaving=!0,p.afterLeave=()=>{o.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},lr(i);a==="in-out"&&s.type!==ft&&(p.delayLeave=(v,_,x)=>{const E=Ca(o,f);E[String(f.key)]=f,v[Ct]=()=>{_(),v[Ct]=void 0,delete u.delayedLeave},u.delayedLeave=x})}return i}}},Bu=$u;function Ca(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function Wn(e,t,n,o){const{appear:r,mode:i,persisted:l=!1,onBeforeEnter:a,onEnter:s,onAfterEnter:u,onEnterCancelled:d,onBeforeLeave:f,onLeave:p,onAfterLeave:v,onLeaveCancelled:_,onBeforeAppear:x,onAppear:E,onAfterAppear:b,onAppearCancelled:L}=t,y=String(e.key),A=Ca(n,e),F=(H,Z)=>{H&&Je(H,o,9,Z)},T=(H,Z)=>{const k=Z[1];F(H,Z),te(H)?H.every(Y=>Y.length<=1)&&k():H.length<=1&&k()},z={mode:i,persisted:l,beforeEnter(H){let Z=a;if(!n.isMounted)if(r)Z=x||a;else return;H[Ct]&&H[Ct](!0);const k=A[y];k&&zt(e,k)&&k.el[Ct]&&k.el[Ct](),F(Z,[H])},enter(H){let Z=s,k=u,Y=d;if(!n.isMounted)if(r)Z=E||s,k=b||u,Y=L||d;else return;let V=!1;const Q=H[_o]=be=>{V||(V=!0,be?F(Y,[H]):F(k,[H]),z.delayedLeave&&z.delayedLeave(),H[_o]=void 0)};Z?T(Z,[H,Q]):Q()},leave(H,Z){const k=String(e.key);if(H[_o]&&H[_o](!0),n.isUnmounting)return Z();F(f,[H]);let Y=!1;const V=H[Ct]=Q=>{Y||(Y=!0,Z(),Q?F(_,[H]):F(v,[H]),H[Ct]=void 0,A[k]===e&&delete A[k])};A[k]=e,p?T(p,[H,V]):V()},clone(H){return Wn(H,t,n,o)}};return z}function lr(e){if(oo(e))return e=Vt(e),e.children=null,e}function zi(e){return oo(e)?e.children?e.children[0]:void 0:e}function Gn(e,t){e.shapeFlag&6&&e.component?Gn(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function ci(e,t=!1,n){let o=[],r=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function wa(e){ne(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:o,delay:r=200,timeout:i,suspensible:l=!0,onError:a}=e;let s=null,u,d=0;const f=()=>(d++,s=null,p()),p=()=>{let v;return s||(v=s=t().catch(_=>{if(_=_ instanceof Error?_:new Error(String(_)),a)return new Promise((x,E)=>{a(_,()=>x(f()),()=>E(_),d+1)});throw _}).then(_=>v!==s&&s?s:(_&&(_.__esModule||_[Symbol.toStringTag]==="Module")&&(_=_.default),u=_,_)))};return U({name:"AsyncComponentWrapper",__asyncLoader:p,get __asyncResolved(){return u},setup(){const v=Ce;if(u)return()=>ar(u,v);const _=L=>{s=null,no(L,v,13,!o)};if(l&&v.suspense||io)return p().then(L=>()=>ar(L,v)).catch(L=>(_(L),()=>o?Le(o,{error:L}):null));const x=J(!1),E=J(),b=J(!!r);return r&&setTimeout(()=>{b.value=!1},r),i!=null&&setTimeout(()=>{if(!x.value&&!E.value){const L=new Error(`Async component timed out after ${i}ms.`);_(L),E.value=L}},i),p().then(()=>{x.value=!0,v.parent&&oo(v.parent.vnode)&&(v.parent.effect.dirty=!0,Wo(v.parent.update))}).catch(L=>{_(L),E.value=L}),()=>{if(x.value&&u)return ar(u,v);if(E.value&&o)return Le(o,{error:E.value});if(n&&!b.value)return Le(n)}}})}function ar(e,t){const{ref:n,props:o,children:r,ce:i}=t.vnode,l=Le(e,o,r);return l.ref=n,l.ce=i,delete t.vnode.ce,l}const oo=e=>e.type.__isKeepAlive;function ju(e,t){Ra(e,"a",t)}function zu(e,t){Ra(e,"da",t)}function Ra(e,t,n=Ce){const o=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Uo(t,o,n),n){let r=n.parent;for(;r&&r.parent;)oo(r.parent.vnode)&&Wu(o,t,n,r),r=r.parent}}function Wu(e,t,n,o){const r=Uo(t,e,o,!0);Pn(()=>{qr(o[t],r)},n)}function Uo(e,t,n=Ce,o=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...l)=>{if(n.isUnmounted)return;Zt();const a=ro(n),s=Je(t,n,e,l);return a(),Yt(),s});return o?r.unshift(i):r.push(i),i}}const yt=e=>(t,n=Ce)=>(!io||e==="sp")&&Uo(e,(...o)=>t(...o),n),Gu=yt("bm"),_e=yt("m"),Uu=yt("bu"),Da=yt("u"),ka=yt("bum"),Pn=yt("um"),Ku=yt("sp"),qu=yt("rtg"),Zu=yt("rtc");function Yu(e,t=Ce){Uo("ec",e,t)}const Cr=e=>e?Ua(e)?pi(e)||e.proxy:Cr(e.parent):null,Vn=xe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Cr(e.parent),$root:e=>Cr(e.root),$emit:e=>e.emit,$options:e=>ui(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Wo(e.update)}),$nextTick:e=>e.n||(e.n=Xt.bind(e.proxy)),$watch:e=>Nu.bind(e)}),sr=(e,t)=>e!==ve&&!e.__isScriptSetup&&se(e,t),Xu={get({_:e},t){const{ctx:n,setupState:o,data:r,props:i,accessCache:l,type:a,appContext:s}=e;let u;if(t[0]!=="$"){const v=l[t];if(v!==void 0)switch(v){case 1:return o[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(sr(o,t))return l[t]=1,o[t];if(r!==ve&&se(r,t))return l[t]=2,r[t];if((u=e.propsOptions[0])&&se(u,t))return l[t]=3,i[t];if(n!==ve&&se(n,t))return l[t]=4,n[t];wr&&(l[t]=0)}}const d=Vn[t];let f,p;if(d)return t==="$attrs"&&je(e,"get",t),d(e);if((f=a.__cssModules)&&(f=f[t]))return f;if(n!==ve&&se(n,t))return l[t]=4,n[t];if(p=s.config.globalProperties,se(p,t))return p[t]},set({_:e},t,n){const{data:o,setupState:r,ctx:i}=e;return sr(r,t)?(r[t]=n,!0):o!==ve&&se(o,t)?(o[t]=n,!0):se(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:r,propsOptions:i}},l){let a;return!!n[l]||e!==ve&&se(e,l)||sr(t,l)||(a=i[0])&&se(a,l)||se(o,l)||se(Vn,l)||se(r.config.globalProperties,l)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:se(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Wi(e){return te(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let wr=!0;function Ju(e){const t=ui(e),n=e.proxy,o=e.ctx;wr=!1,t.beforeCreate&&Gi(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:l,watch:a,provide:s,inject:u,created:d,beforeMount:f,mounted:p,beforeUpdate:v,updated:_,activated:x,deactivated:E,beforeDestroy:b,beforeUnmount:L,destroyed:y,unmounted:A,render:F,renderTracked:T,renderTriggered:z,errorCaptured:H,serverPrefetch:Z,expose:k,inheritAttrs:Y,components:V,directives:Q,filters:be}=t;if(u&&Qu(u,o,null),l)for(const oe in l){const G=l[oe];ne(G)&&(o[oe]=G.bind(n))}if(r){const oe=r.call(n,n);ge(oe)&&(e.data=to(oe))}if(wr=!0,i)for(const oe in i){const G=i[oe],et=ne(G)?G.bind(n,n):ne(G.get)?G.get.bind(n,n):Ye,Pt=!ne(G)&&ne(G.set)?G.set.bind(n):Ye,at=I({get:et,set:Pt});Object.defineProperty(o,oe,{enumerable:!0,configurable:!0,get:()=>at.value,set:Fe=>at.value=Fe})}if(a)for(const oe in a)Oa(a[oe],o,n,oe);if(s){const oe=ne(s)?s.call(n):s;Reflect.ownKeys(oe).forEach(G=>{qt(G,oe[G])})}d&&Gi(d,e,"c");function K(oe,G){te(G)?G.forEach(et=>oe(et.bind(n))):G&&oe(G.bind(n))}if(K(Gu,f),K(_e,p),K(Uu,v),K(Da,_),K(ju,x),K(zu,E),K(Yu,H),K(Zu,T),K(qu,z),K(ka,L),K(Pn,A),K(Ku,Z),te(k))if(k.length){const oe=e.exposed||(e.exposed={});k.forEach(G=>{Object.defineProperty(oe,G,{get:()=>n[G],set:et=>n[G]=et})})}else e.exposed||(e.exposed={});F&&e.render===Ye&&(e.render=F),Y!=null&&(e.inheritAttrs=Y),V&&(e.components=V),Q&&(e.directives=Q)}function Qu(e,t,n=Ye){te(e)&&(e=Rr(e));for(const o in e){const r=e[o];let i;ge(r)?"default"in r?i=Te(r.from||o,r.default,!0):i=Te(r.from||o):i=Te(r),De(i)?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>i.value,set:l=>i.value=l}):t[o]=i}}function Gi(e,t,n){Je(te(e)?e.map(o=>o.bind(t.proxy)):e.bind(t.proxy),t,n)}function Oa(e,t,n,o){const r=o.includes(".")?Ta(n,o):()=>n[o];if(Re(e)){const i=t[e];ne(i)&&le(r,i)}else if(ne(e))le(r,e.bind(n));else if(ge(e))if(te(e))e.forEach(i=>Oa(i,t,n,o));else{const i=ne(e.handler)?e.handler.bind(n):t[e.handler];ne(i)&&le(r,i,e)}}function ui(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:l}}=e.appContext,a=i.get(t);let s;return a?s=a:!r.length&&!n&&!o?s=t:(s={},r.length&&r.forEach(u=>So(s,u,l,!0)),So(s,t,l)),ge(t)&&i.set(t,s),s}function So(e,t,n,o=!1){const{mixins:r,extends:i}=t;i&&So(e,i,n,!0),r&&r.forEach(l=>So(e,l,n,!0));for(const l in t)if(!(o&&l==="expose")){const a=ed[l]||n&&n[l];e[l]=a?a(e[l],t[l]):t[l]}return e}const ed={data:Ui,props:Ki,emits:Ki,methods:Rn,computed:Rn,beforeCreate:Ve,created:Ve,beforeMount:Ve,mounted:Ve,beforeUpdate:Ve,updated:Ve,beforeDestroy:Ve,beforeUnmount:Ve,destroyed:Ve,unmounted:Ve,activated:Ve,deactivated:Ve,errorCaptured:Ve,serverPrefetch:Ve,components:Rn,directives:Rn,watch:nd,provide:Ui,inject:td};function Ui(e,t){return t?e?function(){return xe(ne(e)?e.call(this,this):e,ne(t)?t.call(this,this):t)}:t:e}function td(e,t){return Rn(Rr(e),Rr(t))}function Rr(e){if(te(e)){const t={};for(let n=0;n1)return n&&ne(t)?t.call(o&&o.proxy):t}}function id(e,t,n,o=!1){const r={},i={};wo(i,Ko,1),e.propsDefaults=Object.create(null),Va(e,t,r,i);for(const l in e.propsOptions[0])l in r||(r[l]=void 0);n?e.props=o?r:da(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function ld(e,t,n,o){const{props:r,attrs:i,vnode:{patchFlag:l}}=e,a=ie(r),[s]=e.propsOptions;let u=!1;if((o||l>0)&&!(l&16)){if(l&8){const d=e.vnode.dynamicProps;for(let f=0;f{s=!0;const[p,v]=Ma(f,t,!0);xe(l,p),v&&a.push(...v)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!i&&!s)return ge(e)&&o.set(e,cn),cn;if(te(i))for(let d=0;d-1,v[1]=x<0||_-1||se(v,"default"))&&a.push(f)}}}const u=[l,a];return ge(e)&&o.set(e,u),u}function qi(e){return e[0]!=="$"&&!un(e)}function Zi(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function Yi(e,t){return Zi(e)===Zi(t)}function Xi(e,t){return te(t)?t.findIndex(n=>Yi(n,e)):ne(t)&&Yi(t,e)?0:-1}const Fa=e=>e[0]==="_"||e==="$stable",di=e=>te(e)?e.map(nt):[nt(e)],ad=(e,t,n)=>{if(t._n)return t;const o=wu((...r)=>di(t(...r)),n);return o._c=!1,o},Ha=(e,t,n)=>{const o=e._ctx;for(const r in e){if(Fa(r))continue;const i=e[r];if(ne(i))t[r]=ad(r,i,o);else if(i!=null){const l=di(i);t[r]=()=>l}}},Na=(e,t)=>{const n=di(t);e.slots.default=()=>n},sd=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=ie(t),wo(t,"_",n)):Ha(t,e.slots={})}else e.slots={},t&&Na(e,t);wo(e.slots,Ko,1)},cd=(e,t,n)=>{const{vnode:o,slots:r}=e;let i=!0,l=ve;if(o.shapeFlag&32){const a=t._;a?n&&a===1?i=!1:(xe(r,t),!n&&a===1&&delete r._):(i=!t.$stable,Ha(t,r)),l=t}else t&&(Na(e,t),l={default:1});if(i)for(const a in r)!Fa(a)&&l[a]==null&&delete r[a]};function Vo(e,t,n,o,r=!1){if(te(e)){e.forEach((p,v)=>Vo(p,t&&(te(t)?t[v]:t),n,o,r));return}if(Sn(o)&&!r)return;const i=o.shapeFlag&4?pi(o.component)||o.component.proxy:o.el,l=r?null:i,{i:a,r:s}=e,u=t&&t.r,d=a.refs===ve?a.refs={}:a.refs,f=a.setupState;if(u!=null&&u!==s&&(Re(u)?(d[u]=null,se(f,u)&&(f[u]=null)):De(u)&&(u.value=null)),ne(s))Ot(s,a,12,[l,d]);else{const p=Re(s),v=De(s);if(p||v){const _=()=>{if(e.f){const x=p?se(f,s)?f[s]:d[s]:s.value;r?te(x)&&qr(x,i):te(x)?x.includes(i)||x.push(i):p?(d[s]=[i],se(f,s)&&(f[s]=d[s])):(s.value=[i],e.k&&(d[e.k]=s.value))}else p?(d[s]=l,se(f,s)&&(f[s]=l)):v&&(s.value=l,e.k&&(d[e.k]=l))};l?(_.id=-1,He(_,n)):_()}}}let Lt=!1;const ud=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",dd=e=>e.namespaceURI.includes("MathML"),bo=e=>{if(ud(e))return"svg";if(dd(e))return"mathml"},Eo=e=>e.nodeType===8;function fd(e){const{mt:t,p:n,o:{patchProp:o,createText:r,nextSibling:i,parentNode:l,remove:a,insert:s,createComment:u}}=e,d=(y,A)=>{if(!A.hasChildNodes()){n(null,y,A),ko(),A._vnode=y;return}Lt=!1,f(A.firstChild,y,null,null,null),ko(),A._vnode=y,Lt&&console.error("Hydration completed but contains mismatches.")},f=(y,A,F,T,z,H=!1)=>{const Z=Eo(y)&&y.data==="[",k=()=>x(y,A,F,T,z,Z),{type:Y,ref:V,shapeFlag:Q,patchFlag:be}=A;let Ee=y.nodeType;A.el=y,be===-2&&(H=!1,A.dynamicChildren=null);let K=null;switch(Y){case hn:Ee!==3?A.children===""?(s(A.el=r(""),l(y),y),K=y):K=k():(y.data!==A.children&&(Lt=!0,y.data=A.children),K=i(y));break;case ft:L(y)?(K=i(y),b(A.el=y.content.firstChild,y,F)):Ee!==8||Z?K=k():K=i(y);break;case Fn:if(Z&&(y=i(y),Ee=y.nodeType),Ee===1||Ee===3){K=y;const oe=!A.children.length;for(let G=0;G{H=H||!!A.dynamicChildren;const{type:Z,props:k,patchFlag:Y,shapeFlag:V,dirs:Q,transition:be}=A,Ee=Z==="input"||Z==="option";if(Ee||Y!==-1){Q&&ct(A,null,F,"created");let K=!1;if(L(y)){K=$a(T,be)&&F&&F.vnode.props&&F.vnode.props.appear;const G=y.content.firstChild;K&&be.beforeEnter(G),b(G,y,F),A.el=y=G}if(V&16&&!(k&&(k.innerHTML||k.textContent))){let G=v(y.firstChild,A,y,F,T,z,H);for(;G;){Lt=!0;const et=G;G=G.nextSibling,a(et)}}else V&8&&y.textContent!==A.children&&(Lt=!0,y.textContent=A.children);if(k)if(Ee||!H||Y&48)for(const G in k)(Ee&&(G.endsWith("value")||G==="indeterminate")||Qn(G)&&!un(G)||G[0]===".")&&o(y,G,null,k[G],void 0,void 0,F);else k.onClick&&o(y,"onClick",null,k.onClick,void 0,void 0,F);let oe;(oe=k&&k.onVnodeBeforeMount)&&Ze(oe,F,A),Q&&ct(A,null,F,"beforeMount"),((oe=k&&k.onVnodeMounted)||Q||K)&&xa(()=>{oe&&Ze(oe,F,A),K&&be.enter(y),Q&&ct(A,null,F,"mounted")},T)}return y.nextSibling},v=(y,A,F,T,z,H,Z)=>{Z=Z||!!A.dynamicChildren;const k=A.children,Y=k.length;for(let V=0;V{const{slotScopeIds:Z}=A;Z&&(z=z?z.concat(Z):Z);const k=l(y),Y=v(i(y),A,k,F,T,z,H);return Y&&Eo(Y)&&Y.data==="]"?i(A.anchor=Y):(Lt=!0,s(A.anchor=u("]"),k,Y),Y)},x=(y,A,F,T,z,H)=>{if(Lt=!0,A.el=null,H){const Y=E(y);for(;;){const V=i(y);if(V&&V!==Y)a(V);else break}}const Z=i(y),k=l(y);return a(y),n(null,A,k,Z,F,T,bo(k),z),Z},E=(y,A="[",F="]")=>{let T=0;for(;y;)if(y=i(y),y&&Eo(y)&&(y.data===A&&T++,y.data===F)){if(T===0)return i(y);T--}return y},b=(y,A,F)=>{const T=A.parentNode;T&&T.replaceChild(y,A);let z=F;for(;z;)z.vnode.el===A&&(z.vnode.el=z.subTree.el=y),z=z.parent},L=y=>y.nodeType===1&&y.tagName.toLowerCase()==="template";return[d,f]}const He=xa;function pd(e){return md(e,fd)}function md(e,t){const n=Xl();n.__VUE__=!0;const{insert:o,remove:r,patchProp:i,createElement:l,createText:a,createComment:s,setText:u,setElementText:d,parentNode:f,nextSibling:p,setScopeId:v=Ye,insertStaticContent:_}=e,x=(h,g,P,R=null,C=null,S=null,$=void 0,O=null,M=!!g.dynamicChildren)=>{if(h===g)return;h&&!zt(h,g)&&(R=w(h),Fe(h,C,S,!0),h=null),g.patchFlag===-2&&(M=!1,g.dynamicChildren=null);const{type:D,ref:j,shapeFlag:X}=g;switch(D){case hn:E(h,g,P,R);break;case ft:b(h,g,P,R);break;case Fn:h==null&&L(g,P,R,$);break;case Ge:V(h,g,P,R,C,S,$,O,M);break;default:X&1?F(h,g,P,R,C,S,$,O,M):X&6?Q(h,g,P,R,C,S,$,O,M):(X&64||X&128)&&D.process(h,g,P,R,C,S,$,O,M,W)}j!=null&&C&&Vo(j,h&&h.ref,S,g||h,!g)},E=(h,g,P,R)=>{if(h==null)o(g.el=a(g.children),P,R);else{const C=g.el=h.el;g.children!==h.children&&u(C,g.children)}},b=(h,g,P,R)=>{h==null?o(g.el=s(g.children||""),P,R):g.el=h.el},L=(h,g,P,R)=>{[h.el,h.anchor]=_(h.children,g,P,R,h.el,h.anchor)},y=({el:h,anchor:g},P,R)=>{let C;for(;h&&h!==g;)C=p(h),o(h,P,R),h=C;o(g,P,R)},A=({el:h,anchor:g})=>{let P;for(;h&&h!==g;)P=p(h),r(h),h=P;r(g)},F=(h,g,P,R,C,S,$,O,M)=>{g.type==="svg"?$="svg":g.type==="math"&&($="mathml"),h==null?T(g,P,R,C,S,$,O,M):Z(h,g,C,S,$,O,M)},T=(h,g,P,R,C,S,$,O)=>{let M,D;const{props:j,shapeFlag:X,transition:q,dirs:ee}=h;if(M=h.el=l(h.type,S,j&&j.is,j),X&8?d(M,h.children):X&16&&H(h.children,M,null,R,C,cr(h,S),$,O),ee&&ct(h,null,R,"created"),z(M,h,h.scopeId,$,R),j){for(const de in j)de!=="value"&&!un(de)&&i(M,de,null,j[de],S,h.children,R,C,ke);"value"in j&&i(M,"value",null,j.value,S),(D=j.onVnodeBeforeMount)&&Ze(D,R,h)}ee&&ct(h,null,R,"beforeMount");const re=$a(C,q);re&&q.beforeEnter(M),o(M,g,P),((D=j&&j.onVnodeMounted)||re||ee)&&He(()=>{D&&Ze(D,R,h),re&&q.enter(M),ee&&ct(h,null,R,"mounted")},C)},z=(h,g,P,R,C)=>{if(P&&v(h,P),R)for(let S=0;S{for(let D=M;D{const O=g.el=h.el;let{patchFlag:M,dynamicChildren:D,dirs:j}=g;M|=h.patchFlag&16;const X=h.props||ve,q=g.props||ve;let ee;if(P&&Nt(P,!1),(ee=q.onVnodeBeforeUpdate)&&Ze(ee,P,g,h),j&&ct(g,h,P,"beforeUpdate"),P&&Nt(P,!0),D?k(h.dynamicChildren,D,O,P,R,cr(g,C),S):$||G(h,g,O,null,P,R,cr(g,C),S,!1),M>0){if(M&16)Y(O,g,X,q,P,R,C);else if(M&2&&X.class!==q.class&&i(O,"class",null,q.class,C),M&4&&i(O,"style",X.style,q.style,C),M&8){const re=g.dynamicProps;for(let de=0;de{ee&&Ze(ee,P,g,h),j&&ct(g,h,P,"updated")},R)},k=(h,g,P,R,C,S,$)=>{for(let O=0;O{if(P!==R){if(P!==ve)for(const O in P)!un(O)&&!(O in R)&&i(h,O,P[O],null,$,g.children,C,S,ke);for(const O in R){if(un(O))continue;const M=R[O],D=P[O];M!==D&&O!=="value"&&i(h,O,D,M,$,g.children,C,S,ke)}"value"in R&&i(h,"value",P.value,R.value,$)}},V=(h,g,P,R,C,S,$,O,M)=>{const D=g.el=h?h.el:a(""),j=g.anchor=h?h.anchor:a("");let{patchFlag:X,dynamicChildren:q,slotScopeIds:ee}=g;ee&&(O=O?O.concat(ee):ee),h==null?(o(D,P,R),o(j,P,R),H(g.children||[],P,j,C,S,$,O,M)):X>0&&X&64&&q&&h.dynamicChildren?(k(h.dynamicChildren,q,P,C,S,$,O),(g.key!=null||C&&g===C.subTree)&&Ba(h,g,!0)):G(h,g,P,j,C,S,$,O,M)},Q=(h,g,P,R,C,S,$,O,M)=>{g.slotScopeIds=O,h==null?g.shapeFlag&512?C.ctx.activate(g,P,R,$,M):be(g,P,R,C,S,$,M):Ee(h,g,M)},be=(h,g,P,R,C,S,$)=>{const O=h.component=Ld(h,R,C);if(oo(h)&&(O.ctx.renderer=W),Td(O),O.asyncDep){if(C&&C.registerDep(O,K),!h.el){const M=O.subTree=Le(ft);b(null,M,g,P)}}else K(O,h,g,P,C,S,$)},Ee=(h,g,P)=>{const R=g.component=h.component;if(ku(h,g,P))if(R.asyncDep&&!R.asyncResolved){oe(R,g,P);return}else R.next=g,Tu(R.update),R.effect.dirty=!0,R.update();else g.el=h.el,R.vnode=g},K=(h,g,P,R,C,S,$)=>{const O=()=>{if(h.isMounted){let{next:j,bu:X,u:q,parent:ee,vnode:re}=h;{const rn=ja(h);if(rn){j&&(j.el=re.el,oe(h,j,$)),rn.asyncDep.then(()=>{h.isUnmounted||O()});return}}let de=j,he;Nt(h,!1),j?(j.el=re.el,oe(h,j,$)):j=re,X&&rr(X),(he=j.props&&j.props.onVnodeBeforeUpdate)&&Ze(he,ee,j,re),Nt(h,!0);const Ae=ir(h),tt=h.subTree;h.subTree=Ae,x(tt,Ae,f(tt.el),w(tt),h,C,S),j.el=Ae.el,de===null&&Ou(h,Ae.el),q&&He(q,C),(he=j.props&&j.props.onVnodeUpdated)&&He(()=>Ze(he,ee,j,re),C)}else{let j;const{el:X,props:q}=g,{bm:ee,m:re,parent:de}=h,he=Sn(g);if(Nt(h,!1),ee&&rr(ee),!he&&(j=q&&q.onVnodeBeforeMount)&&Ze(j,de,g),Nt(h,!0),X&&me){const Ae=()=>{h.subTree=ir(h),me(X,h.subTree,h,C,null)};he?g.type.__asyncLoader().then(()=>!h.isUnmounted&&Ae()):Ae()}else{const Ae=h.subTree=ir(h);x(null,Ae,P,R,h,C,S),g.el=Ae.el}if(re&&He(re,C),!he&&(j=q&&q.onVnodeMounted)){const Ae=g;He(()=>Ze(j,de,Ae),C)}(g.shapeFlag&256||de&&Sn(de.vnode)&&de.vnode.shapeFlag&256)&&h.a&&He(h.a,C),h.isMounted=!0,g=P=R=null}},M=h.effect=new Jr(O,Ye,()=>Wo(D),h.scope),D=h.update=()=>{M.dirty&&M.run()};D.id=h.uid,Nt(h,!0),D()},oe=(h,g,P)=>{g.component=h;const R=h.vnode.props;h.vnode=g,h.next=null,ld(h,g.props,R,P),cd(h,g.children,P),Zt(),$i(h),Yt()},G=(h,g,P,R,C,S,$,O,M=!1)=>{const D=h&&h.children,j=h?h.shapeFlag:0,X=g.children,{patchFlag:q,shapeFlag:ee}=g;if(q>0){if(q&128){Pt(D,X,P,R,C,S,$,O,M);return}else if(q&256){et(D,X,P,R,C,S,$,O,M);return}}ee&8?(j&16&&ke(D,C,S),X!==D&&d(P,X)):j&16?ee&16?Pt(D,X,P,R,C,S,$,O,M):ke(D,C,S,!0):(j&8&&d(P,""),ee&16&&H(X,P,R,C,S,$,O,M))},et=(h,g,P,R,C,S,$,O,M)=>{h=h||cn,g=g||cn;const D=h.length,j=g.length,X=Math.min(D,j);let q;for(q=0;qj?ke(h,C,S,!0,!1,X):H(g,P,R,C,S,$,O,M,X)},Pt=(h,g,P,R,C,S,$,O,M)=>{let D=0;const j=g.length;let X=h.length-1,q=j-1;for(;D<=X&&D<=q;){const ee=h[D],re=g[D]=M?wt(g[D]):nt(g[D]);if(zt(ee,re))x(ee,re,P,null,C,S,$,O,M);else break;D++}for(;D<=X&&D<=q;){const ee=h[X],re=g[q]=M?wt(g[q]):nt(g[q]);if(zt(ee,re))x(ee,re,P,null,C,S,$,O,M);else break;X--,q--}if(D>X){if(D<=q){const ee=q+1,re=eeq)for(;D<=X;)Fe(h[D],C,S,!0),D++;else{const ee=D,re=D,de=new Map;for(D=re;D<=q;D++){const ze=g[D]=M?wt(g[D]):nt(g[D]);ze.key!=null&&de.set(ze.key,D)}let he,Ae=0;const tt=q-re+1;let rn=!1,wi=0;const In=new Array(tt);for(D=0;D=tt){Fe(ze,C,S,!0);continue}let st;if(ze.key!=null)st=de.get(ze.key);else for(he=re;he<=q;he++)if(In[he-re]===0&&zt(ze,g[he])){st=he;break}st===void 0?Fe(ze,C,S,!0):(In[st-re]=D+1,st>=wi?wi=st:rn=!0,x(ze,g[st],P,null,C,S,$,O,M),Ae++)}const Ri=rn?hd(In):cn;for(he=Ri.length-1,D=tt-1;D>=0;D--){const ze=re+D,st=g[ze],Di=ze+1{const{el:S,type:$,transition:O,children:M,shapeFlag:D}=h;if(D&6){at(h.component.subTree,g,P,R);return}if(D&128){h.suspense.move(g,P,R);return}if(D&64){$.move(h,g,P,W);return}if($===Ge){o(S,g,P);for(let X=0;XO.enter(S),C);else{const{leave:X,delayLeave:q,afterLeave:ee}=O,re=()=>o(S,g,P),de=()=>{X(S,()=>{re(),ee&&ee()})};q?q(S,re,de):de()}else o(S,g,P)},Fe=(h,g,P,R=!1,C=!1)=>{const{type:S,props:$,ref:O,children:M,dynamicChildren:D,shapeFlag:j,patchFlag:X,dirs:q}=h;if(O!=null&&Vo(O,null,P,h,!0),j&256){g.ctx.deactivate(h);return}const ee=j&1&&q,re=!Sn(h);let de;if(re&&(de=$&&$.onVnodeBeforeUnmount)&&Ze(de,g,h),j&6)uo(h.component,P,R);else{if(j&128){h.suspense.unmount(P,R);return}ee&&ct(h,null,g,"beforeUnmount"),j&64?h.type.remove(h,g,P,C,W,R):D&&(S!==Ge||X>0&&X&64)?ke(D,g,P,!1,!0):(S===Ge&&X&384||!C&&j&16)&&ke(M,g,P),R&&nn(h)}(re&&(de=$&&$.onVnodeUnmounted)||ee)&&He(()=>{de&&Ze(de,g,h),ee&&ct(h,null,g,"unmounted")},P)},nn=h=>{const{type:g,el:P,anchor:R,transition:C}=h;if(g===Ge){on(P,R);return}if(g===Fn){A(h);return}const S=()=>{r(P),C&&!C.persisted&&C.afterLeave&&C.afterLeave()};if(h.shapeFlag&1&&C&&!C.persisted){const{leave:$,delayLeave:O}=C,M=()=>$(P,S);O?O(h.el,S,M):M()}else S()},on=(h,g)=>{let P;for(;h!==g;)P=p(h),r(h),h=P;r(g)},uo=(h,g,P)=>{const{bum:R,scope:C,update:S,subTree:$,um:O}=h;R&&rr(R),C.stop(),S&&(S.active=!1,Fe($,h,g,P)),O&&He(O,g),He(()=>{h.isUnmounted=!0},g),g&&g.pendingBranch&&!g.isUnmounted&&h.asyncDep&&!h.asyncResolved&&h.suspenseId===g.pendingId&&(g.deps--,g.deps===0&&g.resolve())},ke=(h,g,P,R=!1,C=!1,S=0)=>{for(let $=S;$h.shapeFlag&6?w(h.component.subTree):h.shapeFlag&128?h.suspense.next():p(h.anchor||h.el);let B=!1;const N=(h,g,P)=>{h==null?g._vnode&&Fe(g._vnode,null,null,!0):x(g._vnode||null,h,g,null,null,null,P),B||(B=!0,$i(),ko(),B=!1),g._vnode=h},W={p:x,um:Fe,m:at,r:nn,mt:be,mc:H,pc:G,pbc:k,n:w,o:e};let ce,me;return t&&([ce,me]=t(W)),{render:N,hydrate:ce,createApp:rd(N,ce)}}function cr({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Nt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function $a(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ba(e,t,n=!1){const o=e.children,r=t.children;if(te(o)&&te(r))for(let i=0;i>1,e[n[a]]0&&(t[o]=n[i-1]),n[i]=o)}}for(i=n.length,l=n[i-1];i-- >0;)n[i]=l,l=t[l];return n}function ja(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:ja(t)}const vd=e=>e.__isTeleport,Ge=Symbol.for("v-fgt"),hn=Symbol.for("v-txt"),ft=Symbol.for("v-cmt"),Fn=Symbol.for("v-stc"),Hn=[];let ot=null;function vg(e=!1){Hn.push(ot=e?null:[])}function gd(){Hn.pop(),ot=Hn[Hn.length-1]||null}let Un=1;function Ji(e){Un+=e}function _d(e){return e.dynamicChildren=Un>0?ot||cn:null,gd(),Un>0&&ot&&ot.push(e),e}function gg(e,t,n,o,r,i){return _d(Wa(e,t,n,o,r,i,!0))}function kr(e){return e?e.__v_isVNode===!0:!1}function zt(e,t){return e.type===t.type&&e.key===t.key}const Ko="__vInternal",za=({key:e})=>e??null,Ao=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Re(e)||De(e)||ne(e)?{i:Xe,r:e,k:t,f:!!n}:e:null);function Wa(e,t=null,n=null,o=0,r=null,i=e===Ge?0:1,l=!1,a=!1){const s={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&za(t),ref:t&&Ao(t),scopeId:ya,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:o,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:Xe};return a?(fi(s,n),i&128&&e.normalize(s)):n&&(s.shapeFlag|=Re(n)?8:16),Un>0&&!l&&ot&&(s.patchFlag>0||i&6)&&s.patchFlag!==32&&ot.push(s),s}const Le=bd;function bd(e,t=null,n=null,o=0,r=null,i=!1){if((!e||e===Su)&&(e=ft),kr(e)){const a=Vt(e,t,!0);return n&&fi(a,n),Un>0&&!i&&ot&&(a.shapeFlag&6?ot[ot.indexOf(e)]=a:ot.push(a)),a.patchFlag|=-2,a}if(Rd(e)&&(e=e.__vccOpts),t){t=Ed(t);let{class:a,style:s}=t;a&&!Re(a)&&(t.class=Xr(a)),ge(s)&&(fa(s)&&!te(s)&&(s=xe({},s)),t.style=Yr(s))}const l=Re(e)?1:Mu(e)?128:vd(e)?64:ge(e)?4:ne(e)?2:0;return Wa(e,t,n,o,r,l,i,!0)}function Ed(e){return e?fa(e)||Ko in e?xe({},e):e:null}function Vt(e,t,n=!1){const{props:o,ref:r,patchFlag:i,children:l}=e,a=t?yd(o||{},t):o;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:a,key:a&&za(a),ref:t&&t.ref?n&&r?te(r)?r.concat(Ao(t)):[r,Ao(t)]:Ao(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ge?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Vt(e.ssContent),ssFallback:e.ssFallback&&Vt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Ga(e=" ",t=0){return Le(hn,null,e,t)}function _g(e,t){const n=Le(Fn,null,e);return n.staticCount=t,n}function nt(e){return e==null||typeof e=="boolean"?Le(ft):te(e)?Le(Ge,null,e.slice()):typeof e=="object"?wt(e):Le(hn,null,String(e))}function wt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Vt(e)}function fi(e,t){let n=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(te(t))n=16;else if(typeof t=="object")if(o&65){const r=t.default;r&&(r._c&&(r._d=!1),fi(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!(Ko in t)?t._ctx=Xe:r===3&&Xe&&(Xe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else ne(t)?(t={default:t,_ctx:Xe},n=32):(t=String(t),o&64?(n=16,t=[Ga(t)]):n=8);e.children=t,e.shapeFlag|=n}function yd(...e){const t={};for(let n=0;nCe||Xe;let Mo,Or;{const e=Xl(),t=(n,o)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(o),i=>{r.length>1?r.forEach(l=>l(i)):r[0](i)}};Mo=t("__VUE_INSTANCE_SETTERS__",n=>Ce=n),Or=t("__VUE_SSR_SETTERS__",n=>io=n)}const ro=e=>{const t=Ce;return Mo(e),e.scope.on(),()=>{e.scope.off(),Mo(t)}},Qi=()=>{Ce&&Ce.scope.off(),Mo(null)};function Ua(e){return e.vnode.shapeFlag&4}let io=!1;function Td(e,t=!1){t&&Or(t);const{props:n,children:o}=e.vnode,r=Ua(e);id(e,n,r,t),sd(e,o);const i=r?Id(e,t):void 0;return t&&Or(!1),i}function Id(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=pa(new Proxy(e.ctx,Xu));const{setup:o}=n;if(o){const r=e.setupContext=o.length>1?Cd(e):null,i=ro(e);Zt();const l=Ot(o,e,0,[e.props,r]);if(Yt(),i(),Yl(l)){if(l.then(Qi,Qi),t)return l.then(a=>{el(e,a,t)}).catch(a=>{no(a,e,0)});e.asyncDep=l}else el(e,l,t)}else Ka(e,t)}function el(e,t,n){ne(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ge(t)&&(e.setupState=va(t)),Ka(e,n)}let tl;function Ka(e,t,n){const o=e.type;if(!e.render){if(!t&&tl&&!o.render){const r=o.template||ui(e).template;if(r){const{isCustomElement:i,compilerOptions:l}=e.appContext.config,{delimiters:a,compilerOptions:s}=o,u=xe(xe({isCustomElement:i,delimiters:a},l),s);o.render=tl(r,u)}}e.render=o.render||Ye}{const r=ro(e);Zt();try{Ju(e)}finally{Yt(),r()}}}function Ad(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return je(e,"get","$attrs"),t[n]}}))}function Cd(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return Ad(e)},slots:e.slots,emit:e.emit,expose:t}}function pi(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(va(pa(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Vn)return Vn[n](e)},has(t,n){return n in t||n in Vn}}))}function wd(e,t=!0){return ne(e)?e.displayName||e.name:e.name||t&&e.__name}function Rd(e){return ne(e)&&"__vccOpts"in e}const I=(e,t)=>vu(e,t,io);function c(e,t,n){const o=arguments.length;return o===2?ge(t)&&!te(t)?kr(t)?Le(e,null,[t]):Le(e,t):Le(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):o===3&&kr(n)&&(n=[n]),Le(e,t,n))}const Dd="3.4.21";/** +* @vue/runtime-dom v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const kd="http://www.w3.org/2000/svg",Od="http://www.w3.org/1998/Math/MathML",Rt=typeof document<"u"?document:null,nl=Rt&&Rt.createElement("template"),Sd={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const r=t==="svg"?Rt.createElementNS(kd,e):t==="mathml"?Rt.createElementNS(Od,e):Rt.createElement(e,n?{is:n}:void 0);return e==="select"&&o&&o.multiple!=null&&r.setAttribute("multiple",o.multiple),r},createText:e=>Rt.createTextNode(e),createComment:e=>Rt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Rt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,o,r,i){const l=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{nl.innerHTML=o==="svg"?`${e}`:o==="mathml"?`${e}`:e;const a=nl.content;if(o==="svg"||o==="mathml"){const s=a.firstChild;for(;s.firstChild;)a.appendChild(s.firstChild);a.removeChild(s)}t.insertBefore(a,n)}return[l?l.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Tt="transition",An="animation",vn=Symbol("_vtc"),Mt=(e,{slots:t})=>c(Bu,Za(e),t);Mt.displayName="Transition";const qa={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Vd=Mt.props=xe({},Aa,qa),$t=(e,t=[])=>{te(e)?e.forEach(n=>n(...t)):e&&e(...t)},ol=e=>e?te(e)?e.some(t=>t.length>1):e.length>1:!1;function Za(e){const t={};for(const V in e)V in qa||(t[V]=e[V]);if(e.css===!1)return t;const{name:n="v",type:o,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:l=`${n}-enter-active`,enterToClass:a=`${n}-enter-to`,appearFromClass:s=i,appearActiveClass:u=l,appearToClass:d=a,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=e,_=Md(r),x=_&&_[0],E=_&&_[1],{onBeforeEnter:b,onEnter:L,onEnterCancelled:y,onLeave:A,onLeaveCancelled:F,onBeforeAppear:T=b,onAppear:z=L,onAppearCancelled:H=y}=t,Z=(V,Q,be)=>{It(V,Q?d:a),It(V,Q?u:l),be&&be()},k=(V,Q)=>{V._isLeaving=!1,It(V,f),It(V,v),It(V,p),Q&&Q()},Y=V=>(Q,be)=>{const Ee=V?z:L,K=()=>Z(Q,V,be);$t(Ee,[Q,K]),rl(()=>{It(Q,V?s:i),gt(Q,V?d:a),ol(Ee)||il(Q,o,x,K)})};return xe(t,{onBeforeEnter(V){$t(b,[V]),gt(V,i),gt(V,l)},onBeforeAppear(V){$t(T,[V]),gt(V,s),gt(V,u)},onEnter:Y(!1),onAppear:Y(!0),onLeave(V,Q){V._isLeaving=!0;const be=()=>k(V,Q);gt(V,f),Xa(),gt(V,p),rl(()=>{V._isLeaving&&(It(V,f),gt(V,v),ol(A)||il(V,o,E,be))}),$t(A,[V,be])},onEnterCancelled(V){Z(V,!1),$t(y,[V])},onAppearCancelled(V){Z(V,!0),$t(H,[V])},onLeaveCancelled(V){k(V),$t(F,[V])}})}function Md(e){if(e==null)return null;if(ge(e))return[ur(e.enter),ur(e.leave)];{const t=ur(e);return[t,t]}}function ur(e){return $c(e)}function gt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[vn]||(e[vn]=new Set)).add(t)}function It(e,t){t.split(/\s+/).forEach(o=>o&&e.classList.remove(o));const n=e[vn];n&&(n.delete(t),n.size||(e[vn]=void 0))}function rl(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Fd=0;function il(e,t,n,o){const r=e._endId=++Fd,i=()=>{r===e._endId&&o()};if(n)return setTimeout(i,n);const{type:l,timeout:a,propCount:s}=Ya(e,t);if(!l)return o();const u=l+"end";let d=0;const f=()=>{e.removeEventListener(u,p),i()},p=v=>{v.target===e&&++d>=s&&f()};setTimeout(()=>{d(n[_]||"").split(", "),r=o(`${Tt}Delay`),i=o(`${Tt}Duration`),l=ll(r,i),a=o(`${An}Delay`),s=o(`${An}Duration`),u=ll(a,s);let d=null,f=0,p=0;t===Tt?l>0&&(d=Tt,f=l,p=i.length):t===An?u>0&&(d=An,f=u,p=s.length):(f=Math.max(l,u),d=f>0?l>u?Tt:An:null,p=d?d===Tt?i.length:s.length:0);const v=d===Tt&&/\b(transform|all)(,|$)/.test(o(`${Tt}Property`).toString());return{type:d,timeout:f,propCount:p,hasTransform:v}}function ll(e,t){for(;e.lengthal(n)+al(e[o])))}function al(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Xa(){return document.body.offsetHeight}function Hd(e,t,n){const o=e[vn];o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const sl=Symbol("_vod"),Nd=Symbol("_vsh"),$d=Symbol(""),Bd=/(^|;)\s*display\s*:/;function jd(e,t,n){const o=e.style,r=Re(n);let i=!1;if(n&&!r){if(t)if(Re(t))for(const l of t.split(";")){const a=l.slice(0,l.indexOf(":")).trim();n[a]==null&&Co(o,a,"")}else for(const l in t)n[l]==null&&Co(o,l,"");for(const l in n)l==="display"&&(i=!0),Co(o,l,n[l])}else if(r){if(t!==n){const l=o[$d];l&&(n+=";"+l),o.cssText=n,i=Bd.test(n)}}else t&&e.removeAttribute("style");sl in e&&(e[sl]=i?o.display:"",e[Nd]&&(o.display="none"))}const cl=/\s*!important$/;function Co(e,t,n){if(te(n))n.forEach(o=>Co(e,t,o));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const o=zd(e,t);cl.test(n)?e.setProperty(En(o),n.replace(cl,""),"important"):e[o]=n}}const ul=["Webkit","Moz","ms"],dr={};function zd(e,t){const n=dr[t];if(n)return n;let o=Qe(t);if(o!=="filter"&&o in e)return dr[t]=o;o=eo(o);for(let r=0;rfr||(Yd.then(()=>fr=0),fr=Date.now());function Jd(e,t){const n=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=n.attached)return;Je(Qd(o,n.value),t,5,[o])};return n.value=e,n.attached=Xd(),n}function Qd(e,t){if(te(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(o=>r=>!r._stopped&&o&&o(r))}else return t}const ml=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,ef=(e,t,n,o,r,i,l,a,s)=>{const u=r==="svg";t==="class"?Hd(e,o,u):t==="style"?jd(e,n,o):Qn(t)?Kr(t)||qd(e,t,n,o,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):tf(e,t,o,u))?Gd(e,t,o,i,l,a,s):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),Wd(e,t,o,u))};function tf(e,t,n,o){if(o)return!!(t==="innerHTML"||t==="textContent"||t in e&&ml(t)&&ne(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return ml(t)&&Re(n)?!1:t in e}const Ja=new WeakMap,Qa=new WeakMap,Fo=Symbol("_moveCb"),hl=Symbol("_enterCb"),es={name:"TransitionGroup",props:xe({},Vd,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=xn(),o=Ia();let r,i;return Da(()=>{if(!r.length)return;const l=e.moveClass||`${e.name||"v"}-move`;if(!sf(r[0].el,n.vnode.el,l))return;r.forEach(rf),r.forEach(lf);const a=r.filter(af);Xa(),a.forEach(s=>{const u=s.el,d=u.style;gt(u,l),d.transform=d.webkitTransform=d.transitionDuration="";const f=u[Fo]=p=>{p&&p.target!==u||(!p||/transform$/.test(p.propertyName))&&(u.removeEventListener("transitionend",f),u[Fo]=null,It(u,l))};u.addEventListener("transitionend",f)})}),()=>{const l=ie(e),a=Za(l);let s=l.tag||Ge;r=i,i=t.default?ci(t.default()):[];for(let u=0;udelete e.mode;es.props;const of=es;function rf(e){const t=e.el;t[Fo]&&t[Fo](),t[hl]&&t[hl]()}function lf(e){Qa.set(e,e.el.getBoundingClientRect())}function af(e){const t=Ja.get(e),n=Qa.get(e),o=t.left-n.left,r=t.top-n.top;if(o||r){const i=e.el.style;return i.transform=i.webkitTransform=`translate(${o}px,${r}px)`,i.transitionDuration="0s",e}}function sf(e,t,n){const o=e.cloneNode(),r=e[vn];r&&r.forEach(a=>{a.split(/\s+/).forEach(s=>s&&o.classList.remove(s))}),n.split(/\s+/).forEach(a=>a&&o.classList.add(a)),o.style.display="none";const i=t.nodeType===1?t:t.parentNode;i.appendChild(o);const{hasTransform:l}=Ya(o);return i.removeChild(o),l}const cf=xe({patchProp:ef},Sd);let pr,vl=!1;function uf(){return pr=vl?pr:pd(cf),vl=!0,pr}const df=(...e)=>{const t=uf().createApp(...e),{mount:n}=t;return t.mount=o=>{const r=pf(o);if(r)return n(r,!0,ff(r))},t};function ff(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function pf(e){return Re(e)?document.querySelector(e):e}var mf=["link","meta","script","style","noscript","template"],hf=["title","base"],vf=([e,t,n])=>hf.includes(e)?e:mf.includes(e)?e==="meta"&&t.name?`${e}.${t.name}`:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,Object.entries(t).map(([o,r])=>typeof r=="boolean"?r?[o,""]:null:[o,r]).filter(o=>o!=null).sort(([o],[r])=>o.localeCompare(r)),n]):null,gf=e=>{const t=new Set,n=[];return e.forEach(o=>{const r=vf(o);r&&!t.has(r)&&(t.add(r),n.push(o))}),n},_f=e=>e[0]==="/"?e:`/${e}`,ts=e=>e[e.length-1]==="/"||e.endsWith(".html")?e:`${e}/`,Jt=e=>/^(https?:)?\/\//.test(e),bf=/.md((\?|#).*)?$/,Kn=(e,t="/")=>!!(Jt(e)||e.startsWith("/")&&!e.startsWith(t)&&!bf.test(e)),ns=e=>/^[a-z][a-z0-9+.-]*:/.test(e),qo=e=>Object.prototype.toString.call(e)==="[object Object]",Ef=e=>{const[t,...n]=e.split(/(\?|#)/);if(!t||t.endsWith("/"))return e;let o=t.replace(/(^|\/)README.md$/i,"$1index.html");return o.endsWith(".md")?o=o.substring(0,o.length-3)+".html":o.endsWith(".html")||(o=o+".html"),o.endsWith("/index.html")&&(o=o.substring(0,o.length-10)),o+n.join("")},mi=e=>e[e.length-1]==="/"?e.slice(0,-1):e,os=e=>e[0]==="/"?e.slice(1):e,yf=(e,t)=>{const n=Object.keys(e).sort((o,r)=>{const i=r.split("/").length-o.split("/").length;return i!==0?i:r.length-o.length});for(const o of n)if(t.startsWith(o))return o;return"/"},we=e=>typeof e=="string";const Pf="modulepreload",xf=function(e){return"/"+e},gl={},m=function(t,n,o){let r=Promise.resolve();if(n&&n.length>0){const i=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),a=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));r=Promise.all(n.map(s=>{if(s=xf(s),s in gl)return;gl[s]=!0;const u=s.endsWith(".css"),d=u?'[rel="stylesheet"]':"";if(!!o)for(let v=i.length-1;v>=0;v--){const _=i[v];if(_.href===s&&(!u||_.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${s}"]${d}`))return;const p=document.createElement("link");if(p.rel=u?"stylesheet":Pf,u||(p.as="script",p.crossOrigin=""),p.href=s,a&&p.setAttribute("nonce",a),document.head.appendChild(p),u)return new Promise((v,_)=>{p.addEventListener("load",v),p.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${s}`)))})}))}return r.then(()=>t()).catch(i=>{const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=i,window.dispatchEvent(l),!l.defaultPrevented)throw i})},Lf=JSON.parse("{}"),Tf=Object.fromEntries([["/",{loader:()=>m(()=>import("./index.html-BA9Y-W0Q.js"),__vite__mapDeps([0,1,2])),meta:{t:"Data Sharing Framework",i:"home"}}],["/about/",{loader:()=>m(()=>import("./index.html-Dsh9Qj5c.js"),__vite__mapDeps([3,2])),meta:{t:"About",i:"creative"}}],["/for-you/",{loader:()=>m(()=>import("./index.html--WxwSsgq.js"),__vite__mapDeps([4,2])),meta:{t:"DSF for your project",i:"creative"}}],["/for-you/learn.html",{loader:()=>m(()=>import("./learn.html-BCytgQB3.js"),__vite__mapDeps([5,2])),meta:{t:"How to implement your use-case",i:"creative"}}],["/hackathon/",{loader:()=>m(()=>import("./index.html-C6oGyzQN.js"),__vite__mapDeps([6,2])),meta:{t:"Hackathon",i:"guide"}}],["/intro/",{loader:()=>m(()=>import("./index.html-D4_ALXNF.js"),__vite__mapDeps([7,2])),meta:{t:"Documentation",i:"info"}}],["/intro/publications.html",{loader:()=>m(()=>import("./publications.html-CWGWwyve.js"),__vite__mapDeps([8,2])),meta:{t:"Publications and Talks",i:"blog"}}],["/oldstable/",{loader:()=>m(()=>import("./index.html-BM8BVXez.js"),__vite__mapDeps([9,2])),meta:{t:"Version 0.9.x",i:"guide"}}],["/oldstable/introduction.html",{loader:()=>m(()=>import("./introduction.html-B5k_PK4x.js"),__vite__mapDeps([10,2])),meta:{t:"Introduction",i:"info"}}],["/security/",{loader:()=>m(()=>import("./index.html-7wErRCxo.js"),__vite__mapDeps([11,2])),meta:{t:"Security",i:"safe"}}],["/sprechstunde/",{loader:()=>m(()=>import("./index.html-Czmcnse8.js"),__vite__mapDeps([12,2])),meta:{t:"Sprechstunde",i:"guide"}}],["/stable/dsf-for-dev.html",{loader:()=>m(()=>import("./dsf-for-dev.html-CM31T0vP.js"),__vite__mapDeps([13,2])),meta:{t:"DSF for Developers",i:"info"}}],["/stable/",{loader:()=>m(()=>import("./index.html-DszwQS_b.js"),__vite__mapDeps([14,2])),meta:{t:"DSF 1.5.2",i:"guide"}}],["/stable/process-plugins-advanced.html",{loader:()=>m(()=>import("./process-plugins-advanced.html-4Prol2h5.js"),__vite__mapDeps([15,2])),meta:{t:"Process Plugins Advanced",i:"info"}}],["/v1.0.0/dsf-for-dev.html",{loader:()=>m(()=>import("./dsf-for-dev.html-DtYXgtPv.js"),__vite__mapDeps([16,2])),meta:{t:"DSF for Developers",i:"info"}}],["/v1.0.0/",{loader:()=>m(()=>import("./index.html-DoJu9D4T.js"),__vite__mapDeps([17,2])),meta:{t:"DSF 1.0.0",i:"guide"}}],["/v1.0.0/process-plugins-advanced.html",{loader:()=>m(()=>import("./process-plugins-advanced.html-D0pCDuaN.js"),__vite__mapDeps([18,2])),meta:{t:"Process Plugins Advanced",i:"info"}}],["/v1.1.0/dsf-for-dev.html",{loader:()=>m(()=>import("./dsf-for-dev.html-BY2mYYLX.js"),__vite__mapDeps([19,2])),meta:{t:"DSF for Developers",i:"info"}}],["/v1.1.0/",{loader:()=>m(()=>import("./index.html-D0FWjIyg.js"),__vite__mapDeps([20,2])),meta:{t:"DSF 1.1.0",i:"guide"}}],["/v1.1.0/process-plugins-advanced.html",{loader:()=>m(()=>import("./process-plugins-advanced.html-W6uvf7xk.js"),__vite__mapDeps([21,2])),meta:{t:"Process Plugins Advanced",i:"info"}}],["/v1.2.0/dsf-for-dev.html",{loader:()=>m(()=>import("./dsf-for-dev.html-ztYNqQri.js"),__vite__mapDeps([22,2])),meta:{t:"DSF for Developers",i:"info"}}],["/v1.2.0/",{loader:()=>m(()=>import("./index.html-a6s0XPGA.js"),__vite__mapDeps([23,2])),meta:{t:"DSF 1.2.0",i:"guide"}}],["/v1.2.0/process-plugins-advanced.html",{loader:()=>m(()=>import("./process-plugins-advanced.html-BC3FU9gh.js"),__vite__mapDeps([24,2])),meta:{t:"Process Plugins Advanced",i:"info"}}],["/v1.3.0/dsf-for-dev.html",{loader:()=>m(()=>import("./dsf-for-dev.html-mtyY8dnA.js"),__vite__mapDeps([25,2])),meta:{t:"DSF for Developers",i:"info"}}],["/v1.3.0/",{loader:()=>m(()=>import("./index.html-D1odJbGw.js"),__vite__mapDeps([26,2])),meta:{t:"DSF 1.3.0",i:"guide"}}],["/v1.3.0/process-plugins-advanced.html",{loader:()=>m(()=>import("./process-plugins-advanced.html-BUm0RhL8.js"),__vite__mapDeps([27,2])),meta:{t:"Process Plugins Advanced",i:"info"}}],["/v1.3.1/dsf-for-dev.html",{loader:()=>m(()=>import("./dsf-for-dev.html-Cwbe2fMU.js"),__vite__mapDeps([28,2])),meta:{t:"DSF for Developers",i:"info"}}],["/v1.3.1/",{loader:()=>m(()=>import("./index.html-CEEtxclz.js"),__vite__mapDeps([29,2])),meta:{t:"DSF 1.3.1",i:"guide"}}],["/v1.3.1/process-plugins-advanced.html",{loader:()=>m(()=>import("./process-plugins-advanced.html-D6ZVnnoI.js"),__vite__mapDeps([30,2])),meta:{t:"Process Plugins Advanced",i:"info"}}],["/v1.3.2/dsf-for-dev.html",{loader:()=>m(()=>import("./dsf-for-dev.html-gVMw1jIa.js"),__vite__mapDeps([31,2])),meta:{t:"DSF for Developers",i:"info"}}],["/v1.3.2/",{loader:()=>m(()=>import("./index.html-4tMg7LJV.js"),__vite__mapDeps([32,2])),meta:{t:"DSF 1.3.2",i:"guide"}}],["/v1.3.2/process-plugins-advanced.html",{loader:()=>m(()=>import("./process-plugins-advanced.html-BfqgRQbf.js"),__vite__mapDeps([33,2])),meta:{t:"Process Plugins Advanced",i:"info"}}],["/v1.4.0/dsf-for-dev.html",{loader:()=>m(()=>import("./dsf-for-dev.html-DiPpVl74.js"),__vite__mapDeps([34,2])),meta:{t:"DSF for Developers",i:"info"}}],["/v1.4.0/",{loader:()=>m(()=>import("./index.html-BgN128oA.js"),__vite__mapDeps([35,2])),meta:{t:"DSF 1.4.0",i:"guide"}}],["/v1.4.0/process-plugins-advanced.html",{loader:()=>m(()=>import("./process-plugins-advanced.html-BAq1SVRv.js"),__vite__mapDeps([36,2])),meta:{t:"Process Plugins Advanced",i:"info"}}],["/v1.5.0/dsf-for-dev.html",{loader:()=>m(()=>import("./dsf-for-dev.html-B0G-bUeQ.js"),__vite__mapDeps([37,2])),meta:{t:"DSF for Developers",i:"info"}}],["/v1.5.0/",{loader:()=>m(()=>import("./index.html-CCBpJJly.js"),__vite__mapDeps([38,2])),meta:{t:"DSF 1.5.0",i:"guide"}}],["/v1.5.0/process-plugins-advanced.html",{loader:()=>m(()=>import("./process-plugins-advanced.html-CyU9Nv_o.js"),__vite__mapDeps([39,2])),meta:{t:"Process Plugins Advanced",i:"info"}}],["/v1.5.1/dsf-for-dev.html",{loader:()=>m(()=>import("./dsf-for-dev.html-DU7CIKrg.js"),__vite__mapDeps([40,2])),meta:{t:"DSF for Developers",i:"info"}}],["/v1.5.1/",{loader:()=>m(()=>import("./index.html-1GNavLp5.js"),__vite__mapDeps([41,2])),meta:{t:"DSF 1.5.1",i:"guide"}}],["/v1.5.1/process-plugins-advanced.html",{loader:()=>m(()=>import("./process-plugins-advanced.html-Dw-obtVz.js"),__vite__mapDeps([42,2])),meta:{t:"Process Plugins Advanced",i:"info"}}],["/v1.5.2/dsf-for-dev.html",{loader:()=>m(()=>import("./dsf-for-dev.html-DyM8l128.js"),__vite__mapDeps([43,2])),meta:{t:"DSF for Developers",i:"info"}}],["/v1.5.2/",{loader:()=>m(()=>import("./index.html-CuwFjDT4.js"),__vite__mapDeps([44,2])),meta:{t:"DSF 1.5.2",i:"guide"}}],["/v1.5.2/process-plugins-advanced.html",{loader:()=>m(()=>import("./process-plugins-advanced.html-D1AIXOF4.js"),__vite__mapDeps([45,2])),meta:{t:"Process Plugins Advanced",i:"info"}}],["/about/learnmore/",{loader:()=>m(()=>import("./index.html-DLtnb5Tv.js"),__vite__mapDeps([46,2])),meta:{t:"Learn more",i:"creative"}}],["/about/learnmore/contact.html",{loader:()=>m(()=>import("./contact.html-BIg2xi0b.js"),__vite__mapDeps([47,2])),meta:{t:"Contact & Community",i:"call"}}],["/about/learnmore/partners.html",{loader:()=>m(()=>import("./partners.html-B-l0TZk2.js"),__vite__mapDeps([48,2])),meta:{t:"Partners",i:"proxy"}}],["/about/learnmore/public.html",{loader:()=>m(()=>import("./public.html-BOk6SNIO.js"),__vite__mapDeps([49,50,2])),meta:{t:"Public Funding",i:"free"}}],["/about/learnmore/team.html",{loader:()=>m(()=>import("./team.html-BVqb5cyl.js"),__vite__mapDeps([51,2])),meta:{t:"Team",i:"group"}}],["/intro/info/allowList.html",{loader:()=>m(()=>import("./allowList.html-B_rp1UUL.js"),__vite__mapDeps([52,2])),meta:{t:"Allow Lists",i:"share"}}],["/intro/info/architecture.html",{loader:()=>m(()=>import("./architecture.html-Df8jd6ox.js"),__vite__mapDeps([53,2])),meta:{t:"Architecture",i:"structure"}}],["/intro/info/basics.html",{loader:()=>m(()=>import("./basics.html-DiVFM6ZX.js"),__vite__mapDeps([54,2])),meta:{t:"Basics and Standards",i:"study"}}],["/intro/info/introduction.html",{loader:()=>m(()=>import("./introduction.html-BctNGTS-.js"),__vite__mapDeps([55,50,1,2])),meta:{t:"Introduction",i:"customize"}}],["/intro/info/networkSetup.html",{loader:()=>m(()=>import("./networkSetup.html-DO8WTfe0.js"),__vite__mapDeps([56,57,2])),meta:{t:"Network Setup and General Architecture",i:"customize"}}],["/intro/info/process-plugins.html",{loader:()=>m(()=>import("./process-plugins.html-DS2-s-JK.js"),__vite__mapDeps([58,2])),meta:{t:"Process Plugins",i:"plugin"}}],["/intro/info/security.html",{loader:()=>m(()=>import("./security.html-Qj_akVd-.js"),__vite__mapDeps([59,2])),meta:{t:"Security by Design",i:"safe"}}],["/intro/tutorials/GMDS2022-dev.html",{loader:()=>m(()=>import("./GMDS2022-dev.html-DlHHIr-I.js"),__vite__mapDeps([60,2])),meta:{t:"GMDS2022 - Process Development",i:"code"}}],["/intro/tutorials/MIE2023.html",{loader:()=>m(()=>import("./MIE2023.html-MrPY5Efy.js"),__vite__mapDeps([61,2])),meta:{t:"MIE May 2023",i:"info"}}],["/intro/tutorials/",{loader:()=>m(()=>import("./index.html-BkHpX9Lh.js"),__vite__mapDeps([62,2])),meta:{t:"Tutorials",i:"edit"}}],["/intro/tutorials/Talks.html",{loader:()=>m(()=>import("./Talks.html-35con64A.js"),__vite__mapDeps([63,2])),meta:{t:"Recorded talks",i:"globe"}}],["/intro/use-cases/",{loader:()=>m(()=>import("./index.html-GWKEUDpV.js"),__vite__mapDeps([64,2])),meta:{t:"Use-Cases",i:"view"}}],["/intro/use-cases/feasibility.html",{loader:()=>m(()=>import("./feasibility.html-fV-0rrxS.js"),__vite__mapDeps([65,2])),meta:{t:"Feasibility",i:"diagram"}}],["/intro/use-cases/num.html",{loader:()=>m(()=>import("./num.html-BDSaH26q.js"),__vite__mapDeps([66,2])),meta:{t:"Network University Medicine",i:"map"}}],["/oldstable/build/",{loader:()=>m(()=>import("./index.html-CLQDCC8z.js"),__vite__mapDeps([67,2])),meta:{t:"Build and Test",i:"back-stage"}}],["/oldstable/build/build.html",{loader:()=>m(()=>import("./build.html-B99lTZFD.js"),__vite__mapDeps([68,2])),meta:{t:"Build and Test",i:"back-stage"}}],["/oldstable/build/proxyTestTool.html",{loader:()=>m(()=>import("./proxyTestTool.html-C_Ex6mgz.js"),__vite__mapDeps([69,2])),meta:{t:"Proxy Test Tool",i:"back-stage"}}],["/oldstable/build/releaseANewVersion.html",{loader:()=>m(()=>import("./releaseANewVersion.html-jLnIfCDT.js"),__vite__mapDeps([70,2])),meta:{t:"Release a new version",i:"back-stage"}}],["/oldstable/code/",{loader:()=>m(()=>import("./index.html-DjKgBgX-.js"),__vite__mapDeps([71,2])),meta:{t:"Code",i:"code"}}],["/oldstable/code/addingANewFhirR.html",{loader:()=>m(()=>import("./addingANewFhirR.html-DKFGMdMx.js"),__vite__mapDeps([72,2])),meta:{t:"Adding FHIR Resources",i:"code"}}],["/oldstable/code/addingANewMpiClient.html",{loader:()=>m(()=>import("./addingANewMpiClient.html-Dly4qn4C.js"),__vite__mapDeps([73,2])),meta:{t:"Adding MPI Clients",i:"code"}}],["/oldstable/code/addingANewOpenEhrClient.html",{loader:()=>m(()=>import("./addingANewOpenEhrClient.html-C1usEhCm.js"),__vite__mapDeps([74,2])),meta:{t:"Adding openEHR Clients",i:"code"}}],["/oldstable/code/changingBpmnProcesses.html",{loader:()=>m(()=>import("./changingBpmnProcesses.html-BwQhn7Qm.js"),__vite__mapDeps([75,2])),meta:{t:"Changing BPMN Processes by Service Task Overwrites",i:"code"}}],["/oldstable/code/code.html",{loader:()=>m(()=>import("./code.html-Da8veOhR.js"),__vite__mapDeps([76,2])),meta:{t:"Writing Code",i:"code"}}],["/oldstable/code/eclipseContent.html",{loader:()=>m(()=>import("./eclipseContent.html-kdqNoPL9.js"),__vite__mapDeps([77,2])),meta:{t:"Eclipse code-style configurations",i:"code"}}],["/oldstable/code/intelliJContent.html",{loader:()=>m(()=>import("./intelliJContent.html-yFdXbKGw.js"),__vite__mapDeps([78,2])),meta:{t:"IntelliJ code-style configurations",i:"code"}}],["/oldstable/code/libraries.html",{loader:()=>m(()=>import("./libraries.html-DXRhGNT1.js"),__vite__mapDeps([79,2])),meta:{t:"Libraries",i:"folder"}}],["/oldstable/code/usingTheGitHubMaven.html",{loader:()=>m(()=>import("./usingTheGitHubMaven.html-_DTrQqeM.js"),__vite__mapDeps([80,2])),meta:{t:"Using the Github Maven Package Registry",i:"code"}}],["/oldstable/generalinformation/",{loader:()=>m(()=>import("./index.html-C-fzjFRH.js"),__vite__mapDeps([81,2])),meta:{t:"General Information",i:"set"}}],["/oldstable/generalinformation/authentication.html",{loader:()=>m(()=>import("./authentication.html-BWH7DDfb.js"),__vite__mapDeps([82,2])),meta:{t:"Authentication",i:"lock"}}],["/oldstable/generalinformation/networkSetup.html",{loader:()=>m(()=>import("./networkSetup.html-BRividmW.js"),__vite__mapDeps([83,57,2])),meta:{t:"Network Setup and General Architecture",i:"customize"}}],["/oldstable/releases/",{loader:()=>m(()=>import("./index.html-qeoKr5lU.js"),__vite__mapDeps([84,2])),meta:{t:"Releases and Deployment",i:"install"}}],["/oldstable/releases/configBpe.html",{loader:()=>m(()=>import("./configBpe.html-CkJloQiY.js"),__vite__mapDeps([85,2])),meta:{t:""}}],["/oldstable/releases/configFhir.html",{loader:()=>m(()=>import("./configFhir.html-DWtvgUJO.js"),__vite__mapDeps([86,2])),meta:{t:""}}],["/oldstable/releases/configFhirReverseProxy.html",{loader:()=>m(()=>import("./configFhirReverseProxy.html-D6mB2ojQ.js"),__vite__mapDeps([87,2])),meta:{t:""}}],["/oldstable/releases/highmedInstall.html",{loader:()=>m(()=>import("./highmedInstall.html-Bw-puBe4.js"),__vite__mapDeps([88,2])),meta:{t:""}}],["/oldstable/releases/num-codexInstall.html",{loader:()=>m(()=>import("./num-codexInstall.html-Bw_nn2le.js"),__vite__mapDeps([89,2])),meta:{t:""}}],["/oldstable/releases/upgradeFrom7.html",{loader:()=>m(()=>import("./upgradeFrom7.html-CEFLW_mR.js"),__vite__mapDeps([90,2])),meta:{t:"Upgrading from 0.7.0 to 0.9.0",i:"install"}}],["/oldstable/releases/upgradeFrom8.html",{loader:()=>m(()=>import("./upgradeFrom8.html-1Y_v8e3q.js"),__vite__mapDeps([91,2])),meta:{t:"Upgrading from 0.8.0 to 0.9.0",i:"install"}}],["/oldstable/releases/upgradeFrom90.html",{loader:()=>m(()=>import("./upgradeFrom90.html-RKmk-LJj.js"),__vite__mapDeps([92,2])),meta:{t:"Upgrading from 0.9.0 to 0.9.1",i:"install"}}],["/oldstable/releases/upgradeFrom91.html",{loader:()=>m(()=>import("./upgradeFrom91.html-C4vCWdyC.js"),__vite__mapDeps([93,2])),meta:{t:"Upgrading from 0.9.1"}}],["/oldstable/releases/upgradeFrom92.html",{loader:()=>m(()=>import("./upgradeFrom92.html-CoFcIWbe.js"),__vite__mapDeps([94,2])),meta:{t:"Upgrading from 0.9.2"}}],["/oldstable/tutorial/",{loader:()=>m(()=>import("./index.html-DnEeG4Ei.js"),__vite__mapDeps([95,2])),meta:{t:"DSF Process Plugin Tutorial",i:"slides"}}],["/oldstable/tutorial/ex11-docker-composeyml.html",{loader:()=>m(()=>import("./ex11-docker-composeyml.html-MLKKlt0T.js"),__vite__mapDeps([96,2])),meta:{t:"Exercise 1.1 - Process Debugging",i:"slides"}}],["/oldstable/tutorial/exercise1-simpleProcess.html",{loader:()=>m(()=>import("./exercise1-simpleProcess.html-1gmKbyng.js"),__vite__mapDeps([97,2])),meta:{t:"Exercise 1 - Simple Process",i:"slides"}}],["/oldstable/tutorial/exercise11-processDebugging.html",{loader:()=>m(()=>import("./exercise11-processDebugging.html-H4aFbuic.js"),__vite__mapDeps([98,2])),meta:{t:"Exercise 1.1 - Process Debugging",i:"slides"}}],["/oldstable/tutorial/exercise2-inputParameters.html",{loader:()=>m(()=>import("./exercise2-inputParameters.html-D05ppcsc.js"),__vite__mapDeps([99,2])),meta:{t:"Exercise 2 - Input Parameters",i:"slides"}}],["/oldstable/tutorial/exercise3-messageEvents.html",{loader:()=>m(()=>import("./exercise3-messageEvents.html-BvCPZCXY.js"),__vite__mapDeps([100,2])),meta:{t:"Exercise 3 - Message Events",i:"slides"}}],["/oldstable/tutorial/exercise4-exclusiveGateways.html",{loader:()=>m(()=>import("./exercise4-exclusiveGateways.html-CNjavIrD.js"),__vite__mapDeps([101,2])),meta:{t:"Exercise 4 - Exclusive Gateways",i:"slides"}}],["/oldstable/tutorial/exercise5-eventBasedGateways.html",{loader:()=>m(()=>import("./exercise5-eventBasedGateways.html-TXYnwT8n.js"),__vite__mapDeps([102,2])),meta:{t:"Exercise 5 - Event Based Gateways and Intermediate Events",i:"slides"}}],["/oldstable/tutorial/prerequisites.html",{loader:()=>m(()=>import("./prerequisites.html-BOHWoSg0.js"),__vite__mapDeps([103,2])),meta:{t:"Prerequisites",i:"slides"}}],["/stable/contribute/code.html",{loader:()=>m(()=>import("./code.html-CSLPHq93.js"),__vite__mapDeps([104,2])),meta:{t:"Contribute code",i:"info"}}],["/stable/contribute/documentation.html",{loader:()=>m(()=>import("./documentation.html-DZPnnDjT.js"),__vite__mapDeps([105,2])),meta:{t:"Contribute documentation",i:"info"}}],["/stable/contribute/",{loader:()=>m(()=>import("./index.html-C7I1gN0A.js"),__vite__mapDeps([106,2])),meta:{t:"Contribute",i:"info"}}],["/stable/develop/",{loader:()=>m(()=>import("./index.html-IZP11Pen.js"),__vite__mapDeps([107,2])),meta:{t:"Develop Process Plugins",i:"plugin"}}],["/stable/develop/create.html",{loader:()=>m(()=>import("./create.html-DYPU2UUv.js"),__vite__mapDeps([108,2])),meta:{t:"Create a new process plugin",i:"code"}}],["/stable/develop/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-Uv4WDNVz.js"),__vite__mapDeps([109,2])),meta:{t:"Upgrade processes from 0.9.x",i:"update"}}],["/stable/maintain/",{loader:()=>m(()=>import("./index.html-CL_NobEX.js"),__vite__mapDeps([110,2])),meta:{t:"Maintain a DSF instance",i:"tool"}}],["/stable/maintain/allowList-mgm.html",{loader:()=>m(()=>import("./allowList-mgm.html-CIV-y8qc.js"),__vite__mapDeps([111,2])),meta:{t:"Allow List Management",i:"share"}}],["/stable/maintain/install-plugins.html",{loader:()=>m(()=>import("./install-plugins.html-DiPcZpIN.js"),__vite__mapDeps([112,2])),meta:{t:"Install Plugins",i:"plugin"}}],["/stable/maintain/install.html",{loader:()=>m(()=>import("./install.html-BrMS_Ond.js"),__vite__mapDeps([113,2])),meta:{t:"Install DSF 1.5.2",i:"install"}}],["/stable/maintain/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-D9NWv8w7.js"),__vite__mapDeps([114,2])),meta:{t:"Upgrade from DSF 0.9.x",i:"update"}}],["/stable/maintain/upgrade-from-1.html",{loader:()=>m(()=>import("./upgrade-from-1.html-UX0GM5eH.js"),__vite__mapDeps([115,2])),meta:{t:"Upgrade from DSF 1.5.1",i:"update"}}],["/v1.0.0/develop/",{loader:()=>m(()=>import("./index.html-wY8EFJdx.js"),__vite__mapDeps([116,2])),meta:{t:"Develop Process Plugins",i:"plugin"}}],["/v1.0.0/develop/create.html",{loader:()=>m(()=>import("./create.html-BBL4dAdr.js"),__vite__mapDeps([117,2])),meta:{t:"Create a new process plugin",i:"code"}}],["/v1.0.0/develop/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-BLIdrZVI.js"),__vite__mapDeps([118,2])),meta:{t:"Upgrade processes from 0.9.x",i:"update"}}],["/v1.0.0/maintain/",{loader:()=>m(()=>import("./index.html-DH7l0GC4.js"),__vite__mapDeps([119,2])),meta:{t:"Maintain a DSF instance",i:"tool"}}],["/v1.0.0/maintain/allowList-mgm.html",{loader:()=>m(()=>import("./allowList-mgm.html-LVnwVTAs.js"),__vite__mapDeps([120,2])),meta:{t:"Allow List Management",i:"share"}}],["/v1.0.0/maintain/install.html",{loader:()=>m(()=>import("./install.html-CRFtEX6d.js"),__vite__mapDeps([121,2])),meta:{t:"Install DSF 1.0.0",i:"install"}}],["/v1.0.0/maintain/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-BU67otYx.js"),__vite__mapDeps([122,2])),meta:{t:"Upgrade from DSF 0.9.x",i:"update"}}],["/v1.1.0/develop/",{loader:()=>m(()=>import("./index.html-Dm-P1F5T.js"),__vite__mapDeps([123,2])),meta:{t:"Develop Process Plugins",i:"plugin"}}],["/v1.1.0/develop/create.html",{loader:()=>m(()=>import("./create.html-Cd0lu8lU.js"),__vite__mapDeps([124,2])),meta:{t:"Create a new process plugin",i:"code"}}],["/v1.1.0/develop/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-B6n07FQd.js"),__vite__mapDeps([125,2])),meta:{t:"Upgrade processes from 0.9.x",i:"update"}}],["/v1.1.0/maintain/",{loader:()=>m(()=>import("./index.html-B0FSLKVu.js"),__vite__mapDeps([126,2])),meta:{t:"Maintain a DSF instance",i:"tool"}}],["/v1.1.0/maintain/allowList-mgm.html",{loader:()=>m(()=>import("./allowList-mgm.html-Cdtf6CP2.js"),__vite__mapDeps([127,2])),meta:{t:"Allow List Management",i:"share"}}],["/v1.1.0/maintain/install.html",{loader:()=>m(()=>import("./install.html-v-wtBUsw.js"),__vite__mapDeps([128,2])),meta:{t:"Install DSF 1.1.0",i:"install"}}],["/v1.1.0/maintain/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-Ct5W8opP.js"),__vite__mapDeps([129,2])),meta:{t:"Upgrade from DSF 0.9.x",i:"update"}}],["/v1.1.0/maintain/upgrade-from-1.html",{loader:()=>m(()=>import("./upgrade-from-1.html-3neSA-BB.js"),__vite__mapDeps([130,2])),meta:{t:"Upgrade from DSF 1.x",i:"update"}}],["/v1.2.0/develop/",{loader:()=>m(()=>import("./index.html-DEarre1O.js"),__vite__mapDeps([131,2])),meta:{t:"Develop Process Plugins",i:"plugin"}}],["/v1.2.0/develop/create.html",{loader:()=>m(()=>import("./create.html-B8YWfO5m.js"),__vite__mapDeps([132,2])),meta:{t:"Create a new process plugin",i:"code"}}],["/v1.2.0/develop/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-CXaHlGc8.js"),__vite__mapDeps([133,2])),meta:{t:"Upgrade processes from 0.9.x",i:"update"}}],["/v1.2.0/maintain/",{loader:()=>m(()=>import("./index.html-BxKmwZz7.js"),__vite__mapDeps([134,2])),meta:{t:"Maintain a DSF instance",i:"tool"}}],["/v1.2.0/maintain/allowList-mgm.html",{loader:()=>m(()=>import("./allowList-mgm.html-rjZU3I6G.js"),__vite__mapDeps([135,2])),meta:{t:"Allow List Management",i:"share"}}],["/v1.2.0/maintain/install.html",{loader:()=>m(()=>import("./install.html-Ci01uV9w.js"),__vite__mapDeps([136,2])),meta:{t:"Install DSF 1.2.0",i:"install"}}],["/v1.2.0/maintain/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-D4zkI0hy.js"),__vite__mapDeps([137,2])),meta:{t:"Upgrade from DSF 0.9.x",i:"update"}}],["/v1.2.0/maintain/upgrade-from-1.html",{loader:()=>m(()=>import("./upgrade-from-1.html-CLS-rGPo.js"),__vite__mapDeps([138,2])),meta:{t:"Upgrade from DSF 1.1.0",i:"update"}}],["/v1.3.0/develop/",{loader:()=>m(()=>import("./index.html-BL-TOoxL.js"),__vite__mapDeps([139,2])),meta:{t:"Develop Process Plugins",i:"plugin"}}],["/v1.3.0/develop/create.html",{loader:()=>m(()=>import("./create.html-CYJ8kogk.js"),__vite__mapDeps([140,2])),meta:{t:"Create a new process plugin",i:"code"}}],["/v1.3.0/develop/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-D5p1Fyxp.js"),__vite__mapDeps([141,2])),meta:{t:"Upgrade processes from 0.9.x",i:"update"}}],["/v1.3.0/maintain/",{loader:()=>m(()=>import("./index.html-DpTEcA7O.js"),__vite__mapDeps([142,2])),meta:{t:"Maintain a DSF instance",i:"tool"}}],["/v1.3.0/maintain/allowList-mgm.html",{loader:()=>m(()=>import("./allowList-mgm.html-9siK4PZs.js"),__vite__mapDeps([143,2])),meta:{t:"Allow List Management",i:"share"}}],["/v1.3.0/maintain/install-plugins.html",{loader:()=>m(()=>import("./install-plugins.html-C_QOcnfk.js"),__vite__mapDeps([144,2])),meta:{t:"Install Plugins",i:"plugin"}}],["/v1.3.0/maintain/install.html",{loader:()=>m(()=>import("./install.html-BaXMdr7u.js"),__vite__mapDeps([145,2])),meta:{t:"Install DSF 1.3.0",i:"install"}}],["/v1.3.0/maintain/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-Qee7uBnc.js"),__vite__mapDeps([146,2])),meta:{t:"Upgrade from DSF 0.9.x",i:"update"}}],["/v1.3.0/maintain/upgrade-from-1.html",{loader:()=>m(()=>import("./upgrade-from-1.html-CpUfeiok.js"),__vite__mapDeps([147,2])),meta:{t:"Upgrade from DSF 1.2.0",i:"update"}}],["/v1.3.1/develop/",{loader:()=>m(()=>import("./index.html-Bt8TXjqJ.js"),__vite__mapDeps([148,2])),meta:{t:"Develop Process Plugins",i:"plugin"}}],["/v1.3.1/develop/create.html",{loader:()=>m(()=>import("./create.html-D-hEIIMO.js"),__vite__mapDeps([149,2])),meta:{t:"Create a new process plugin",i:"code"}}],["/v1.3.1/develop/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-CRAe3DJ7.js"),__vite__mapDeps([150,2])),meta:{t:"Upgrade processes from 0.9.x",i:"update"}}],["/v1.3.1/maintain/",{loader:()=>m(()=>import("./index.html-Bmlmhagb.js"),__vite__mapDeps([151,2])),meta:{t:"Maintain a DSF instance",i:"tool"}}],["/v1.3.1/maintain/allowList-mgm.html",{loader:()=>m(()=>import("./allowList-mgm.html--HvZHaB9.js"),__vite__mapDeps([152,2])),meta:{t:"Allow List Management",i:"share"}}],["/v1.3.1/maintain/install-plugins.html",{loader:()=>m(()=>import("./install-plugins.html-CZL_USfs.js"),__vite__mapDeps([153,2])),meta:{t:"Install Plugins",i:"plugin"}}],["/v1.3.1/maintain/install.html",{loader:()=>m(()=>import("./install.html-CaUAgN_g.js"),__vite__mapDeps([154,2])),meta:{t:"Install DSF 1.3.1",i:"install"}}],["/v1.3.1/maintain/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-hTNkwIzD.js"),__vite__mapDeps([155,2])),meta:{t:"Upgrade from DSF 0.9.x",i:"update"}}],["/v1.3.1/maintain/upgrade-from-1.html",{loader:()=>m(()=>import("./upgrade-from-1.html-DVhYYBK6.js"),__vite__mapDeps([156,2])),meta:{t:"Upgrade from DSF 1.3.0",i:"update"}}],["/v1.3.2/develop/",{loader:()=>m(()=>import("./index.html-Bc9IQ5FT.js"),__vite__mapDeps([157,2])),meta:{t:"Develop Process Plugins",i:"plugin"}}],["/v1.3.2/develop/create.html",{loader:()=>m(()=>import("./create.html-STcXv8Ol.js"),__vite__mapDeps([158,2])),meta:{t:"Create a new process plugin",i:"code"}}],["/v1.3.2/develop/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-LF0qk2hq.js"),__vite__mapDeps([159,2])),meta:{t:"Upgrade processes from 0.9.x",i:"update"}}],["/v1.3.2/maintain/",{loader:()=>m(()=>import("./index.html-qJV9JEXu.js"),__vite__mapDeps([160,2])),meta:{t:"Maintain a DSF instance",i:"tool"}}],["/v1.3.2/maintain/allowList-mgm.html",{loader:()=>m(()=>import("./allowList-mgm.html-DG2rpePj.js"),__vite__mapDeps([161,2])),meta:{t:"Allow List Management",i:"share"}}],["/v1.3.2/maintain/install-plugins.html",{loader:()=>m(()=>import("./install-plugins.html-BPtVjAQJ.js"),__vite__mapDeps([162,2])),meta:{t:"Install Plugins",i:"plugin"}}],["/v1.3.2/maintain/install.html",{loader:()=>m(()=>import("./install.html-CPYdjQIY.js"),__vite__mapDeps([163,2])),meta:{t:"Install DSF 1.3.2",i:"install"}}],["/v1.3.2/maintain/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-C6LY6wwR.js"),__vite__mapDeps([164,2])),meta:{t:"Upgrade from DSF 0.9.x",i:"update"}}],["/v1.3.2/maintain/upgrade-from-1.html",{loader:()=>m(()=>import("./upgrade-from-1.html-DO57QWSu.js"),__vite__mapDeps([165,2])),meta:{t:"Upgrade from DSF 1.3.1",i:"update"}}],["/v1.4.0/contribute/code.html",{loader:()=>m(()=>import("./code.html-_JHNqXPS.js"),__vite__mapDeps([166,2])),meta:{t:"Contribute code",i:"info"}}],["/v1.4.0/contribute/documentation.html",{loader:()=>m(()=>import("./documentation.html-C_QbE0N7.js"),__vite__mapDeps([167,2])),meta:{t:"Contribute documentation",i:"info"}}],["/v1.4.0/contribute/",{loader:()=>m(()=>import("./index.html-DyvczhN7.js"),__vite__mapDeps([168,2])),meta:{t:"Contribute",i:"info"}}],["/v1.4.0/develop/",{loader:()=>m(()=>import("./index.html-DTXLO3BP.js"),__vite__mapDeps([169,2])),meta:{t:"Develop Process Plugins",i:"plugin"}}],["/v1.4.0/develop/create.html",{loader:()=>m(()=>import("./create.html-Dk6P19fM.js"),__vite__mapDeps([170,2])),meta:{t:"Create a new process plugin",i:"code"}}],["/v1.4.0/develop/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-1FImxnbl.js"),__vite__mapDeps([171,2])),meta:{t:"Upgrade processes from 0.9.x",i:"update"}}],["/v1.4.0/maintain/",{loader:()=>m(()=>import("./index.html-BALcS47z.js"),__vite__mapDeps([172,2])),meta:{t:"Maintain a DSF instance",i:"tool"}}],["/v1.4.0/maintain/allowList-mgm.html",{loader:()=>m(()=>import("./allowList-mgm.html-Bkt24hWo.js"),__vite__mapDeps([173,2])),meta:{t:"Allow List Management",i:"share"}}],["/v1.4.0/maintain/install-plugins.html",{loader:()=>m(()=>import("./install-plugins.html-OqBmbFsQ.js"),__vite__mapDeps([174,2])),meta:{t:"Install Plugins",i:"plugin"}}],["/v1.4.0/maintain/install.html",{loader:()=>m(()=>import("./install.html-tuyuTpsb.js"),__vite__mapDeps([175,2])),meta:{t:"Install DSF 1.4.0",i:"install"}}],["/v1.4.0/maintain/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-Ccchte1p.js"),__vite__mapDeps([176,2])),meta:{t:"Upgrade from DSF 0.9.x",i:"update"}}],["/v1.4.0/maintain/upgrade-from-1.html",{loader:()=>m(()=>import("./upgrade-from-1.html-DG_FtmPQ.js"),__vite__mapDeps([177,2])),meta:{t:"Upgrade from DSF 1.3.2",i:"update"}}],["/v1.5.0/contribute/code.html",{loader:()=>m(()=>import("./code.html-CmhEnLZF.js"),__vite__mapDeps([178,2])),meta:{t:"Contribute code",i:"info"}}],["/v1.5.0/contribute/documentation.html",{loader:()=>m(()=>import("./documentation.html-BhU3Negt.js"),__vite__mapDeps([179,2])),meta:{t:"Contribute documentation",i:"info"}}],["/v1.5.0/contribute/",{loader:()=>m(()=>import("./index.html-CsrqLo4K.js"),__vite__mapDeps([180,2])),meta:{t:"Contribute",i:"info"}}],["/v1.5.0/develop/",{loader:()=>m(()=>import("./index.html-D6_187T3.js"),__vite__mapDeps([181,2])),meta:{t:"Develop Process Plugins",i:"plugin"}}],["/v1.5.0/develop/create.html",{loader:()=>m(()=>import("./create.html-DTtN2S-o.js"),__vite__mapDeps([182,2])),meta:{t:"Create a new process plugin",i:"code"}}],["/v1.5.0/develop/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-Dyi1OPIG.js"),__vite__mapDeps([183,2])),meta:{t:"Upgrade processes from 0.9.x",i:"update"}}],["/v1.5.0/maintain/",{loader:()=>m(()=>import("./index.html-CrhbZRDu.js"),__vite__mapDeps([184,2])),meta:{t:"Maintain a DSF instance",i:"tool"}}],["/v1.5.0/maintain/allowList-mgm.html",{loader:()=>m(()=>import("./allowList-mgm.html-BtC1Sjv9.js"),__vite__mapDeps([185,2])),meta:{t:"Allow List Management",i:"share"}}],["/v1.5.0/maintain/install-plugins.html",{loader:()=>m(()=>import("./install-plugins.html-BKaaUPRu.js"),__vite__mapDeps([186,2])),meta:{t:"Install Plugins",i:"plugin"}}],["/v1.5.0/maintain/install.html",{loader:()=>m(()=>import("./install.html-DPutC4Ur.js"),__vite__mapDeps([187,2])),meta:{t:"Install DSF 1.5.0",i:"install"}}],["/v1.5.0/maintain/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-CPvp7H4y.js"),__vite__mapDeps([188,2])),meta:{t:"Upgrade from DSF 0.9.x",i:"update"}}],["/v1.5.0/maintain/upgrade-from-1.html",{loader:()=>m(()=>import("./upgrade-from-1.html-Bn629slA.js"),__vite__mapDeps([189,2])),meta:{t:"Upgrade from DSF 1.4.0",i:"update"}}],["/v1.5.1/contribute/code.html",{loader:()=>m(()=>import("./code.html-D_-BLqzB.js"),__vite__mapDeps([190,2])),meta:{t:"Contribute code",i:"info"}}],["/v1.5.1/contribute/documentation.html",{loader:()=>m(()=>import("./documentation.html-DQT8Cd3U.js"),__vite__mapDeps([191,2])),meta:{t:"Contribute documentation",i:"info"}}],["/v1.5.1/contribute/",{loader:()=>m(()=>import("./index.html-V7hpoftb.js"),__vite__mapDeps([192,2])),meta:{t:"Contribute",i:"info"}}],["/v1.5.1/develop/",{loader:()=>m(()=>import("./index.html-CsDDghLt.js"),__vite__mapDeps([193,2])),meta:{t:"Develop Process Plugins",i:"plugin"}}],["/v1.5.1/develop/create.html",{loader:()=>m(()=>import("./create.html-BKJiEx7Q.js"),__vite__mapDeps([194,2])),meta:{t:"Create a new process plugin",i:"code"}}],["/v1.5.1/develop/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-3oJ76TSs.js"),__vite__mapDeps([195,2])),meta:{t:"Upgrade processes from 0.9.x",i:"update"}}],["/v1.5.1/maintain/",{loader:()=>m(()=>import("./index.html-6QqXTGgD.js"),__vite__mapDeps([196,2])),meta:{t:"Maintain a DSF instance",i:"tool"}}],["/v1.5.1/maintain/allowList-mgm.html",{loader:()=>m(()=>import("./allowList-mgm.html-D3owzJ3j.js"),__vite__mapDeps([197,2])),meta:{t:"Allow List Management",i:"share"}}],["/v1.5.1/maintain/install-plugins.html",{loader:()=>m(()=>import("./install-plugins.html-B1EGf8eh.js"),__vite__mapDeps([198,2])),meta:{t:"Install Plugins",i:"plugin"}}],["/v1.5.1/maintain/install.html",{loader:()=>m(()=>import("./install.html-BKqC2SR0.js"),__vite__mapDeps([199,2])),meta:{t:"Install DSF 1.5.1",i:"install"}}],["/v1.5.1/maintain/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-y0bCUoag.js"),__vite__mapDeps([200,2])),meta:{t:"Upgrade from DSF 0.9.x",i:"update"}}],["/v1.5.1/maintain/upgrade-from-1.html",{loader:()=>m(()=>import("./upgrade-from-1.html-Bedy_Kcy.js"),__vite__mapDeps([201,2])),meta:{t:"Upgrade from DSF 1.5.0",i:"update"}}],["/v1.5.2/contribute/code.html",{loader:()=>m(()=>import("./code.html-D79wY7A-.js"),__vite__mapDeps([202,2])),meta:{t:"Contribute code",i:"info"}}],["/v1.5.2/contribute/documentation.html",{loader:()=>m(()=>import("./documentation.html-D45C1fbl.js"),__vite__mapDeps([203,2])),meta:{t:"Contribute documentation",i:"info"}}],["/v1.5.2/contribute/",{loader:()=>m(()=>import("./index.html-CBRQ-c2y.js"),__vite__mapDeps([204,2])),meta:{t:"Contribute",i:"info"}}],["/v1.5.2/develop/",{loader:()=>m(()=>import("./index.html-BCPmXfDv.js"),__vite__mapDeps([205,2])),meta:{t:"Develop Process Plugins",i:"plugin"}}],["/v1.5.2/develop/create.html",{loader:()=>m(()=>import("./create.html-DM1ZPu4j.js"),__vite__mapDeps([206,2])),meta:{t:"Create a new process plugin",i:"code"}}],["/v1.5.2/develop/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-BAE2R3EL.js"),__vite__mapDeps([207,2])),meta:{t:"Upgrade processes from 0.9.x",i:"update"}}],["/v1.5.2/maintain/",{loader:()=>m(()=>import("./index.html-DjU5vY4A.js"),__vite__mapDeps([208,2])),meta:{t:"Maintain a DSF instance",i:"tool"}}],["/v1.5.2/maintain/allowList-mgm.html",{loader:()=>m(()=>import("./allowList-mgm.html-CYJul8nr.js"),__vite__mapDeps([209,2])),meta:{t:"Allow List Management",i:"share"}}],["/v1.5.2/maintain/install-plugins.html",{loader:()=>m(()=>import("./install-plugins.html-D05-EGzR.js"),__vite__mapDeps([210,2])),meta:{t:"Install Plugins",i:"plugin"}}],["/v1.5.2/maintain/install.html",{loader:()=>m(()=>import("./install.html-CJf5u1D5.js"),__vite__mapDeps([211,2])),meta:{t:"Install DSF 1.5.2",i:"install"}}],["/v1.5.2/maintain/upgrade-from-0.html",{loader:()=>m(()=>import("./upgrade-from-0.html-COvMZ4yo.js"),__vite__mapDeps([212,2])),meta:{t:"Upgrade from DSF 0.9.x",i:"update"}}],["/v1.5.2/maintain/upgrade-from-1.html",{loader:()=>m(()=>import("./upgrade-from-1.html-BybCxOQT.js"),__vite__mapDeps([213,2])),meta:{t:"Upgrade from DSF 1.5.1",i:"update"}}],["/stable/maintain/bpe/",{loader:()=>m(()=>import("./index.html-Cgi8v7QL.js"),__vite__mapDeps([214,2])),meta:{t:"BPE Server",i:"module"}}],["/stable/maintain/bpe/access-control.html",{loader:()=>m(()=>import("./access-control.html-hritXxa7.js"),__vite__mapDeps([215,2])),meta:{t:"Access Control",i:"config"}}],["/stable/maintain/bpe/configuration.html",{loader:()=>m(()=>import("./configuration.html-CNdymila.js"),__vite__mapDeps([216,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/stable/maintain/bpe/oidc.html",{loader:()=>m(()=>import("./oidc.html-DVMEndoa.js"),__vite__mapDeps([217,2])),meta:{t:"OpenID Connect",i:"config"}}],["/stable/maintain/bpe-reverse-proxy/",{loader:()=>m(()=>import("./index.html-45LbeiHE.js"),__vite__mapDeps([218,2])),meta:{t:"BPE Reverse Proxy",i:"module"}}],["/stable/maintain/bpe-reverse-proxy/configuration.html",{loader:()=>m(()=>import("./configuration.html-DBRn85K3.js"),__vite__mapDeps([219,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/stable/maintain/fhir/",{loader:()=>m(()=>import("./index.html-59Lw0KGh.js"),__vite__mapDeps([220,2])),meta:{t:"FHIR Server",i:"module"}}],["/stable/maintain/fhir/access-control.html",{loader:()=>m(()=>import("./access-control.html-B_zcP1LF.js"),__vite__mapDeps([221,2])),meta:{t:"Access Control",i:"config"}}],["/stable/maintain/fhir/configuration.html",{loader:()=>m(()=>import("./configuration.html-JO85txHz.js"),__vite__mapDeps([222,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/stable/maintain/fhir/oidc.html",{loader:()=>m(()=>import("./oidc.html-BYqZILbt.js"),__vite__mapDeps([223,2])),meta:{t:"OpenID Connect",i:"config"}}],["/stable/maintain/fhir-reverse-proxy/",{loader:()=>m(()=>import("./index.html-B7cuodVw.js"),__vite__mapDeps([224,2])),meta:{t:"FHIR Reverse Proxy",i:"module"}}],["/stable/maintain/fhir-reverse-proxy/configuration.html",{loader:()=>m(()=>import("./configuration.html-CtDCRuS7.js"),__vite__mapDeps([225,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.0.0/maintain/configuration/",{loader:()=>m(()=>import("./index.html-3a35NisQ.js"),__vite__mapDeps([226,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.0.0/maintain/configuration/bpe.html",{loader:()=>m(()=>import("./bpe.html-B_WYZYIU.js"),__vite__mapDeps([227,2])),meta:{t:"Parameters BPE Server"}}],["/v1.0.0/maintain/configuration/common.html",{loader:()=>m(()=>import("./common.html-BjAsQZeB.js"),__vite__mapDeps([228,2])),meta:{t:"Common Parameters"}}],["/v1.0.0/maintain/configuration/fhir.html",{loader:()=>m(()=>import("./fhir.html-CTifciWc.js"),__vite__mapDeps([229,2])),meta:{t:"Parameters FHIR Server"}}],["/v1.0.0/maintain/configuration/reverseproxy.html",{loader:()=>m(()=>import("./reverseproxy.html-BBN9Od3-.js"),__vite__mapDeps([230,2])),meta:{t:"Parameters FHIR Reverse Proxy"}}],["/v1.1.0/maintain/bpe/",{loader:()=>m(()=>import("./index.html-COO8K8yZ.js"),__vite__mapDeps([231,2])),meta:{t:"BPE Server",i:"module"}}],["/v1.1.0/maintain/bpe/configuration.html",{loader:()=>m(()=>import("./configuration.html-DhKNa3Mm.js"),__vite__mapDeps([232,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.1.0/maintain/fhir/",{loader:()=>m(()=>import("./index.html-CwMc33-B.js"),__vite__mapDeps([233,2])),meta:{t:"FHIR Server",i:"module"}}],["/v1.1.0/maintain/fhir/access-control.html",{loader:()=>m(()=>import("./access-control.html-TnCObO8b.js"),__vite__mapDeps([234,2])),meta:{t:"Access Control",i:"config"}}],["/v1.1.0/maintain/fhir/configuration.html",{loader:()=>m(()=>import("./configuration.html-BdZ0J6H6.js"),__vite__mapDeps([235,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.1.0/maintain/fhir/oidc.html",{loader:()=>m(()=>import("./oidc.html-DdP4mKTW.js"),__vite__mapDeps([236,2])),meta:{t:"OpenID Connect",i:"config"}}],["/v1.1.0/maintain/fhir-reverse-proxy/",{loader:()=>m(()=>import("./index.html-BGgrJkzc.js"),__vite__mapDeps([237,2])),meta:{t:"FHIR Reverse Proxy",i:"module"}}],["/v1.1.0/maintain/fhir-reverse-proxy/configuration.html",{loader:()=>m(()=>import("./configuration.html-C9PtkIpc.js"),__vite__mapDeps([238,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.2.0/maintain/bpe/",{loader:()=>m(()=>import("./index.html-DzF4QZJU.js"),__vite__mapDeps([239,2])),meta:{t:"BPE Server",i:"module"}}],["/v1.2.0/maintain/bpe/configuration.html",{loader:()=>m(()=>import("./configuration.html-D3nBgzQc.js"),__vite__mapDeps([240,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.2.0/maintain/fhir/",{loader:()=>m(()=>import("./index.html-DxxlE-F7.js"),__vite__mapDeps([241,2])),meta:{t:"FHIR Server",i:"module"}}],["/v1.2.0/maintain/fhir/access-control.html",{loader:()=>m(()=>import("./access-control.html-D-piCDJX.js"),__vite__mapDeps([242,2])),meta:{t:"Access Control",i:"config"}}],["/v1.2.0/maintain/fhir/configuration.html",{loader:()=>m(()=>import("./configuration.html-DLYIRIRZ.js"),__vite__mapDeps([243,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.2.0/maintain/fhir/oidc.html",{loader:()=>m(()=>import("./oidc.html-CZf70zLH.js"),__vite__mapDeps([244,2])),meta:{t:"OpenID Connect",i:"config"}}],["/v1.2.0/maintain/fhir-reverse-proxy/",{loader:()=>m(()=>import("./index.html-KCeNgCsq.js"),__vite__mapDeps([245,2])),meta:{t:"FHIR Reverse Proxy",i:"module"}}],["/v1.2.0/maintain/fhir-reverse-proxy/configuration.html",{loader:()=>m(()=>import("./configuration.html-AER2SVO7.js"),__vite__mapDeps([246,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.3.0/maintain/bpe/",{loader:()=>m(()=>import("./index.html-COrpehOa.js"),__vite__mapDeps([247,2])),meta:{t:"BPE Server",i:"module"}}],["/v1.3.0/maintain/bpe/configuration.html",{loader:()=>m(()=>import("./configuration.html-6D1Lu82s.js"),__vite__mapDeps([248,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.3.0/maintain/fhir/",{loader:()=>m(()=>import("./index.html-BsAx9IPS.js"),__vite__mapDeps([249,2])),meta:{t:"FHIR Server",i:"module"}}],["/v1.3.0/maintain/fhir/access-control.html",{loader:()=>m(()=>import("./access-control.html-CM5qpa53.js"),__vite__mapDeps([250,2])),meta:{t:"Access Control",i:"config"}}],["/v1.3.0/maintain/fhir/configuration.html",{loader:()=>m(()=>import("./configuration.html-BCx-1jdB.js"),__vite__mapDeps([251,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.3.0/maintain/fhir/oidc.html",{loader:()=>m(()=>import("./oidc.html-7KqJffk_.js"),__vite__mapDeps([252,2])),meta:{t:"OpenID Connect",i:"config"}}],["/v1.3.0/maintain/fhir-reverse-proxy/",{loader:()=>m(()=>import("./index.html-BUoh0Qls.js"),__vite__mapDeps([253,2])),meta:{t:"FHIR Reverse Proxy",i:"module"}}],["/v1.3.0/maintain/fhir-reverse-proxy/configuration.html",{loader:()=>m(()=>import("./configuration.html-BeW8pTce.js"),__vite__mapDeps([254,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.3.1/maintain/bpe/",{loader:()=>m(()=>import("./index.html-DAA5Q191.js"),__vite__mapDeps([255,2])),meta:{t:"BPE Server",i:"module"}}],["/v1.3.1/maintain/bpe/configuration.html",{loader:()=>m(()=>import("./configuration.html-BLaLcEWM.js"),__vite__mapDeps([256,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.3.1/maintain/fhir/",{loader:()=>m(()=>import("./index.html-CQqVJHUS.js"),__vite__mapDeps([257,2])),meta:{t:"FHIR Server",i:"module"}}],["/v1.3.1/maintain/fhir/access-control.html",{loader:()=>m(()=>import("./access-control.html-B8WDW2yd.js"),__vite__mapDeps([258,2])),meta:{t:"Access Control",i:"config"}}],["/v1.3.1/maintain/fhir/configuration.html",{loader:()=>m(()=>import("./configuration.html-DRsDJDIQ.js"),__vite__mapDeps([259,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.3.1/maintain/fhir/oidc.html",{loader:()=>m(()=>import("./oidc.html-DPFGyyJT.js"),__vite__mapDeps([260,2])),meta:{t:"OpenID Connect",i:"config"}}],["/v1.3.1/maintain/fhir-reverse-proxy/",{loader:()=>m(()=>import("./index.html-BuS8pc67.js"),__vite__mapDeps([261,2])),meta:{t:"FHIR Reverse Proxy",i:"module"}}],["/v1.3.1/maintain/fhir-reverse-proxy/configuration.html",{loader:()=>m(()=>import("./configuration.html-DuKh6Fgm.js"),__vite__mapDeps([262,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.3.2/maintain/bpe/",{loader:()=>m(()=>import("./index.html-PHxnGzin.js"),__vite__mapDeps([263,2])),meta:{t:"BPE Server",i:"module"}}],["/v1.3.2/maintain/bpe/configuration.html",{loader:()=>m(()=>import("./configuration.html-DWRgeTav.js"),__vite__mapDeps([264,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.3.2/maintain/fhir/",{loader:()=>m(()=>import("./index.html-DiajQsgt.js"),__vite__mapDeps([265,2])),meta:{t:"FHIR Server",i:"module"}}],["/v1.3.2/maintain/fhir/access-control.html",{loader:()=>m(()=>import("./access-control.html-Ci80SYtc.js"),__vite__mapDeps([266,2])),meta:{t:"Access Control",i:"config"}}],["/v1.3.2/maintain/fhir/configuration.html",{loader:()=>m(()=>import("./configuration.html-CuSzWF3M.js"),__vite__mapDeps([267,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.3.2/maintain/fhir/oidc.html",{loader:()=>m(()=>import("./oidc.html-DDgGRVZ0.js"),__vite__mapDeps([268,2])),meta:{t:"OpenID Connect",i:"config"}}],["/v1.3.2/maintain/fhir-reverse-proxy/",{loader:()=>m(()=>import("./index.html-D0XaREn8.js"),__vite__mapDeps([269,2])),meta:{t:"FHIR Reverse Proxy",i:"module"}}],["/v1.3.2/maintain/fhir-reverse-proxy/configuration.html",{loader:()=>m(()=>import("./configuration.html-JHRlAgB7.js"),__vite__mapDeps([270,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.4.0/maintain/bpe/",{loader:()=>m(()=>import("./index.html-Beuqigim.js"),__vite__mapDeps([271,2])),meta:{t:"BPE Server",i:"module"}}],["/v1.4.0/maintain/bpe/configuration.html",{loader:()=>m(()=>import("./configuration.html-BW2fNxdU.js"),__vite__mapDeps([272,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.4.0/maintain/fhir/",{loader:()=>m(()=>import("./index.html-0F9WiFvk.js"),__vite__mapDeps([273,2])),meta:{t:"FHIR Server",i:"module"}}],["/v1.4.0/maintain/fhir/access-control.html",{loader:()=>m(()=>import("./access-control.html-Dzq0BBpF.js"),__vite__mapDeps([274,2])),meta:{t:"Access Control",i:"config"}}],["/v1.4.0/maintain/fhir/configuration.html",{loader:()=>m(()=>import("./configuration.html-CRtcdzwb.js"),__vite__mapDeps([275,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.4.0/maintain/fhir/oidc.html",{loader:()=>m(()=>import("./oidc.html-CXM5MBWF.js"),__vite__mapDeps([276,2])),meta:{t:"OpenID Connect",i:"config"}}],["/v1.4.0/maintain/fhir-reverse-proxy/",{loader:()=>m(()=>import("./index.html-DgILuDyN.js"),__vite__mapDeps([277,2])),meta:{t:"FHIR Reverse Proxy",i:"module"}}],["/v1.4.0/maintain/fhir-reverse-proxy/configuration.html",{loader:()=>m(()=>import("./configuration.html-B9hAN6Qn.js"),__vite__mapDeps([278,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.5.0/maintain/bpe/",{loader:()=>m(()=>import("./index.html-DNh52AH1.js"),__vite__mapDeps([279,2])),meta:{t:"BPE Server",i:"module"}}],["/v1.5.0/maintain/bpe/access-control.html",{loader:()=>m(()=>import("./access-control.html-DMJizDq8.js"),__vite__mapDeps([280,2])),meta:{t:"Access Control",i:"config"}}],["/v1.5.0/maintain/bpe/configuration.html",{loader:()=>m(()=>import("./configuration.html-BV76pvkE.js"),__vite__mapDeps([281,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.5.0/maintain/bpe/oidc.html",{loader:()=>m(()=>import("./oidc.html-DxM6kWsg.js"),__vite__mapDeps([282,2])),meta:{t:"OpenID Connect",i:"config"}}],["/v1.5.0/maintain/bpe-reverse-proxy/",{loader:()=>m(()=>import("./index.html-NndMGsGt.js"),__vite__mapDeps([283,2])),meta:{t:"BPE Reverse Proxy",i:"module"}}],["/v1.5.0/maintain/bpe-reverse-proxy/configuration.html",{loader:()=>m(()=>import("./configuration.html-Djb_ityZ.js"),__vite__mapDeps([284,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.5.0/maintain/fhir/",{loader:()=>m(()=>import("./index.html-HEmADpRs.js"),__vite__mapDeps([285,2])),meta:{t:"FHIR Server",i:"module"}}],["/v1.5.0/maintain/fhir/access-control.html",{loader:()=>m(()=>import("./access-control.html-DyFJhXMW.js"),__vite__mapDeps([286,2])),meta:{t:"Access Control",i:"config"}}],["/v1.5.0/maintain/fhir/configuration.html",{loader:()=>m(()=>import("./configuration.html-1YBSJGs3.js"),__vite__mapDeps([287,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.5.0/maintain/fhir/oidc.html",{loader:()=>m(()=>import("./oidc.html-BCFFNQSE.js"),__vite__mapDeps([288,2])),meta:{t:"OpenID Connect",i:"config"}}],["/v1.5.0/maintain/fhir-reverse-proxy/",{loader:()=>m(()=>import("./index.html-BTL8SJ98.js"),__vite__mapDeps([289,2])),meta:{t:"FHIR Reverse Proxy",i:"module"}}],["/v1.5.0/maintain/fhir-reverse-proxy/configuration.html",{loader:()=>m(()=>import("./configuration.html-Ckb_V_64.js"),__vite__mapDeps([290,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.5.1/maintain/bpe/",{loader:()=>m(()=>import("./index.html-Bv1aj902.js"),__vite__mapDeps([291,2])),meta:{t:"BPE Server",i:"module"}}],["/v1.5.1/maintain/bpe/access-control.html",{loader:()=>m(()=>import("./access-control.html-CpcmB-vr.js"),__vite__mapDeps([292,2])),meta:{t:"Access Control",i:"config"}}],["/v1.5.1/maintain/bpe/configuration.html",{loader:()=>m(()=>import("./configuration.html-D3kNqaHh.js"),__vite__mapDeps([293,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.5.1/maintain/bpe/oidc.html",{loader:()=>m(()=>import("./oidc.html-CpxbdObG.js"),__vite__mapDeps([294,2])),meta:{t:"OpenID Connect",i:"config"}}],["/v1.5.1/maintain/bpe-reverse-proxy/",{loader:()=>m(()=>import("./index.html-CJo6ER2h.js"),__vite__mapDeps([295,2])),meta:{t:"BPE Reverse Proxy",i:"module"}}],["/v1.5.1/maintain/bpe-reverse-proxy/configuration.html",{loader:()=>m(()=>import("./configuration.html-DTrhBlyo.js"),__vite__mapDeps([296,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.5.1/maintain/fhir/",{loader:()=>m(()=>import("./index.html-Oq1aOvOs.js"),__vite__mapDeps([297,2])),meta:{t:"FHIR Server",i:"module"}}],["/v1.5.1/maintain/fhir/access-control.html",{loader:()=>m(()=>import("./access-control.html-CG007Yhx.js"),__vite__mapDeps([298,2])),meta:{t:"Access Control",i:"config"}}],["/v1.5.1/maintain/fhir/configuration.html",{loader:()=>m(()=>import("./configuration.html-B6IQGRyt.js"),__vite__mapDeps([299,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.5.1/maintain/fhir/oidc.html",{loader:()=>m(()=>import("./oidc.html-BW3uDMyZ.js"),__vite__mapDeps([300,2])),meta:{t:"OpenID Connect",i:"config"}}],["/v1.5.1/maintain/fhir-reverse-proxy/",{loader:()=>m(()=>import("./index.html-CP8c3pUz.js"),__vite__mapDeps([301,2])),meta:{t:"FHIR Reverse Proxy",i:"module"}}],["/v1.5.1/maintain/fhir-reverse-proxy/configuration.html",{loader:()=>m(()=>import("./configuration.html-DkcRMl9h.js"),__vite__mapDeps([302,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.5.2/maintain/bpe/",{loader:()=>m(()=>import("./index.html-DPXv6obM.js"),__vite__mapDeps([303,2])),meta:{t:"BPE Server",i:"module"}}],["/v1.5.2/maintain/bpe/access-control.html",{loader:()=>m(()=>import("./access-control.html-DMHcMgwJ.js"),__vite__mapDeps([304,2])),meta:{t:"Access Control",i:"config"}}],["/v1.5.2/maintain/bpe/configuration.html",{loader:()=>m(()=>import("./configuration.html-SiknXzZc.js"),__vite__mapDeps([305,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.5.2/maintain/bpe/oidc.html",{loader:()=>m(()=>import("./oidc.html-DEex2PUu.js"),__vite__mapDeps([306,2])),meta:{t:"OpenID Connect",i:"config"}}],["/v1.5.2/maintain/bpe-reverse-proxy/",{loader:()=>m(()=>import("./index.html-FYN7o675.js"),__vite__mapDeps([307,2])),meta:{t:"BPE Reverse Proxy",i:"module"}}],["/v1.5.2/maintain/bpe-reverse-proxy/configuration.html",{loader:()=>m(()=>import("./configuration.html-CTyYG9BU.js"),__vite__mapDeps([308,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.5.2/maintain/fhir/",{loader:()=>m(()=>import("./index.html-Djr1tYSO.js"),__vite__mapDeps([309,2])),meta:{t:"FHIR Server",i:"module"}}],["/v1.5.2/maintain/fhir/access-control.html",{loader:()=>m(()=>import("./access-control.html-WWQBmNVa.js"),__vite__mapDeps([310,2])),meta:{t:"Access Control",i:"config"}}],["/v1.5.2/maintain/fhir/configuration.html",{loader:()=>m(()=>import("./configuration.html-BwxW1XeX.js"),__vite__mapDeps([311,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/v1.5.2/maintain/fhir/oidc.html",{loader:()=>m(()=>import("./oidc.html-9DP6k1sI.js"),__vite__mapDeps([312,2])),meta:{t:"OpenID Connect",i:"config"}}],["/v1.5.2/maintain/fhir-reverse-proxy/",{loader:()=>m(()=>import("./index.html-BN2y9VB2.js"),__vite__mapDeps([313,2])),meta:{t:"FHIR Reverse Proxy",i:"module"}}],["/v1.5.2/maintain/fhir-reverse-proxy/configuration.html",{loader:()=>m(()=>import("./configuration.html-BXSsgalC.js"),__vite__mapDeps([314,2])),meta:{t:"Configuration Parameters",i:"config"}}],["/404.html",{loader:()=>m(()=>import("./404.html-CMAq4TQ3.js"),__vite__mapDeps([315,2])),meta:{t:""}}],["/intro/info/",{loader:()=>m(()=>import("./index.html-C0hIsdj5.js"),__vite__mapDeps([316,2])),meta:{t:"Info"}}]]);/*! + * vue-router v4.3.0 + * (c) 2024 Eduardo San Martin Morote + * @license MIT + */const ln=typeof document<"u";function If(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const ue=Object.assign;function mr(e,t){const n={};for(const o in t){const r=t[o];n[o]=it(r)?r.map(e):e(r)}return n}const Nn=()=>{},it=Array.isArray,rs=/#/g,Af=/&/g,Cf=/\//g,wf=/=/g,Rf=/\?/g,is=/\+/g,Df=/%5B/g,kf=/%5D/g,ls=/%5E/g,Of=/%60/g,as=/%7B/g,Sf=/%7C/g,ss=/%7D/g,Vf=/%20/g;function hi(e){return encodeURI(""+e).replace(Sf,"|").replace(Df,"[").replace(kf,"]")}function Mf(e){return hi(e).replace(as,"{").replace(ss,"}").replace(ls,"^")}function Sr(e){return hi(e).replace(is,"%2B").replace(Vf,"+").replace(rs,"%23").replace(Af,"%26").replace(Of,"`").replace(as,"{").replace(ss,"}").replace(ls,"^")}function Ff(e){return Sr(e).replace(wf,"%3D")}function Hf(e){return hi(e).replace(rs,"%23").replace(Rf,"%3F")}function Nf(e){return e==null?"":Hf(e).replace(Cf,"%2F")}function qn(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const $f=/\/$/,Bf=e=>e.replace($f,"");function hr(e,t,n="/"){let o,r={},i="",l="";const a=t.indexOf("#");let s=t.indexOf("?");return a=0&&(s=-1),s>-1&&(o=t.slice(0,s),i=t.slice(s+1,a>-1?a:t.length),r=e(i)),a>-1&&(o=o||t.slice(0,a),l=t.slice(a,t.length)),o=Gf(o??t,n),{fullPath:o+(i&&"?")+i+l,path:o,query:r,hash:qn(l)}}function jf(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function _l(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function zf(e,t,n){const o=t.matched.length-1,r=n.matched.length-1;return o>-1&&o===r&&gn(t.matched[o],n.matched[r])&&cs(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function gn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function cs(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Wf(e[n],t[n]))return!1;return!0}function Wf(e,t){return it(e)?bl(e,t):it(t)?bl(t,e):e===t}function bl(e,t){return it(t)?e.length===t.length&&e.every((n,o)=>n===t[o]):e.length===1&&e[0]===t}function Gf(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),o=e.split("/"),r=o[o.length-1];(r===".."||r===".")&&o.push("");let i=n.length-1,l,a;for(l=0;l1&&i--;else break;return n.slice(0,i).join("/")+"/"+o.slice(l).join("/")}var Zn;(function(e){e.pop="pop",e.push="push"})(Zn||(Zn={}));var $n;(function(e){e.back="back",e.forward="forward",e.unknown=""})($n||($n={}));function Uf(e){if(!e)if(ln){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Bf(e)}const Kf=/^[^#]+#/;function qf(e,t){return e.replace(Kf,"#")+t}function Zf(e,t){const n=document.documentElement.getBoundingClientRect(),o=e.getBoundingClientRect();return{behavior:t.behavior,left:o.left-n.left-(t.left||0),top:o.top-n.top-(t.top||0)}}const Zo=()=>({left:window.scrollX,top:window.scrollY});function Yf(e){let t;if("el"in e){const n=e.el,o=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?o?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=Zf(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function El(e,t){return(history.state?history.state.position-t:-1)+e}const Vr=new Map;function Xf(e,t){Vr.set(e,t)}function Jf(e){const t=Vr.get(e);return Vr.delete(e),t}let Qf=()=>location.protocol+"//"+location.host;function us(e,t){const{pathname:n,search:o,hash:r}=t,i=e.indexOf("#");if(i>-1){let a=r.includes(e.slice(i))?e.slice(i).length:1,s=r.slice(a);return s[0]!=="/"&&(s="/"+s),_l(s,"")}return _l(n,e)+o+r}function ep(e,t,n,o){let r=[],i=[],l=null;const a=({state:p})=>{const v=us(e,location),_=n.value,x=t.value;let E=0;if(p){if(n.value=v,t.value=p,l&&l===_){l=null;return}E=x?p.position-x.position:0}else o(v);r.forEach(b=>{b(n.value,_,{delta:E,type:Zn.pop,direction:E?E>0?$n.forward:$n.back:$n.unknown})})};function s(){l=n.value}function u(p){r.push(p);const v=()=>{const _=r.indexOf(p);_>-1&&r.splice(_,1)};return i.push(v),v}function d(){const{history:p}=window;p.state&&p.replaceState(ue({},p.state,{scroll:Zo()}),"")}function f(){for(const p of i)p();i=[],window.removeEventListener("popstate",a),window.removeEventListener("beforeunload",d)}return window.addEventListener("popstate",a),window.addEventListener("beforeunload",d,{passive:!0}),{pauseListeners:s,listen:u,destroy:f}}function yl(e,t,n,o=!1,r=!1){return{back:e,current:t,forward:n,replaced:o,position:window.history.length,scroll:r?Zo():null}}function tp(e){const{history:t,location:n}=window,o={value:us(e,n)},r={value:t.state};r.value||i(o.value,{back:null,current:o.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(s,u,d){const f=e.indexOf("#"),p=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+s:Qf()+e+s;try{t[d?"replaceState":"pushState"](u,"",p),r.value=u}catch(v){console.error(v),n[d?"replace":"assign"](p)}}function l(s,u){const d=ue({},t.state,yl(r.value.back,s,r.value.forward,!0),u,{position:r.value.position});i(s,d,!0),o.value=s}function a(s,u){const d=ue({},r.value,t.state,{forward:s,scroll:Zo()});i(d.current,d,!0);const f=ue({},yl(o.value,s,null),{position:d.position+1},u);i(s,f,!1),o.value=s}return{location:o,state:r,push:a,replace:l}}function np(e){e=Uf(e);const t=tp(e),n=ep(e,t.state,t.location,t.replace);function o(i,l=!0){l||n.pauseListeners(),history.go(i)}const r=ue({location:"",base:e,go:o,createHref:qf.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function op(e){return typeof e=="string"||e&&typeof e=="object"}function ds(e){return typeof e=="string"||typeof e=="symbol"}const _t={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},fs=Symbol("");var Pl;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Pl||(Pl={}));function _n(e,t){return ue(new Error,{type:e,[fs]:!0},t)}function vt(e,t){return e instanceof Error&&fs in e&&(t==null||!!(e.type&t))}const xl="[^/]+?",rp={sensitive:!1,strict:!1,start:!0,end:!0},ip=/[.+*?^${}()[\]/\\]/g;function lp(e,t){const n=ue({},rp,t),o=[];let r=n.start?"^":"";const i=[];for(const u of e){const d=u.length?[]:[90];n.strict&&!u.length&&(r+="/");for(let f=0;ft.length?t.length===1&&t[0]===80?1:-1:0}function sp(e,t){let n=0;const o=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const cp={type:0,value:""},up=/[a-zA-Z0-9_]/;function dp(e){if(!e)return[[]];if(e==="/")return[[cp]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(v){throw new Error(`ERR (${n})/"${u}": ${v}`)}let n=0,o=n;const r=[];let i;function l(){i&&r.push(i),i=[]}let a=0,s,u="",d="";function f(){u&&(n===0?i.push({type:0,value:u}):n===1||n===2||n===3?(i.length>1&&(s==="*"||s==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),i.push({type:1,value:u,regexp:d,repeatable:s==="*"||s==="+",optional:s==="*"||s==="?"})):t("Invalid state to consume buffer"),u="")}function p(){u+=s}for(;a{l(L)}:Nn}function l(d){if(ds(d)){const f=o.get(d);f&&(o.delete(d),n.splice(n.indexOf(f),1),f.children.forEach(l),f.alias.forEach(l))}else{const f=n.indexOf(d);f>-1&&(n.splice(f,1),d.record.name&&o.delete(d.record.name),d.children.forEach(l),d.alias.forEach(l))}}function a(){return n}function s(d){let f=0;for(;f=0&&(d.record.path!==n[f].record.path||!ps(d,n[f]));)f++;n.splice(f,0,d),d.record.name&&!Il(d)&&o.set(d.record.name,d)}function u(d,f){let p,v={},_,x;if("name"in d&&d.name){if(p=o.get(d.name),!p)throw _n(1,{location:d});x=p.record.name,v=ue(Tl(f.params,p.keys.filter(L=>!L.optional).concat(p.parent?p.parent.keys.filter(L=>L.optional):[]).map(L=>L.name)),d.params&&Tl(d.params,p.keys.map(L=>L.name))),_=p.stringify(v)}else if(d.path!=null)_=d.path,p=n.find(L=>L.re.test(_)),p&&(v=p.parse(_),x=p.record.name);else{if(p=f.name?o.get(f.name):n.find(L=>L.re.test(f.path)),!p)throw _n(1,{location:d,currentLocation:f});x=p.record.name,v=ue({},f.params,d.params),_=p.stringify(v)}const E=[];let b=p;for(;b;)E.unshift(b.record),b=b.parent;return{name:x,path:_,params:v,matched:E,meta:vp(E)}}return e.forEach(d=>i(d)),{addRoute:i,resolve:u,removeRoute:l,getRoutes:a,getRecordMatcher:r}}function Tl(e,t){const n={};for(const o of t)o in e&&(n[o]=e[o]);return n}function mp(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:hp(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function hp(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const o in e.components)t[o]=typeof n=="object"?n[o]:n;return t}function Il(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function vp(e){return e.reduce((t,n)=>ue(t,n.meta),{})}function Al(e,t){const n={};for(const o in e)n[o]=o in t?t[o]:e[o];return n}function ps(e,t){return t.children.some(n=>n===e||ps(e,n))}function gp(e){const t={};if(e===""||e==="?")return t;const o=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;ri&&Sr(i)):[o&&Sr(o)]).forEach(i=>{i!==void 0&&(t+=(t.length?"&":"")+n,i!=null&&(t+="="+i))})}return t}function _p(e){const t={};for(const n in e){const o=e[n];o!==void 0&&(t[n]=it(o)?o.map(r=>r==null?null:""+r):o==null?o:""+o)}return t}const bp=Symbol(""),wl=Symbol(""),Yo=Symbol(""),vi=Symbol(""),Mr=Symbol("");function Cn(){let e=[];function t(o){return e.push(o),()=>{const r=e.indexOf(o);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Dt(e,t,n,o,r,i=l=>l()){const l=o&&(o.enterCallbacks[r]=o.enterCallbacks[r]||[]);return()=>new Promise((a,s)=>{const u=p=>{p===!1?s(_n(4,{from:n,to:t})):p instanceof Error?s(p):op(p)?s(_n(2,{from:t,to:p})):(l&&o.enterCallbacks[r]===l&&typeof p=="function"&&l.push(p),a())},d=i(()=>e.call(o&&o.instances[r],t,n,u));let f=Promise.resolve(d);e.length<3&&(f=f.then(u)),f.catch(p=>s(p))})}function vr(e,t,n,o,r=i=>i()){const i=[];for(const l of e)for(const a in l.components){let s=l.components[a];if(!(t!=="beforeRouteEnter"&&!l.instances[a]))if(Ep(s)){const d=(s.__vccOpts||s)[t];d&&i.push(Dt(d,n,o,l,a,r))}else{let u=s();i.push(()=>u.then(d=>{if(!d)return Promise.reject(new Error(`Couldn't resolve component "${a}" at "${l.path}"`));const f=If(d)?d.default:d;l.components[a]=f;const v=(f.__vccOpts||f)[t];return v&&Dt(v,n,o,l,a,r)()}))}}return i}function Ep(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Rl(e){const t=Te(Yo),n=Te(vi),o=I(()=>t.resolve(Kt(e.to))),r=I(()=>{const{matched:s}=o.value,{length:u}=s,d=s[u-1],f=n.matched;if(!d||!f.length)return-1;const p=f.findIndex(gn.bind(null,d));if(p>-1)return p;const v=Dl(s[u-2]);return u>1&&Dl(d)===v&&f[f.length-1].path!==v?f.findIndex(gn.bind(null,s[u-2])):p}),i=I(()=>r.value>-1&&Lp(n.params,o.value.params)),l=I(()=>r.value>-1&&r.value===n.matched.length-1&&cs(n.params,o.value.params));function a(s={}){return xp(s)?t[Kt(e.replace)?"replace":"push"](Kt(e.to)).catch(Nn):Promise.resolve()}return{route:o,href:I(()=>o.value.href),isActive:i,isExactActive:l,navigate:a}}const yp=U({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Rl,setup(e,{slots:t}){const n=to(Rl(e)),{options:o}=Te(Yo),r=I(()=>({[kl(e.activeClass,o.linkActiveClass,"router-link-active")]:n.isActive,[kl(e.exactActiveClass,o.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&t.default(n);return e.custom?i:c("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},i)}}}),Pp=yp;function xp(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Lp(e,t){for(const n in t){const o=t[n],r=e[n];if(typeof o=="string"){if(o!==r)return!1}else if(!it(r)||r.length!==o.length||o.some((i,l)=>i!==r[l]))return!1}return!0}function Dl(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const kl=(e,t,n)=>e??t??n,Tp=U({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const o=Te(Mr),r=I(()=>e.route||o.value),i=Te(wl,0),l=I(()=>{let u=Kt(i);const{matched:d}=r.value;let f;for(;(f=d[u])&&!f.components;)u++;return u}),a=I(()=>r.value.matched[l.value]);qt(wl,I(()=>l.value+1)),qt(bp,a),qt(Mr,r);const s=J();return le(()=>[s.value,a.value,e.name],([u,d,f],[p,v,_])=>{d&&(d.instances[f]=u,v&&v!==d&&u&&u===p&&(d.leaveGuards.size||(d.leaveGuards=v.leaveGuards),d.updateGuards.size||(d.updateGuards=v.updateGuards))),u&&d&&(!v||!gn(d,v)||!p)&&(d.enterCallbacks[f]||[]).forEach(x=>x(u))},{flush:"post"}),()=>{const u=r.value,d=e.name,f=a.value,p=f&&f.components[d];if(!p)return Ol(n.default,{Component:p,route:u});const v=f.props[d],_=v?v===!0?u.params:typeof v=="function"?v(u):v:null,E=c(p,ue({},_,t,{onVnodeUnmounted:b=>{b.component.isUnmounted&&(f.instances[d]=null)},ref:s}));return Ol(n.default,{Component:E,route:u})||E}}});function Ol(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Ip=Tp;function Ap(e){const t=pp(e.routes,e),n=e.parseQuery||gp,o=e.stringifyQuery||Cl,r=e.history,i=Cn(),l=Cn(),a=Cn(),s=Se(_t);let u=_t;ln&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=mr.bind(null,w=>""+w),f=mr.bind(null,Nf),p=mr.bind(null,qn);function v(w,B){let N,W;return ds(w)?(N=t.getRecordMatcher(w),W=B):W=w,t.addRoute(W,N)}function _(w){const B=t.getRecordMatcher(w);B&&t.removeRoute(B)}function x(){return t.getRoutes().map(w=>w.record)}function E(w){return!!t.getRecordMatcher(w)}function b(w,B){if(B=ue({},B||s.value),typeof w=="string"){const g=hr(n,w,B.path),P=t.resolve({path:g.path},B),R=r.createHref(g.fullPath);return ue(g,P,{params:p(P.params),hash:qn(g.hash),redirectedFrom:void 0,href:R})}let N;if(w.path!=null)N=ue({},w,{path:hr(n,w.path,B.path).path});else{const g=ue({},w.params);for(const P in g)g[P]==null&&delete g[P];N=ue({},w,{params:f(g)}),B.params=f(B.params)}const W=t.resolve(N,B),ce=w.hash||"";W.params=d(p(W.params));const me=jf(o,ue({},w,{hash:Mf(ce),path:W.path})),h=r.createHref(me);return ue({fullPath:me,hash:ce,query:o===Cl?_p(w.query):w.query||{}},W,{redirectedFrom:void 0,href:h})}function L(w){return typeof w=="string"?hr(n,w,s.value.path):ue({},w)}function y(w,B){if(u!==w)return _n(8,{from:B,to:w})}function A(w){return z(w)}function F(w){return A(ue(L(w),{replace:!0}))}function T(w){const B=w.matched[w.matched.length-1];if(B&&B.redirect){const{redirect:N}=B;let W=typeof N=="function"?N(w):N;return typeof W=="string"&&(W=W.includes("?")||W.includes("#")?W=L(W):{path:W},W.params={}),ue({query:w.query,hash:w.hash,params:W.path!=null?{}:w.params},W)}}function z(w,B){const N=u=b(w),W=s.value,ce=w.state,me=w.force,h=w.replace===!0,g=T(N);if(g)return z(ue(L(g),{state:typeof g=="object"?ue({},ce,g.state):ce,force:me,replace:h}),B||N);const P=N;P.redirectedFrom=B;let R;return!me&&zf(o,W,N)&&(R=_n(16,{to:P,from:W}),at(W,W,!0,!1)),(R?Promise.resolve(R):k(P,W)).catch(C=>vt(C)?vt(C,2)?C:Pt(C):G(C,P,W)).then(C=>{if(C){if(vt(C,2))return z(ue({replace:h},L(C.to),{state:typeof C.to=="object"?ue({},ce,C.to.state):ce,force:me}),B||P)}else C=V(P,W,!0,h,ce);return Y(P,W,C),C})}function H(w,B){const N=y(w,B);return N?Promise.reject(N):Promise.resolve()}function Z(w){const B=on.values().next().value;return B&&typeof B.runWithContext=="function"?B.runWithContext(w):w()}function k(w,B){let N;const[W,ce,me]=Cp(w,B);N=vr(W.reverse(),"beforeRouteLeave",w,B);for(const g of W)g.leaveGuards.forEach(P=>{N.push(Dt(P,w,B))});const h=H.bind(null,w,B);return N.push(h),ke(N).then(()=>{N=[];for(const g of i.list())N.push(Dt(g,w,B));return N.push(h),ke(N)}).then(()=>{N=vr(ce,"beforeRouteUpdate",w,B);for(const g of ce)g.updateGuards.forEach(P=>{N.push(Dt(P,w,B))});return N.push(h),ke(N)}).then(()=>{N=[];for(const g of me)if(g.beforeEnter)if(it(g.beforeEnter))for(const P of g.beforeEnter)N.push(Dt(P,w,B));else N.push(Dt(g.beforeEnter,w,B));return N.push(h),ke(N)}).then(()=>(w.matched.forEach(g=>g.enterCallbacks={}),N=vr(me,"beforeRouteEnter",w,B,Z),N.push(h),ke(N))).then(()=>{N=[];for(const g of l.list())N.push(Dt(g,w,B));return N.push(h),ke(N)}).catch(g=>vt(g,8)?g:Promise.reject(g))}function Y(w,B,N){a.list().forEach(W=>Z(()=>W(w,B,N)))}function V(w,B,N,W,ce){const me=y(w,B);if(me)return me;const h=B===_t,g=ln?history.state:{};N&&(W||h?r.replace(w.fullPath,ue({scroll:h&&g&&g.scroll},ce)):r.push(w.fullPath,ce)),s.value=w,at(w,B,N,h),Pt()}let Q;function be(){Q||(Q=r.listen((w,B,N)=>{if(!uo.listening)return;const W=b(w),ce=T(W);if(ce){z(ue(ce,{replace:!0}),W).catch(Nn);return}u=W;const me=s.value;ln&&Xf(El(me.fullPath,N.delta),Zo()),k(W,me).catch(h=>vt(h,12)?h:vt(h,2)?(z(h.to,W).then(g=>{vt(g,20)&&!N.delta&&N.type===Zn.pop&&r.go(-1,!1)}).catch(Nn),Promise.reject()):(N.delta&&r.go(-N.delta,!1),G(h,W,me))).then(h=>{h=h||V(W,me,!1),h&&(N.delta&&!vt(h,8)?r.go(-N.delta,!1):N.type===Zn.pop&&vt(h,20)&&r.go(-1,!1)),Y(W,me,h)}).catch(Nn)}))}let Ee=Cn(),K=Cn(),oe;function G(w,B,N){Pt(w);const W=K.list();return W.length?W.forEach(ce=>ce(w,B,N)):console.error(w),Promise.reject(w)}function et(){return oe&&s.value!==_t?Promise.resolve():new Promise((w,B)=>{Ee.add([w,B])})}function Pt(w){return oe||(oe=!w,be(),Ee.list().forEach(([B,N])=>w?N(w):B()),Ee.reset()),w}function at(w,B,N,W){const{scrollBehavior:ce}=e;if(!ln||!ce)return Promise.resolve();const me=!N&&Jf(El(w.fullPath,0))||(W||!N)&&history.state&&history.state.scroll||null;return Xt().then(()=>ce(w,B,me)).then(h=>h&&Yf(h)).catch(h=>G(h,w,B))}const Fe=w=>r.go(w);let nn;const on=new Set,uo={currentRoute:s,listening:!0,addRoute:v,removeRoute:_,hasRoute:E,getRoutes:x,resolve:b,options:e,push:A,replace:F,go:Fe,back:()=>Fe(-1),forward:()=>Fe(1),beforeEach:i.add,beforeResolve:l.add,afterEach:a.add,onError:K.add,isReady:et,install(w){const B=this;w.component("RouterLink",Pp),w.component("RouterView",Ip),w.config.globalProperties.$router=B,Object.defineProperty(w.config.globalProperties,"$route",{enumerable:!0,get:()=>Kt(s)}),ln&&!nn&&s.value===_t&&(nn=!0,A(r.location).catch(ce=>{}));const N={};for(const ce in _t)Object.defineProperty(N,ce,{get:()=>s.value[ce],enumerable:!0});w.provide(Yo,B),w.provide(vi,da(N)),w.provide(Mr,s);const W=w.unmount;on.add(w),w.unmount=function(){on.delete(w),on.size<1&&(u=_t,Q&&Q(),Q=null,s.value=_t,nn=!1,oe=!1),W()}}};function ke(w){return w.reduce((B,N)=>B.then(()=>Z(N)),Promise.resolve())}return uo}function Cp(e,t){const n=[],o=[],r=[],i=Math.max(t.matched.length,e.matched.length);for(let l=0;lgn(u,a))?o.push(a):n.push(a));const s=e.matched[l];s&&(t.matched.find(u=>gn(u,s))||r.push(s))}return[n,o,r]}function Ln(){return Te(Yo)}function Qt(){return Te(vi)}var gi=Symbol(""),ht=()=>{const e=Te(gi);if(!e)throw new Error("useClientData() is called without provider.");return e},wp=()=>ht().pageComponent,Pe=()=>ht().pageData,Ie=()=>ht().pageFrontmatter,Rp=()=>ht().pageHead,ms=()=>ht().pageLang,Dp=()=>ht().pageLayout,Ft=()=>ht().routeLocale,kp=()=>ht().routes,hs=()=>ht().siteData,Xo=()=>ht().siteLocaleData,Op=Symbol(""),Fr=Se(Lf),Yn=Se(Tf),vs=e=>{const t=Ef(e);if(Yn.value[t])return t;const n=encodeURI(t);return Yn.value[n]?n:Fr.value[t]||Fr.value[n]||t},Jo=e=>{const t=vs(e),n=Yn.value[t]??{...Yn.value["/404.html"],notFound:!0};return{path:t,notFound:!1,...n}},Qo=U({name:"ClientOnly",setup(e,t){const n=J(!1);return _e(()=>{n.value=!0}),()=>{var o,r;return n.value?(r=(o=t.slots).default)==null?void 0:r.call(o):null}}}),gs=U({name:"Content",props:{path:{type:String,required:!1,default:""}},setup(e){const t=wp(),n=I(()=>{if(!e.path)return t.value;const o=Jo(e.path);return wa(()=>o.loader().then(({comp:r})=>r))});return()=>c(n.value)}}),lt=(e={})=>e,Ne=e=>Jt(e)?e:`/${os(e)}`,Sp=e=>{if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget){const t=e.currentTarget.getAttribute("target");if(t!=null&&t.match(/\b_blank\b/i))return}return e.preventDefault(),!0}},Ue=({active:e=!1,activeClass:t="route-link-active",to:n,...o},{slots:r})=>{var s;const i=Ln(),l=vs(n),a=l.startsWith("#")||l.startsWith("?")?l:Ne(l);return c("a",{...o,class:["route-link",{[t]:e}],href:a,onClick:(u={})=>{Sp(u)?i.push(n).catch():Promise.resolve()}},(s=r.default)==null?void 0:s.call(r))};Ue.displayName="RouteLink";Ue.props={active:Boolean,activeClass:String,to:String};var Vp="Layout",Mp="en-US",Bt=to({resolveLayouts:e=>e.reduce((t,n)=>({...t,...n.layouts}),{}),resolvePageHead:(e,t,n)=>{const o=we(t.description)?t.description:n.description,r=[...Array.isArray(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:o}]];return gf(r)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(n=>!!n).join(" | "),resolvePageLang:(e,t)=>e.lang||t.lang||Mp,resolvePageLayout:(e,t)=>{const n=we(e.frontmatter.layout)?e.frontmatter.layout:Vp;if(!t[n])throw new Error(`[vuepress] Cannot resolve layout: ${n}`);return t[n]},resolveRouteLocale:(e,t)=>yf(e,t),resolveSiteLocaleData:(e,t)=>{var n;return{...e,...e.locales[t],head:[...((n=e.locales[t])==null?void 0:n.head)??[],...e.head??[]]}}});const Fp={},en=e=>{const t=Ft();return I(()=>e[t.value]??{})},pt=(e,t)=>{var o;const n=(o=(t==null?void 0:t._instance)||xn())==null?void 0:o.appContext.components;return n?e in n||Qe(e)in n||eo(Qe(e))in n:!1},Hp=e=>new Promise(t=>setTimeout(t,e)),Np=e=>typeof e<"u",gr=e=>typeof e=="number",Hr=Array.isArray,bn=(e,t)=>we(e)&&e.startsWith(t),$p=(e,t)=>we(e)&&e.endsWith(t),Bp=Object.entries,er=Object.keys,jp=Object.values,zp=e=>{if(e){if(typeof e=="number")return new Date(e);const t=Date.parse(e.toString());if(!Number.isNaN(t))return new Date(t)}return null},_i=e=>bn(e,"/");function _s(e,t){let n,o,r;const i=J(!0),l=()=>{i.value=!0,r()};le(e,l,{flush:"sync"});const a=typeof t=="function"?t:t.get,s=typeof t=="function"?void 0:t.set,u=li((d,f)=>(o=d,r=f,{get(){return i.value&&(n=a(),i.value=!1),o(),n},set(p){s==null||s(p)}}));return Object.isExtensible(u)&&(u.trigger=l),u}function tn(e){return Ql()?(Zc(e),!0):!1}function $e(e){return typeof e=="function"?e():Kt(e)}const lo=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Wp=Object.prototype.toString,Gp=e=>Wp.call(e)==="[object Object]",Et=()=>{},Nr=Up();function Up(){var e,t;return lo&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function bi(e,t){function n(...o){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,o),{fn:t,thisArg:this,args:o})).then(r).catch(i)})}return n}const bs=e=>e();function Kp(e,t={}){let n,o,r=Et;const i=a=>{clearTimeout(a),r(),r=Et};return a=>{const s=$e(e),u=$e(t.maxWait);return n&&i(n),s<=0||u!==void 0&&u<=0?(o&&(i(o),o=null),Promise.resolve(a())):new Promise((d,f)=>{r=t.rejectOnCancel?f:d,u&&!o&&(o=setTimeout(()=>{n&&i(n),o=null,d(a())},u)),n=setTimeout(()=>{o&&i(o),o=null,d(a())},s)})}}function qp(...e){let t=0,n,o=!0,r=Et,i,l,a,s,u;!De(e[0])&&typeof e[0]=="object"?{delay:l,trailing:a=!0,leading:s=!0,rejectOnCancel:u=!1}=e[0]:[l,a=!0,s=!0,u=!1]=e;const d=()=>{n&&(clearTimeout(n),n=void 0,r(),r=Et)};return p=>{const v=$e(l),_=Date.now()-t,x=()=>i=p();return d(),v<=0?(t=Date.now(),x()):(_>v&&(s||!o)?(t=Date.now(),x()):a&&(i=new Promise((E,b)=>{r=u?b:E,n=setTimeout(()=>{t=Date.now(),o=!0,E(x()),d()},Math.max(0,v-_))})),!s&&!n&&(n=setTimeout(()=>o=!0,v)),o=!1,i)}}function Zp(e=bs){const t=J(!0);function n(){t.value=!1}function o(){t.value=!0}const r=(...i)=>{t.value&&e(...i)};return{isActive:yn(t),pause:n,resume:o,eventFilter:r}}function Yp(e){let t;function n(){return t||(t=e()),t}return n.reset=async()=>{const o=t;t=void 0,o&&await o},n}function Xp(e){return e||xn()}function Jp(...e){if(e.length!==1)return zo(...e);const t=e[0];return typeof t=="function"?yn(li(()=>({get:t,set:Et}))):J(t)}function Es(e,t=200,n={}){return bi(Kp(t,n),e)}function Qp(e,t=200,n=!1,o=!0,r=!1){return bi(qp(t,n,o,r),e)}function em(e,t,n={}){const{eventFilter:o=bs,...r}=n;return le(e,bi(o,t),r)}function tm(e,t,n={}){const{eventFilter:o,...r}=n,{eventFilter:i,pause:l,resume:a,isActive:s}=Zp(o);return{stop:em(e,t,{...r,eventFilter:i}),pause:l,resume:a,isActive:s}}function tr(e,t=!0,n){Xp()?_e(e,n):t?e():Xt(e)}function nm(e,t,n={}){const{immediate:o=!0}=n,r=J(!1);let i=null;function l(){i&&(clearTimeout(i),i=null)}function a(){r.value=!1,l()}function s(...u){l(),r.value=!0,i=setTimeout(()=>{r.value=!1,i=null,e(...u)},$e(t))}return o&&(r.value=!0,lo&&s()),tn(a),{isPending:yn(r),start:s,stop:a}}function $r(e=!1,t={}){const{truthyValue:n=!0,falsyValue:o=!1}=t,r=De(e),i=J(e);function l(a){if(arguments.length)return i.value=a,i.value;{const s=$e(n);return i.value=i.value===s?$e(o):s,i.value}}return r?l:[i,l]}function Ke(e){var t;const n=$e(e);return(t=n==null?void 0:n.$el)!=null?t:n}const mt=lo?window:void 0,ys=lo?window.document:void 0,Ps=lo?window.navigator:void 0;function ye(...e){let t,n,o,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,o,r]=e,t=mt):[t,n,o,r]=e,!t)return Et;Array.isArray(n)||(n=[n]),Array.isArray(o)||(o=[o]);const i=[],l=()=>{i.forEach(d=>d()),i.length=0},a=(d,f,p,v)=>(d.addEventListener(f,p,v),()=>d.removeEventListener(f,p,v)),s=le(()=>[Ke(t),$e(r)],([d,f])=>{if(l(),!d)return;const p=Gp(f)?{...f}:f;i.push(...n.flatMap(v=>o.map(_=>a(d,v,_,p))))},{immediate:!0,flush:"post"}),u=()=>{s(),l()};return tn(u),u}let Sl=!1;function om(e,t,n={}){const{window:o=mt,ignore:r=[],capture:i=!0,detectIframe:l=!1}=n;if(!o)return Et;Nr&&!Sl&&(Sl=!0,Array.from(o.document.body.children).forEach(p=>p.addEventListener("click",Et)),o.document.documentElement.addEventListener("click",Et));let a=!0;const s=p=>r.some(v=>{if(typeof v=="string")return Array.from(o.document.querySelectorAll(v)).some(_=>_===p.target||p.composedPath().includes(_));{const _=Ke(v);return _&&(p.target===_||p.composedPath().includes(_))}}),d=[ye(o,"click",p=>{const v=Ke(e);if(!(!v||v===p.target||p.composedPath().includes(v))){if(p.detail===0&&(a=!s(p)),!a){a=!0;return}t(p)}},{passive:!0,capture:i}),ye(o,"pointerdown",p=>{const v=Ke(e);a=!s(p)&&!!(v&&!p.composedPath().includes(v))},{passive:!0}),l&&ye(o,"blur",p=>{setTimeout(()=>{var v;const _=Ke(e);((v=o.document.activeElement)==null?void 0:v.tagName)==="IFRAME"&&!(_!=null&&_.contains(o.document.activeElement))&&t(p)},0)})].filter(Boolean);return()=>d.forEach(p=>p())}function rm(){const e=J(!1),t=xn();return t&&_e(()=>{e.value=!0},t),e}function ao(e){const t=rm();return I(()=>(t.value,!!e()))}function xs(e,t={}){const{window:n=mt}=t,o=ao(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const i=J(!1),l=u=>{i.value=u.matches},a=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",l):r.removeListener(l))},s=La(()=>{o.value&&(a(),r=n.matchMedia($e(e)),"addEventListener"in r?r.addEventListener("change",l):r.addListener(l),i.value=r.matches)});return tn(()=>{s(),a(),r=void 0}),i}function Vl(e,t={}){const{controls:n=!1,navigator:o=Ps}=t,r=ao(()=>o&&"permissions"in o);let i;const l=typeof e=="string"?{name:e}:e,a=J(),s=()=>{i&&(a.value=i.state)},u=Yp(async()=>{if(r.value){if(!i)try{i=await o.permissions.query(l),ye(i,"change",s),s()}catch{a.value="prompt"}return i}});return u(),n?{state:a,isSupported:r,query:u}:a}function im(e={}){const{navigator:t=Ps,read:n=!1,source:o,copiedDuring:r=1500,legacy:i=!1}=e,l=ao(()=>t&&"clipboard"in t),a=Vl("clipboard-read"),s=Vl("clipboard-write"),u=I(()=>l.value||i),d=J(""),f=J(!1),p=nm(()=>f.value=!1,r);function v(){l.value&&b(a.value)?t.clipboard.readText().then(L=>{d.value=L}):d.value=E()}u.value&&n&&ye(["copy","cut"],v);async function _(L=$e(o)){u.value&&L!=null&&(l.value&&b(s.value)?await t.clipboard.writeText(L):x(L),d.value=L,f.value=!0,p.start())}function x(L){const y=document.createElement("textarea");y.value=L??"",y.style.position="absolute",y.style.opacity="0",document.body.appendChild(y),y.select(),document.execCommand("copy"),y.remove()}function E(){var L,y,A;return(A=(y=(L=document==null?void 0:document.getSelection)==null?void 0:L.call(document))==null?void 0:y.toString())!=null?A:""}function b(L){return L==="granted"||L==="prompt"}return{isSupported:u,text:d,copied:f,copy:_}}const yo=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Po="__vueuse_ssr_handlers__",lm=am();function am(){return Po in yo||(yo[Po]=yo[Po]||{}),yo[Po]}function sm(e,t){return lm[e]||t}function cm(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const um={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Ml="vueuse-storage";function Ei(e,t,n,o={}){var r;const{flush:i="pre",deep:l=!0,listenToStorageChanges:a=!0,writeDefaults:s=!0,mergeDefaults:u=!1,shallow:d,window:f=mt,eventFilter:p,onError:v=k=>{console.error(k)},initOnMounted:_}=o,x=(d?Se:J)(typeof t=="function"?t():t);if(!n)try{n=sm("getDefaultStorage",()=>{var k;return(k=mt)==null?void 0:k.localStorage})()}catch(k){v(k)}if(!n)return x;const E=$e(t),b=cm(E),L=(r=o.serializer)!=null?r:um[b],{pause:y,resume:A}=tm(x,()=>T(x.value),{flush:i,deep:l,eventFilter:p});f&&a&&tr(()=>{ye(f,"storage",H),ye(f,Ml,Z),_&&H()}),_||H();function F(k,Y){f&&f.dispatchEvent(new CustomEvent(Ml,{detail:{key:e,oldValue:k,newValue:Y,storageArea:n}}))}function T(k){try{const Y=n.getItem(e);if(k==null)F(Y,null),n.removeItem(e);else{const V=L.write(k);Y!==V&&(n.setItem(e,V),F(Y,V))}}catch(Y){v(Y)}}function z(k){const Y=k?k.newValue:n.getItem(e);if(Y==null)return s&&E!=null&&n.setItem(e,L.write(E)),E;if(!k&&u){const V=L.read(Y);return typeof u=="function"?u(V,E):b==="object"&&!Array.isArray(V)?{...E,...V}:V}else return typeof Y!="string"?Y:L.read(Y)}function H(k){if(!(k&&k.storageArea!==n)){if(k&&k.key==null){x.value=E;return}if(!(k&&k.key!==e)){y();try{(k==null?void 0:k.newValue)!==L.write(x.value)&&(x.value=z(k))}catch(Y){v(Y)}finally{k?Xt(A):A()}}}}function Z(k){H(k.detail)}return x}function dm(e){return xs("(prefers-color-scheme: dark)",e)}function fm(e,t,n={}){const{window:o=mt,...r}=n;let i;const l=ao(()=>o&&"ResizeObserver"in o),a=()=>{i&&(i.disconnect(),i=void 0)},s=I(()=>Array.isArray(e)?e.map(f=>Ke(f)):[Ke(e)]),u=le(s,f=>{if(a(),l.value&&o){i=new ResizeObserver(t);for(const p of f)p&&i.observe(p,r)}},{immediate:!0,flush:"post"}),d=()=>{a(),u()};return tn(d),{isSupported:l,stop:d}}function pm(e,t={width:0,height:0},n={}){const{window:o=mt,box:r="content-box"}=n,i=I(()=>{var f,p;return(p=(f=Ke(e))==null?void 0:f.namespaceURI)==null?void 0:p.includes("svg")}),l=J(t.width),a=J(t.height),{stop:s}=fm(e,([f])=>{const p=r==="border-box"?f.borderBoxSize:r==="content-box"?f.contentBoxSize:f.devicePixelContentBoxSize;if(o&&i.value){const v=Ke(e);if(v){const _=o.getComputedStyle(v);l.value=Number.parseFloat(_.width),a.value=Number.parseFloat(_.height)}}else if(p){const v=Array.isArray(p)?p:[p];l.value=v.reduce((_,{inlineSize:x})=>_+x,0),a.value=v.reduce((_,{blockSize:x})=>_+x,0)}else l.value=f.contentRect.width,a.value=f.contentRect.height},n);tr(()=>{const f=Ke(e);f&&(l.value="offsetWidth"in f?f.offsetWidth:t.width,a.value="offsetHeight"in f?f.offsetHeight:t.height)});const u=le(()=>Ke(e),f=>{l.value=f?t.width:0,a.value=f?t.height:0});function d(){s(),u()}return{width:l,height:a,stop:d}}const Fl=["fullscreenchange","webkitfullscreenchange","webkitendfullscreen","mozfullscreenchange","MSFullscreenChange"];function Ls(e,t={}){const{document:n=ys,autoExit:o=!1}=t,r=I(()=>{var b;return(b=Ke(e))!=null?b:n==null?void 0:n.querySelector("html")}),i=J(!1),l=I(()=>["requestFullscreen","webkitRequestFullscreen","webkitEnterFullscreen","webkitEnterFullScreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen"].find(b=>n&&b in n||r.value&&b in r.value)),a=I(()=>["exitFullscreen","webkitExitFullscreen","webkitExitFullScreen","webkitCancelFullScreen","mozCancelFullScreen","msExitFullscreen"].find(b=>n&&b in n||r.value&&b in r.value)),s=I(()=>["fullScreen","webkitIsFullScreen","webkitDisplayingFullscreen","mozFullScreen","msFullscreenElement"].find(b=>n&&b in n||r.value&&b in r.value)),u=["fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement"].find(b=>n&&b in n),d=ao(()=>r.value&&n&&l.value!==void 0&&a.value!==void 0&&s.value!==void 0),f=()=>u?(n==null?void 0:n[u])===r.value:!1,p=()=>{if(s.value){if(n&&n[s.value]!=null)return n[s.value];{const b=r.value;if((b==null?void 0:b[s.value])!=null)return!!b[s.value]}}return!1};async function v(){if(!(!d.value||!i.value)){if(a.value)if((n==null?void 0:n[a.value])!=null)await n[a.value]();else{const b=r.value;(b==null?void 0:b[a.value])!=null&&await b[a.value]()}i.value=!1}}async function _(){if(!d.value||i.value)return;p()&&await v();const b=r.value;l.value&&(b==null?void 0:b[l.value])!=null&&(await b[l.value](),i.value=!0)}async function x(){await(i.value?v():_())}const E=()=>{const b=p();(!b||b&&f())&&(i.value=b)};return ye(n,Fl,E,!1),ye(()=>Ke(r),Fl,E,!1),o&&tn(v),{isSupported:d,isFullscreen:i,enter:_,exit:v,toggle:x}}function _r(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function bg(e,t,n={}){const{window:o=mt}=n;return Ei(e,t,o==null?void 0:o.localStorage,n)}function Ts(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const xo=new WeakMap;function yi(e,t=!1){const n=J(t);let o=null;le(Jp(e),l=>{const a=_r($e(l));if(a){const s=a;xo.get(s)||xo.set(s,s.style.overflow),n.value&&(s.style.overflow="hidden")}},{immediate:!0});const r=()=>{const l=_r($e(e));!l||n.value||(Nr&&(o=ye(l,"touchmove",a=>{mm(a)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},i=()=>{var l;const a=_r($e(e));!a||!n.value||(Nr&&(o==null||o()),a.style.overflow=(l=xo.get(a))!=null?l:"",xo.delete(a),n.value=!1)};return tn(i),I({get(){return n.value},set(l){l?r():i()}})}let hm=0;function vm(e,t={}){const n=J(!1),{document:o=ys,immediate:r=!0,manual:i=!1,id:l=`vueuse_styletag_${++hm}`}=t,a=J(e);let s=()=>{};const u=()=>{if(!o)return;const f=o.getElementById(l)||o.createElement("style");f.isConnected||(f.id=l,t.media&&(f.media=t.media),o.head.appendChild(f)),!n.value&&(s=le(a,p=>{f.textContent=p},{immediate:!0}),n.value=!0)},d=()=>{!o||!n.value||(s(),o.head.removeChild(o.getElementById(l)),n.value=!1)};return r&&!i&&tr(u),i||tn(d),{id:l,css:a,unload:d,load:u,isLoaded:yn(n)}}function gm(e={}){const{window:t=mt,behavior:n="auto"}=e;if(!t)return{x:J(0),y:J(0)};const o=J(t.scrollX),r=J(t.scrollY),i=I({get(){return o.value},set(a){scrollTo({left:a,behavior:n})}}),l=I({get(){return r.value},set(a){scrollTo({top:a,behavior:n})}});return ye(t,"scroll",()=>{o.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:l}}function _m(e={}){const{window:t=mt,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:o=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0}=e,l=J(n),a=J(o),s=()=>{t&&(i?(l.value=t.innerWidth,a.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,a.value=t.document.documentElement.clientHeight))};if(s(),tr(s),ye("resize",s,{passive:!0}),r){const u=xs("(orientation: portrait)");le(u,()=>s())}return{width:l,height:a}}var bm=U({name:"FontIcon",props:{icon:{type:String,default:""},color:{type:String,default:""},size:{type:[String,Number],default:""}},setup(e){const t=I(()=>{const o=["font-icon icon"],r=`iconfont icon-${e.icon}`;return o.push(r),o}),n=I(()=>{const o={};return e.color&&(o.color=e.color),e.size&&(o["font-size"]=Number.isNaN(Number(e.size))?e.size:`${e.size}px`),er(o).length?o:null});return()=>e.icon?c("span",{key:e.icon,class:t.value,style:n.value}):null}});const Em=lt({enhance:({app:e})=>{pt("FontIcon")||e.component("FontIcon",bm)},setup:()=>{vm(`@import url("/assets/font/font.css"); +`)},rootComponents:[]}),Hl=async(e,t)=>{const{path:n,query:o}=e.currentRoute.value,{scrollBehavior:r}=e.options;e.options.scrollBehavior=void 0,await e.replace({path:n,query:o,hash:t}),e.options.scrollBehavior=r},ym=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:o=5})=>{const r=Ln();ye("scroll",Es(()=>{var _,x;const l=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(l-0)f.some(b=>b.hash===E.hash));for(let E=0;E=(((_=b.parentElement)==null?void 0:_.offsetTop)??0)-o,A=!L||l<(((x=L.parentElement)==null?void 0:x.offsetTop)??0)-o;if(!(y&&A))continue;const T=decodeURIComponent(r.currentRoute.value.hash),z=decodeURIComponent(b.hash);if(T===z)return;if(d){for(let H=E+1;Hwe(e.title)?{title:e.title}:null;const As=Symbol(""),Am=e=>{Is=e},Cm=()=>Te(As),wm=e=>{e.provide(As,Is)};var Rm={"/":{title:"Catalog",empty:"No catalog"}};const Dm=U({name:"Catalog",props:{base:{type:String,default:""},level:{type:Number,default:3},index:Boolean,hideHeading:Boolean},setup(e){const t=Cm(),n=en(Rm),o=Pe(),r=kp(),i=hs(),a=Se(Bp(r.value).map(([u,{meta:d}])=>{const f=t(d);if(!f)return null;const p=u.split("/").length;return{level:$p(u,"/")?p-2:p-1,base:u.replace(/\/[^/]+\/?$/,"/"),path:u,...f}}).filter(u=>qo(u)&&we(u.title))),s=I(()=>{const u=e.base?_f(ts(e.base)):o.value.path.replace(/\/[^/]+$/,"/"),d=u.split("/").length-2,f=[];return a.value.filter(({level:p,path:v})=>{if(!bn(v,u)||v===u)return!1;if(u==="/"){const _=er(i.value.locales).filter(x=>x!=="/");if(v==="/404.html"||_.some(x=>bn(v,x)))return!1}return p-d<=e.level}).sort(({title:p,level:v,order:_},{title:x,level:E,order:b})=>{const L=v-E;return L||(gr(_)?gr(b)?_>0?b>0?_-b:-1:b<0?_-b:1:_:gr(b)?b:p.localeCompare(x))}).forEach(p=>{var x;const{base:v,level:_}=p;switch(_-d){case 1:{f.push(p);break}case 2:{const E=f.find(b=>b.path===v);E&&(E.children??(E.children=[])).push(p);break}default:{const E=f.find(b=>b.path===v.replace(/\/[^/]+\/$/,"/"));if(E){const b=(x=E.children)==null?void 0:x.find(L=>L.path===v);b&&(b.children??(b.children=[])).push(p)}}}}),f});return()=>{const u=s.value.some(d=>d.children);return c("div",{class:["vp-catalog-wrapper",{index:e.index}]},[e.hideHeading?null:c("h2",{class:"vp-catalog-main-title"},n.value.title),s.value.length?c(e.index?"ol":"ul",{class:["vp-catalogs",{deep:u}]},s.value.map(({children:d=[],title:f,path:p,content:v})=>{const _=c(Ue,{class:"vp-catalog-title",to:p},()=>v?c(v):f);return c("li",{class:"vp-catalog"},u?[c("h3",{id:f,class:["vp-catalog-child-title",{"has-children":d.length}]},[c("a",{href:`#${f}`,class:"vp-catalog-header-anchor","aria-hidden":!0},"#"),_]),d.length?c(e.index?"ol":"ul",{class:"vp-child-catalogs"},d.map(({children:x=[],content:E,path:b,title:L})=>c("li",{class:"vp-child-catalog"},[c("div",{class:["vp-catalog-sub-title",{"has-children":x.length}]},[c("a",{href:`#${L}`,class:"vp-catalog-header-anchor"},"#"),c(Ue,{class:"vp-catalog-title",to:b},()=>E?c(E):L)]),x.length?c(e.index?"ol":"div",{class:e.index?"vp-sub-catalogs":"vp-sub-catalogs-wrapper"},x.map(({content:y,path:A,title:F})=>e.index?c("li",{class:"vp-sub-catalog"},c(Ue,{to:A},()=>y?c(y):F)):c(Ue,{class:"vp-sub-catalog-link",to:A},()=>y?c(y):F))):null]))):null]:c("div",{class:"vp-catalog-child-title"},_))})):c("p",{class:"vp-empty-catalog"},n.value.empty)])}}}),km=lt({enhance:({app:e})=>{wm(e),pt("Catalog",e)||e.component("Catalog",Dm)}});var Om={"/":{backToTop:"Back to top"}};const Sm=U({name:"BackToTop",setup(e){const t=Ie(),n=en(Om),o=Se(),{height:r}=pm(o),{height:i}=_m(),{y:l}=gm(),a=I(()=>t.value.backToTop!==!1&&l.value>100),s=I(()=>l.value/(r.value-i.value)*100);return _e(()=>{o.value=document.body}),()=>c(Mt,{name:"back-to-top"},()=>a.value?c("button",{type:"button",class:"vp-back-to-top-button","aria-label":n.value.backToTop,onClick:()=>{window.scrollTo({top:0,behavior:"smooth"})}},[c("span",{class:"vp-scroll-progress",role:"progressbar","aria-labelledby":"loadinglabel","aria-valuenow":s.value},c("svg",c("circle",{cx:"50%",cy:"50%",style:{"stroke-dasharray":`calc(${Math.PI*s.value}% - ${4*Math.PI}px) calc(${Math.PI*100}% - ${4*Math.PI}px)`}}))),c("div",{class:"back-to-top-icon"})]):null)}}),Vm=lt({rootComponents:[Sm]}),Mm=c("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[c("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),c("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),Cs=U({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=Ft(),n=I(()=>e.locales[t.value]??{openInNewWindow:"open in new window"});return()=>c("span",[Mm,c("span",{class:"external-link-icon-sr-only"},n.value.openInNewWindow)])}});var Fm={};const Hm=Fm,Nm=lt({enhance({app:e}){e.component("ExternalLinkIcon",c(Cs,{locales:Hm}))}});/** + * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT + */const ae={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:e=>{const t=ae.isStarted();e=br(e,ae.settings.minimum,1),ae.status=e===1?null:e;const n=ae.render(!t),o=n.querySelector(ae.settings.barSelector),r=ae.settings.speed,i=ae.settings.easing;return n.offsetWidth,$m(l=>{Lo(o,{transform:"translate3d("+Nl(e)+"%,0,0)",transition:"all "+r+"ms "+i}),e===1?(Lo(n,{transition:"none",opacity:"1"}),n.offsetWidth,setTimeout(function(){Lo(n,{transition:"all "+r+"ms linear",opacity:"0"}),setTimeout(function(){ae.remove(),l()},r)},r)):setTimeout(()=>l(),r)}),ae},isStarted:()=>typeof ae.status=="number",start:()=>{ae.status||ae.set(0);const e=()=>{setTimeout(()=>{ae.status&&(ae.trickle(),e())},ae.settings.trickleSpeed)};return ae.settings.trickle&&e(),ae},done:e=>!e&&!ae.status?ae:ae.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=ae.status;return t?(typeof e!="number"&&(e=(1-t)*br(Math.random()*t,.1,.95)),t=br(t+e,0,.994),ae.set(t)):ae.start()},trickle:()=>ae.inc(Math.random()*ae.settings.trickleRate),render:e=>{if(ae.isRendered())return document.getElementById("nprogress");$l(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=ae.settings.template;const n=t.querySelector(ae.settings.barSelector),o=e?"-100":Nl(ae.status||0),r=document.querySelector(ae.settings.parent);return Lo(n,{transition:"all 0 linear",transform:"translate3d("+o+"%,0,0)"}),r!==document.body&&$l(r,"nprogress-custom-parent"),r==null||r.appendChild(t),t},remove:()=>{Bl(document.documentElement,"nprogress-busy"),Bl(document.querySelector(ae.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&Bm(e)},isRendered:()=>!!document.getElementById("nprogress")},br=(e,t,n)=>en?n:e,Nl=e=>(-1+e)*100,$m=function(){const e=[];function t(){const n=e.shift();n&&n(t)}return function(n){e.push(n),e.length===1&&t()}}(),Lo=function(){const e=["Webkit","O","Moz","ms"],t={};function n(l){return l.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(a,s){return s.toUpperCase()})}function o(l){const a=document.body.style;if(l in a)return l;let s=e.length;const u=l.charAt(0).toUpperCase()+l.slice(1);let d;for(;s--;)if(d=e[s]+u,d in a)return d;return l}function r(l){return l=n(l),t[l]??(t[l]=o(l))}function i(l,a,s){a=r(a),l.style[a]=s}return function(l,a){for(const s in a){const u=a[s];u!==void 0&&Object.prototype.hasOwnProperty.call(a,s)&&i(l,s,u)}}}(),ws=(e,t)=>(typeof e=="string"?e:Pi(e)).indexOf(" "+t+" ")>=0,$l=(e,t)=>{const n=Pi(e),o=n+t;ws(n,t)||(e.className=o.substring(1))},Bl=(e,t)=>{const n=Pi(e);if(!ws(e,t))return;const o=n.replace(" "+t+" "," ");e.className=o.substring(1,o.length-1)},Pi=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),Bm=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)},jm=()=>{_e(()=>{const e=Ln(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||ae.start()}),e.afterEach(n=>{t.add(n.path),ae.done()})})},zm=lt({setup(){jm()}}),Wm=JSON.parse(`{"encrypt":{},"author":{"name":"DSF-Team","url":"/about/learnmore/team.html"},"logo":"/photos/home/logo-small.svg","darkmode":"toggle","contributors":false,"footer":"ImprintData Privacy","copyright":false,"displayFooter":true,"locales":{"/":{"lang":"en-US","navbarLocales":{"langName":"English","selectLangAriaLabel":"Select language"},"metaLocales":{"author":"Author","date":"Writing Date","origin":"Original","views":"Page views","category":"Category","tag":"Tag","readingTime":"Reading Time","words":"Words","toc":"On This Page","prev":"Prev","next":"Next","lastUpdated":"Last update","contributors":"Contributors","editLink":"Edit this page","print":"Print"},"outlookLocales":{"themeColor":"Theme Color","darkmode":"Theme Mode","fullscreen":"Full Screen"},"routeLocales":{"skipToContent":"Skip to main content","notFoundTitle":"Page not found","notFoundMsg":["There’s nothing here.","How did we get here?","That’s a Four-Oh-Four.","Looks like we've got some broken links."],"back":"Go back","home":"Take me home","openInNewWindow":"Open in new window"},"navbar":[{"text":"Home","icon":"home","link":"/"},{"text":"Docs","icon":"info","prefix":"","children":[{"text":"Introduction","icon":"info","children":["/intro/info/introduction","/intro/use-cases/","/intro/publications","/intro/tutorials/"]},{"text":"Security","icon":"safe","link":"/security/"}]},{"text":"Get Started","icon":"launch","prefix":"/stable/","children":[{"text":"Guideline v1.5.2 (stable)","icon":"info","children":["index","maintain/install","maintain/upgrade-from-0","maintain/allowList-mgm","maintain/install-plugins","develop/create","contribute/"]}]},{"text":"About","icon":"creative","prefix":"/about/","children":[{"text":"Learn More","icon":"creative","prefix":"learnmore/","children":["contact","team","partners","public"]}]},{"text":"Versions","icon":"note","children":[{"text":"v1.5.2 (stable)","link":"/stable/"},{"text":"v1.5.1","link":"/v1.5.1/"},{"text":"v1.5.0","link":"/v1.5.0/"},{"text":"v1.4.0","link":"/v1.4.0/"},{"text":"v1.3.2","link":"/v1.3.2/"},{"text":"v1.3.1","link":"/v1.3.1/"},{"text":"v1.3.0","link":"/v1.3.0/"},{"text":"v1.2.0","link":"/v1.2.0/"},{"text":"v1.1.0","link":"/v1.1.0/"},{"text":"v1.0.0","link":"/v1.0.0/"},{"text":"v0.9.3 (oldstable)","link":"/oldstable/"}]},{"text":"","icon":"github","link":"https://github.com/datasharingframework/dsf"}],"sidebar":{"/":[{"text":"Home","icon":"home","link":"/"},{"text":"Docs","icon":"info","prefix":"intro/","link":"intro/","children":["info/introduction.md","info/basics","info/architecture","info/security","info/allowList","info/process-plugins"]},{"text":"Security","icon":"safe","link":"/security/"},{"text":"Use-Cases","icon":"any","prefix":"intro/use-cases/","link":"intro/use-cases/","children":["feasibility","num"]},{"text":"Publications","icon":"blog","link":"/intro/publications"},{"text":"Tutorials","icon":"edit","link":"/intro/tutorials/"}],"/hackathon":[],"/stable/":[{"text":"Home","icon":"home","link":"/"},"",{"text":"Maintain a DSF instance","icon":"tool","prefix":"maintain/","link":"maintain/","children":["install","upgrade-from-1","upgrade-from-0","allowList-mgm",{"text":"FHIR Reverse Proxy","icon":"module","prefix":"fhir-reverse-proxy/","link":"fhir-reverse-proxy/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]},{"text":"FHIR Server","icon":"module","prefix":"fhir/","link":"fhir/","children":[{"icon":"config","text":"Configuration","link":"configuration"},{"icon":"config","text":"Access Control","link":"access-control"},{"icon":"config","text":"OpenID Connect","link":"oidc"}]},{"text":"BPE Reverse Proxy","icon":"module","prefix":"bpe-reverse-proxy/","link":"bpe-reverse-proxy/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]},{"text":"BPE Server","icon":"module","prefix":"bpe/","link":"bpe/","children":[{"icon":"config","text":"Configuration","link":"configuration"},{"icon":"config","text":"Access Control","link":"access-control"},{"icon":"config","text":"OpenID Connect","link":"oidc"}]},{"text":"Install Plugins","icon":"plugin","link":"install-plugins"}]},{"text":"Develop process plugins","icon":"plugin","prefix":"develop/","link":"develop/","children":["create","upgrade-from-0"]},{"text":"Contribute","icon":"info","link":"contribute/","prefix":"contribute/","children":[{"text":"Code","link":"code","icon":"code"},{"text":"Documentation","link":"documentation","icon":"info"}]}],"/v1.5.2/":[{"text":"Home","icon":"home","link":"/"},"",{"text":"Maintain a DSF instance","icon":"tool","prefix":"maintain/","link":"maintain/","children":["install","upgrade-from-1","upgrade-from-0","allowList-mgm",{"text":"FHIR Reverse Proxy","icon":"module","prefix":"fhir-reverse-proxy/","link":"fhir-reverse-proxy/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]},{"text":"FHIR Server","icon":"module","prefix":"fhir/","link":"fhir/","children":[{"icon":"config","text":"Configuration","link":"configuration"},{"icon":"config","text":"Access Control","link":"access-control"},{"icon":"config","text":"OpenID Connect","link":"oidc"}]},{"text":"BPE Reverse Proxy","icon":"module","prefix":"bpe-reverse-proxy/","link":"bpe-reverse-proxy/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]},{"text":"BPE Server","icon":"module","prefix":"bpe/","link":"bpe/","children":[{"icon":"config","text":"Configuration","link":"configuration"},{"icon":"config","text":"Access Control","link":"access-control"},{"icon":"config","text":"OpenID Connect","link":"oidc"}]},{"text":"Install Plugins","icon":"plugin","link":"install-plugins"}]},{"text":"Develop process plugins","icon":"plugin","prefix":"develop/","link":"develop/","children":["create","upgrade-from-0"]}],"/v1.5.1/":[{"text":"Home","icon":"home","link":"/"},"",{"text":"Maintain a DSF instance","icon":"tool","prefix":"maintain/","link":"maintain/","children":["install","upgrade-from-1","upgrade-from-0","allowList-mgm",{"text":"FHIR Reverse Proxy","icon":"module","prefix":"fhir-reverse-proxy/","link":"fhir-reverse-proxy/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]},{"text":"FHIR Server","icon":"module","prefix":"fhir/","link":"fhir/","children":[{"icon":"config","text":"Configuration","link":"configuration"},{"icon":"config","text":"Access Control","link":"access-control"},{"icon":"config","text":"OpenID Connect","link":"oidc"}]},{"text":"BPE Reverse Proxy","icon":"module","prefix":"bpe-reverse-proxy/","link":"bpe-reverse-proxy/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]},{"text":"BPE Server","icon":"module","prefix":"bpe/","link":"bpe/","children":[{"icon":"config","text":"Configuration","link":"configuration"},{"icon":"config","text":"Access Control","link":"access-control"},{"icon":"config","text":"OpenID Connect","link":"oidc"}]},{"text":"Install Plugins","icon":"plugin","link":"install-plugins"}]},{"text":"Develop process plugins","icon":"plugin","prefix":"develop/","link":"develop/","children":["create","upgrade-from-0"]}],"/v1.5.0/":[{"text":"Home","icon":"home","link":"/"},{"text":"Current version","icon":"update","link":"/stable/"},{"text":"Maintain a DSF instance","icon":"tool","prefix":"maintain/","link":"maintain/","children":["install","upgrade-from-1","upgrade-from-0","allowList-mgm",{"text":"FHIR Reverse Proxy","icon":"module","prefix":"fhir-reverse-proxy/","link":"fhir-reverse-proxy/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]},{"text":"FHIR Server","icon":"module","prefix":"fhir/","link":"fhir/","children":[{"icon":"config","text":"Configuration","link":"configuration"},{"icon":"config","text":"Access Control","link":"access-control"},{"icon":"config","text":"OpenID Connect","link":"oidc"}]},{"text":"BPE Reverse Proxy","icon":"module","prefix":"bpe-reverse-proxy/","link":"bpe-reverse-proxy/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]},{"text":"BPE Server","icon":"module","prefix":"bpe/","link":"bpe/","children":[{"icon":"config","text":"Configuration","link":"configuration"},{"icon":"config","text":"Access Control","link":"access-control"},{"icon":"config","text":"OpenID Connect","link":"oidc"}]},{"text":"Install Plugins","icon":"plugin","link":"install-plugins"}]},{"text":"Develop process plugins","icon":"plugin","prefix":"develop/","link":"develop/","children":["create","upgrade-from-0"]}],"/v1.4.0/":[{"text":"Home","icon":"home","link":"/"},{"text":"Current version","icon":"update","link":"/stable/"},{"text":"Maintain a DSF instance","icon":"tool","prefix":"maintain/","link":"maintain/","children":["install","upgrade-from-1","upgrade-from-0","allowList-mgm",{"text":"FHIR Reverse Proxy","icon":"module","prefix":"fhir-reverse-proxy/","link":"fhir-reverse-proxy/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]},{"text":"FHIR Server","icon":"module","prefix":"fhir/","link":"fhir/","children":[{"icon":"config","text":"Configuration","link":"configuration"},{"icon":"config","text":"Access Control","link":"access-control"},{"icon":"config","text":"OpenID Connect","link":"oidc"}]},{"text":"BPE Server","icon":"module","prefix":"bpe/","link":"bpe/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]},{"text":"Install Plugins","icon":"plugin","link":"install-plugins"}]},{"text":"Develop process plugins","icon":"plugin","prefix":"develop/","link":"develop/","children":["create","upgrade-from-0"]}],"/v1.3.2/":[{"text":"Home","icon":"home","link":"/"},{"text":"Current version","icon":"update","link":"/stable/"},{"text":"Maintain a DSF instance","icon":"tool","prefix":"maintain/","link":"maintain/","children":["install","upgrade-from-1","upgrade-from-0","allowList-mgm",{"text":"FHIR Reverse Proxy","icon":"module","prefix":"fhir-reverse-proxy/","link":"fhir-reverse-proxy/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]},{"text":"FHIR Server","icon":"module","prefix":"fhir/","link":"fhir/","children":[{"icon":"config","text":"Configuration","link":"configuration"},{"icon":"config","text":"Access Control","link":"access-control"},{"icon":"config","text":"OpenID Connect","link":"oidc"}]},{"text":"BPE Server","icon":"module","prefix":"bpe/","link":"bpe/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]},{"text":"Install Plugins","icon":"plugin","link":"install-plugins"}]},{"text":"Develop process plugins","icon":"plugin","prefix":"develop/","link":"develop/","children":["create","upgrade-from-0"]}],"/v1.3.1/":[{"text":"Home","icon":"home","link":"/"},{"text":"Current version","icon":"update","link":"/stable/"},{"text":"Maintain a DSF instance","icon":"tool","prefix":"maintain/","link":"maintain/","children":["install","upgrade-from-1","upgrade-from-0","allowList-mgm",{"text":"FHIR Reverse Proxy","icon":"module","prefix":"fhir-reverse-proxy/","link":"fhir-reverse-proxy/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]},{"text":"FHIR Server","icon":"module","prefix":"fhir/","link":"fhir/","children":[{"icon":"config","text":"Configuration","link":"configuration"},{"icon":"config","text":"Access Control","link":"access-control"},{"icon":"config","text":"OpenID Connect","link":"oidc"}]},{"text":"BPE Server","icon":"module","prefix":"bpe/","link":"bpe/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]},{"text":"Install Plugins","icon":"plugin","link":"install-plugins"}]},{"text":"Develop process plugins","icon":"plugin","prefix":"develop/","link":"develop/","children":["create","upgrade-from-0"]}],"/v1.3.0/":[{"text":"Home","icon":"home","link":"/"},{"text":"Current version","icon":"update","link":"/stable/"},{"text":"Maintain a DSF instance","icon":"tool","prefix":"maintain/","link":"maintain/","children":["install","upgrade-from-1","upgrade-from-0","allowList-mgm",{"text":"FHIR Reverse Proxy","icon":"module","prefix":"fhir-reverse-proxy/","link":"fhir-reverse-proxy/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]},{"text":"FHIR Server","icon":"module","prefix":"fhir/","link":"fhir/","children":[{"icon":"config","text":"Configuration","link":"configuration"},{"icon":"config","text":"Access Control","link":"access-control"},{"icon":"config","text":"OpenID Connect","link":"oidc"}]},{"text":"BPE Server","icon":"module","prefix":"bpe/","link":"bpe/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]},{"text":"Install Plugins","icon":"plugin","link":"install-plugins"}]},{"text":"Develop process plugins","icon":"plugin","prefix":"develop/","link":"develop/","children":["create","upgrade-from-0"]}],"/v1.2.0/":[{"text":"Home","icon":"home","link":"/"},{"text":"Current version","icon":"update","link":"/stable/"},{"text":"Maintain a DSF instance","icon":"tool","prefix":"maintain/","link":"maintain/","children":["install","upgrade-from-1","upgrade-from-0","allowList-mgm",{"text":"FHIR Reverse Proxy","icon":"module","prefix":"fhir-reverse-proxy/","link":"fhir-reverse-proxy/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]},{"text":"FHIR Server","icon":"module","prefix":"fhir/","link":"fhir/","children":[{"icon":"config","text":"Configuration","link":"configuration"},{"icon":"config","text":"Access Control","link":"access-control"},{"icon":"config","text":"OpenID Connect","link":"oidc"}]},{"text":"BPE Server","icon":"module","prefix":"bpe/","link":"bpe/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]}]},{"text":"Develop process plugins","icon":"plugin","prefix":"develop/","link":"develop/","children":["create","upgrade-from-0"]}],"/v1.1.0/":[{"text":"Home","icon":"home","link":"/"},{"text":"Current version","icon":"update","link":"/stable/"},{"text":"Maintain a DSF instance","icon":"tool","prefix":"maintain/","link":"maintain/","children":["install","upgrade-from-1","upgrade-from-0","allowList-mgm",{"text":"FHIR Reverse Proxy","icon":"module","prefix":"fhir-reverse-proxy/","link":"fhir-reverse-proxy/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]},{"text":"FHIR Server","icon":"module","prefix":"fhir/","link":"fhir/","children":[{"icon":"config","text":"Configuration","link":"configuration"},{"icon":"config","text":"Access Control","link":"access-control"},{"icon":"config","text":"OpenID Connect","link":"oidc"}]},{"text":"BPE Server","icon":"module","prefix":"bpe/","link":"bpe/","children":[{"icon":"config","text":"Configuration","link":"configuration"}]}]},{"text":"Develop process plugins","icon":"plugin","prefix":"develop/","link":"develop/","children":["create","upgrade-from-0"]}],"/v1.0.0/":[{"text":"Home","icon":"home","link":"/"},{"text":"Current version","icon":"update","link":"/stable/"},{"text":"Maintain a DSF instance","icon":"tool","prefix":"maintain/","link":"maintain/","children":["install","upgrade-from-0","allowList-mgm",{"text":"Configuration parameters","icon":"config","prefix":"configuration/","link":"configuration/","children":["common","fhir","bpe","reverseproxy"]}]},{"text":"Develop process plugins","icon":"plugin","prefix":"develop/","link":"develop/","children":["create","upgrade-from-0"]}],"/about/":[{"text":"Home","icon":"home","link":"/"},{"text":"About","icon":"creative","prefix":"learnmore/","link":"learnmore/","children":["contact","team","partners","public"]}],"/oldstable/":[{"text":"Home","icon":"home","link":"/"},{"text":"Version 0.9.x","icon":"guide","children":["introduction","generalinformation/","code/","build/","releases/","tutorial/"]}]}}}}`),Gm=J(Wm),Rs=()=>Gm,Ds=Symbol(""),Um=()=>{const e=Te(Ds);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},Km=(e,t)=>{const{locales:n,...o}=e;return{...o,...n==null?void 0:n[t]}},qm=lt({enhance({app:e}){const t=Rs(),n=e._context.provides[gi],o=I(()=>Km(t.value,n.routeLocale.value));e.provide(Ds,o),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return o.value}}})}}),Zm=/\b(?:Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini)/i,Ym=()=>typeof window<"u"&&window.navigator&&"userAgent"in window.navigator&&Zm.test(navigator.userAgent),Xm=({delay:e=500,duration:t=2e3,locales:n,selector:o,showInMobile:r})=>{const{copy:i,copied:l}=im({legacy:!0,copiedDuring:t}),a=en(n),s=Pe(),u=p=>{if(!p.hasAttribute("copy-code-registered")){const v=document.createElement("button");v.type="button",v.classList.add("vp-copy-code-button"),v.innerHTML='
',v.setAttribute("aria-label",a.value.copy),v.setAttribute("data-copied",a.value.copied),p.parentElement&&p.parentElement.insertBefore(v,p),p.setAttribute("copy-code-registered","")}},d=()=>{Xt().then(()=>Hp(e)).then(()=>{o.forEach(p=>{document.querySelectorAll(p).forEach(u)})})},f=(p,v,_)=>{let{innerText:x=""}=v;/language-(shellscript|shell|bash|sh|zsh)/.test(p.classList.toString())&&(x=x.replace(/^ *(\$|>) /gm,"")),i(x).then(()=>{_.classList.add("copied"),le(l,()=>{_.classList.remove("copied"),_.blur()},{once:!0})})};_e(()=>{const p=!Ym()||r;p&&d(),ye("click",v=>{const _=v.target;if(_.matches('div[class*="language-"] > button.copy')){const x=_.parentElement,E=_.nextElementSibling;E&&f(x,E,_)}else if(_.matches('div[class*="language-"] div.vp-copy-icon')){const x=_.parentElement,E=x.parentElement,b=x.nextElementSibling;b&&f(E,b,x)}}),le(()=>s.value.path,()=>{p&&d()})})};var Jm={"/":{copy:"Copy code",copied:"Copied"}},Qm=['.theme-hope-content div[class*="language-"] pre'];const eh=500,th=2e3,nh=Jm,oh=Qm,rh=!1,ih=lt({setup:()=>{Xm({selector:oh,locales:nh,duration:th,delay:eh,showInMobile:rh})}}),To=Ei("VUEPRESS_CODE_TAB_STORE",{});var lh=U({name:"CodeTabs",props:{active:{type:Number,default:0},data:{type:Array,required:!0},id:{type:String,required:!0},tabId:{type:String,default:""}},slots:Object,setup(e,{slots:t}){const n=J(e.active),o=Se([]),r=()=>{e.tabId&&(To.value[e.tabId]=e.data[n.value].id)},i=(u=n.value)=>{n.value=u{n.value=u>0?u-1:o.value.length-1,o.value[n.value].focus()},a=(u,d)=>{u.key===" "||u.key==="Enter"?(u.preventDefault(),n.value=d):u.key==="ArrowRight"?(u.preventDefault(),i()):u.key==="ArrowLeft"&&(u.preventDefault(),l()),e.tabId&&(To.value[e.tabId]=e.data[n.value].id)},s=()=>{if(e.tabId){const u=e.data.findIndex(({id:d})=>To.value[e.tabId]===d);if(u!==-1)return u}return e.active};return _e(()=>{n.value=s(),le(()=>To.value[e.tabId],(u,d)=>{if(e.tabId&&u!==d){const f=e.data.findIndex(({id:p})=>p===u);f!==-1&&(n.value=f)}})}),()=>e.data.length?c("div",{class:"vp-code-tabs"},[c("div",{class:"vp-code-tabs-nav",role:"tablist"},e.data.map(({id:u},d)=>{const f=d===n.value;return c("button",{type:"button",ref:p=>{p&&(o.value[d]=p)},class:["vp-code-tab-nav",{active:f}],role:"tab","aria-controls":`codetab-${e.id}-${d}`,"aria-selected":f,onClick:()=>{n.value=d,r()},onKeydown:p=>a(p,d)},t[`title${d}`]({value:u,isActive:f}))})),e.data.map(({id:u},d)=>{const f=d===n.value;return c("div",{class:["vp-code-tab",{active:f}],id:`codetab-${e.id}-${d}`,role:"tabpanel","aria-expanded":f},[c("div",{class:"vp-code-tab-title"},t[`title${d}`]({value:u,isActive:f})),t[`tab${d}`]({value:u,isActive:f})])})]):null}});const ks=({active:e=!1},{slots:t})=>{var n;return c("div",{class:["code-group-item",{active:e}],"aria-selected":e},(n=t.default)==null?void 0:n.call(t))};ks.displayName="CodeGroupItem";const ah=U({name:"CodeGroup",slots:Object,setup(e,{slots:t}){const n=J(-1),o=Se([]),r=(a=n.value)=>{n.value=a{n.value=a>0?a-1:o.value.length-1,o.value[n.value].focus()},l=(a,s)=>{a.key===" "||a.key==="Enter"?(a.preventDefault(),n.value=s):a.key==="ArrowRight"?(a.preventDefault(),r(s)):a.key==="ArrowLeft"&&(a.preventDefault(),i(s))};return()=>{var s;const a=(((s=t.default)==null?void 0:s.call(t))||[]).filter(u=>u.type.name==="CodeGroupItem").map(u=>(u.props===null&&(u.props={}),u));return a.length===0?null:(n.value<0||n.value>a.length-1?(n.value=a.findIndex(u=>"active"in u.props),n.value===-1&&(n.value=0)):a.forEach((u,d)=>{u.props.active=d===n.value}),c("div",{class:"code-group"},[c("div",{class:"code-group-nav"},a.map((u,d)=>{const f=d===n.value;return c("button",{type:"button",ref:p=>{p&&(o.value[d]=p)},class:["code-group-nav-tab",{active:f}],"aria-pressed":f,"aria-expanded":f,onClick:()=>{n.value=d},onKeydown:p=>l(p,d)},u.props.title)})),a]))}}}),sh=()=>{ye("beforeprint",()=>{document.querySelectorAll("details").forEach(e=>{e.open=!0})})},pe=({name:e="",color:t="currentColor"},{slots:n})=>{var o;return c("svg",{xmlns:"http://www.w3.org/2000/svg",class:["icon",`${e}-icon`],viewBox:"0 0 1024 1024",fill:t,"aria-label":`${e} icon`},(o=n.default)==null?void 0:o.call(n))};pe.displayName="IconBase";const Os=(e,{slots:t})=>{var n;return(n=t.default)==null?void 0:n.call(t)},Ss=()=>c(pe,{name:"github"},()=>c("path",{d:"M511.957 21.333C241.024 21.333 21.333 240.981 21.333 512c0 216.832 140.544 400.725 335.574 465.664 24.49 4.395 32.256-10.07 32.256-23.083 0-11.69.256-44.245 0-85.205-136.448 29.61-164.736-64.64-164.736-64.64-22.315-56.704-54.4-71.765-54.4-71.765-44.587-30.464 3.285-29.824 3.285-29.824 49.195 3.413 75.179 50.517 75.179 50.517 43.776 75.008 114.816 53.333 142.762 40.79 4.523-31.66 17.152-53.377 31.19-65.537-108.971-12.458-223.488-54.485-223.488-242.602 0-53.547 19.114-97.323 50.517-131.67-5.035-12.33-21.93-62.293 4.779-129.834 0 0 41.258-13.184 134.912 50.346a469.803 469.803 0 0 1 122.88-16.554c41.642.213 83.626 5.632 122.88 16.554 93.653-63.488 134.784-50.346 134.784-50.346 26.752 67.541 9.898 117.504 4.864 129.834 31.402 34.347 50.474 78.123 50.474 131.67 0 188.586-114.73 230.016-224.042 242.09 17.578 15.232 33.578 44.672 33.578 90.454v135.85c0 13.142 7.936 27.606 32.854 22.87C862.25 912.597 1002.667 728.747 1002.667 512c0-271.019-219.648-490.667-490.71-490.667z"}));Ss.displayName="GitHubIcon";const Vs=()=>c(pe,{name:"gitlab"},()=>c("path",{d:"M229.333 78.688C223.52 62 199.895 62 193.895 78.688L87.958 406.438h247.5c-.188 0-106.125-327.75-106.125-327.75zM33.77 571.438c-4.875 15 .563 31.687 13.313 41.25l464.812 345L87.77 406.438zm301.5-165 176.813 551.25 176.812-551.25zm655.125 165-54-165-424.312 551.25 464.812-345c12.938-9.563 18.188-26.25 13.5-41.25zM830.27 78.688c-5.812-16.688-29.437-16.688-35.437 0l-106.125 327.75h247.5z"}));Vs.displayName="GitLabIcon";const Ms=()=>c(pe,{name:"gitee"},()=>c("path",{d:"M512 992C246.92 992 32 777.08 32 512S246.92 32 512 32s480 214.92 480 480-214.92 480-480 480zm242.97-533.34H482.39a23.7 23.7 0 0 0-23.7 23.7l-.03 59.28c0 13.08 10.59 23.7 23.7 23.7h165.96a23.7 23.7 0 0 1 23.7 23.7v11.85a71.1 71.1 0 0 1-71.1 71.1H375.71a23.7 23.7 0 0 1-23.7-23.7V423.11a71.1 71.1 0 0 1 71.1-71.1h331.8a23.7 23.7 0 0 0 23.7-23.7l.06-59.25a23.73 23.73 0 0 0-23.7-23.73H423.11a177.78 177.78 0 0 0-177.78 177.75v331.83c0 13.08 10.62 23.7 23.7 23.7h349.62a159.99 159.99 0 0 0 159.99-159.99V482.33a23.7 23.7 0 0 0-23.7-23.7z"}));Ms.displayName="GiteeIcon";const Fs=()=>c(pe,{name:"bitbucket"},()=>c("path",{d:"M575.256 490.862c6.29 47.981-52.005 85.723-92.563 61.147-45.714-20.004-45.714-92.562-1.133-113.152 38.29-23.442 93.696 7.424 93.696 52.005zm63.451-11.996c-10.276-81.152-102.29-134.839-177.152-101.156-47.433 21.138-79.433 71.424-77.129 124.562 2.853 69.705 69.157 126.866 138.862 120.576S647.3 548.571 638.708 478.83zm136.558-309.723c-25.161-33.134-67.986-38.839-105.728-45.13-106.862-17.151-216.576-17.7-323.438 1.134-35.438 5.706-75.447 11.996-97.719 43.996 36.572 34.304 88.576 39.424 135.424 45.129 84.553 10.862 171.447 11.447 256 .585 47.433-5.705 99.987-10.276 135.424-45.714zm32.585 591.433c-16.018 55.99-6.839 131.438-66.304 163.986-102.29 56.576-226.304 62.867-338.87 42.862-59.43-10.862-129.135-29.696-161.72-85.723-14.3-54.858-23.442-110.848-32.585-166.84l3.438-9.142 10.276-5.157c170.277 112.567 408.576 112.567 579.438 0 26.844 8.01 6.84 40.558 6.29 60.014zm103.424-549.157c-19.42 125.148-41.728 249.71-63.415 374.272-6.29 36.572-41.728 57.162-71.424 72.558-106.862 53.724-231.424 62.866-348.562 50.286-79.433-8.558-160.585-29.696-225.134-79.433-30.28-23.443-30.28-63.415-35.986-97.134-20.005-117.138-42.862-234.277-57.161-352.585 6.839-51.42 64.585-73.728 107.447-89.71 57.16-21.138 118.272-30.866 178.87-36.571 129.134-12.58 261.157-8.01 386.304 28.562 44.581 13.13 92.563 31.415 122.844 69.705 13.714 17.7 9.143 40.01 6.29 60.014z"}));Fs.displayName="BitbucketIcon";const Hs=()=>c(pe,{name:"source"},()=>c("path",{d:"M601.92 475.2c0 76.428-8.91 83.754-28.512 99.594-14.652 11.88-43.956 14.058-78.012 16.434-18.81 1.386-40.392 2.97-62.172 6.534-18.612 2.97-36.432 9.306-53.064 17.424V299.772c37.818-21.978 63.36-62.766 63.36-109.692 0-69.894-56.826-126.72-126.72-126.72S190.08 120.186 190.08 190.08c0 46.926 25.542 87.714 63.36 109.692v414.216c-37.818 21.978-63.36 62.766-63.36 109.692 0 69.894 56.826 126.72 126.72 126.72s126.72-56.826 126.72-126.72c0-31.086-11.286-59.598-29.7-81.576 13.266-9.504 27.522-17.226 39.996-19.206 16.038-2.574 32.868-3.762 50.688-5.148 48.312-3.366 103.158-7.326 148.896-44.55 61.182-49.698 74.25-103.158 75.24-187.902V475.2h-126.72zM316.8 126.72c34.848 0 63.36 28.512 63.36 63.36s-28.512 63.36-63.36 63.36-63.36-28.512-63.36-63.36 28.512-63.36 63.36-63.36zm0 760.32c-34.848 0-63.36-28.512-63.36-63.36s28.512-63.36 63.36-63.36 63.36 28.512 63.36 63.36-28.512 63.36-63.36 63.36zM823.68 158.4h-95.04V63.36h-126.72v95.04h-95.04v126.72h95.04v95.04h126.72v-95.04h95.04z"}));Hs.displayName="SourceIcon";function ch(){const e=J(!1),t=xn();return t&&_e(()=>{e.value=!0},t),e}function uh(e){return ch(),I(()=>!!e())}const dh=()=>uh(()=>typeof window<"u"&&window.navigator&&"userAgent"in window.navigator),fh=()=>{const e=dh();return I(()=>e.value&&/\b(?:Android|iPhone)/i.test(navigator.userAgent))},ph=e=>[/\((ipad);[-\w),; ]+apple/i,/applecoremedia\/[\w.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i].some(t=>t.test(e)),mh=e=>[/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,/cfnetwork\/.+darwin/i].some(t=>t.test(e)),hh=e=>[/(mac os x) ?([\w. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+haiku)/i].some(t=>t.test(e)),Ns=(e,t)=>{let n=1;for(let o=0;o>6;return n+=n<<3,n^=n>>11,n%t},$s=/#.*$/u,vh=e=>{const t=$s.exec(e);return t?t[0]:""},jl=e=>decodeURI(e).replace($s,"").replace(/\/index\.html$/iu,"/").replace(/\.html$/iu,"").replace(/(README|index)?\.md$/iu,""),Bs=(e,t)=>{if(!Np(t))return!1;const n=jl(e.path),o=jl(t),r=vh(t);return r?r===e.hash&&(!o||n===o):n===o},gh=e=>Jt(e)?e:`https://github.com/${e}`,js=e=>!Jt(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null;var _h=e=>Object.prototype.toString.call(e)==="[object Object]",Xn=e=>typeof e=="string";const zs=Array.isArray,zl=e=>_h(e)&&Xn(e.name),Wl=(e,t=!1)=>e?zs(e)?e.map(n=>Xn(n)?{name:n}:zl(n)?n:null).filter(n=>n!==null):Xn(e)?[{name:e}]:zl(e)?[e]:(console.error(`Expect "author" to be \`AuthorInfo[] | AuthorInfo | string[] | string ${t?"":"| false"} | undefined\`, but got`,e),[]):[],Ws=(e,t)=>{if(e){if(zs(e)&&e.every(Xn))return e;if(Xn(e))return[e];console.error(`Expect ${t||"value"} to be \`string[] | string | undefined\`, but got`,e)}return[]},bh=e=>Ws(e,"category"),Eh=e=>Ws(e,"tag"),yh='',Gs=({title:e="",link:t})=>c("div",{class:"vp-playground"},[c("div",{class:"vp-playground-header"},[e?c("div",{class:"vp-playground-title"},decodeURIComponent(e)):null,c("div",{class:"vp-playground-actions"},[c("a",{class:"vp-playground-action",href:decodeURIComponent(t),target:"_blank",innerHTML:yh})])]),c("div",{class:"vp-playground-container"},c("iframe",{src:decodeURIComponent(t)}))]);Gs.displayName="Playground";const Ph=lt({enhance:({app:e})=>{e.component("CodeTabs",lh),pt("CodeGroup",e)||e.component("CodeGroup",ah),pt("CodeGroupItem",e)||e.component("CodeGroupItem",ks),e.component("Playground",Gs)},setup:()=>{sh()}}),xh=()=>c(pe,{name:"heading"},()=>c("path",{d:"M250.4 704.6H64V595.4h202.4l26.2-166.6H94V319.6h214.4L352 64h127.8l-43.6 255.4h211.2L691 64h126.2l-43.6 255.4H960v109.2H756.2l-24.6 166.6H930v109.2H717L672 960H545.8l43.6-255.4H376.6L333 960H206.8l43.6-255.4zm168.4-276L394 595.4h211.2l24.6-166.6h-211z"}));xh.displayName="HeadingIcon";const Lh=()=>c(pe,{name:"heart"},()=>c("path",{d:"M1024 358.156C1024 195.698 892.3 64 729.844 64c-86.362 0-164.03 37.218-217.844 96.49C458.186 101.218 380.518 64 294.156 64 131.698 64 0 195.698 0 358.156 0 444.518 37.218 522.186 96.49 576H96l320 320c32 32 64 64 96 64s64-32 96-64l320-320h-.49c59.272-53.814 96.49-131.482 96.49-217.844zM841.468 481.232 517.49 805.49a2981.962 2981.962 0 0 1-5.49 5.48c-1.96-1.95-3.814-3.802-5.49-5.48L182.532 481.234C147.366 449.306 128 405.596 128 358.156 128 266.538 202.538 192 294.156 192c47.44 0 91.15 19.366 123.076 54.532L512 350.912l94.768-104.378C638.696 211.366 682.404 192 729.844 192 821.462 192 896 266.538 896 358.156c0 47.44-19.368 91.15-54.532 123.076z"}));Lh.displayName="HeartIcon";const Th=()=>c(pe,{name:"history"},()=>c("path",{d:"M512 1024a512 512 0 1 1 512-512 512 512 0 0 1-512 512zm0-896a384 384 0 1 0 384 384 384 384 0 0 0-384-384zm192 448H512a64 64 0 0 1-64-64V320a64 64 0 0 1 128 0v128h128a64 64 0 0 1 0 128z"}));Th.displayName="HistoryIcon";const Ih=()=>c(pe,{name:"title"},()=>c("path",{d:"M512 256c70.656 0 134.656 28.672 180.992 75.008A254.933 254.933 0 0 1 768 512c0 83.968-41.024 157.888-103.488 204.48C688.96 748.736 704 788.48 704 832c0 105.984-86.016 192-192 192-106.048 0-192-86.016-192-192h128a64 64 0 1 0 128 0 64 64 0 0 0-64-64 255.19 255.19 0 0 1-181.056-75.008A255.403 255.403 0 0 1 256 512c0-83.968 41.024-157.824 103.488-204.544C335.04 275.264 320 235.584 320 192A192 192 0 0 1 512 0c105.984 0 192 85.952 192 192H576a64.021 64.021 0 0 0-128 0c0 35.328 28.672 64 64 64zM384 512c0 70.656 57.344 128 128 128s128-57.344 128-128-57.344-128-128-128-128 57.344-128 128z"}));Ih.displayName="TitleIcon";const xi=()=>c(pe,{name:"search"},()=>c("path",{d:"M192 480a256 256 0 1 1 512 0 256 256 0 0 1-512 0m631.776 362.496-143.2-143.168A318.464 318.464 0 0 0 768 480c0-176.736-143.264-320-320-320S128 303.264 128 480s143.264 320 320 320a318.016 318.016 0 0 0 184.16-58.592l146.336 146.368c12.512 12.48 32.768 12.48 45.28 0 12.48-12.512 12.48-32.768 0-45.28"}));xi.displayName="SearchIcon";const Us=()=>c("svg",{xmlns:"http://www.w3.org/2000/svg",width:"32",height:"32",preserveAspectRatio:"xMidYMid",viewBox:"0 0 100 100"},[c("circle",{cx:"28",cy:"75",r:"11",fill:"currentColor"},c("animate",{attributeName:"fill-opacity",begin:"0s",dur:"1s",keyTimes:"0;0.2;1",repeatCount:"indefinite",values:"0;1;1"})),c("path",{fill:"none",stroke:"#88baf0","stroke-width":"10",d:"M28 47a28 28 0 0 1 28 28"},c("animate",{attributeName:"stroke-opacity",begin:"0.1s",dur:"1s",keyTimes:"0;0.2;1",repeatCount:"indefinite",values:"0;1;1"})),c("path",{fill:"none",stroke:"#88baf0","stroke-width":"10",d:"M28 25a50 50 0 0 1 50 50"},c("animate",{attributeName:"stroke-opacity",begin:"0.2s",dur:"1s",keyTimes:"0;0.2;1",repeatCount:"indefinite",values:"0;1;1"}))]);Us.displayName="LoadingIcon";const Ks=({hint:e})=>c("div",{class:"search-pro-result-wrapper loading"},[c(Us),e]);Ks.displayName="SearchLoading";const Ah='';var Ch={0:{"/":{0:"C",1:"a",2:"t",3:"e",4:"g",5:"o",6:"r",7:"y",8:":",9:" ",10:"$",11:"c",12:"o",13:"n",14:"t",15:"e",16:"n",17:"t"}},1:{"/":{0:"T",1:"a",2:"g",3:":",4:" ",5:"$",6:"c",7:"o",8:"n",9:"t",10:"e",11:"n",12:"t"}}},wh={"/":{cancel:"Cancel",placeholder:"Search",search:"Search",searching:"Searching",defaultTitle:"Documentation",select:"to select",navigate:"to navigate",autocomplete:"to autocomplete",exit:"to exit",queryHistory:"Search History",resultHistory:"Result History",emptyHistory:"Empty Search History",emptyResult:"No results found",loading:"Loading search indexes..."}},Rh={searchDelay:150,suggestDelay:0,queryHistoryCount:5,resultHistoryCount:5,hotKeys:[{key:"k",ctrl:!0},{key:"/",ctrl:!0}],worker:"search-pro.worker.js"};const Ho=Rh,Eg=Ch,qs=Ho.hotKeys,Li=wh;new URL("data:text/javascript;base64,aW1wb3J0e3NlYXJjaCBhcyBPLGdldFN0b3JlZEZpZWxkcyBhcyB6LGF1dG9TdWdnZXN0IGFzIEMsbG9hZEpTT05JbmRleCBhcyBGfWZyb20ic2xpbXNlYXJjaCI7aW1wb3J0IFQgZnJvbSJAdGVtcC9zZWFyY2gtcHJvL2luZGV4LmpzIjtpbXBvcnR7ZW50cmllcyBhcyAkfWZyb20iQHZ1ZXByZXNzL2hlbHBlci9jbGllbnQiO2NvbnN0IFM9KGUsbCk9Pntjb25zdCBpPWUudG9Mb3dlckNhc2UoKSxvPWwudG9Mb3dlckNhc2UoKSx0PVtdO2xldCBzPTAsbj0wO2NvbnN0IHI9KGMsZz0hMSk9PntsZXQgdT0iIjtuPT09MD91PWMubGVuZ3RoPjIwP2DigKYgJHtjLnNsaWNlKC0yMCl9YDpjOmc/dT1jLmxlbmd0aCtuPjEwMD9gJHtjLnNsaWNlKDAsMTAwLW4pfeKApiBgOmM6dT1jLmxlbmd0aD4yMD9gJHtjLnNsaWNlKDAsMjApfSDigKYgJHtjLnNsaWNlKC0yMCl9YDpjLHUmJnQucHVzaCh1KSxuKz11Lmxlbmd0aCxnfHwodC5wdXNoKFsibWFyayIsbF0pLG4rPWwubGVuZ3RoLG4+PTEwMCYmdC5wdXNoKCIg4oCmIikpfTtsZXQgcD1pLmluZGV4T2YobyxzKTtpZihwPT09LTEpcmV0dXJuIG51bGw7Zm9yKDtwPj0wOyl7Y29uc3QgYz1wK28ubGVuZ3RoO2lmKHIoZS5zbGljZShzLHApKSxzPWMsbj4xMDApYnJlYWs7cD1pLmluZGV4T2YobyxzKX1yZXR1cm4gbjwxMDAmJnIoZS5zbGljZShzKSwhMCksdH0sYj0oZSxsKT0+bC5jb250ZW50cy5yZWR1Y2UoKGksWyxvXSk9PmkrbywwKS1lLmNvbnRlbnRzLnJlZHVjZSgoaSxbLG9dKT0+aStvLDApLHc9KGUsbCk9Pk1hdGgubWF4KC4uLmwuY29udGVudHMubWFwKChbLGldKT0+aSkpLU1hdGgubWF4KC4uLmUuY29udGVudHMubWFwKChbLGldKT0+aSkpLE09KGUsbCxpPXt9KT0+e2NvbnN0IG89e307cmV0dXJuIE8obCxlLHtib29zdDp7aDoyLHQ6MSxjOjR9LHByZWZpeDohMCwuLi5pfSkuZm9yRWFjaCh0PT57Y29uc3R7aWQ6cyx0ZXJtczpuLHNjb3JlOnJ9PXQscD1zLmluY2x1ZGVzKCJAIiksYz1zLmluY2x1ZGVzKCIjIiksW2csdV09cy5zcGxpdCgvWyNAXS8pLGY9TnVtYmVyKGcpLG09bi5zb3J0KChoLGEpPT5oLmxlbmd0aC1hLmxlbmd0aCkuZmlsdGVyKChoLGEpPT5uLnNsaWNlKGErMSkuZXZlcnkoZD0+IWQuaW5jbHVkZXMoaCkpKSx7Y29udGVudHM6eX09b1tmXT8/PXt0aXRsZToiIixjb250ZW50czpbXX07aWYocCl5LnB1c2goW3t0eXBlOiJjdXN0b21GaWVsZCIsaWQ6ZixpbmRleDp1LGRpc3BsYXk6bS5tYXAoaD0+dC5jLm1hcChhPT5TKGEsaCkpKS5mbGF0KCkuZmlsdGVyKGg9PmghPT1udWxsKX0scl0pO2Vsc2V7Y29uc3QgaD1tLm1hcChhPT5TKHQuaCxhKSkuZmlsdGVyKGE9PmEhPT1udWxsKTtpZihoLmxlbmd0aCYmeS5wdXNoKFt7dHlwZTpjPyJoZWFkaW5nIjoidGl0bGUiLGlkOmYsLi4uYyYme2FuY2hvcjp1fSxkaXNwbGF5Omh9LHJdKSwidCJpbiB0KWZvcihjb25zdCBhIG9mIHQudCl7Y29uc3QgZD1tLm1hcCh4PT5TKGEseCkpLmZpbHRlcih4PT54IT09bnVsbCk7ZC5sZW5ndGgmJnkucHVzaChbe3R5cGU6InRleHQiLGlkOmYsLi4uYyYme2FuY2hvcjp1fSxkaXNwbGF5OmR9LHJdKX19fSksJChvKS5zb3J0KChbLHRdLFssc10pPT5TRUFSQ0hfUFJPX1NPUlRfU1RSQVRFR1k9PT0idG90YWwiP2IodCxzKTp3KHQscykpLm1hcCgoW3Qse3RpdGxlOnMsY29udGVudHM6bn1dKT0+e2lmKCFzKXtjb25zdCByPXoobCx0KTtyJiYocz1yLmgpfXJldHVybnt0aXRsZTpzLGNvbnRlbnRzOm4ubWFwKChbcl0pPT5yKX19KX0sUj0oZSxsLGk9e30pPT5DKGwsZSx7ZnV6enk6LjIsbWF4RnV6enk6MywuLi5pfSkubWFwKCh7c3VnZ2VzdGlvbjpvfSk9Pm8pO3NlbGYub25tZXNzYWdlPWFzeW5jKHtkYXRhOnt0eXBlOmU9ImFsbCIscXVlcnk6bCxsb2NhbGU6aSxvcHRpb25zOm8saWQ6dH19KT0+e2NvbnN0e2RlZmF1bHQ6c309YXdhaXQgVFtpPz8iLyJdKCksbj1GKHMse2ZpZWxkczpbImgiLCJ0IiwiYyJdLHN0b3JlRmllbGRzOlsiaCIsInQiLCJjIl19KTtlPT09InN1Z2dlc3QiP3NlbGYucG9zdE1lc3NhZ2UoW2UsdCxSKGwsbixvKV0pOmU9PT0ic2VhcmNoIj9zZWxmLnBvc3RNZXNzYWdlKFtlLHQsTShsLG4sbyldKTpzZWxmLnBvc3RNZXNzYWdlKHtzdWdnZXN0aW9uczpbZSx0LFIobCxuLG8pXSxyZXN1bHRzOltlLHQsTShsLG4sbyldfSl9OwovLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAK",import.meta.url);const Dh=()=>{const e=new Worker(`/${Ho.worker}`,{}),t={suggest:[],search:[],all:[]};return e.addEventListener("message",({data:n})=>{const[o,r,i]=n,l=t[o],a=l.findIndex(({id:s})=>s===r);if(a>-1){const{resolve:s}=l[a];l.forEach((u,d)=>{d>a&&u.reject(new Error("Search has been canceled."))}),t[o]=l.slice(a+1),s(i)}}),{suggest:(n,o,r)=>new Promise((i,l)=>{const a=Date.now();e.postMessage({type:"suggest",id:a,query:n,locale:o,options:r}),t.suggest.push({id:a,resolve:i,reject:l})}),search:(n,o,r)=>new Promise((i,l)=>{const a=Date.now();e.postMessage({type:"search",id:a,query:n,locale:o,options:r}),t.search.push({id:a,resolve:i,reject:l})}),all:(n,o,r)=>new Promise((i,l)=>{const a=Date.now();e.postMessage({type:"all",id:a,query:n,locale:o,options:r}),t.all.push({id:a,resolve:i,reject:l})}),terminate:()=>{e.terminate(),jp(t).forEach(n=>{n.forEach(({reject:o})=>o(new Error("Worker has been terminated.")))})}}};let kh={};const Zs=Symbol(""),Ys=()=>{const e=Ft(),{locales:t={},...n}=Te(Zs);return I(()=>({...n,...t[e.value]||{}}))},Oh=e=>{e.provide(Zs,kh)},Sh=(e,t=!1)=>{const n=J(0),o=I(()=>e.value[n.value]),r=()=>{n.value=n.value>0?n.value-1:e.value.length-1},i=()=>{n.value=n.value{t||(n.value=0)}),{index:n,item:o,prev:r,next:i}},Vh=e=>e instanceof Element?document.activeElement===e&&(["TEXTAREA","SELECT","INPUT"].includes(e.tagName)||e.hasAttribute("contenteditable")):!1,Mh=e=>qs.some(t=>{const{key:n,ctrl:o=!1,shift:r=!1,alt:i=!1,meta:l=!1}=t;return n===e.key&&o===e.ctrlKey&&r===e.shiftKey&&i===e.altKey&&l===e.metaKey}),Fh='',Hh='',Nh='',$h='',Ti=Symbol(""),Bh=()=>{const e=J(!1);qt(Ti,e)},jh=e=>{const t=J([]);{const n=Ys(),o=Pe(),r=Ft();_e(()=>{const{suggest:i,terminate:l}=Dh();le([e,r],([a])=>{const s=a.join(" "),{searchFilter:u,splitWord:d,suggestionsFilter:f=v=>v,...p}=n.value;s?i(s,r.value,p).then(v=>f(v,s,r.value,o.value)).then(v=>{t.value=v.length?bn(v[0],s)&&!v[0].slice(s.length).includes(" ")?v:[s,...v]:[]}).catch(v=>{console.error(v)}):t.value=[]},{immediate:!0}),Pn(()=>{l()})})}return{suggestions:t}},Er=qs[0];var zh=U({name:"SearchBox",setup(){const e=en(Li),t=Te(Ti),n=J(!1),o=I(()=>Er?[(n.value?["⌃","⇧","⌥","⌘"]:["Ctrl","Shift","Alt","Win"]).filter((r,i)=>Er[["ctrl","shift","alt","meta"][i]]),Er.key.toUpperCase()]:null);return ye("keydown",r=>{!t.value&&Mh(r)&&!Vh(r.target)&&(r.preventDefault(),t.value=!0)}),_e(()=>{const{userAgent:r}=navigator;n.value=hh(r)||mh(r)||ph(r)}),()=>[c("button",{type:"button",class:"search-pro-button","aria-label":e.value.search,onClick:()=>{t.value=!0}},[c(xi),c("div",{class:"search-pro-placeholder"},e.value.search),o.value?c("div",{class:"search-pro-key-hints"},o.value.map(r=>c("kbd",{class:"search-pro-key"},r))):null])]}});const Wh=wa({loader:()=>m(()=>import("./SearchResult-CAA_SdMH.js"),__vite__mapDeps([])),loadingComponent:()=>{const e=en(Li);return c(Ks,{hint:e.value.loading})}});var Gh=U({name:"SearchModal",setup(){const e=Te(Ti),t=Xo(),n=fh(),o=en(Li),r=Ys(),i=J(""),l=J([]),{suggestions:a}=jh(l),s=J(!1),{index:u,prev:d,next:f}=Sh(a),p=Se(),v=Se(),_=(E=u.value)=>{i.value=a.value[E],s.value=!1};ye("keydown",E=>{s.value?E.key==="ArrowUp"?d():E.key==="ArrowDown"?f():E.key==="Enter"?_():E.key==="Escape"&&(s.value=!1):E.key==="Escape"&&(e.value=!1)});const x=Es(()=>{var E,b;(((b=(E=r.value).splitWord)==null?void 0:b.call(E,i.value))||Promise.resolve(i.value.split(" "))).then(L=>{l.value=L})},Math.min(Ho.searchDelay,Ho.suggestDelay));return le(i,x,{immediate:!0}),_e(()=>{const E=yi(document.body);le(e,async b=>{var L;E.value=b,b&&(await Xt(),(L=p.value)==null||L.focus())}),om(v,()=>{s.value=!1}),Pn(()=>{E.value=!1})}),()=>e.value?c("div",{class:"search-pro-modal-wrapper"},[c("div",{class:"search-pro-mask",onClick:()=>{e.value=!1,i.value=""}}),c("div",{class:"search-pro-modal"},[c("div",{class:"search-pro-box"},[c("form",[c("label",{for:"search-pro","aria-label":o.value.search},c(xi)),c("input",{ref:p,type:"search",class:"search-pro-input",id:"search-pro",placeholder:o.value.placeholder,spellcheck:"false",autocapitalize:"off",autocomplete:"off",autocorrect:"off",name:`${t.value.title}-search`,value:i.value,"aria-controls":"search-pro-results",onKeydown:E=>{const{key:b}=E;a.value.length&&(b==="Tab"?(_(),E.preventDefault()):(b==="ArrowDown"||b==="ArrowUp"||b==="Escape")&&E.preventDefault())},onInput:({target:E})=>{i.value=E.value,s.value=!0,u.value=0}}),i.value?c("button",{type:"reset",class:"search-pro-clear-button",innerHTML:Ah,onClick:()=>{i.value=""}}):null,s.value&&a.value.length?c("ul",{class:"search-pro-suggestions",ref:v},a.value.map((E,b)=>c("li",{class:["search-pro-suggestion",{active:b===u.value}],onClick:()=>{_(b)}},[c("kbd",{class:"search-pro-auto-complete",title:`Tab ${o.value.autocomplete}`},"Tab"),E]))):null]),c("button",{type:"button",class:"search-pro-close-button",onClick:()=>{e.value=!1,i.value=""}},o.value.cancel)]),c(Wh,{queries:l.value,isFocusing:!s.value,onClose:()=>{e.value=!1},onUpdateQuery:E=>{i.value=E}}),n.value?null:c("div",{class:"search-pro-hints"},[c("span",{class:"search-pro-hint"},[c("kbd",{innerHTML:Fh}),o.value.select]),c("span",{class:"search-pro-hint"},[c("kbd",{innerHTML:Nh}),c("kbd",{innerHTML:Hh}),o.value.navigate]),c("span",{class:"search-pro-hint"},[c("kbd",{innerHTML:$h}),o.value.exit])])])]):null}}),Uh=lt({enhance({app:e}){Oh(e),e.component("SearchBox",zh)},setup(){Bh()},rootComponents:[Gh]});const Xs=()=>{const e=Pe();return I(()=>e.value.readingTime??null)},Kh=(e,t)=>{const{minutes:n,words:o}=e,{less1Minute:r,word:i,time:l}=t;return{time:n<1?r:l.replace("$time",Math.round(n).toString()),words:i.replace("$word",o.toString())}};var Gl={"/":{word:"About $word words",less1Minute:"Less than 1 minute",time:"About $time min"}};const Ul={words:"",time:""},Br=typeof Gl>"u"?null:Gl,qh=()=>Br?en(Br):I(()=>null),Zh=()=>{if(typeof Br>"u")return I(()=>Ul);const e=Xs(),t=qh();return I(()=>e.value&&t.value?Kh(e.value,t.value):Ul)},Tn=()=>Rs(),fe=()=>Um(),so=()=>{const e=Tn();return I(()=>!!e.value.pure)},yr=()=>null,Yh="719px",Xh="1440px",Jh="false",Js={mobileBreakPoint:Yh,pcBreakPoint:Xh,enableThemeColor:Jh},Ii={},Qs=e=>{const{icon:t="",color:n,size:o}=e,r=n||o?{}:null;return n&&(r.color=n),o&&(r.height=Number.isNaN(Number(o))?o:`${o}px`),Jt(t)?c("img",{class:"icon",src:t,alt:"","no-view":"",style:r}):_i(t)?c("img",{class:"icon",src:Ne(t),alt:"","aria-hidden":"","no-view":"",style:r}):c(rt("FontIcon"),e)};Qs.displayName="HopeIcon";var Me=Qs;const Qh="http://.",Ai=()=>{const e=Ln(),t=Qt();return n=>{if(n)if(_i(n))t.path!==n&&e.push(n);else if(ns(n))window&&window.open(n);else{const o=t.path.slice(0,t.path.lastIndexOf("/"));e.push(new URL(`${o}/${encodeURI(n)}`,Qh).pathname)}}},ec=()=>{const e=fe(),t=Ie();return I(()=>{const{author:n}=t.value;return n?Wl(n):n===!1?[]:Wl(e.value.author,!1)})},ev=()=>{const e=Ie();return I(()=>bh(e.value.category).map(t=>({name:t,path:""})))},tv=()=>{const e=Ie();return I(()=>Eh(e.value.tag).map(t=>({name:t,path:""})))},nv=()=>{const e=Ie(),t=Pe();return I(()=>{const n=zp(e.value.date);if(n)return n;const{createdTime:o}=t.value.git||{};return o?new Date(o):null})},ov=()=>{const e=fe(),t=Pe(),n=Ie(),o=ec(),r=ev(),i=tv(),l=nv(),a=Xs(),s=Zh(),u=I(()=>({author:o.value,category:r.value,date:l.value,localizedDate:t.value.localizedDate,tag:i.value,isOriginal:n.value.isOriginal||!1,readingTime:a.value,readingTimeLocale:s.value,pageview:"pageview"in n.value?n.value.pageview:!0})),d=I(()=>"pageInfo"in n.value?n.value.pageInfo:"pageInfo"in e.value?e.value.pageInfo:null);return{info:u,items:d}},{mobileBreakPoint:rv,pcBreakPoint:iv}=Js,Kl=e=>e.endsWith("px")?Number(e.slice(0,-2)):null,nr=()=>{const e=J(!1),t=J(!1),n=()=>{e.value=window.innerWidth<=(Kl(rv)??719),t.value=window.innerWidth>=(Kl(iv)??1440)};return _e(()=>{n(),ye("resize",n,!1),ye("orientationchange",n,!1)}),{isMobile:e,isPC:t}},tc=Symbol(""),co=()=>{const e=Te(tc);if(!e)throw new Error("useDarkmode() is called without provider.");return e},lv=e=>{const t=Tn(),n=dm(),o=I(()=>t.value.darkmode||"switch"),r=Ei("vuepress-theme-hope-scheme","auto"),i=I(()=>{const a=o.value;return a==="disable"?!1:a==="enable"?!0:a==="auto"?n.value:a==="toggle"?r.value==="dark":r.value==="dark"||r.value==="auto"&&n.value}),l=I(()=>{const a=o.value;return a==="switch"||a==="toggle"});e.provide(tc,{canToggle:l,config:o,isDarkmode:i,status:r}),Object.defineProperties(e.config.globalProperties,{$isDarkmode:{get:()=>i.value}})},av=()=>{const{config:e,isDarkmode:t,status:n}=co();La(()=>{e.value==="disable"?n.value="light":e.value==="enable"?n.value="dark":e.value==="toggle"&&n.value==="auto"&&(n.value="light")}),_e(()=>{le(t,o=>document.documentElement.setAttribute("data-theme",o?"dark":"light"),{immediate:!0})})};var dt=(e=>(e.title="t",e.shortTitle="s",e.icon="i",e.index="I",e.order="O",e.breadcrumbExclude="b",e))(dt||{}),sv=(e=>(e.type="y",e.author="a",e.date="d",e.localizedDate="l",e.category="c",e.tag="g",e.isEncrypted="n",e.isOriginal="o",e.readingTime="r",e.excerpt="e",e.sticky="u",e.cover="v",e))(sv||{}),cv=(e=>(e.article="a",e.home="h",e.slide="s",e.page="p",e))(cv||{});const Wt=(e="",t="")=>_i(t)?t:`${ts(e)}${t}`,pn=(e,t=!1)=>{const{meta:n,path:o,notFound:r}=Jo(e);return r?{text:o,link:o}:{text:!t&&n[dt.shortTitle]?n[dt.shortTitle]:n[dt.title]||o,link:o,...n[dt.icon]?{icon:n[dt.icon]}:{}}},jr=({config:e,prefix:t=""})=>{const n=(o,r=t)=>{const i=we(o)?pn(Wt(r,o)):o.link?{...o,...Kn(o.link)?{}:{link:pn(Wt(r,o.link)).link}}:o;if("children"in i){const l=Wt(r,i.prefix),a=i.children==="structure"?Ii[l]:i.children;return{type:"group",...i,prefix:l,children:a.map(s=>n(s,l))}}return{type:"page",...i}};return e.map(o=>n(o))},uv=({config:e,page:t,headerDepth:n})=>{const o=er(e).sort((r,i)=>i.length-r.length);for(const r of o)if(bn(decodeURI(t.path),r)){const i=e[r];return i?jr({config:i==="structure"?Ii[r]:i,page:t,headerDepth:n,prefix:r}):[]}return console.warn(`${t.path} is missing sidebar config.`),[]},dv=({config:e,routeLocale:t,page:n,headerDepth:o})=>e==="structure"?jr({config:Ii[t],page:n,headerDepth:o,prefix:t}):Hr(e)?jr({config:e,page:n,headerDepth:o}):qo(e)?uv({config:e,page:n,headerDepth:o}):[],nc=Symbol(""),fv=()=>{const e=Ie(),t=fe(),n=Pe(),o=Ft(),r=I(()=>e.value.home?!1:e.value.sidebar??t.value.sidebar??"structure"),i=I(()=>e.value.headerDepth??t.value.headerDepth??2),l=_s(()=>[r.value,i.value,n.value.path,null],()=>dv({config:r.value,routeLocale:o.value,page:n.value,headerDepth:i.value}));qt(nc,l)},Ci=()=>{const e=Te(nc);if(!e)throw new Error("useSidebarItems() is called without provider.");return e};var pv=U({name:"PageFooter",setup(){const e=Tn(),t=fe(),n=Ie(),o=ec(),r=I(()=>{const{copyright:u,footer:d}=n.value;return d!==!1&&!!(u||d||t.value.displayFooter)}),i=I(()=>{const{footer:u}=n.value;return u===!1?!1:we(u)?u:t.value.footer||""}),l=I(()=>o.value.map(({name:u})=>u).join(", ")),a=u=>`Copyright © ${new Date().getFullYear()} ${l.value} ${u?`${u} Licensed`:""}`,s=I(()=>{const{copyright:u,license:d=""}=n.value,{license:f}=e.value,{copyright:p}=t.value;return u??(d?a(d):we(p)?p:l.value||f?a(f):!1)});return()=>r.value?c("footer",{class:"vp-footer-wrapper"},[i.value?c("div",{class:"vp-footer",innerHTML:i.value}):null,s.value?c("div",{class:"vp-copyright",innerHTML:s.value}):null]):null}}),Be=U({name:"AutoLink",inheritAttrs:!1,props:{config:{type:Object,required:!0},exact:Boolean,noExternalLinkIcon:Boolean},emits:["focusout"],slots:Object,setup(e,{attrs:t,emit:n,slots:o}){const r=Qt(),i=hs(),l=zo(e,"config"),a=I(()=>Jt(l.value.link)),s=I(()=>!a.value&&ns(l.value.link)),u=I(()=>l.value.target||(a.value?"_blank":void 0)),d=I(()=>u.value==="_blank"),f=I(()=>!a.value&&!s.value&&!d.value),p=I(()=>l.value.rel||(d.value?"noopener noreferrer":null)),v=I(()=>l.value.ariaLabel||l.value.text),_=I(()=>{if(e.exact)return!1;const E=er(i.value.locales);return E.length?E.every(b=>b!==l.value.link):l.value.link!=="/"}),x=I(()=>f.value?l.value.activeMatch?new RegExp(l.value.activeMatch,"u").test(r.path):_.value?bn(r.path,l.value.link):r.path===l.value.link:!1);return()=>{const{before:E,after:b,default:L}=o,{text:y,icon:A,link:F}=l.value;return f.value?c(Ue,{to:F,"aria-label":v.value,...t,class:["nav-link",{active:x.value},t.class],onFocusout:()=>n("focusout")},()=>L?L():[E?E():c(Me,{icon:A}),y,b==null?void 0:b()]):c("a",{href:F,rel:p.value,target:u.value,"aria-label":v.value,...t,class:["nav-link",t.class],onFocusout:()=>n("focusout")},L?L():[E?E():c(Me,{icon:A}),y,e.noExternalLinkIcon?null:c(Cs),b==null?void 0:b()])}}}),mv=U({name:"NavbarDropdownLink",props:{config:{type:Object,required:!0}},slots:Object,setup(e,{slots:t}){const n=Pe(),o=zo(e,"config"),r=I(()=>o.value.ariaLabel||o.value.text),i=J(!1);le(()=>n.value.path,()=>{i.value=!1});const l=a=>{a.detail===0&&(i.value=!i.value)};return()=>{var a;return c("div",{class:["dropdown-wrapper",{open:i.value}]},[c("button",{type:"button",class:"dropdown-title","aria-label":r.value,onClick:l},[((a=t.title)==null?void 0:a.call(t))||c("span",{class:"title"},[c(Me,{icon:o.value.icon}),e.config.text]),c("span",{class:"arrow"}),c("ul",{class:"nav-dropdown"},o.value.children.map((s,u)=>{const d=u===o.value.children.length-1;return c("li",{class:"dropdown-item"},"children"in s?[c("h4",{class:"dropdown-subtitle"},s.link?c(Be,{config:s,onFocusout:()=>{s.children.length===0&&d&&(i.value=!1)}}):c("span",s.text)),c("ul",{class:"dropdown-subitem-wrapper"},s.children.map((f,p)=>c("li",{class:"dropdown-subitem"},c(Be,{config:f,onFocusout:()=>{p===s.children.length-1&&d&&(i.value=!1)}}))))]:c(Be,{config:s,onFocusout:()=>{d&&(i.value=!1)}}))}))])])}}});const oc=(e,t="")=>we(e)?pn(Wt(t,e)):"children"in e?{...e,...e.link&&!Kn(e.link)?pn(Wt(t,e.link)):{},children:e.children.map(n=>oc(n,Wt(t,e.prefix)))}:{...e,link:Kn(e.link)?e.link:pn(Wt(t,e.link)).link},rc=()=>{const e=fe(),t=()=>(e.value.navbar||[]).map(n=>oc(n));return _s(()=>e.value.navbar,()=>t())},hv=()=>{const e=fe(),t=I(()=>e.value.repo||null),n=I(()=>t.value?gh(t.value):null),o=I(()=>t.value?js(t.value):null),r=I(()=>n.value?e.value.repoLabel??(o.value===null?"Source":o.value):null);return I(()=>!n.value||!r.value||e.value.repoDisplay===!1?null:{type:o.value||"Source",label:r.value,link:n.value})};var vv=U({name:"NavScreenDropdown",props:{config:{type:Object,required:!0}},setup(e){const t=Pe(),n=zo(e,"config"),o=I(()=>n.value.ariaLabel||n.value.text),r=J(!1);le(()=>t.value.path,()=>{r.value=!1});const i=(l,a)=>a[a.length-1]===l;return()=>[c("button",{type:"button",class:["nav-screen-dropdown-title",{active:r.value}],"aria-label":o.value,onClick:()=>{r.value=!r.value}},[c("span",{class:"title"},[c(Me,{icon:n.value.icon}),e.config.text]),c("span",{class:["arrow",r.value?"down":"end"]})]),c("ul",{class:["nav-screen-dropdown",{hide:!r.value}]},n.value.children.map(l=>c("li",{class:"dropdown-item"},"children"in l?[c("h4",{class:"dropdown-subtitle"},l.link?c(Be,{config:l,onFocusout:()=>{i(l,n.value.children)&&l.children.length===0&&(r.value=!1)}}):c("span",l.text)),c("ul",{class:"dropdown-subitem-wrapper"},l.children.map(a=>c("li",{class:"dropdown-subitem"},c(Be,{config:a,onFocusout:()=>{i(a,l.children)&&i(l,n.value.children)&&(r.value=!1)}}))))]:c(Be,{config:l,onFocusout:()=>{i(l,n.value.children)&&(r.value=!1)}}))))]}}),gv=U({name:"NavScreenLinks",setup(){const e=rc();return()=>e.value.length?c("nav",{class:"nav-screen-links"},e.value.map(t=>c("div",{class:"navbar-links-item"},"children"in t?c(vv,{config:t}):c(Be,{config:t})))):null}});const ic=()=>c(pe,{name:"dark"},()=>c("path",{d:"M524.8 938.667h-4.267a439.893 439.893 0 0 1-313.173-134.4 446.293 446.293 0 0 1-11.093-597.334A432.213 432.213 0 0 1 366.933 90.027a42.667 42.667 0 0 1 45.227 9.386 42.667 42.667 0 0 1 10.24 42.667 358.4 358.4 0 0 0 82.773 375.893 361.387 361.387 0 0 0 376.747 82.774 42.667 42.667 0 0 1 54.187 55.04 433.493 433.493 0 0 1-99.84 154.88 438.613 438.613 0 0 1-311.467 128z"}));ic.displayName="DarkIcon";const lc=()=>c(pe,{name:"light"},()=>c("path",{d:"M952 552h-80a40 40 0 0 1 0-80h80a40 40 0 0 1 0 80zM801.88 280.08a41 41 0 0 1-57.96-57.96l57.96-58a41.04 41.04 0 0 1 58 58l-58 57.96zM512 752a240 240 0 1 1 0-480 240 240 0 0 1 0 480zm0-560a40 40 0 0 1-40-40V72a40 40 0 0 1 80 0v80a40 40 0 0 1-40 40zm-289.88 88.08-58-57.96a41.04 41.04 0 0 1 58-58l57.96 58a41 41 0 0 1-57.96 57.96zM192 512a40 40 0 0 1-40 40H72a40 40 0 0 1 0-80h80a40 40 0 0 1 40 40zm30.12 231.92a41 41 0 0 1 57.96 57.96l-57.96 58a41.04 41.04 0 0 1-58-58l58-57.96zM512 832a40 40 0 0 1 40 40v80a40 40 0 0 1-80 0v-80a40 40 0 0 1 40-40zm289.88-88.08 58 57.96a41.04 41.04 0 0 1-58 58l-57.96-58a41 41 0 0 1 57.96-57.96z"}));lc.displayName="LightIcon";const ac=()=>c(pe,{name:"auto"},()=>c("path",{d:"M512 992C246.92 992 32 777.08 32 512S246.92 32 512 32s480 214.92 480 480-214.92 480-480 480zm0-840c-198.78 0-360 161.22-360 360 0 198.84 161.22 360 360 360s360-161.16 360-360c0-198.78-161.22-360-360-360zm0 660V212c165.72 0 300 134.34 300 300 0 165.72-134.28 300-300 300z"}));ac.displayName="AutoIcon";const sc=()=>c(pe,{name:"enter-fullscreen"},()=>c("path",{d:"M762.773 90.24h-497.28c-96.106 0-174.4 78.293-174.4 174.4v497.28c0 96.107 78.294 174.4 174.4 174.4h497.28c96.107 0 175.04-78.293 174.4-174.4V264.64c0-96.213-78.186-174.4-174.4-174.4zm-387.2 761.173H215.04c-21.867 0-40.427-17.92-41.067-41.066V649.92c0-22.507 17.92-40.427 40.427-40.427 11.307 0 21.227 4.694 28.48 11.947 7.253 7.253 11.947 17.92 11.947 28.48v62.293l145.28-145.28c15.893-15.893 41.813-15.893 57.706 0 15.894 15.894 15.894 41.814 0 57.707l-145.28 145.28h62.294c22.506 0 40.426 17.92 40.426 40.427s-17.173 41.066-39.68 41.066zM650.24 165.76h160.427c21.866 0 40.426 17.92 41.066 41.067v160.426c0 22.507-17.92 40.427-40.426 40.427-11.307 0-21.227-4.693-28.48-11.947-7.254-7.253-11.947-17.92-11.947-28.48v-62.186L625.6 450.347c-15.893 15.893-41.813 15.893-57.707 0-15.893-15.894-15.893-41.814 0-57.707l145.28-145.28H650.88c-22.507 0-40.427-17.92-40.427-40.427s17.174-41.173 39.787-41.173z"}));sc.displayName="EnterFullScreenIcon";const cc=()=>c(pe,{name:"cancel-fullscreen"},()=>c("path",{d:"M778.468 78.62H247.922c-102.514 0-186.027 83.513-186.027 186.027V795.08c0 102.514 83.513 186.027 186.027 186.027h530.432c102.514 0 186.71-83.513 186.026-186.027V264.647C964.494 162.02 880.981 78.62 778.468 78.62zM250.88 574.35h171.122c23.324 0 43.122 19.115 43.804 43.805v171.121c0 24.008-19.114 43.122-43.122 43.122-12.06 0-22.641-5.006-30.378-12.743s-12.743-19.115-12.743-30.379V722.83L224.597 877.91c-16.953 16.952-44.6 16.952-61.553 0-16.953-16.954-16.953-44.602 0-61.554L318.009 661.39h-66.446c-24.007 0-43.122-19.114-43.122-43.122 0-24.12 18.432-43.918 42.439-43.918zm521.899-98.873H601.657c-23.325 0-43.122-19.114-43.805-43.804V260.55c0-24.007 19.115-43.122 43.122-43.122 12.06 0 22.642 5.007 30.379 12.743s12.743 19.115 12.743 30.38v66.445l154.965-154.965c16.953-16.953 44.601-16.953 61.554 0 16.953 16.953 16.953 44.6 0 61.554L705.536 388.55h66.446c24.007 0 43.122 19.115 43.122 43.122.114 24.007-18.318 43.804-42.325 43.804z"}));cc.displayName="CancelFullScreenIcon";const uc=()=>c(pe,{name:"outlook"},()=>[c("path",{d:"M224 800c0 9.6 3.2 44.8 6.4 54.4 6.4 48-48 76.8-48 76.8s80 41.6 147.2 0 134.4-134.4 38.4-195.2c-22.4-12.8-41.6-19.2-57.6-19.2C259.2 716.8 227.2 761.6 224 800zM560 675.2l-32 51.2c-51.2 51.2-83.2 32-83.2 32 25.6 67.2 0 112-12.8 128 25.6 6.4 51.2 9.6 80 9.6 54.4 0 102.4-9.6 150.4-32l0 0c3.2 0 3.2-3.2 3.2-3.2 22.4-16 12.8-35.2 6.4-44.8-9.6-12.8-12.8-25.6-12.8-41.6 0-54.4 60.8-99.2 137.6-99.2 6.4 0 12.8 0 22.4 0 12.8 0 38.4 9.6 48-25.6 0-3.2 0-3.2 3.2-6.4 0-3.2 3.2-6.4 3.2-6.4 6.4-16 6.4-16 6.4-19.2 9.6-35.2 16-73.6 16-115.2 0-105.6-41.6-198.4-108.8-268.8C704 396.8 560 675.2 560 675.2zM224 419.2c0-28.8 22.4-51.2 51.2-51.2 28.8 0 51.2 22.4 51.2 51.2 0 28.8-22.4 51.2-51.2 51.2C246.4 470.4 224 448 224 419.2zM320 284.8c0-22.4 19.2-41.6 41.6-41.6 22.4 0 41.6 19.2 41.6 41.6 0 22.4-19.2 41.6-41.6 41.6C339.2 326.4 320 307.2 320 284.8zM457.6 208c0-12.8 12.8-25.6 25.6-25.6 12.8 0 25.6 12.8 25.6 25.6 0 12.8-12.8 25.6-25.6 25.6C470.4 233.6 457.6 220.8 457.6 208zM128 505.6C128 592 153.6 672 201.6 736c28.8-60.8 112-60.8 124.8-60.8-16-51.2 16-99.2 16-99.2l316.8-422.4c-48-19.2-99.2-32-150.4-32C297.6 118.4 128 291.2 128 505.6zM764.8 86.4c-22.4 19.2-390.4 518.4-390.4 518.4-22.4 28.8-12.8 76.8 22.4 99.2l9.6 6.4c35.2 22.4 80 12.8 99.2-25.6 0 0 6.4-12.8 9.6-19.2 54.4-105.6 275.2-524.8 288-553.6 6.4-19.2-3.2-32-19.2-32C777.6 76.8 771.2 80 764.8 86.4z"})]);uc.displayName="OutlookIcon";var dc=U({name:"AppearanceSwitch",setup(){const{config:e,isDarkmode:t,status:n}=co(),o=so(),r=()=>{e.value==="switch"?n.value={light:"dark",dark:"auto",auto:"light"}[n.value]:n.value=n.value==="light"?"dark":"light"},i=async l=>{if(!(document.startViewTransition&&!window.matchMedia("(prefers-reduced-motion: reduce)").matches&&!o.value)||!l){r();return}const a=l.clientX,s=l.clientY,u=Math.hypot(Math.max(a,innerWidth-a),Math.max(s,innerHeight-s)),d=t.value;await document.startViewTransition(async()=>{r(),await Xt()}).ready,t.value!==d&&document.documentElement.animate({clipPath:t.value?[`circle(${u}px at ${a}px ${s}px)`,`circle(0px at ${a}px ${s}px)`]:[`circle(0px at ${a}px ${s}px)`,`circle(${u}px at ${a}px ${s}px)`]},{duration:400,pseudoElement:t.value?"::view-transition-old(root)":"::view-transition-new(root)"})};return()=>c("button",{type:"button",id:"appearance-switch",onClick:i},[c(ac,{style:{display:n.value==="auto"?"block":"none"}}),c(ic,{style:{display:n.value==="dark"?"block":"none"}}),c(lc,{style:{display:n.value==="light"?"block":"none"}})])}}),_v=U({name:"AppearanceMode",setup(){const e=fe(),{canToggle:t}=co(),n=I(()=>e.value.outlookLocales.darkmode);return()=>t.value?c("div",{class:"appearance-wrapper"},[c("label",{class:"appearance-title",for:"appearance-switch"},n.value),c(dc)]):null}});const Pr=Js.enableThemeColor==="true";var fc=U({name:"ToggleFullScreenButton",setup(){const e=fe(),{isSupported:t,isFullscreen:n,toggle:o}=Ls(),r=I(()=>e.value.outlookLocales.fullscreen);return()=>t?c("div",{class:"full-screen-wrapper"},[c("label",{class:"full-screen-title",for:"full-screen-switch"},r.value),c("button",{type:"button",id:"full-screen-switch",class:"full-screen",ariaPressed:n.value,onClick:()=>o()},n.value?c(cc):c(sc))]):null}}),pc=U({name:"OutlookSettings",setup(){const e=Tn(),t=so(),n=I(()=>!t.value&&e.value.fullscreen);return()=>c(Qo,()=>[null,c(_v),n.value?c(fc):null])}}),bv=U({name:"NavScreen",props:{show:Boolean},emits:["close"],slots:Object,setup(e,{emit:t,slots:n}){const o=Pe(),{isMobile:r}=nr(),i=Se(),l=yi(i);return _e(()=>{i.value=document.body,le(r,a=>{!a&&e.show&&(l.value=!1,t("close"))}),le(()=>o.value.path,()=>{l.value=!1,t("close")})}),Pn(()=>{l.value=!1}),()=>c(Mt,{name:"fade",onEnter:()=>{l.value=!0},onAfterLeave:()=>{l.value=!1}},()=>{var a,s;return e.show?c("div",{id:"nav-screen"},c("div",{class:"vp-nav-screen-container"},[(a=n.before)==null?void 0:a.call(n),c(gv),c("div",{class:"vp-outlook-wrapper"},c(pc)),(s=n.after)==null?void 0:s.call(n)])):null})}}),Ev=U({name:"NavbarBrand",setup(){const e=Ft(),t=Xo(),n=fe(),o=I(()=>n.value.home||e.value),r=I(()=>t.value.title),i=I(()=>n.value.navTitle??r.value),l=I(()=>n.value.logo?Ne(n.value.logo):null),a=I(()=>n.value.logoDark?Ne(n.value.logoDark):null);return()=>c(Ue,{to:o.value,class:"vp-brand"},()=>[l.value?c("img",{class:["vp-nav-logo",{light:!!a.value}],src:l.value,alt:""}):null,a.value?c("img",{class:["vp-nav-logo dark"],src:a.value,alt:""}):null,i.value?c("span",{class:["vp-site-name",{"hide-in-pad":l.value&&n.value.hideSiteNameOnMobile!==!1}]},i.value):null])}}),yv=U({name:"NavbarLinks",setup(){const e=rc();return()=>e.value.length?c("nav",{class:"vp-nav-links"},e.value.map(t=>c("div",{class:"nav-item hide-in-mobile"},"children"in t?c(mv,{config:t}):c(Be,{config:t})))):null}}),Pv=U({name:"RepoLink",components:{BitbucketIcon:Fs,GiteeIcon:Ms,GitHubIcon:Ss,GitLabIcon:Vs,SourceIcon:Hs},setup(){const e=hv();return()=>e.value?c("div",{class:"nav-item vp-repo"},c("a",{class:"vp-repo-link",href:e.value.link,target:"_blank",rel:"noopener noreferrer","aria-label":e.value.label},c(rt(`${e.value.type}Icon`),{style:{width:"1.25rem",height:"1.25rem",verticalAlign:"middle"}}))):null}});const mc=({active:e=!1},{emit:t})=>c("button",{type:"button",class:["vp-toggle-navbar-button",{"is-active":e}],"aria-label":"Toggle Navbar","aria-expanded":e,"aria-controls":"nav-screen",onClick:()=>t("toggle")},c("span",[c("span",{class:"vp-top"}),c("span",{class:"vp-middle"}),c("span",{class:"vp-bottom"})]));mc.displayName="ToggleNavbarButton";var xv=mc;const zr=(e,{emit:t})=>c("button",{type:"button",class:"vp-toggle-sidebar-button",title:"Toggle Sidebar",onClick:()=>t("toggle")},c("span",{class:"icon"}));zr.displayName="ToggleSidebarButton",zr.emits=["toggle"];var Lv=zr,Tv=U({name:"OutlookButton",setup(){const{isSupported:e}=Ls(),t=Tn(),n=so(),o=Pe(),{canToggle:r}=co(),i=J(!1),l=I(()=>!n.value&&t.value.fullscreen&&e);return le(()=>o.value.path,()=>{i.value=!1}),()=>r.value||l.value||Pr?c("div",{class:"nav-item hide-in-mobile"},r.value&&!l.value&&!Pr?c(dc):l.value&&!r.value&&!Pr?c(fc):c("button",{type:"button",class:["outlook-button",{open:i.value}],tabindex:"-1","aria-hidden":!0},[c(uc),c("div",{class:"outlook-dropdown"},c(pc))])):null}}),Iv=U({name:"NavBar",emits:["toggleSidebar"],slots:Object,setup(e,{emit:t,slots:n}){const o=fe(),{isMobile:r}=nr(),i=J(!1),l=I(()=>{const{navbarAutoHide:d="mobile"}=o.value;return d!=="none"&&(d==="always"||r.value)}),a=I(()=>o.value.navbarLayout||{start:["Brand"],center:["Links"],end:["Language","Repo","Outlook","Search"]}),s={Brand:Ev,Language:yr,Links:yv,Repo:Pv,Outlook:Tv,Search:pt("Docsearch")?rt("Docsearch"):pt("SearchBox")?rt("SearchBox"):yr},u=d=>s[d]??(pt(d)?rt(d):yr);return()=>{var d,f,p,v,_,x;return[c("header",{key:"navbar",id:"navbar",class:["vp-navbar",{"auto-hide":l.value,"hide-icon":o.value.navbarIcon===!1}]},[c("div",{class:"vp-navbar-start"},[c(Lv,{onToggle:()=>{i.value&&(i.value=!1),t("toggleSidebar")}}),(d=n.startBefore)==null?void 0:d.call(n),(a.value.start||[]).map(E=>c(u(E))),(f=n.startAfter)==null?void 0:f.call(n)]),c("div",{class:"vp-navbar-center"},[(p=n.centerBefore)==null?void 0:p.call(n),(a.value.center||[]).map(E=>c(u(E))),(v=n.centerAfter)==null?void 0:v.call(n)]),c("div",{class:"vp-navbar-end"},[(_=n.endBefore)==null?void 0:_.call(n),(a.value.end||[]).map(E=>c(u(E))),(x=n.endAfter)==null?void 0:x.call(n),c(xv,{active:i.value,onToggle:()=>{i.value=!i.value}})])]),c(bv,{show:i.value,onClose:()=>{i.value=!1}},{before:()=>{var E;return(E=n.screenTop)==null?void 0:E.call(n)},after:()=>{var E;return(E=n.screenBottom)==null?void 0:E.call(n)}})]}}});const Jn=(e,t,n=!1)=>"activeMatch"in t?new RegExp(t.activeMatch,"u").test(e.path):Bs(e,t.link)?!0:"children"in t&&!n?t.children.some(o=>Jn(e,o)):!1,hc=(e,t)=>t.type==="group"?t.children.some(n=>n.type==="group"?hc(e,n):n.type==="page"&&Jn(e,n,!0))||"prefix"in t&&Bs(e,t.prefix):!1;var Av=U({name:"SidebarChild",props:{config:{type:Object,required:!0}},setup(e){const t=Qt();return()=>we(e.config.link)?c(Be,{class:["vp-sidebar-link","vp-sidebar-page",{active:Jn(t,e.config,!0)}],exact:!0,config:e.config}):c("p",e,[c(Me,{icon:e.config.icon}),e.config.text])}}),Cv=U({name:"SidebarGroup",props:{config:{type:Object,required:!0},open:{type:Boolean,required:!0}},emits:["toggle"],setup(e,{emit:t}){const n=Qt(),o=I(()=>Jn(n,e.config)),r=I(()=>Jn(n,e.config,!0));return()=>{const{collapsible:i,children:l=[],icon:a,prefix:s,link:u,text:d}=e.config;return c("section",{class:"vp-sidebar-group"},[c(i?"button":"p",{class:["vp-sidebar-header",{clickable:i||u,exact:r.value,active:o.value}],...i?{type:"button",onClick:()=>t("toggle"),onKeydown:f=>{f.key==="Enter"&&t("toggle")}}:{}},[c(Me,{icon:a}),u?c(Be,{class:"vp-sidebar-title",config:{text:d,link:u},noExternalLinkIcon:!0}):c("span",{class:"vp-sidebar-title"},d),i?c("span",{class:["vp-arrow",e.open?"down":"end"]}):null]),e.open||!i?c(vc,{key:s,config:l}):null])}}}),vc=U({name:"SidebarLinks",props:{config:{type:Array,required:!0}},setup(e){const t=Qt(),n=J(-1),o=r=>{n.value=r===n.value?-1:r};return le(()=>t.path,()=>{const r=e.config.findIndex(i=>hc(t,i));n.value=r},{immediate:!0,flush:"post"}),()=>c("ul",{class:"vp-sidebar-links"},e.config.map((r,i)=>c("li",r.type==="group"?c(Cv,{config:r,open:i===n.value,onToggle:()=>o(i)}):c(Av,{config:r}))))}}),wv=U({name:"SideBar",slots:Object,setup(e,{slots:t}){const n=Qt(),o=fe(),r=Ci(),i=Se();return _e(()=>{le(()=>n.hash,l=>{const a=document.querySelector(`.vp-sidebar a.vp-sidebar-link[href="${n.path}${l}"]`);if(!a)return;const{top:s,height:u}=i.value.getBoundingClientRect(),{top:d,height:f}=a.getBoundingClientRect();ds+u&&a.scrollIntoView(!1)},{immediate:!0})}),()=>{var l,a,s;return c("aside",{ref:i,id:"sidebar",class:["vp-sidebar",{"hide-icon":o.value.sidebarIcon===!1}],key:"sidebar"},[(l=t.top)==null?void 0:l.call(t),((a=t.default)==null?void 0:a.call(t))||c(vc,{config:r.value}),(s=t.bottom)==null?void 0:s.call(t)])}}}),gc=U({name:"CommonWrapper",props:{containerClass:{type:String,default:""},noNavbar:Boolean,noSidebar:Boolean,noToc:Boolean},slots:Object,setup(e,{slots:t}){const n=Ln(),o=Pe(),r=Ie(),i=fe(),{isMobile:l,isPC:a}=nr(),[s,u]=$r(!1),[d,f]=$r(!1),p=Ci(),v=J(!1),_=I(()=>e.noNavbar||r.value.navbar===!1||i.value.navbar===!1?!1:!!(o.value.title||i.value.logo||i.value.repo||i.value.navbar)),x=I(()=>e.noSidebar?!1:r.value.sidebar!==!1&&p.value.length!==0&&!r.value.home),E=I(()=>e.noToc||r.value.home?!1:r.value.toc||i.value.toc!==!1&&r.value.toc!==!1),b={x:0,y:0},L=T=>{b.x=T.changedTouches[0].clientX,b.y=T.changedTouches[0].clientY},y=T=>{const z=T.changedTouches[0].clientX-b.x,H=T.changedTouches[0].clientY-b.y;Math.abs(z)>Math.abs(H)*1.5&&Math.abs(z)>40&&(z>0&&b.x<=80?u(!0):u(!1))},A=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;let F=0;return ye("scroll",Qp(()=>{const T=A();T<=58||T{T||u(!1)}),_e(()=>{const T=yi(document.body);le(s,H=>{T.value=H});const z=n.afterEach(()=>{u(!1)});Pn(()=>{T.value=!1,z()})}),()=>c(pt("GlobalEncrypt")?rt("GlobalEncrypt"):Os,()=>c("div",{class:["theme-container",{"no-navbar":!_.value,"no-sidebar":!x.value&&!(t.sidebar||t.sidebarTop||t.sidebarBottom),"has-toc":E.value,"hide-navbar":v.value,"sidebar-collapsed":!l.value&&!a.value&&d.value,"sidebar-open":l.value&&s.value},e.containerClass,r.value.containerClass||""],onTouchStart:L,onTouchEnd:y},[_.value?c(Iv,{onToggleSidebar:()=>u()},{startBefore:()=>{var T;return(T=t.navbarStartBefore)==null?void 0:T.call(t)},startAfter:()=>{var T;return(T=t.navbarStartAfter)==null?void 0:T.call(t)},centerBefore:()=>{var T;return(T=t.navbarCenterBefore)==null?void 0:T.call(t)},centerAfter:()=>{var T;return(T=t.navbarCenterAfter)==null?void 0:T.call(t)},endBefore:()=>{var T;return(T=t.navbarEndBefore)==null?void 0:T.call(t)},endAfter:()=>{var T;return(T=t.navbarEndAfter)==null?void 0:T.call(t)},screenTop:()=>{var T;return(T=t.navScreenTop)==null?void 0:T.call(t)},screenBottom:()=>{var T;return(T=t.navScreenBottom)==null?void 0:T.call(t)}}):null,c(Mt,{name:"fade"},()=>s.value?c("div",{class:"vp-sidebar-mask",onClick:()=>u(!1)}):null),c(Mt,{name:"fade"},()=>l.value?null:c("div",{class:"toggle-sidebar-wrapper",onClick:()=>f()},c("span",{class:["arrow",d.value?"end":"start"]}))),c(wv,{},{...t.sidebar?{default:()=>t.sidebar()}:{},top:()=>{var T;return(T=t.sidebarTop)==null?void 0:T.call(t)},bottom:()=>{var T;return(T=t.sidebarBottom)==null?void 0:T.call(t)}}),t.default(),c(pv)]))}}),sn=U({name:"DropTransition",props:{type:{type:String,default:"single"},delay:{type:Number,default:0},duration:{type:Number,default:.25},appear:Boolean},slots:Object,setup(e,{slots:t}){const n=r=>{r.style.transition=`transform ${e.duration}s ease-in-out ${e.delay}s, opacity ${e.duration}s ease-in-out ${e.delay}s`,r.style.transform="translateY(-20px)",r.style.opacity="0"},o=r=>{r.style.transform="translateY(0)",r.style.opacity="1"};return()=>c(e.type==="single"?Mt:of,{name:"drop",appear:e.appear,onAppear:n,onAfterAppear:o,onEnter:n,onAfterEnter:o,onBeforeLeave:n},()=>t.default())}});const Wr=({custom:e})=>c(gs,{class:["theme-hope-content",{custom:e}]});Wr.displayName="MarkdownContent",Wr.props={custom:Boolean};var _c=Wr;const bc=()=>c(pe,{name:"author"},()=>c("path",{d:"M649.6 633.6c86.4-48 147.2-144 147.2-249.6 0-160-128-288-288-288s-288 128-288 288c0 108.8 57.6 201.6 147.2 249.6-121.6 48-214.4 153.6-240 288-3.2 9.6 0 19.2 6.4 25.6 3.2 9.6 12.8 12.8 22.4 12.8h704c9.6 0 19.2-3.2 25.6-12.8 6.4-6.4 9.6-16 6.4-25.6-25.6-134.4-121.6-240-243.2-288z"}));bc.displayName="AuthorIcon";const Ec=()=>c(pe,{name:"calendar"},()=>c("path",{d:"M716.4 110.137c0-18.753-14.72-33.473-33.472-33.473-18.753 0-33.473 14.72-33.473 33.473v33.473h66.993v-33.473zm-334.87 0c0-18.753-14.72-33.473-33.473-33.473s-33.52 14.72-33.52 33.473v33.473h66.993v-33.473zm468.81 33.52H716.4v100.465c0 18.753-14.72 33.473-33.472 33.473a33.145 33.145 0 01-33.473-33.473V143.657H381.53v100.465c0 18.753-14.72 33.473-33.473 33.473a33.145 33.145 0 01-33.473-33.473V143.657H180.6A134.314 134.314 0 0046.66 277.595v535.756A134.314 134.314 0 00180.6 947.289h669.74a134.36 134.36 0 00133.94-133.938V277.595a134.314 134.314 0 00-133.94-133.938zm33.473 267.877H147.126a33.145 33.145 0 01-33.473-33.473c0-18.752 14.72-33.473 33.473-33.473h736.687c18.752 0 33.472 14.72 33.472 33.473a33.145 33.145 0 01-33.472 33.473z"}));Ec.displayName="CalendarIcon";const yc=()=>c(pe,{name:"category"},()=>c("path",{d:"M148.41 106.992h282.176c22.263 0 40.31 18.048 40.31 40.31V429.48c0 22.263-18.047 40.31-40.31 40.31H148.41c-22.263 0-40.311-18.047-40.311-40.31V147.302c0-22.263 18.048-40.31 40.311-40.31zM147.556 553.478H429.73c22.263 0 40.311 18.048 40.311 40.31v282.176c0 22.263-18.048 40.312-40.31 40.312H147.555c-22.263 0-40.311-18.049-40.311-40.312V593.79c0-22.263 18.048-40.311 40.31-40.311zM593.927 106.992h282.176c22.263 0 40.31 18.048 40.31 40.31V429.48c0 22.263-18.047 40.31-40.31 40.31H593.927c-22.263 0-40.311-18.047-40.311-40.31V147.302c0-22.263 18.048-40.31 40.31-40.31zM730.22 920.502H623.926c-40.925 0-74.22-33.388-74.22-74.425V623.992c0-41.038 33.387-74.424 74.425-74.424h222.085c41.038 0 74.424 33.226 74.424 74.067v114.233c0 10.244-8.304 18.548-18.547 18.548s-18.548-8.304-18.548-18.548V623.635c0-20.388-16.746-36.974-37.33-36.974H624.13c-20.585 0-37.331 16.747-37.331 37.33v222.086c0 20.585 16.654 37.331 37.126 37.331H730.22c10.243 0 18.547 8.304 18.547 18.547 0 10.244-8.304 18.547-18.547 18.547z"}));yc.displayName="CategoryIcon";const Pc=()=>c(pe,{name:"print"},()=>c("path",{d:"M819.2 364.8h-44.8V128c0-17.067-14.933-32-32-32H281.6c-17.067 0-32 14.933-32 32v236.8h-44.8C145.067 364.8 96 413.867 96 473.6v192c0 59.733 49.067 108.8 108.8 108.8h44.8V896c0 17.067 14.933 32 32 32h460.8c17.067 0 32-14.933 32-32V774.4h44.8c59.733 0 108.8-49.067 108.8-108.8v-192c0-59.733-49.067-108.8-108.8-108.8zM313.6 160h396.8v204.8H313.6V160zm396.8 704H313.6V620.8h396.8V864zM864 665.6c0 25.6-19.2 44.8-44.8 44.8h-44.8V588.8c0-17.067-14.933-32-32-32H281.6c-17.067 0-32 14.933-32 32v121.6h-44.8c-25.6 0-44.8-19.2-44.8-44.8v-192c0-25.6 19.2-44.8 44.8-44.8h614.4c25.6 0 44.8 19.2 44.8 44.8v192z"}));Pc.displayName="PrintIcon";const xc=()=>c(pe,{name:"tag"},()=>c("path",{d:"M939.902 458.563L910.17 144.567c-1.507-16.272-14.465-29.13-30.737-30.737L565.438 84.098h-.402c-3.215 0-5.726 1.005-7.634 2.913l-470.39 470.39a10.004 10.004 0 000 14.164l365.423 365.424c1.909 1.908 4.42 2.913 7.132 2.913s5.223-1.005 7.132-2.913l470.39-470.39c2.01-2.11 3.014-5.023 2.813-8.036zm-240.067-72.121c-35.458 0-64.286-28.828-64.286-64.286s28.828-64.285 64.286-64.285 64.286 28.828 64.286 64.285-28.829 64.286-64.286 64.286z"}));xc.displayName="TagIcon";const Lc=()=>c(pe,{name:"timer"},()=>c("path",{d:"M799.387 122.15c4.402-2.978 7.38-7.897 7.38-13.463v-1.165c0-8.933-7.38-16.312-16.312-16.312H256.33c-8.933 0-16.311 7.38-16.311 16.312v1.165c0 5.825 2.977 10.874 7.637 13.592 4.143 194.44 97.22 354.963 220.201 392.763-122.204 37.542-214.893 196.511-220.2 389.397-4.661 5.049-7.638 11.651-7.638 19.03v5.825h566.49v-5.825c0-7.379-2.849-13.981-7.509-18.9-5.049-193.016-97.867-351.985-220.2-389.527 123.24-37.67 216.446-198.453 220.588-392.892zM531.16 450.445v352.632c117.674 1.553 211.787 40.778 211.787 88.676H304.097c0-48.286 95.149-87.382 213.728-88.676V450.445c-93.077-3.107-167.901-81.297-167.901-177.093 0-8.803 6.99-15.793 15.793-15.793 8.803 0 15.794 6.99 15.794 15.793 0 80.261 63.69 145.635 142.01 145.635s142.011-65.374 142.011-145.635c0-8.803 6.99-15.793 15.794-15.793s15.793 6.99 15.793 15.793c0 95.019-73.789 172.82-165.96 177.093z"}));Lc.displayName="TimerIcon";const Tc=()=>c(pe,{name:"word"},()=>[c("path",{d:"M518.217 432.64V73.143A73.143 73.143 0 01603.43 1.097a512 512 0 01419.474 419.474 73.143 73.143 0 01-72.046 85.212H591.36a73.143 73.143 0 01-73.143-73.143z"}),c("path",{d:"M493.714 566.857h340.297a73.143 73.143 0 0173.143 85.577A457.143 457.143 0 11371.566 117.76a73.143 73.143 0 0185.577 73.143v339.383a36.571 36.571 0 0036.571 36.571z"})]);Tc.displayName="WordIcon";const Ht=()=>{const e=fe();return I(()=>e.value.metaLocales)};var Rv=U({name:"AuthorInfo",inheritAttrs:!1,props:{author:{type:Array,required:!0},pure:Boolean},setup(e){const t=Ht();return()=>e.author.length?c("span",{class:"page-author-info","aria-label":`${t.value.author}${e.pure?"":"🖊"}`,...e.pure?{}:{"data-balloon-pos":"up"}},[c(bc),c("span",e.author.map(n=>n.url?c("a",{class:"page-author-item",href:n.url,target:"_blank",rel:"noopener noreferrer"},n.name):c("span",{class:"page-author-item"},n.name))),c("span",{property:"author",content:e.author.map(n=>n.name).join(", ")})]):null}}),Dv=U({name:"CategoryInfo",inheritAttrs:!1,props:{category:{type:Array,required:!0},pure:Boolean},setup(e){const t=Ht(),n=Ai();return()=>e.category.length?c("span",{class:"page-category-info","aria-label":`${t.value.category}${e.pure?"":"🌈"}`,...e.pure?{}:{"data-balloon-pos":"up"}},[c(yc),e.category.map(({name:o,path:r})=>c("span",{class:["page-category-item",{[`category${Ns(o,9)}`]:!e.pure,clickable:r}],role:r?"navigation":"",onClick:()=>{r&&n(r)}},o)),c("meta",{property:"articleSection",content:e.category.map(({name:o})=>o).join(",")})]):null}}),kv=U({name:"DateInfo",inheritAttrs:!1,props:{date:{type:Object,default:null},localizedDate:{type:String,default:""},pure:Boolean},setup(e){const t=ms(),n=Ht();return()=>e.date?c("span",{class:"page-date-info","aria-label":`${n.value.date}${e.pure?"":"📅"}`,...e.pure?{}:{"data-balloon-pos":"up"}},[c(Ec),c("span",c(Qo,()=>e.localizedDate||e.date.toLocaleDateString(t.value))),c("meta",{property:"datePublished",content:e.date.toISOString()||""})]):null}}),Ov=U({name:"OriginalInfo",inheritAttrs:!1,props:{isOriginal:Boolean},setup(e){const t=Ht();return()=>e.isOriginal?c("span",{class:"page-original-info"},t.value.origin):null}}),Sv=U({name:"ReadingTimeInfo",inheritAttrs:!1,props:{readingTime:{type:Object,default:()=>null},readingTimeLocale:{type:Object,default:()=>null},pure:Boolean},setup(e){const t=Ht(),n=I(()=>{if(!e.readingTime)return null;const{minutes:o}=e.readingTime;return o<1?"PT1M":`PT${Math.round(o)}M`});return()=>{var o,r;return(o=e.readingTimeLocale)!=null&&o.time?c("span",{class:"page-reading-time-info","aria-label":`${t.value.readingTime}${e.pure?"":"⌛"}`,...e.pure?{}:{"data-balloon-pos":"up"}},[c(Lc),c("span",(r=e.readingTimeLocale)==null?void 0:r.time),c("meta",{property:"timeRequired",content:n.value})]):null}}}),Vv=U({name:"TagInfo",inheritAttrs:!1,props:{tag:{type:Array,default:()=>[]},pure:Boolean},setup(e){const t=Ht(),n=Ai();return()=>e.tag.length?c("span",{class:"page-tag-info","aria-label":`${t.value.tag}${e.pure?"":"🏷"}`,...e.pure?{}:{"data-balloon-pos":"up"}},[c(xc),e.tag.map(({name:o,path:r})=>c("span",{class:["page-tag-item",{[`tag${Ns(o,9)}`]:!e.pure,clickable:r}],role:r?"navigation":"",onClick:()=>{r&&n(r)}},o)),c("meta",{property:"keywords",content:e.tag.map(({name:o})=>o).join(",")})]):null}}),Mv=U({name:"ReadTimeInfo",inheritAttrs:!1,props:{readingTime:{type:Object,default:()=>null},readingTimeLocale:{type:Object,default:()=>null},pure:Boolean},setup(e){const t=Ht();return()=>{var n,o,r;return(n=e.readingTimeLocale)!=null&&n.words?c("span",{class:"page-word-info","aria-label":`${t.value.words}${e.pure?"":"🔠"}`,...e.pure?{}:{"data-balloon-pos":"up"}},[c(Tc),c("span",(o=e.readingTimeLocale)==null?void 0:o.words),c("meta",{property:"wordCount",content:(r=e.readingTime)==null?void 0:r.words})]):null}}}),Fv=U({name:"PageInfo",components:{AuthorInfo:Rv,CategoryInfo:Dv,DateInfo:kv,OriginalInfo:Ov,PageViewInfo:()=>null,ReadingTimeInfo:Sv,TagInfo:Vv,WordInfo:Mv},props:{items:{type:[Array,Boolean],default:()=>["Author","Original","Date","PageView","ReadingTime","Category","Tag"]},info:{type:Object,required:!0}},setup(e){const t=so();return()=>e.items?c("div",{class:"page-info"},e.items.map(n=>c(rt(`${n}Info`),{...e.info,pure:t.value}))):null}}),Hv=U({name:"PrintButton",setup(){const e=Tn(),t=fe();return()=>e.value.print===!1?null:c("button",{type:"button",class:"print-button",title:t.value.metaLocales.print,onClick:()=>{window.print()}},c(Pc))}}),Nv=U({name:"TOC",props:{items:{type:Array,default:()=>[]},headerDepth:{type:Number,default:2}},slots:Object,setup(e,{slots:t}){const n=Qt(),o=Pe(),r=Ht(),[i,l]=$r(),a=Se(),s=J("-1.7rem"),u=f=>{var p;(p=a.value)==null||p.scrollTo({top:f,behavior:"smooth"})},d=()=>{if(a.value){const f=document.querySelector(".vp-toc-item.active");f?s.value=`${f.getBoundingClientRect().top-a.value.getBoundingClientRect().top+a.value.scrollTop}px`:s.value="-1.7rem"}else s.value="-1.7rem"};return _e(()=>{le(()=>n.hash,f=>{if(a.value){const p=document.querySelector(`#toc a.toc-link[href$="${f}"]`);if(!p)return;const{top:v,height:_}=a.value.getBoundingClientRect(),{top:x,height:E}=p.getBoundingClientRect();xv+_&&u(a.value.scrollTop+x+E-v-_)}}),le(()=>n.fullPath,d,{flush:"post",immediate:!0})}),()=>{var _,x;const f=({title:E,level:b,slug:L})=>c(Ue,{to:`#${L}`,class:["vp-toc-link",`level${b}`],onClick:()=>{l()}},()=>E),p=(E,b)=>E.length&&b>0?c("ul",{class:"vp-toc-list"},E.map(L=>{const y=p(L.children,b-1);return[c("li",{class:["vp-toc-item",{active:n.hash===`#${L.slug}`}]},f(L)),y?c("li",y):null]})):null,v=e.items.length?p(e.items,e.headerDepth):o.value.headers?p(o.value.headers,e.headerDepth):null;return v?c("div",{class:"vp-toc-placeholder"},[c("aside",{id:"toc"},[(_=t.before)==null?void 0:_.call(t),c("div",{class:"vp-toc-header",onClick:()=>{l()}},[r.value.toc,c(Hv),c("div",{class:["arrow",i.value?"down":"end"]})]),c("div",{class:["vp-toc-wrapper",i.value?"open":""],ref:a},[v,c("div",{class:"vp-toc-marker",style:{top:s.value}})]),(x=t.after)==null?void 0:x.call(t)])]):null}}}),Ic=U({name:"SkipLink",props:{content:{type:String,default:"main-content"}},setup(e){const t=Pe(),n=fe(),o=Se(),r=({target:i})=>{const l=document.querySelector(i.hash);if(l){const a=()=>{l.removeAttribute("tabindex"),l.removeEventListener("blur",a)};l.setAttribute("tabindex","-1"),l.addEventListener("blur",a),l.focus(),window.scrollTo(0,0)}};return _e(()=>{le(()=>t.value.path,()=>o.value.focus())}),()=>[c("span",{ref:o,tabindex:"-1"}),c("a",{href:`#${e.content}`,class:"vp-skip-link sr-only",onClick:r},n.value.routeLocales.skipToContent)]}});let xr=null,wn=null;const $v={wait:()=>xr,pending:()=>{xr=new Promise(e=>{wn=e})},resolve:()=>{wn==null||wn(),xr=null,wn=null}},Ac=()=>$v;var Bv=U({name:"FadeSlideY",slots:Object,setup(e,{slots:t}){const{resolve:n,pending:o}=Ac();return()=>c(Mt,{name:"fade-slide-y",mode:"out-in",onBeforeEnter:n,onBeforeLeave:o},()=>{var r;return(r=t.default)==null?void 0:r.call(t)})}});const jv=(e,t)=>{const n=e.replace(t,"/").split("/"),o=[];let r=mi(t);return n.forEach((i,l)=>{l!==n.length-1?(r+=`${i}/`,o.push({link:r,name:i||"Home"})):i!==""&&(r+=i,o.push({link:r,name:i}))}),o},Cc=(e,{slots:t})=>{var f,p;const{bgImage:n,bgImageDark:o,bgImageStyle:r,color:i,description:l,image:a,imageDark:s,header:u,features:d=[]}=e;return c("div",{class:"vp-feature-wrapper"},[n?c("div",{class:["vp-feature-bg",{light:o}],style:[{"background-image":`url(${n})`},r]}):null,o?c("div",{class:"vp-feature-bg dark",style:[{"background-image":`url(${o})`},r]}):null,c("div",{class:"vp-feature",style:i?{color:i}:{}},[((f=t.image)==null?void 0:f.call(t,e))||[a?c("img",{class:["vp-feature-image",{light:s}],src:Ne(a),alt:""}):null,s?c("img",{class:"vp-feature-image dark",src:Ne(s),alt:""}):null],((p=t.info)==null?void 0:p.call(t,e))||[u?c("h2",{class:"vp-feature-header"},u):null,l?c("p",{class:"vp-feature-description",innerHTML:l}):null],d.length?c("div",{class:"vp-features"},d.map(({icon:v,title:_,details:x,link:E})=>{const b=[c("h3",{class:"vp-feature-title"},[c(Me,{icon:v}),c("span",{innerHTML:_})]),c("p",{class:"vp-feature-details",innerHTML:x})];return E?Kn(E)?c("a",{class:"vp-feature-item link",href:E,"aria-label":_,target:"_blank"},b):c(Ue,{class:"vp-feature-item link",to:E,"aria-label":_},()=>b):c("div",{class:"vp-feature-item"},b)})):null])])};Cc.displayName="FeaturePanel";var ql=Cc,zv=U({name:"HeroInfo",slots:Object,setup(e,{slots:t}){const n=Ie(),o=Xo(),r=I(()=>n.value.heroFullScreen??!1),i=I(()=>{const{heroText:u,tagline:d}=n.value;return{text:u??o.value.title??"Hello",tagline:d??o.value.description??"",isFullScreen:r.value}}),l=I(()=>{const{heroText:u,heroImage:d,heroImageDark:f,heroAlt:p,heroImageStyle:v}=n.value;return{image:d?Ne(d):null,imageDark:f?Ne(f):null,style:v,alt:p||u||"",isFullScreen:r.value}}),a=I(()=>{const{bgImage:u,bgImageDark:d,bgImageStyle:f}=n.value;return{image:we(u)?Ne(u):null,imageDark:we(d)?Ne(d):null,bgStyle:f,isFullScreen:r.value}}),s=I(()=>n.value.actions??[]);return()=>{var u,d,f;return c("header",{class:["vp-hero-info-wrapper",{fullscreen:r.value}]},[((u=t.heroBg)==null?void 0:u.call(t,a.value))||[a.value.image?c("div",{class:["vp-hero-mask",{light:a.value.imageDark}],style:[{"background-image":`url(${a.value.image})`},a.value.bgStyle]}):null,a.value.imageDark?c("div",{class:"vp-hero-mask dark",style:[{"background-image":`url(${a.value.imageDark})`},a.value.bgStyle]}):null],c("div",{class:"vp-hero-info"},[((d=t.heroImage)==null?void 0:d.call(t,l.value))||c(sn,{appear:!0,type:"group"},()=>[l.value.image?c("img",{key:"light",class:["vp-hero-image",{light:l.value.imageDark}],style:l.value.style,src:l.value.image,alt:l.value.alt}):null,l.value.imageDark?c("img",{key:"dark",class:"vp-hero-image dark",style:l.value.style,src:l.value.imageDark,alt:l.value.alt}):null]),((f=t.heroInfo)==null?void 0:f.call(t,i.value))??c("div",{class:"vp-hero-infos"},[i.value.text?c(sn,{appear:!0,delay:.04},()=>c("h1",{id:"main-title"},i.value.text)):null,i.value.tagline?c(sn,{appear:!0,delay:.08},()=>c("p",{id:"main-description",innerHTML:i.value.tagline})):null,s.value.length?c(sn,{appear:!0,delay:.12},()=>c("p",{class:"vp-hero-actions"},s.value.map(p=>c(Be,{class:["vp-hero-action",p.type||"default"],config:p,noExternalLinkIcon:!0},p.icon?{before:()=>c(Me,{icon:p.icon})}:{})))):null])])])}}});const wc=(e,{slots:t})=>{var p,v,_;const{bgImage:n,bgImageDark:o,bgImageStyle:r,color:i,description:l,image:a,imageDark:s,header:u,highlights:d=[],type:f="un-order"}=e;return c("div",{class:"vp-highlight-wrapper",style:i?{color:i}:{}},[n?c("div",{class:["vp-highlight-bg",{light:o}],style:[{"background-image":`url(${n})`},r]}):null,o?c("div",{class:"vp-highlight-bg dark",style:[{"background-image":`url(${o})`},r]}):null,c("div",{class:"vp-highlight"},[((p=t.image)==null?void 0:p.call(t,e))||[a?c("img",{class:["vp-highlight-image",{light:s}],src:Ne(a),alt:""}):null,s?c("img",{class:"vp-highlight-image dark",src:Ne(s),alt:""}):null],((v=t.info)==null?void 0:v.call(t,e))||[c("div",{class:"vp-highlight-info-wrapper"},c("div",{class:"vp-highlight-info"},[u?c("h2",{class:"vp-highlight-header",innerHTML:u}):null,l?c("p",{class:"vp-highlight-description",innerHTML:l}):null,((_=t.highlights)==null?void 0:_.call(t,d))||c(f==="order"?"ol":f==="no-order"?"dl":"ul",{class:"vp-highlights"},d.map(({icon:x,title:E,details:b,link:L})=>{const y=[c(f==="no-order"?"dt":"h3",{class:"vp-highlight-title"},[x?c(Me,{class:"vp-highlight-icon",icon:x}):null,c("span",{innerHTML:E})]),b?c(f==="no-order"?"dd":"p",{class:"vp-highlight-details",innerHTML:b}):null];return c(f==="no-order"?"div":"li",{class:["vp-highlight-item-wrapper",{link:L}]},L?Kn(L)?c("a",{class:"vp-highlight-item link",href:L,"aria-label":E,target:"_blank"},y):c(Ue,{class:"vp-highlight-item link",to:L,"aria-label":E},()=>y):c("div",{class:"vp-highlight-item"},y))}))]))]])])};wc.displayName="HighlightPanel";var Wv=wc,Gv=U({name:"HomePage",slots:Object,setup(e,{slots:t}){const n=so(),o=Ie(),r=I(()=>{const{features:l}=o.value;return Hr(l)?l:null}),i=I(()=>{const{highlights:l}=o.value;return Hr(l)?l:null});return()=>{var l,a,s,u;return c("main",{id:"main-content",class:["vp-project-home ",{pure:n.value}],"aria-labelledby":o.value.heroText===null?"":"main-title"},[(l=t.top)==null?void 0:l.call(t),c(zv),((a=i.value)==null?void 0:a.map(d=>"features"in d?c(ql,d):c(Wv,d)))||(r.value?c(sn,{appear:!0,delay:.24},()=>c(ql,{features:r.value})):null),(s=t.center)==null?void 0:s.call(t),c(sn,{appear:!0,delay:.32},()=>c(_c)),(u=t.bottom)==null?void 0:u.call(t)])}}}),Uv=U({name:"BreadCrumb",setup(){const e=Pe(),t=Ft(),n=Ie(),o=fe(),r=Se([]),i=I(()=>(n.value.breadcrumb||n.value.breadcrumb!==!1&&o.value.breadcrumb!==!1)&&r.value.length>1),l=I(()=>n.value.breadcrumbIcon||n.value.breadcrumbIcon!==!1&&o.value.breadcrumbIcon!==!1),a=()=>{const s=jv(e.value.path,t.value).map(({link:u,name:d})=>{const{path:f,meta:p,notFound:v}=Jo(u);return v||p[dt.breadcrumbExclude]?null:{title:p[dt.shortTitle]||p[dt.title]||d,icon:p[dt.icon],path:f}}).filter(u=>u!==null);s.length>1&&(r.value=s)};return _e(()=>{le(()=>e.value.path,a,{immediate:!0})}),()=>c("nav",{class:["vp-breadcrumb",{disable:!i.value}]},i.value?c("ol",{vocab:"https://schema.org/",typeof:"BreadcrumbList"},r.value.map((s,u)=>c("li",{class:{"is-active":r.value.length-1===u},property:"itemListElement",typeof:"ListItem"},[c(Ue,{to:s.path,property:"item",typeof:"WebPage"},()=>[l.value?c(Me,{icon:s.icon}):null,c("span",{property:"name"},s.title||"Unknown")]),c("meta",{property:"position",content:u+1})]))):[])}});const Zl=e=>e===!1||qo(e)?e:we(e)?pn(e,!0):null,Gr=(e,t,n)=>{const o=e.findIndex(r=>r.link===t);if(o!==-1){const r=e[o+n];return r!=null&&r.link?r:null}for(const r of e)if("children"in r){const i=Gr(r.children,t,n);if(i)return i}return null};var Kv=U({name:"PageNav",setup(){const e=fe(),t=Ie(),n=Ci(),o=Pe(),r=Ai(),i=I(()=>{const a=Zl(t.value.prev);return a===!1?null:a||(e.value.prevLink===!1?null:Gr(n.value,o.value.path,-1))}),l=I(()=>{const a=Zl(t.value.next);return a===!1?null:a||(e.value.nextLink===!1?null:Gr(n.value,o.value.path,1))});return ye("keydown",a=>{a.altKey&&(a.key==="ArrowRight"?l.value&&(r(l.value.link),a.preventDefault()):a.key==="ArrowLeft"&&i.value&&(r(i.value.link),a.preventDefault()))}),()=>i.value||l.value?c("nav",{class:"vp-page-nav"},[i.value?c(Be,{class:"prev",config:i.value},()=>{var a,s;return[c("div",{class:"hint"},[c("span",{class:"arrow start"}),e.value.metaLocales.prev]),c("div",{class:"link"},[c(Me,{icon:(a=i.value)==null?void 0:a.icon}),(s=i.value)==null?void 0:s.text])]}):null,l.value?c(Be,{class:"next",config:l.value},()=>{var a,s;return[c("div",{class:"hint"},[e.value.metaLocales.next,c("span",{class:"arrow end"})]),c("div",{class:"link"},[(a=l.value)==null?void 0:a.text,c(Me,{icon:(s=l.value)==null?void 0:s.icon})])]}):null]):null}});const qv={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},Zv=({docsRepo:e,docsBranch:t,docsDir:n,filePathRelative:o,editLinkPattern:r})=>{if(!o)return null;const i=js(e);let l;return r?l=r:i!==null&&(l=qv[i]),l?l.replace(/:repo/u,Jt(e)?e:`https://github.com/${e}`).replace(/:branch/u,t).replace(/:path/u,os(`${mi(n)}/${o}`)):null},Yv=()=>{const e=fe(),t=Pe(),n=Ie();return I(()=>{const{repo:o,docsRepo:r=o,docsBranch:i="main",docsDir:l="",editLink:a,editLinkPattern:s=""}=e.value;if(!(n.value.editLink??a??!0)||!r)return null;const u=Zv({docsRepo:r,docsBranch:i,docsDir:l,editLinkPattern:s,filePathRelative:t.value.filePathRelative});return u?{text:e.value.metaLocales.editLink,link:u}:null})},Xv=()=>{const e=Xo(),t=fe(),n=Pe(),o=Ie();return I(()=>{var r,i;return!(o.value.lastUpdated??t.value.lastUpdated??!0)||!((r=n.value.git)!=null&&r.updatedTime)?null:new Date((i=n.value.git)==null?void 0:i.updatedTime).toLocaleString(e.value.lang)})},Jv=()=>{const e=fe(),t=Pe(),n=Ie();return I(()=>{var o;return n.value.contributors??e.value.contributors??!0?((o=t.value.git)==null?void 0:o.contributors)??null:null})};var Qv=U({name:"PageTitle",setup(){const e=Pe(),t=Ie(),n=fe(),{info:o,items:r}=ov();return()=>c("div",{class:"vp-page-title"},[c("h1",[n.value.titleIcon===!1?null:c(Me,{icon:t.value.icon}),e.value.title]),c(Fv,{info:o.value,...r.value===null?{}:{items:r.value}}),c("hr")])}});const Rc=()=>c(pe,{name:"edit"},()=>[c("path",{d:"M430.818 653.65a60.46 60.46 0 0 1-50.96-93.281l71.69-114.012 7.773-10.365L816.038 80.138A60.46 60.46 0 0 1 859.225 62a60.46 60.46 0 0 1 43.186 18.138l43.186 43.186a60.46 60.46 0 0 1 0 86.373L588.879 565.55l-8.637 8.637-117.466 68.234a60.46 60.46 0 0 1-31.958 11.229z"}),c("path",{d:"M728.802 962H252.891A190.883 190.883 0 0 1 62.008 771.98V296.934a190.883 190.883 0 0 1 190.883-192.61h267.754a60.46 60.46 0 0 1 0 120.92H252.891a69.962 69.962 0 0 0-69.098 69.099V771.98a69.962 69.962 0 0 0 69.098 69.098h475.911A69.962 69.962 0 0 0 797.9 771.98V503.363a60.46 60.46 0 1 1 120.922 0V771.98A190.883 190.883 0 0 1 728.802 962z"})]);Rc.displayName="EditIcon";var eg=U({name:"PageMeta",setup(){const e=fe(),t=Yv(),n=Xv(),o=Jv();return()=>{const{metaLocales:r}=e.value;return c("footer",{class:"page-meta"},[t.value?c("div",{class:"meta-item edit-link"},c(Be,{class:"label",config:t.value},{before:()=>c(Rc)})):null,c("div",{class:"meta-item git-info"},[n.value?c("div",{class:"update-time"},[c("span",{class:"label"},`${r.lastUpdated}: `),c(Qo,()=>c("span",{class:"info"},n.value))]):null,o.value&&o.value.length?c("div",{class:"contributors"},[c("span",{class:"label"},`${r.contributors}: `),o.value.map(({email:i,name:l},a)=>[c("span",{class:"contributor",title:`email: ${i}`},l),a!==o.value.length-1?",":""])]):null])])}}}),tg=U({name:"NormalPage",slots:Object,setup(e,{slots:t}){const n=Ie(),{isDarkmode:o}=co(),r=fe(),i=I(()=>n.value.toc||n.value.toc!==!1&&r.value.toc!==!1);return()=>c("main",{id:"main-content",class:"vp-page"},c(pt("LocalEncrypt")?rt("LocalEncrypt"):Os,()=>{var l,a,s,u;return[(l=t.top)==null?void 0:l.call(t),n.value.cover?c("div",{class:"page-cover"},c("img",{src:Ne(n.value.cover),alt:"","no-view":""})):null,c(Uv),c(Qv),i.value?c(Nv,{headerDepth:n.value.headerDepth??r.value.headerDepth??2},{before:()=>{var d;return(d=t.tocBefore)==null?void 0:d.call(t)},after:()=>{var d;return(d=t.tocAfter)==null?void 0:d.call(t)}}):null,(a=t.contentBefore)==null?void 0:a.call(t),c(_c),(s=t.contentAfter)==null?void 0:s.call(t),c(eg),c(Kv),pt("CommentService")?c(rt("CommentService"),{darkmode:o.value}):null,(u=t.bottom)==null?void 0:u.call(t)]}))}}),ng=U({name:"Layout",slots:Object,setup(e,{slots:t}){fe();const n=Pe(),o=Ie(),{isMobile:r}=nr(),i=I(()=>"none");return()=>[c(Ic),c(gc,{},{default:()=>{var l;return((l=t.default)==null?void 0:l.call(t))||(o.value.home?c(Gv):c(Bv,()=>c(tg,{key:n.value.path},{top:()=>{var a;return(a=t.top)==null?void 0:a.call(t)},bottom:()=>{var a;return(a=t.bottom)==null?void 0:a.call(t)},contentBefore:()=>{var a;return(a=t.contentBefore)==null?void 0:a.call(t)},contentAfter:()=>{var a;return(a=t.contentAfter)==null?void 0:a.call(t)},tocBefore:()=>{var a;return(a=t.tocBefore)==null?void 0:a.call(t)},tocAfter:()=>{var a;return(a=t.tocAfter)==null?void 0:a.call(t)}})))},...i.value==="none"?{}:{navScreenBottom:()=>c(rt("BloggerInfo"))},...!r.value&&i.value==="always"?{sidebar:()=>c(rt("BloggerInfo"))}:{}})]}}),og=U({name:"NotFoundHint",setup(){const e=fe(),t=()=>{const n=e.value.routeLocales.notFoundMsg;return n[Math.floor(Math.random()*n.length)]};return()=>c("div",{class:"not-found-hint"},[c("p",{class:"error-code"},"404"),c("h1",{class:"error-title"},e.value.routeLocales.notFoundTitle),c("p",{class:"error-hint"},t())])}}),rg=U({name:"NotFound",slots:Object,setup(e,{slots:t}){const n=Ln(),o=Ft(),r=fe();return()=>[c(Ic),c(gc,{noSidebar:!0},()=>{var i;return c("main",{id:"main-content",class:"vp-page not-found"},((i=t.default)==null?void 0:i.call(t))||[c(og),c("div",{class:"actions"},[c("button",{type:"button",class:"action-button",onClick:()=>{window.history.go(-1)}},r.value.routeLocales.back),c("button",{type:"button",class:"action-button",onClick:()=>{n.push(r.value.home??o.value)}},r.value.routeLocales.home)])])})]}});Am(e=>{const t=e.t,n=e.I!==!1,o=e.i;return n?{title:t,content:o?()=>[c(Me,{icon:o}),t]:null,order:e.O,index:e.I}:null});const ig=lt({enhance:({app:e,router:t})=>{const{scrollBehavior:n}=t.options;t.options.scrollBehavior=async(...o)=>(await Ac().wait(),n(...o)),lv(e),e.component("HopeIcon",Me)},setup:()=>{av(),fv()},layouts:{Layout:ng,NotFound:rg}}),Io=[Fp,Em,Im,km,Vm,Nm,zm,qm,ih,Ph,Uh,ig],lg=JSON.parse('{"base":"/","lang":"en-US","title":"","description":"","head":[["link",{"rel":"icon","href":"/photos/home/logo-small.svg"}]],"locales":{}}');var Dn=Se(lg),ag=np,sg=()=>{const e=Ap({history:ag(mi("/")),routes:[{name:"vuepress-route",path:"/:catchAll(.*)",components:{}}],scrollBehavior:(t,n,o)=>o||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{if(t.path!==n.path||n===_t){const o=Jo(t.path);if(o.path!==t.path)return o.path;const r=await o.loader();t.meta={...o.meta,_pageChunk:r}}else t.path===n.path&&(t.meta=n.meta)}),e},cg=e=>{e.component("ClientOnly",Qo),e.component("Content",gs),e.component("RouteLink",Ue)},ug=(e,t,n)=>{const o=I(()=>t.currentRoute.value.path),r=li((E,b)=>({get(){return E(),t.currentRoute.value.meta._pageChunk},set(L){t.currentRoute.value.meta._pageChunk=L,b()}})),i=I(()=>Bt.resolveLayouts(n)),l=I(()=>Bt.resolveRouteLocale(Dn.value.locales,o.value)),a=I(()=>Bt.resolveSiteLocaleData(Dn.value,l.value)),s=I(()=>r.value.comp),u=I(()=>r.value.data),d=I(()=>u.value.frontmatter),f=I(()=>Bt.resolvePageHeadTitle(u.value,a.value)),p=I(()=>Bt.resolvePageHead(f.value,d.value,a.value)),v=I(()=>Bt.resolvePageLang(u.value,a.value)),_=I(()=>Bt.resolvePageLayout(u.value,i.value)),x={layouts:i,pageData:u,pageComponent:s,pageFrontmatter:d,pageHead:p,pageHeadTitle:f,pageLang:v,pageLayout:_,redirects:Fr,routeLocale:l,routePath:o,routes:Yn,siteData:Dn,siteLocaleData:a};return e.provide(gi,x),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>d.value},$head:{get:()=>p.value},$headTitle:{get:()=>f.value},$lang:{get:()=>v.value},$page:{get:()=>u.value},$routeLocale:{get:()=>l.value},$site:{get:()=>Dn.value},$siteLocale:{get:()=>a.value},$withBase:{get:()=>Ne}}),x},dg=()=>{const e=Rp(),t=ms();let n=[];const o=()=>{e.value.forEach(l=>{const a=fg(l);a&&n.push(a)})},r=()=>{const l=[];return e.value.forEach(a=>{const s=pg(a);s&&l.push(s)}),l},i=()=>{document.documentElement.lang=t.value;const l=r();n.forEach((a,s)=>{const u=l.findIndex(d=>a.isEqualNode(d));u===-1?(a.remove(),delete n[s]):l.splice(u,1)}),l.forEach(a=>document.head.appendChild(a)),n=[...n.filter(a=>!!a),...l]};qt(Op,i),_e(()=>{o(),le(e,i,{immediate:!1})})},fg=([e,t,n=""])=>{const o=Object.entries(t).map(([a,s])=>we(s)?`[${a}=${JSON.stringify(s)}]`:s===!0?`[${a}]`:"").join(""),r=`head > ${e}${o}`;return Array.from(document.querySelectorAll(r)).find(a=>a.innerText===n)||null},pg=([e,t,n])=>{if(!we(e))return null;const o=document.createElement(e);return qo(t)&&Object.entries(t).forEach(([r,i])=>{we(i)?o.setAttribute(r,i):i===!0&&o.setAttribute(r,"")}),we(n)&&o.appendChild(document.createTextNode(n)),o},mg=df,hg=async()=>{var n;const e=mg({name:"Vuepress",setup(){var i;dg();for(const l of Io)(i=l.setup)==null||i.call(l);const o=Io.flatMap(({rootComponents:l=[]})=>l.map(a=>c(a))),r=Dp();return()=>[c(r.value),o]}}),t=sg();cg(e),ug(e,t,Io);for(const o of Io)await((n=o.enhance)==null?void 0:n.call(o,{app:e,router:t,siteData:Dn}));return e.use(t),{app:e,router:t}};hg().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{Ah as A,Ys as B,Pe as C,Se as D,_e as E,Pn as F,we as G,qo as H,Es as I,Ho as J,Dh as O,Eg as P,Ue as R,Wa as a,Ga as b,gg as c,hg as createVueApp,Le as d,_g as e,U as f,Ln as g,Ft as h,en as i,Li as j,to as k,J as l,I as m,ye as n,vg as o,le as p,c as q,rt as r,Ks as s,zo as t,bg as u,Ih as v,wu as w,xh as x,Lh as y,Th as z}; diff --git a/assets/architecture.html-Df8jd6ox.js b/assets/architecture.html-Df8jd6ox.js new file mode 100644 index 000000000..73603951f --- /dev/null +++ b/assets/architecture.html-Df8jd6ox.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,e as a}from"./app-kq9lCQfY.js";const s="/photos/info/architecture/architecture1.png",r="/photos/info/architecture/architecture.svg",n="/photos/info/architecture/architecture-dark.svg",o="/photos/info/architecture/fhir-server.svg",c="/photos/info/architecture/fhir-server-dark.svg",h="/photos/info/architecture/bpe-light.svg",d="/photos/info/architecture/bpe-dark.svg",l="/photos/info/architecture/star.png",p="/photos/info/architecture/mesh.png",u={},m=a('

The Data Sharing Framework implements a distributed business process engine based on the BPMN 2.0 and FHIR R4 standards. Every participating organisation (e.g. ORG. A) runs a FHIR endpoint accessible by other sites and a business process engine (BPE) in the local secured network. Once the DSF has been installed in an organisation, it can be used for multiple use cases.

Simplified DSF Architecture
Simplified DSF Architecture

The following architecture diagram also shows three organisations, each of which has installed the DSF. The FHIR endpoint (green) is located in a demilitarised zone (DMZ) and is accessible from outside for communication with other organisations. It can be compared to a mailbox. The Business Process Engine (BPE - blue) is located in the intranet of an organisation and is responsible for the execution of processes. The metaphor: control centre helps here.

DSF Architecture
DSF Architecture

DSF FHIR Server 📫

As mentioned above, the externally accessible DSF FHIR server acts as a mailbox for communication. This means that an organisation creates a task resource in its DSF and drops the task resource (letters) into the mailbox of another organisation, requesting that something happen. Task resources have been explained in more detail in the section Basics and Standards.
It is important to understand that the DSF FHIR server is not used for persisting medical data.

DSF FHIR Server
DSF FHIR Server

Business Process Engine (BPE)

The BPE located in the secure internal network executes the processes (BPMN/Java). The BPE is deployed in the internal network and has access to the local systems, such as the organisation's own FHIR server, on which medical data is stored. These FHIR servers are not to be confused with the DSF FHIR server, on which no medical data is persisted.
Different processes can be executed simultaneously. For this, only a new process plugin file has to be added and configured. More about this in the Process Plugins.

BPE
BPE

The DSF BPE uses websocket (WSS) and webservice (HTTPS) connections to communicate with the DSF FHIR server. FHIR resources are created, read, updated and deleted via HTTP requests against the FHIR webservice API. The FHIR subscription mechanism is used to communicate Task resources with status 'requested' and QuestionnaireResponse resources with status 'completed' to the BPE via websockets. When the BPE starts and before the websocket connections are established, 'requested' Task resources and 'completed' QuestionnaireResponse not seen by the BPE are read via webservice requests.

Flexible Deployment

The deployment of the architecture is flexible. The organisations can be deployed as a star schema (left) or as a mesh schema (right). In the Star schema (left), all Data Integration Centres (DIC) are connected to a central node (CRR - Central Research Repository), which transfers the information to all nodes (DIC). For security reasons, a data transfer hub (DTH) is connected upstream, which provides additional security so that the medical data is never transferred together with the authenticating data.

In the mesh scheme (right), the nodes (DIC) are all directly connected to each other and the information is transferred from node to node. Here in the FDPG (Forschungsdatenportal - Research Data Portal), the data can then be accessed for research purposes. More about this here.

Star schema Mesh schema

Network Setup & Additional Reverse Proxy in external DMZ

You can find more information about the network setup here

',20),g=[m];function f(b,v){return t(),i("div",null,g)}const x=e(u,[["render",f],["__file","architecture.html.vue"]]),w=JSON.parse('{"path":"/intro/info/architecture.html","title":"Architecture","lang":"en-US","frontmatter":{"title":"Architecture","icon":"structure"},"headers":[{"level":2,"title":"DSF FHIR Server 📫","slug":"dsf-fhir-server","link":"#dsf-fhir-server","children":[]},{"level":2,"title":"Business Process Engine (BPE)","slug":"business-process-engine-bpe","link":"#business-process-engine-bpe","children":[]},{"level":2,"title":"Flexible Deployment","slug":"flexible-deployment","link":"#flexible-deployment","children":[]},{"level":2,"title":"Network Setup & Additional Reverse Proxy in external DMZ","slug":"network-setup-additional-reverse-proxy-in-external-dmz","link":"#network-setup-additional-reverse-proxy-in-external-dmz","children":[]}],"git":{"createdTime":1690473388000,"updatedTime":1715003318000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":3},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":1.94,"words":582},"filePathRelative":"intro/info/architecture.md","localizedDate":"July 27, 2023","excerpt":"

The Data Sharing Framework implements a distributed business process engine based on the BPMN 2.0 and FHIR R4 standards. Every participating organisation (e.g. ORG. A) runs a FHIR endpoint accessible by other sites and a business process engine (BPE) in the local secured network. Once the DSF has been installed in an organisation, it can be used for multiple use cases.

"}');export{x as comp,w as data}; diff --git a/assets/authentication.html-BWH7DDfb.js b/assets/authentication.html-BWH7DDfb.js new file mode 100644 index 000000000..784cd3ef9 --- /dev/null +++ b/assets/authentication.html-BWH7DDfb.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as s,c as o,a as t,b as e,d as n,e as l}from"./app-kq9lCQfY.js";const c={},d={href:"https://www.pki.dfn.de/ueberblick-dfn-pki/",target:"_blank",rel:"noopener noreferrer"},h={href:"https://www.tmf-ev.de",target:"_blank",rel:"noopener noreferrer"},f={href:"https://doku.tid.dfn.de/de:dfnpki:start",target:"_blank",rel:"noopener noreferrer"},u={href:"https://www.pki.dfn.de/fileadmin/PKI/anleitungen/DFN-PKI-Zertifikatprofile_Global.pdf",target:"_blank",rel:"noopener noreferrer"},p=l('

Certificate Requests

FHIR Endpoint

  • Purpose: Server certificate to authenticate the FHIR endpoint on the local network and against other organizations
  • Certificate profile:
    • DFN-PKI Global G2 via DFN e.V.: Web Server
    • D-Trust via TMF e.V.: Advanced SSL ID
    • GÉANT TCS via DFN e.V.: Web Server
  • Common name: FQDN of the server used while accessing from other organizations (external FQDN)
  • Subject alternative DNS entries: Use additional alternative FQDNs if a different name is used while accessing the Server from the local Network (local FQDN)

Business Process Engine Server

  • Purpose: Client certificate to authenticate against remote FHIR endpoints (when either the BPE Server or the FHIR Endpoint Server is acting as a client), server certificate to authenticate the business process engine server on the local network
  • Certificate profile:
    • DFN-PKI Global G2 via DFN e.V.: 802.1X Client
    • D-Trust via TMF e.V.: Basic Team ID
    • GÉANT TCS via DFN e.V.: Web Server
  • Common name: FQDN of the server used while accessing from the local network (local FQDN)
',5);function v(b,g){const i=a("ExternalLinkIcon");return s(),o("div",null,[t("p",null,[e("Authentication of organizations within the DSF is handled by the use of X.509 client and server certificates. Currently the certificate authorities run by "),t("a",d,[e("DFN-PKI Global G2"),n(i)]),e(", "),t("a",h,[e("D-Trust via TMF e.V."),n(i)]),e(" and "),t("a",f,[e("GÉANT TCS via DFN"),n(i)]),e(" are supported. All participating organizations are entered in a distributed and synchronized allow-list of valid organizations and certificates.")]),t("p",null,[e("A webserver certificate is needed to run the FHIR endpoint and a 802.1X client certificate is used to authenticate against other organizations endpoints and as a server certificate for the business process engine. For available certificate profiles see "),t("a",u,[e("DFN-PKI-Zertifikatprofile_Global.pdf"),n(i)])]),p])}const _=r(c,[["render",v],["__file","authentication.html.vue"]]),F=JSON.parse('{"path":"/oldstable/generalinformation/authentication.html","title":"Authentication","lang":"en-US","frontmatter":{"title":"Authentication","icon":"lock"},"headers":[{"level":2,"title":"Certificate Requests","slug":"certificate-requests","link":"#certificate-requests","children":[{"level":3,"title":"FHIR Endpoint","slug":"fhir-endpoint","link":"#fhir-endpoint","children":[]},{"level":3,"title":"Business Process Engine Server","slug":"business-process-engine-server","link":"#business-process-engine-server","children":[]}]}],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.94,"words":282},"filePathRelative":"oldstable/generalinformation/authentication.md","localizedDate":"August 23, 2023","excerpt":"

Authentication of organizations within the DSF is handled by the use of X.509 client and server certificates. Currently the certificate authorities run by DFN-PKI Global G2, D-Trust via TMF e.V. and GÉANT TCS via DFN are supported. All participating organizations are entered in a distributed and synchronized allow-list of valid organizations and certificates.

"}');export{_ as comp,F as data}; diff --git a/assets/basics.html-DiVFM6ZX.js b/assets/basics.html-DiVFM6ZX.js new file mode 100644 index 000000000..9fa138ff8 --- /dev/null +++ b/assets/basics.html-DiVFM6ZX.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as r,c as d,a as e,b as t,d as a,e as s}from"./app-kq9lCQfY.js";const h="/photos/info/basics/interoperability.png",l="/photos/info/basics/bpmn1.png",c="/photos/info/basics/bpmn2.png",m={},p={href:"https://www.hl7.org/fhir/",target:"_blank",rel:"noopener noreferrer"},f={href:"https://www.bpmn.org/",target:"_blank",rel:"noopener noreferrer"},u=s('

Interoperability

Interoperability is the ability of different systems to work together as seamlessly as possible. We can divide interoperability into four levels.

  • The foundational level defines the basic interconnectivity requirements which are necessary for a system or application to securely transmit data to and receive data from another system or application. Techniques such as HTTPS or REST are used for this.
  • The second level is the structural level. It defines the format and the syntax of the data exchange. Therefore, data formats like JSON or XML can be used.
  • The semantic level ensures the correct interpretation of the contents of the exchanged data between the different systems. Therefore, information models as FHIR or CDA or medical terminology systems like SNOMED CT or ICD can be used.
  • The final level, the organizational level, includes policy, social, legal and organizational aspects that enable secure, seamless and timely communication and use of data both within and between organizations. And importantly, these components enable shared consent, trust and integrated end-user processes and workflows.
Levels of interoperability
Levels of interoperability

HL7 FHIR 🔥

',5),b={href:"https://www.hl7.org/fhir/",target:"_blank",rel:"noopener noreferrer"},g=e("br",null,null,-1),w=e("h2",{id:"bpmn",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bpmn"},[e("span",null,"BPMN")])],-1),y={href:"https://www.bpmn.org/",target:"_blank",rel:"noopener noreferrer"},_=s('
Example of a BPMN model (Ping-Pong-Process of the DSF)
Example of a BPMN model (Ping-Pong-Process of the DSF)

Why are we using FHIR and BPMN?

On the one hand we use FHIR because of the mentioned benefits. On the other hand FHIR fits great with BPMN and these two in combination are a great fit for what we do:
Execute distributed data sharing Processes.

We do not need all 150 FHIR resources. The following FHIR resources are the ones we need and have implemented: ActivityDefinition, Binary, Bundle, CodeSystem, DocumentReference, Endpoint, Group, Library, Measure, MeasureReport, NamingSystem, Organization, Questionnaire, QuestionnaireResponse, ResearchStudy, StructureDefinition, Subscription, Task and ValueSet.

Don't worry, it is not important to understand them all now. But to understand why we use FHIR and BPMN, it is important to look at the ActivityDefinition and TaskResources on the FHIR side and the Message Events on the BPMN side.
In the following picture you can see parts of BPMN. These Message Events enable the communication between different organizations. Every time there is a Message Event between two business processes, there is a corresponding TaskResource on the FHIR side. When one organization sends a message for example “do some work” to another organization or when we send a message to ourselves to start or continue a process, we do this by creating a FHIR TaskResource with the status “requested”. After that the Business Process Engine starts the work and the status switches to “in-progress” and if the work is done to “completed” or if there is a problem to “failed”.

The ActivityDefinition is needed to publish what can be done in an instance. That means the ActivityDefinition contains the process description with the authorisation who is allowed to send a message.

BPMN MessageEvents
BPMN MessageEvents
',7);function v(I,T){const n=o("ExternalLinkIcon");return r(),d("div",null,[e("p",null,[t("Here you can find some basic information about interoperability and the standards were using within the DSF before we go into details about the architecture. Here we only describe how the standards (FHIR and BPMN) are used within the DSF. If you want to gain a deeper knowledge of the standards, we recommend visiting these websites: "),e("a",p,[t("HL7 FHIR"),a(n)]),t(" and "),e("a",f,[t("BPMN"),a(n)])]),u,e("p",null,[e("a",b,[t("HL7 FHIR"),a(n)]),t(" is a standard for data exchange that can be used as an information model for communication within and between systems. The standard is based on resources, references and profiles. With this concept, FHIR offers interoperability out of the box. The resources describe data formats. 150 specified resources cover the entire health system. An example of a resource would be a patient, which consists of data such as name or gender. These resources can refer to other resources by means of references. This connects the information units into a network. For seamless exchange of information, FHIR supports RESTful architectures and web standards such as XML or JSON, which makes it easier for developers to use FHIR."),g,t(" The FHIR profiles can be understood as a set of rules. They explain, for example, which attributes must be mandatorily specified or which terminology may be used. In addition, profiles and controlled vocabulary can be validated.")]),w,e("p",null,[e("a",y,[t("Business Process Modelling Notation"),a(n)]),t(" is a modelling language that can be used to model and implement processes. The models can be used for the documentation of processes and for communication between different stakeholders. Furthermore, BPMN forms a standardised bridge between process design and process implementation. This is because it simplifies implementation. These processes are executed by a Business Process Engine. Basically, a BPE is a server that can read and execute the business process. More about this in the section on architecture.")]),_])}const k=i(m,[["render",v],["__file","basics.html.vue"]]),B=JSON.parse('{"path":"/intro/info/basics.html","title":"Basics and Standards","lang":"en-US","frontmatter":{"title":"Basics and Standards","icon":"study"},"headers":[{"level":2,"title":"Interoperability","slug":"interoperability","link":"#interoperability","children":[]},{"level":2,"title":"HL7 FHIR 🔥","slug":"hl7-fhir","link":"#hl7-fhir","children":[]},{"level":2,"title":"BPMN","slug":"bpmn","link":"#bpmn","children":[]},{"level":2,"title":"Why are we using FHIR and BPMN?","slug":"why-are-we-using-fhir-and-bpmn","link":"#why-are-we-using-fhir-and-bpmn","children":[]}],"git":{"createdTime":1690473388000,"updatedTime":1690903993000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":4}]},"readingTime":{"minutes":2.59,"words":778},"filePathRelative":"intro/info/basics.md","localizedDate":"July 27, 2023","excerpt":"

Here you can find some basic information about interoperability and the standards were using within the DSF before we go into details about the architecture. Here we only describe how the standards (FHIR and BPMN) are used within the DSF. If you want to gain a deeper knowledge of the standards, we recommend visiting these websites: HL7 FHIR and BPMN

"}');export{k as comp,B as data}; diff --git a/assets/bpe.html-B_WYZYIU.js b/assets/bpe.html-B_WYZYIU.js new file mode 100644 index 000000000..334cf48eb --- /dev/null +++ b/assets/bpe.html-B_WYZYIU.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as s,c as r,e as i}from"./app-kq9lCQfY.js";const t={},o=i('

Parameters BPE Server

Please also check common parameters for additional configuration options.

DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

  • Property: dev.dsf.bpe.db.liquibase.forceUnlock
  • Required: No
  • Description: To force liquibase to unlock the migration lock set to true
  • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
  • Default: false

DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

  • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
  • Required: No
  • Description: Liquibase change lock wait time in minutes, default 2 minutes
  • Default: 2

DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

  • Property: dev.dsf.bpe.db.liquibase.password
  • Required: Yes
  • Description: The password to access the database from the DSF BPE server to execute database migrations
  • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
  • Example: /run/secrets/db_liquibase.password

DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

  • Property: dev.dsf.bpe.db.liquibase.username
  • Required: No
  • Description: The user name to access the database from the DSF BPE server to execute database migrations
  • Default: liquibase_user

DEV_DSF_BPE_DB_URL

  • Property: dev.dsf.bpe.db.url
  • Required: Yes
  • Description: The address of the database used for the DSF BPE server
  • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
  • Example: jdbc:postgresql://db/bpe

DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

  • Property: dev.dsf.bpe.db.user.camunda.group
  • Required: No
  • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
  • Default: camunda_users

DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

  • Property: dev.dsf.bpe.db.user.camunda.password
  • Required: Yes
  • Description: The password to access the database from the DSF BPE server for camunda processes
  • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
  • Example: /run/secrets/db_user_camunda.password

DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

  • Property: dev.dsf.bpe.db.user.camunda.username
  • Required: No
  • Description: The user name to access the database from the DSF BPE server for camunda processes
  • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
  • Default: camunda_server_user

DEV_DSF_BPE_DB_USER_GROUP

  • Property: dev.dsf.bpe.db.user.group
  • Required: No
  • Description: The name of the user group to access the database from the DSF BPE server
  • Default: bpe_users

DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

  • Property: dev.dsf.bpe.db.user.password
  • Required: Yes
  • Description: The password to access the database from the DSF BPE server
  • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
  • Example: /run/secrets/db_user.password

DEV_DSF_BPE_DB_USER_USERNAME

  • Property: dev.dsf.bpe.db.user.username
  • Required: No
  • Description: The user name to access the database from the DSF BPE server
  • Default: bpe_server_user

DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

  • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
  • Required: No
  • Description: To enable debug log messages for every bpmn activity end, set to true.
  • Recommendation: This debug function should only be activated during process plugin development.
  • Default: false

DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

  • Property: dev.dsf.bpe.debug.log.message.onActivityStart
  • Required: No
  • Description: To enable debug log messages for every bpmn activity start, set to true.
  • Recommendation: This debug function should only be activated during process plugin development.
  • Default: false

DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

  • Property: dev.dsf.bpe.debug.log.message.variables
  • Required: No
  • Description: To enable loging bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
  • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
  • Default: false

DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

  • Property: dev.dsf.bpe.fhir.client.certificate
  • Required: Yes
  • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
  • Recommendation: Use docker secret file to configure
  • Example: /run/secrets/app_client_certificate.pem

DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

  • Property: dev.dsf.bpe.fhir.client.certificate.private.key
  • Required: Yes
  • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
  • Recommendation: Use docker secret file to configure
  • Example: /run/secrets/app_client_certificate_private_key.pem

DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

  • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
  • Required: No
  • Description: Password to decrypt the local client certificate encrypted private key
  • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
  • Example: /run/secrets/app_client_certificate_private_key.pem.password

DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

  • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
  • Required: No
  • Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server
  • Recommendation: Change default value only if timeout exceptions occur
  • Default: 2000

DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

  • Property: dev.dsf.bpe.fhir.client.local.timeout.read
  • Required: No
  • Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
  • Recommendation: Change default value only if timeout exceptions occur
  • Default: 60000

DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

  • Property: dev.dsf.bpe.fhir.client.local.verbose
  • Required: No
  • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
  • Default: false

DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

  • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
  • Required: No
  • Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server
  • Recommendation: Change default value only if timeout exceptions occur
  • Default: 5000

DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

  • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
  • Required: No
  • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
  • Recommendation: Change default value only if timeout exceptions occur
  • Default: 60000

DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

  • Property: dev.dsf.bpe.fhir.client.remote.verbose
  • Required: No
  • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
  • Default: false

DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

  • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
  • Required: Yes
  • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
  • Recommendation: Use docker secret file to configure
  • Example: /run/secrets/app_server_trust_certificates.pem

DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

  • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
  • Required: No
  • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
  • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

DEV_DSF_BPE_FHIR_SERVER_BASE_URL

  • Property: dev.dsf.bpe.fhir.server.base.url
  • Required: Yes
  • Description: The base address of the local DSF FHIR server to read/store fhir resources
  • Example: https://foo.bar/fhir

DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

  • Property: dev.dsf.bpe.fhir.server.organization.identifier.value
  • Required: Yes
  • Description: The local identifier value used in the Allow-List
  • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
  • Example: hospital.com

DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

  • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
  • Required: No
  • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
  • Default: -1

DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

  • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
  • Required: No
  • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
  • Default: 5000

DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

  • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
  • Required: No
  • Description: Subscription to receive notifications about task resources from the DSF FHIR server
  • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

  • Property: dev.dsf.bpe.mail.client.certificate
  • Required: No
  • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
  • Recommendation: Use docker secret file to configure
  • Example: /run/secrets/smtp_server_client_certificate.pem

DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

  • Property: dev.dsf.bpe.mail.client.certificate.private.key
  • Required: No
  • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
  • Recommendation: Use docker secret file to configure
  • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

  • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
  • Required: No
  • Description: Password to decrypt the local client certificate encrypted private key
  • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
  • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

DEV_DSF_BPE_MAIL_FROMADDRESS

  • Property: dev.dsf.bpe.mail.fromAddress
  • Required: No
  • Description: Mail service sender address
  • Example: sender@localhost

DEV_DSF_BPE_MAIL_HOST

  • Property: dev.dsf.bpe.mail.host
  • Required: No
  • Description: SMTP server hostname
  • Example: smtp.server.de

DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

  • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
  • Required: No
  • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
  • Default: 4

DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

  • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
  • Required: No
  • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
  • Default: /opt/bpe/log/bpe.log

DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

  • Property: dev.dsf.bpe.mail.password
  • Required: No
  • Description: SMTP server authentication password
  • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

DEV_DSF_BPE_MAIL_PORT

  • Property: dev.dsf.bpe.mail.port
  • Required: No
  • Description: SMTP server port
  • Example: 465
  • Default: 0

DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

  • Property: dev.dsf.bpe.mail.replyToAddresses
  • Required: No
  • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
  • Example: reply.to@localhost

DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

  • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
  • Required: No
  • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
  • Default: false

DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

  • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
  • Required: No
  • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
  • Default: false

DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

  • Property: dev.dsf.bpe.mail.smime.p12Keystore
  • Required: No
  • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
  • Recommendation: Use docker secret file to configure
  • Example: /run/secrets/smime_certificate.p12

DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

  • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
  • Required: No
  • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
  • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
  • Example: /run/secrets/smime_certificate.p12.password

DEV_DSF_BPE_MAIL_TOADDRESSES

  • Property: dev.dsf.bpe.mail.toAddresses
  • Required: No
  • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
  • Example: recipient@localhost

DEV_DSF_BPE_MAIL_TOADDRESSESCC

  • Property: dev.dsf.bpe.mail.toAddressesCc
  • Required: No
  • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
  • Example: cc.recipient@localhost

DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

  • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
  • Required: No
  • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
  • Recommendation: Use docker secret file to configure
  • Example: /run/secrets/smtp_server_trust_certificates.pem

DEV_DSF_BPE_MAIL_USERNAME

  • Property: dev.dsf.bpe.mail.username
  • Required: No
  • Description: SMTP server authentication username
  • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

DEV_DSF_BPE_MAIL_USESMTPS

  • Property: dev.dsf.bpe.mail.useSmtps
  • Required: No
  • Description: To enable SMTP over TLS (smtps), set to true
  • Default: false

DEV_DSF_BPE_PROCESS_EXCLUDED

  • Property: dev.dsf.bpe.process.excluded
  • Required: No
  • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
  • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List

DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

  • Property: dev.dsf.bpe.process.fhir.server.retry.max
  • Required: No
  • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
  • Default: -1

DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

  • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
  • Required: No
  • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
  • Default: 5000

DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

  • Property: dev.dsf.bpe.process.plugin.directroy
  • Required: No
  • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
  • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
  • Default: process

DEV_DSF_BPE_PROCESS_RETIRED

  • Property: dev.dsf.bpe.process.retired
  • Required: No
  • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
  • Recommendation: Retire processes that where deployed previously but are not anymore available

DEV_DSF_PROXY_NOPROXY

  • Property: dev.dsf.proxy.noProxy
  • Required: No
  • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
  • Example: foo.bar, test.com:8080

DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

  • Property: dev.dsf.proxy.password
  • Required: No
  • Description: Forward Proxy password
  • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

DEV_DSF_PROXY_URL

  • Property: dev.dsf.proxy.url
  • Required: No
  • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
  • Example: http://proxy.foo:8080

DEV_DSF_PROXY_USERNAME

  • Property: dev.dsf.proxy.username
  • Required: No
  • Description: Forward proxy username
  • Recommendation: Configure username if proxy requires authentication
',118),l=[o];function n(d,a){return s(),r("div",null,l)}const _=e(t,[["render",n],["__file","bpe.html.vue"]]),f=JSON.parse('{"path":"/v1.0.0/maintain/configuration/bpe.html","title":"Parameters BPE Server","lang":"en-US","frontmatter":{},"headers":[{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-bpe-db-liquibase-forceunlock","link":"#dev-dsf-bpe-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-bpe-db-liquibase-lockwaittime","link":"#dev-dsf-bpe-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","link":"#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-bpe-db-liquibase-username","link":"#dev-dsf-bpe-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_URL","slug":"dev-dsf-bpe-db-url","link":"#dev-dsf-bpe-db-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP","slug":"dev-dsf-bpe-db-user-camunda-group","link":"#dev-dsf-bpe-db-user-camunda-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","link":"#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME","slug":"dev-dsf-bpe-db-user-camunda-username","link":"#dev-dsf-bpe-db-user-camunda-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_GROUP","slug":"dev-dsf-bpe-db-user-group","link":"#dev-dsf-bpe-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","link":"#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_USERNAME","slug":"dev-dsf-bpe-db-user-username","link":"#dev-dsf-bpe-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND","slug":"dev-dsf-bpe-debug-log-message-onactivityend","link":"#dev-dsf-bpe-debug-log-message-onactivityend","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART","slug":"dev-dsf-bpe-debug-log-message-onactivitystart","link":"#dev-dsf-bpe-debug-log-message-onactivitystart","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES","slug":"dev-dsf-bpe-debug-log-message-variables","link":"#dev-dsf-bpe-debug-log-message-variables","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-fhir-client-certificate","link":"#dev-dsf-bpe-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-fhir-client-certificate-private-key","link":"#dev-dsf-bpe-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-local-timeout-connect","link":"#dev-dsf-bpe-fhir-client-local-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-local-timeout-read","link":"#dev-dsf-bpe-fhir-client-local-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE","slug":"dev-dsf-bpe-fhir-client-local-verbose","link":"#dev-dsf-bpe-fhir-client-local-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-remote-timeout-connect","link":"#dev-dsf-bpe-fhir-client-remote-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-remote-timeout-read","link":"#dev-dsf-bpe-fhir-client-remote-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE","slug":"dev-dsf-bpe-fhir-client-remote-verbose","link":"#dev-dsf-bpe-fhir-client-remote-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-bpe-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_SERVER_BASE_URL","slug":"dev-dsf-bpe-fhir-server-base-url","link":"#dev-dsf-bpe-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE","slug":"dev-dsf-bpe-fhir-server-organization-identifier-value","link":"#dev-dsf-bpe-fhir-server-organization-identifier-value","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX","slug":"dev-dsf-bpe-fhir-task-subscription-retry-max","link":"#dev-dsf-bpe-fhir-task-subscription-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP","slug":"dev-dsf-bpe-fhir-task-subscription-retry-sleep","link":"#dev-dsf-bpe-fhir-task-subscription-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-task-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-task-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-mail-client-certificate","link":"#dev-dsf-bpe-mail-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-mail-client-certificate-private-key","link":"#dev-dsf-bpe-mail-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_FROMADDRESS","slug":"dev-dsf-bpe-mail-fromaddress","link":"#dev-dsf-bpe-mail-fromaddress","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_HOST","slug":"dev-dsf-bpe-mail-host","link":"#dev-dsf-bpe-mail-host","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE","slug":"dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","link":"#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION","slug":"dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","link":"#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","link":"#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PORT","slug":"dev-dsf-bpe-mail-port","link":"#dev-dsf-bpe-mail-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES","slug":"dev-dsf-bpe-mail-replytoaddresses","link":"#dev-dsf-bpe-mail-replytoaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT","slug":"dev-dsf-bpe-mail-sendmailonerrorlogevent","link":"#dev-dsf-bpe-mail-sendmailonerrorlogevent","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP","slug":"dev-dsf-bpe-mail-sendtestmailonstartup","link":"#dev-dsf-bpe-mail-sendtestmailonstartup","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE","slug":"dev-dsf-bpe-mail-smime-p12keystore","link":"#dev-dsf-bpe-mail-smime-p12keystore","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","link":"#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSES","slug":"dev-dsf-bpe-mail-toaddresses","link":"#dev-dsf-bpe-mail-toaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSESCC","slug":"dev-dsf-bpe-mail-toaddressescc","link":"#dev-dsf-bpe-mail-toaddressescc","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-mail-trust-server-certificate-cas","link":"#dev-dsf-bpe-mail-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USERNAME","slug":"dev-dsf-bpe-mail-username","link":"#dev-dsf-bpe-mail-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USESMTPS","slug":"dev-dsf-bpe-mail-usesmtps","link":"#dev-dsf-bpe-mail-usesmtps","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_EXCLUDED","slug":"dev-dsf-bpe-process-excluded","link":"#dev-dsf-bpe-process-excluded","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX","slug":"dev-dsf-bpe-process-fhir-server-retry-max","link":"#dev-dsf-bpe-process-fhir-server-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP","slug":"dev-dsf-bpe-process-fhir-server-retry-sleep","link":"#dev-dsf-bpe-process-fhir-server-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY","slug":"dev-dsf-bpe-process-plugin-directroy","link":"#dev-dsf-bpe-process-plugin-directroy","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_RETIRED","slug":"dev-dsf-bpe-process-retired","link":"#dev-dsf-bpe-process-retired","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]}],"git":{"createdTime":1692708510000,"updatedTime":1692778861000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":5.96,"words":1789},"filePathRelative":"v1.0.0/maintain/configuration/bpe.md","localizedDate":"August 22, 2023","excerpt":"\\n

Please also check common parameters for additional configuration options.

\\n

DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

\\n
    \\n
  • Property: dev.dsf.bpe.db.liquibase.forceUnlock
  • \\n
  • Required: No
  • \\n
  • Description: To force liquibase to unlock the migration lock set to true
  • \\n
  • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
  • \\n
  • Default: false
  • \\n
"}');export{_ as comp,f as data}; diff --git a/assets/build.html-B99lTZFD.js b/assets/build.html-B99lTZFD.js new file mode 100644 index 000000000..33d5014f6 --- /dev/null +++ b/assets/build.html-B99lTZFD.js @@ -0,0 +1,21 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o,c as l,a as e,b as t,d as s,e as r}from"./app-kq9lCQfY.js";const d={},c=r(`

Build Project

Prerequisite: Java 11, Maven 3.6, Docker

mvn install
+

Manual Integration Testing (without Docker)

Prerequisite: Java 11, Maven 3.6, PostgreSQL 11

`,5),u=r(`
  • Build the entire project from the root directory of the repository
    mvn install
    +
  • Install PostgreSQL 11 (localhost:5432)
  • Add DB User liquibase_user
    CREATE USER liquibase_user WITH LOGIN NOSUPERUSER INHERIT CREATEDB CREATEROLE NOREPLICATION
    +PASSWORD 'fLp6ZSd5QrMAkGZMjxqXjmcWrTfa3Dn8fA57h92Y';
    +
  • Create Databases fhir and bpe with owner liquibase_user
    CREATE DATABASE bpe OWNER liquibase_user;
    +CREATE DATABASE fhir OWNER liquibase_user;
    +
  • Start org.highmed.dsf.fhir.FhirJettyServerHttps from your IDE with execution folder: .../highmed-dsf/dsf-fhir/dsf-fhir-server-jetty
  • Start org.highmed.dsf.bpe.BpeJettyServerHttps from your IDE with execition folder: .../highmed-dsf/dsf-bpe/dsf-bpe-server-jetty
  • `,6),h={href:"https://localhost:8001/fhir/",target:"_blank",rel:"noopener noreferrer"},m={href:"https://localhost:8002/bpe/",target:"_blank",rel:"noopener noreferrer"},p=e("em",null,".../highmed-dsf/dsf-tools/dsf-tools-test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12",-1),g=e("em",null,"password",-1),v=e("em",null,".../highmed-dsf/dsf-tools/dsf-tools-test-data-generator/cert/ca/testca_private-key.pem",-1),b=e("h2",{id:"manual-integration-testing-local-with-docker",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#manual-integration-testing-local-with-docker"},[e("span",null,"Manual Integration Testing (local with Docker)")])],-1),f=e("p",null,"Prerequisite: Java 11, Maven 3.6, Docker 18",-1),_=r(`
  • Build the entire project from the root directory of this repository
    mvn install
    +
  • Build docker images
    • Windows: in the .../dsf-docker-test-setup folder execute
      docker-build.bat
      +
    • Unix/Linux: in the .../dsf-docker-test-setup folder execute
      docker-build.sh
      +
  • Start docker containers
    • To start the FHIR server execute in the .../dsf-docker-test-setup/fhir folder
      dev:
      +docker-compose up
      +
      +prod: 
      +docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
      +
    • To start the BPE server execute in the .../dsf-docker-test-setup/bpe folder
      dev:
      +docker-compose up
      +    
      +prod: 
      +docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
      +
  • `,3),k={href:"https://localhost/fhir/",target:"_blank",rel:"noopener noreferrer"},x={href:"https://localhost:8443/bpe/",target:"_blank",rel:"noopener noreferrer"},T=e("em",null,".../highmed-dsf/dsf-tools/dsf-tools-test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12",-1),w=e("em",null,"password",-1),y=e("em",null,".../highmed-dsf/dsf-tools/dsf-tools-test-data-generator/cert/ca/testca_private-key.pem",-1),E=r(`

    Troubleshooting

    • If you run in docker network troubles, clean up your network using docker network ls -q | xargs docker network rm
    • In production: if the warning Service "db" is using volume "/var/lib/postgresql/data" from the previous container appears, run the command
      docker-compose down -v 
      +
      before starting the containers.

    Manual Integration Testing (VMs for Docker-Registry, 3 MeDICs, TTP)

    • For hints on setting up 5 Ubuntu VMs with Docker running on a Windows 10 host with Hyper-V and Ansible see test_setup_windows.txt
    • For hints on setting up 5 Ubuntu VMs with Docker running on a MacOS Catalina host with VirtualBox and Ansible see test_setup_macos.txt

    Starting the Processes

    Each process contains an ExampleStarter which creates FHIR resources and sends them to a designated FHIR-Endpoint in order to start the corresponding process in the Manual Integration Test Setup. The same client certificate can be used as above: .../highmed-dsf/dsf-tools/dsf-tools-test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12 (Password: password).

    The following configuration is needed:

    • The path to the client certificate: either the environment-variable DSF_CLIENT_CERTIFICATE_PATH or args[0] has to be set
    • The password of the client certificate: either the environment-variable DSF_CLIENT_CERTIFICATE_PASSWORD or args[1] has to be set
    `,8);function S(I,A){const i=n("ExternalLinkIcon");return o(),l("div",null,[c,e("ul",null,[u,e("li",null,[t("To access the FHIR endpoint ("),e("a",h,[t("https://localhost:8001/fhir/"),s(i)]),t("...) and BPE rest interface ("),e("a",m,[t("https://localhost:8002/bpe/"),s(i)]),t("...) via WebBrowser install "),p,t(" (Password: "),g,t(') in your browsers certifiate store. The p12 file includes a client certificate for "Webbrowser Test User" and the "Test CA" certificate. All private-keys and certificates including the Test CA are generated during the maven build and are private to your machine. Make sure to protect the CA private-key at '),v,t(" from third-party access if you have installed the Test CA certificate in your certificate store.")])]),b,f,e("ul",null,[_,e("li",null,[t("To access the FHIR endpoint ("),e("a",k,[t("https://localhost/fhir/"),s(i)]),t("...) and BPE rest interface ("),e("a",x,[t("https://localhost:8443/bpe/"),s(i)]),t("...) via WebBrowser install "),T,t(" (Password: "),w,t(') in your browsers certifiate store. The p12 file includes a client certificate for "Webbrowser Test User" and the "Test CA" certificate. All private-keys and certificates including the Test CA are generated during the maven build and are private to your machine. Make sure to protect the CA private-key at '),y,t(" from third-party access if you have installed the Test CA certificate in your certificate store.")])]),E])}const C=a(d,[["render",S],["__file","build.html.vue"]]),R=JSON.parse('{"path":"/oldstable/build/build.html","title":"Build and Test","lang":"en-US","frontmatter":{"title":"Build and Test","icon":"back-stage"},"headers":[{"level":2,"title":"Build Project","slug":"build-project","link":"#build-project","children":[]},{"level":2,"title":"Manual Integration Testing (without Docker)","slug":"manual-integration-testing-without-docker","link":"#manual-integration-testing-without-docker","children":[]},{"level":2,"title":"Manual Integration Testing (local with Docker)","slug":"manual-integration-testing-local-with-docker","link":"#manual-integration-testing-local-with-docker","children":[{"level":3,"title":"Troubleshooting","slug":"troubleshooting","link":"#troubleshooting","children":[]}]},{"level":2,"title":"Manual Integration Testing (VMs for Docker-Registry, 3 MeDICs, TTP)","slug":"manual-integration-testing-vms-for-docker-registry-3-medics-ttp","link":"#manual-integration-testing-vms-for-docker-registry-3-medics-ttp","children":[{"level":3,"title":"Starting the Processes","slug":"starting-the-processes","link":"#starting-the-processes","children":[]}]}],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":2.1,"words":630},"filePathRelative":"oldstable/build/build.md","localizedDate":"August 23, 2023","excerpt":"

    Build Project

    \\n

    Prerequisite: Java 11, Maven 3.6, Docker

    \\n
    mvn install\\n

    Manual Integration Testing (without Docker)

    \\n

    Prerequisite: Java 11, Maven 3.6, PostgreSQL 11

    "}');export{C as comp,R as data}; diff --git a/assets/changingBpmnProcesses.html-BwQhn7Qm.js b/assets/changingBpmnProcesses.html-BwQhn7Qm.js new file mode 100644 index 000000000..ab355c7e1 --- /dev/null +++ b/assets/changingBpmnProcesses.html-BwQhn7Qm.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,e as n}from"./app-kq9lCQfY.js";const s={},i=n("

    DEPRECATED SINCE VERSION 0.4.0

    A service task of a process integrated in the framework can be overwritten using the plugin interface. This means that entire processes do not have to be replaced when only individual steps need adaption. An example can be found in the module dsf-bpe > dsf-bpe-process-plugin-example > dsf-bpe-process-service-overwrite.

    A plugin has as its only dependency the process module which contains the service task to be overwritten.

    For a plugin replacing one service task, two new files must be generated:

    • A new service task extending the task it overwrites. The method to be overwritten is doExecute(DelegateExecution execution).
    • A new configuration file containing a method that has as return type the service task you want to overwrite. This method then returns a Bean of your own implementation of this specific service task. The method has to be annotated with @Primary.
    ",5),a=[i];function r(c,d){return t(),o("div",null,a)}const h=e(s,[["render",r],["__file","changingBpmnProcesses.html.vue"]]),m=JSON.parse('{"path":"/oldstable/code/changingBpmnProcesses.html","title":"Changing BPMN Processes by Service Task Overwrites","lang":"en-US","frontmatter":{"title":"Changing BPMN Processes by Service Task Overwrites","icon":"code"},"headers":[],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.54,"words":162},"filePathRelative":"oldstable/code/changingBpmnProcesses.md","localizedDate":"August 23, 2023","excerpt":"
    \\n

    DEPRECATED SINCE VERSION 0.4.0

    \\n
    \\n

    A service task of a process integrated in the framework can be overwritten using the plugin interface. This means that entire processes do not have to be replaced when only individual steps need adaption. An example can be found in the module dsf-bpe > dsf-bpe-process-plugin-example > dsf-bpe-process-service-overwrite.

    "}');export{h as comp,m as data}; diff --git a/assets/code.html-CSLPHq93.js b/assets/code.html-CSLPHq93.js new file mode 100644 index 000000000..b7cebbd86 --- /dev/null +++ b/assets/code.html-CSLPHq93.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as l,c as a,a as e,b as t,d as o,e as r}from"./app-kq9lCQfY.js";const c={},h=r('

    Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.

    Benefits of Contributing:

    • Foster community growth and diversification.
    • Sharpen your coding skills.
    • Gain recognition in the DSF community.
    • Directly impact the future of data sharing in medicine.

    Start now by visiting our contribution pages. Every line of code helps us build a stronger and more versatile DSF.

    General

    Code style

    You can import our code style for your specific IDE:

    ',7),d={href:"https://github.com/datasharingframework/dsf/blob/main/src/main/resources/eclipse-formatter-config.xml",target:"_blank",rel:"noopener noreferrer"},u=e("code",null,"Java",-1),p=e("code",null,"Code style",-1),g=e("code",null,"Formatter",-1),m=e("code",null,"Import",-1),f={href:"https://github.com/datasharingframework/dsf/blob/main/src/main/resources/intellij-formatter-config.xml",target:"_blank",rel:"noopener noreferrer"},b=e("code",null,"Editor",-1),_=e("code",null,"Code style",-1),v=e("code",null,"Java",-1),y=e("code",null,"import scheme",-1),w=e("code",null,"IntelliJ",-1),k=e("p",null,[t("Pull requests will only be approved if the code is formatted according to the code style configurations above. To format the code with maven before pushing to GitHub, use "),e("code",null,"mvn compile -Pformat-and-sort"),t(".")],-1),x=e("h3",{id:"branching-strategy",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#branching-strategy"},[e("span",null,"Branching strategy")])],-1),S={href:"https://www.atlassian.com/de/git/tutorials/comparing-workflows/gitflow-workflow",target:"_blank",rel:"noopener noreferrer"},D=r('
    • main
    • develop
    • issue
    • hotfix
    • release

    Notice that only the first two elements listed are actual branches. The other elements are containers to hold all branches belonging to that category.

    Branch naming

    The following ruleset is applied to name branches:

    • issue/<issue-number>_<issue-name>
    • hotfix/<version>
    • release/<version>

    Setting up the project

    This chapter lists all important requirements to get the project buildable and running properly.

    Java

    This project uses Java JDK 17, so make sure you have it installed on your system.

    Docker

    ',10),F={href:"https://www.docker.com/",target:"_blank",rel:"noopener noreferrer"},q=e("h3",{id:"maven",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#maven"},[e("span",null,"Maven")])],-1),T={href:"https://maven.apache.org/",target:"_blank",rel:"noopener noreferrer"},j=e("br",null,null,-1),C=e("em",null,"Important:",-1),B=e("br",null,null,-1),I=e("em",null,"Could not determine gpg version",-1),J={href:"https://gnupg.org/",target:"_blank",rel:"noopener noreferrer"},N=e("code",null,"-Dgpg.skip",-1),E=e("h2",{id:"workflow",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#workflow"},[e("span",null,"Workflow")])],-1),G=e("li",null,"Create an issue or comment on an issue that you want to contribute some feature",-1),P=e("li",null,"Fork the repository, create a branch and mention it in the issue",-1),W=e("li",null,"If you desire feedback, create a pull request or comment on it in the issue. Feel free to @ any member with write permissions if you feel like your request has not been registered yet. They will review your changes and/or change requests",-1),z={href:"https://github.com/datasharingframework/dsf/pulls",target:"_blank",rel:"noopener noreferrer"},M=r('

    Pull request process

    We follow Martin Fowler's method for managing pull requests. This approach categorizes pull requests based on the level of trust and experience of the contributor, as well as the impact of the changes. Here's how we apply it:

    1. Ship: For our most trusted contributors with a proven track record. These members can merge their pull requests without prior review, typically for minor or highly confident changes.

    2. Show: This level is for trusted contributors who need some oversight, as well as for experienced developers who want to demonstrate how certain changes should be made in the future. They create pull requests and show their work to the team.

    3. Ask: New or less experienced contributors, as well as those submitting more complex changes, fall into this category. They are required to ask for feedback and approval before their changes can be merged, ensuring thorough review and quality control.

    This method helps us maintain a balance between code quality and efficient development, recognizing the varying levels of expertise among our contributors.

    ',4),V={href:"https://martinfowler.com/articles/ship-show-ask.html",target:"_blank",rel:"noopener noreferrer"},O=e("h2",{id:"data-security-in-dsf-development",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#data-security-in-dsf-development"},[e("span",null,"Data Security in DSF Development")])],-1),R=e("p",null,"The DSF (Data Sharing Framework) and its process plugins are frequently used to transmit sensitive personal data. To prevent the release of personal data during development, please adhere to the following guidelines:",-1),Y=e("ul",null,[e("li",null,[e("strong",null,"No development with real personal data:"),t(" Always use anonymized or synthetic data for development purposes.")]),e("li",null,[e("strong",null,"No personal data in repositories:"),t(" Ensure no personal data is present in local and remote repositories intended for publication, not even temporarily.")]),e("li",null,[e("strong",null,"Review all log files:"),t(" Before using log files in issues, examples, etc., thoroughly review them to ensure no personal and sensitive data is included.")])],-1);function A(H,L){const n=s("ExternalLinkIcon");return l(),a("div",null,[h,e("ul",null,[e("li",null,[e("a",d,[t("Eclipse"),o(n)]),t(". Open your preferences, click on "),u,t(", "),p,t(", "),g,t(", "),m,t(" and select the downloaded file.")]),e("li",null,[e("a",f,[t("IntelliJ"),o(n)]),t(". Open your settings, click on "),b,t(", "),_,t(", "),v,t(", the settings icon, "),y,t(", "),w,t(" and select the downloaded file.")])]),k,x,e("p",null,[e("a",S,[t("Git Flow"),o(n)]),t(" is used as this project's branching strategy. Therefore, you will find the following structure:")]),D,e("p",null,[e("a",F,[t("Docker"),o(n)]),t(" is used in this project to test database functionality and to run more complex test-setups.")]),q,e("p",null,[t("The project relies on "),e("a",T,[t("Maven"),o(n)]),t(" as its management tool."),j,C,t(" When building the project you might encounter the following error:"),B,I,t(),e("a",J,[t("GPG"),o(n)]),t(" is used to sign artifacts for public release. Since this does not concern contributors, you may skip this step in the maven build process with "),N,t(".")]),E,e("ol",null,[G,P,W,e("li",null,[t("If your changes are production-ready, create a "),e("a",z,[t("pull request"),o(n)]),t(".")])]),M,e("p",null,[t("For more information on Fowler's approach, visit "),e("a",V,[t("Martin Fowler's article on Pull Requests"),o(n)]),t(".")]),O,R,Y])}const Q=i(c,[["render",A],["__file","code.html.vue"]]),X=JSON.parse('{"path":"/stable/contribute/code.html","title":"Contribute code","lang":"en-US","frontmatter":{"title":"Contribute code","icon":"info"},"headers":[{"level":3,"title":"Benefits of Contributing:","slug":"benefits-of-contributing","link":"#benefits-of-contributing","children":[]},{"level":2,"title":"General","slug":"general","link":"#general","children":[{"level":3,"title":"Code style","slug":"code-style","link":"#code-style","children":[]},{"level":3,"title":"Branching strategy","slug":"branching-strategy","link":"#branching-strategy","children":[]}]},{"level":2,"title":"Setting up the project","slug":"setting-up-the-project","link":"#setting-up-the-project","children":[{"level":3,"title":"Java","slug":"java","link":"#java","children":[]},{"level":3,"title":"Docker","slug":"docker","link":"#docker","children":[]},{"level":3,"title":"Maven","slug":"maven","link":"#maven","children":[]}]},{"level":2,"title":"Workflow","slug":"workflow","link":"#workflow","children":[{"level":3,"title":"Pull request process","slug":"pull-request-process","link":"#pull-request-process","children":[]}]},{"level":2,"title":"Data Security in DSF Development","slug":"data-security-in-dsf-development","link":"#data-security-in-dsf-development","children":[]}],"git":{"createdTime":null,"updatedTime":null,"contributors":[]},"readingTime":{"minutes":2.51,"words":754},"filePathRelative":"stable/contribute/code.md","excerpt":"

    Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.

    \\n

    Benefits of Contributing:

    \\n
      \\n
    • Foster community growth and diversification.
    • \\n
    • Sharpen your coding skills.
    • \\n
    • Gain recognition in the DSF community.
    • \\n
    • Directly impact the future of data sharing in medicine.
    • \\n
    "}');export{Q as comp,X as data}; diff --git a/assets/code.html-CmhEnLZF.js b/assets/code.html-CmhEnLZF.js new file mode 100644 index 000000000..e42295b1e --- /dev/null +++ b/assets/code.html-CmhEnLZF.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as l,c as a,a as e,b as t,d as o,e as r}from"./app-kq9lCQfY.js";const c={},h=r('

    Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.

    Benefits of Contributing:

    • Foster community growth and diversification.
    • Sharpen your coding skills.
    • Gain recognition in the DSF community.
    • Directly impact the future of data sharing in medicine.

    Start now by visiting our contribution pages. Every line of code helps us build a stronger and more versatile DSF.

    General

    Code style

    You can import our code style for your specific IDE:

    ',7),d={href:"https://github.com/datasharingframework/dsf/blob/main/src/main/resources/eclipse-formatter-config.xml",target:"_blank",rel:"noopener noreferrer"},u=e("code",null,"Java",-1),p=e("code",null,"Code style",-1),m=e("code",null,"Formatter",-1),g=e("code",null,"Import",-1),f={href:"https://github.com/datasharingframework/dsf/blob/main/src/main/resources/intellij-formatter-config.xml",target:"_blank",rel:"noopener noreferrer"},b=e("code",null,"Editor",-1),_=e("code",null,"Code style",-1),v=e("code",null,"Java",-1),w=e("code",null,"import scheme",-1),y=e("code",null,"IntelliJ",-1),k=e("p",null,[t("Pull requests will only be approved if the code is formatted according to the code style configurations above. To format the code with maven before pushing to GitHub, use "),e("code",null,"mvn compile -Pformat-and-sort"),t(".")],-1),x=e("h3",{id:"branching-strategy",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#branching-strategy"},[e("span",null,"Branching strategy")])],-1),S={href:"https://www.atlassian.com/de/git/tutorials/comparing-workflows/gitflow-workflow",target:"_blank",rel:"noopener noreferrer"},D=r('
    • main
    • develop
    • issue
    • hotfix
    • release

    Notice that only the first two elements listed are actual branches. The other elements are containers to hold all branches belonging to that category.

    Branch naming

    The following ruleset is applied to name branches:

    • issue/<issue-number>_<issue-name>
    • hotfix/<version>
    • release/<version>

    Setting up the project

    This chapter lists all important requirements to get the project buildable and running properly.

    Java

    This project uses Java JDK 17, so make sure you have it installed on your system.

    Docker

    ',10),F={href:"https://www.docker.com/",target:"_blank",rel:"noopener noreferrer"},q=e("h3",{id:"maven",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#maven"},[e("span",null,"Maven")])],-1),T={href:"https://maven.apache.org/",target:"_blank",rel:"noopener noreferrer"},j=e("br",null,null,-1),C=e("em",null,"Important:",-1),B=e("br",null,null,-1),I=e("em",null,"Could not determine gpg version",-1),J={href:"https://gnupg.org/",target:"_blank",rel:"noopener noreferrer"},N=e("code",null,"-Dgpg.skip",-1),z=e("h2",{id:"workflow",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#workflow"},[e("span",null,"Workflow")])],-1),E=e("li",null,"Create an issue or comment on an issue that you want to contribute some feature",-1),G=e("li",null,"Fork the repository, create a branch and mention it in the issue",-1),P=e("li",null,"If you desire feedback, create a pull request or comment on it in the issue. Feel free to @ any member with write permissions if you feel like your request has not been registered yet. They will review your changes and/or change requests",-1),W={href:"https://github.com/datasharingframework/dsf/pulls",target:"_blank",rel:"noopener noreferrer"},M=r('

    Pull request process

    We follow Martin Fowler's method for managing pull requests. This approach categorizes pull requests based on the level of trust and experience of the contributor, as well as the impact of the changes. Here's how we apply it:

    1. Ship: For our most trusted contributors with a proven track record. These members can merge their pull requests without prior review, typically for minor or highly confident changes.

    2. Show: This level is for trusted contributors who need some oversight, as well as for experienced developers who want to demonstrate how certain changes should be made in the future. They create pull requests and show their work to the team.

    3. Ask: New or less experienced contributors, as well as those submitting more complex changes, fall into this category. They are required to ask for feedback and approval before their changes can be merged, ensuring thorough review and quality control.

    This method helps us maintain a balance between code quality and efficient development, recognizing the varying levels of expertise among our contributors.

    ',4),V={href:"https://martinfowler.com/articles/ship-show-ask.html",target:"_blank",rel:"noopener noreferrer"},O=e("h2",{id:"data-security-in-dsf-development",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#data-security-in-dsf-development"},[e("span",null,"Data Security in DSF Development")])],-1),R=e("p",null,"The DSF (Data Sharing Framework) and its process plugins are frequently used to transmit sensitive personal data. To prevent the release of personal data during development, please adhere to the following guidelines:",-1),Y=e("ul",null,[e("li",null,[e("strong",null,"No development with real personal data:"),t(" Always use anonymized or synthetic data for development purposes.")]),e("li",null,[e("strong",null,"No personal data in repositories:"),t(" Ensure no personal data is present in local and remote repositories intended for publication, not even temporarily.")]),e("li",null,[e("strong",null,"Review all log files:"),t(" Before using log files in issues, examples, etc., thoroughly review them to ensure no personal and sensitive data is included.")])],-1);function A(H,L){const n=s("ExternalLinkIcon");return l(),a("div",null,[h,e("ul",null,[e("li",null,[e("a",d,[t("Eclipse"),o(n)]),t(". Open your preferences, click on "),u,t(", "),p,t(", "),m,t(", "),g,t(" and select the downloaded file.")]),e("li",null,[e("a",f,[t("IntelliJ"),o(n)]),t(". Open your settings, click on "),b,t(", "),_,t(", "),v,t(", the settings icon, "),w,t(", "),y,t(" and select the downloaded file.")])]),k,x,e("p",null,[e("a",S,[t("Git Flow"),o(n)]),t(" is used as this project's branching strategy. Therefore, you will find the following structure:")]),D,e("p",null,[e("a",F,[t("Docker"),o(n)]),t(" is used in this project to test database functionality and to run more complex test-setups.")]),q,e("p",null,[t("The project relies on "),e("a",T,[t("Maven"),o(n)]),t(" as its management tool."),j,C,t(" When building the project you might encounter the following error:"),B,I,t(),e("a",J,[t("GPG"),o(n)]),t(" is used to sign artifacts for public release. Since this does not concern contributors, you may skip this step in the maven build process with "),N,t(".")]),z,e("ol",null,[E,G,P,e("li",null,[t("If your changes are production-ready, create a "),e("a",W,[t("pull request"),o(n)]),t(".")])]),M,e("p",null,[t("For more information on Fowler's approach, visit "),e("a",V,[t("Martin Fowler's article on Pull Requests"),o(n)]),t(".")]),O,R,Y])}const Q=i(c,[["render",A],["__file","code.html.vue"]]),X=JSON.parse('{"path":"/v1.5.0/contribute/code.html","title":"Contribute code","lang":"en-US","frontmatter":{"title":"Contribute code","icon":"info"},"headers":[{"level":3,"title":"Benefits of Contributing:","slug":"benefits-of-contributing","link":"#benefits-of-contributing","children":[]},{"level":2,"title":"General","slug":"general","link":"#general","children":[{"level":3,"title":"Code style","slug":"code-style","link":"#code-style","children":[]},{"level":3,"title":"Branching strategy","slug":"branching-strategy","link":"#branching-strategy","children":[]}]},{"level":2,"title":"Setting up the project","slug":"setting-up-the-project","link":"#setting-up-the-project","children":[{"level":3,"title":"Java","slug":"java","link":"#java","children":[]},{"level":3,"title":"Docker","slug":"docker","link":"#docker","children":[]},{"level":3,"title":"Maven","slug":"maven","link":"#maven","children":[]}]},{"level":2,"title":"Workflow","slug":"workflow","link":"#workflow","children":[{"level":3,"title":"Pull request process","slug":"pull-request-process","link":"#pull-request-process","children":[]}]},{"level":2,"title":"Data Security in DSF Development","slug":"data-security-in-dsf-development","link":"#data-security-in-dsf-development","children":[]}],"git":{"createdTime":1708419681000,"updatedTime":1708419681000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":2.51,"words":754},"filePathRelative":"v1.5.0/contribute/code.md","localizedDate":"February 20, 2024","excerpt":"

    Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.

    \\n

    Benefits of Contributing:

    \\n
      \\n
    • Foster community growth and diversification.
    • \\n
    • Sharpen your coding skills.
    • \\n
    • Gain recognition in the DSF community.
    • \\n
    • Directly impact the future of data sharing in medicine.
    • \\n
    "}');export{Q as comp,X as data}; diff --git a/assets/code.html-D79wY7A-.js b/assets/code.html-D79wY7A-.js new file mode 100644 index 000000000..1ddf9cf9e --- /dev/null +++ b/assets/code.html-D79wY7A-.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as l,c as a,a as e,b as t,d as o,e as r}from"./app-kq9lCQfY.js";const c={},h=r('

    Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.

    Benefits of Contributing:

    • Foster community growth and diversification.
    • Sharpen your coding skills.
    • Gain recognition in the DSF community.
    • Directly impact the future of data sharing in medicine.

    Start now by visiting our contribution pages. Every line of code helps us build a stronger and more versatile DSF.

    General

    Code style

    You can import our code style for your specific IDE:

    ',7),d={href:"https://github.com/datasharingframework/dsf/blob/main/src/main/resources/eclipse-formatter-config.xml",target:"_blank",rel:"noopener noreferrer"},u=e("code",null,"Java",-1),p=e("code",null,"Code style",-1),m=e("code",null,"Formatter",-1),g=e("code",null,"Import",-1),f={href:"https://github.com/datasharingframework/dsf/blob/main/src/main/resources/intellij-formatter-config.xml",target:"_blank",rel:"noopener noreferrer"},b=e("code",null,"Editor",-1),_=e("code",null,"Code style",-1),v=e("code",null,"Java",-1),y=e("code",null,"import scheme",-1),w=e("code",null,"IntelliJ",-1),k=e("p",null,[t("Pull requests will only be approved if the code is formatted according to the code style configurations above. To format the code with maven before pushing to GitHub, use "),e("code",null,"mvn compile -Pformat-and-sort"),t(".")],-1),x=e("h3",{id:"branching-strategy",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#branching-strategy"},[e("span",null,"Branching strategy")])],-1),D={href:"https://www.atlassian.com/de/git/tutorials/comparing-workflows/gitflow-workflow",target:"_blank",rel:"noopener noreferrer"},S=r('
    • main
    • develop
    • issue
    • hotfix
    • release

    Notice that only the first two elements listed are actual branches. The other elements are containers to hold all branches belonging to that category.

    Branch naming

    The following ruleset is applied to name branches:

    • issue/<issue-number>_<issue-name>
    • hotfix/<version>
    • release/<version>

    Setting up the project

    This chapter lists all important requirements to get the project buildable and running properly.

    Java

    This project uses Java JDK 17, so make sure you have it installed on your system.

    Docker

    ',10),F={href:"https://www.docker.com/",target:"_blank",rel:"noopener noreferrer"},q=e("h3",{id:"maven",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#maven"},[e("span",null,"Maven")])],-1),T={href:"https://maven.apache.org/",target:"_blank",rel:"noopener noreferrer"},j=e("br",null,null,-1),C=e("em",null,"Important:",-1),B=e("br",null,null,-1),J=e("em",null,"Could not determine gpg version",-1),I={href:"https://gnupg.org/",target:"_blank",rel:"noopener noreferrer"},N=e("code",null,"-Dgpg.skip",-1),E=e("h2",{id:"workflow",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#workflow"},[e("span",null,"Workflow")])],-1),G=e("li",null,"Create an issue or comment on an issue that you want to contribute some feature",-1),P=e("li",null,"Fork the repository, create a branch and mention it in the issue",-1),z=e("li",null,"If you desire feedback, create a pull request or comment on it in the issue. Feel free to @ any member with write permissions if you feel like your request has not been registered yet. They will review your changes and/or change requests",-1),W={href:"https://github.com/datasharingframework/dsf/pulls",target:"_blank",rel:"noopener noreferrer"},M=r('

    Pull request process

    We follow Martin Fowler's method for managing pull requests. This approach categorizes pull requests based on the level of trust and experience of the contributor, as well as the impact of the changes. Here's how we apply it:

    1. Ship: For our most trusted contributors with a proven track record. These members can merge their pull requests without prior review, typically for minor or highly confident changes.

    2. Show: This level is for trusted contributors who need some oversight, as well as for experienced developers who want to demonstrate how certain changes should be made in the future. They create pull requests and show their work to the team.

    3. Ask: New or less experienced contributors, as well as those submitting more complex changes, fall into this category. They are required to ask for feedback and approval before their changes can be merged, ensuring thorough review and quality control.

    This method helps us maintain a balance between code quality and efficient development, recognizing the varying levels of expertise among our contributors.

    ',4),H={href:"https://martinfowler.com/articles/ship-show-ask.html",target:"_blank",rel:"noopener noreferrer"},V=e("h2",{id:"data-security-in-dsf-development",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#data-security-in-dsf-development"},[e("span",null,"Data Security in DSF Development")])],-1),O=e("p",null,"The DSF (Data Sharing Framework) and its process plugins are frequently used to transmit sensitive personal data. To prevent the release of personal data during development, please adhere to the following guidelines:",-1),R=e("ul",null,[e("li",null,[e("strong",null,"No development with real personal data:"),t(" Always use anonymized or synthetic data for development purposes.")]),e("li",null,[e("strong",null,"No personal data in repositories:"),t(" Ensure no personal data is present in local and remote repositories intended for publication, not even temporarily.")]),e("li",null,[e("strong",null,"Review all log files:"),t(" Before using log files in issues, examples, etc., thoroughly review them to ensure no personal and sensitive data is included.")])],-1);function Y(A,L){const n=s("ExternalLinkIcon");return l(),a("div",null,[h,e("ul",null,[e("li",null,[e("a",d,[t("Eclipse"),o(n)]),t(". Open your preferences, click on "),u,t(", "),p,t(", "),m,t(", "),g,t(" and select the downloaded file.")]),e("li",null,[e("a",f,[t("IntelliJ"),o(n)]),t(". Open your settings, click on "),b,t(", "),_,t(", "),v,t(", the settings icon, "),y,t(", "),w,t(" and select the downloaded file.")])]),k,x,e("p",null,[e("a",D,[t("Git Flow"),o(n)]),t(" is used as this project's branching strategy. Therefore, you will find the following structure:")]),S,e("p",null,[e("a",F,[t("Docker"),o(n)]),t(" is used in this project to test database functionality and to run more complex test-setups.")]),q,e("p",null,[t("The project relies on "),e("a",T,[t("Maven"),o(n)]),t(" as its management tool."),j,C,t(" When building the project you might encounter the following error:"),B,J,t(),e("a",I,[t("GPG"),o(n)]),t(" is used to sign artifacts for public release. Since this does not concern contributors, you may skip this step in the maven build process with "),N,t(".")]),E,e("ol",null,[G,P,z,e("li",null,[t("If your changes are production-ready, create a "),e("a",W,[t("pull request"),o(n)]),t(".")])]),M,e("p",null,[t("For more information on Fowler's approach, visit "),e("a",H,[t("Martin Fowler's article on Pull Requests"),o(n)]),t(".")]),V,O,R])}const Q=i(c,[["render",Y],["__file","code.html.vue"]]),X=JSON.parse('{"path":"/v1.5.2/contribute/code.html","title":"Contribute code","lang":"en-US","frontmatter":{"title":"Contribute code","icon":"info"},"headers":[{"level":3,"title":"Benefits of Contributing:","slug":"benefits-of-contributing","link":"#benefits-of-contributing","children":[]},{"level":2,"title":"General","slug":"general","link":"#general","children":[{"level":3,"title":"Code style","slug":"code-style","link":"#code-style","children":[]},{"level":3,"title":"Branching strategy","slug":"branching-strategy","link":"#branching-strategy","children":[]}]},{"level":2,"title":"Setting up the project","slug":"setting-up-the-project","link":"#setting-up-the-project","children":[{"level":3,"title":"Java","slug":"java","link":"#java","children":[]},{"level":3,"title":"Docker","slug":"docker","link":"#docker","children":[]},{"level":3,"title":"Maven","slug":"maven","link":"#maven","children":[]}]},{"level":2,"title":"Workflow","slug":"workflow","link":"#workflow","children":[{"level":3,"title":"Pull request process","slug":"pull-request-process","link":"#pull-request-process","children":[]}]},{"level":2,"title":"Data Security in DSF Development","slug":"data-security-in-dsf-development","link":"#data-security-in-dsf-development","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":2.51,"words":754},"filePathRelative":"v1.5.2/contribute/code.md","localizedDate":"July 8, 2024","excerpt":"

    Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.

    \\n

    Benefits of Contributing:

    \\n
      \\n
    • Foster community growth and diversification.
    • \\n
    • Sharpen your coding skills.
    • \\n
    • Gain recognition in the DSF community.
    • \\n
    • Directly impact the future of data sharing in medicine.
    • \\n
    "}');export{Q as comp,X as data}; diff --git a/assets/code.html-D_-BLqzB.js b/assets/code.html-D_-BLqzB.js new file mode 100644 index 000000000..691ab73b1 --- /dev/null +++ b/assets/code.html-D_-BLqzB.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as l,c as a,a as e,b as t,d as o,e as r}from"./app-kq9lCQfY.js";const c={},h=r('

    Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.

    Benefits of Contributing:

    • Foster community growth and diversification.
    • Sharpen your coding skills.
    • Gain recognition in the DSF community.
    • Directly impact the future of data sharing in medicine.

    Start now by visiting our contribution pages. Every line of code helps us build a stronger and more versatile DSF.

    General

    Code style

    You can import our code style for your specific IDE:

    ',7),d={href:"https://github.com/datasharingframework/dsf/blob/main/src/main/resources/eclipse-formatter-config.xml",target:"_blank",rel:"noopener noreferrer"},u=e("code",null,"Java",-1),p=e("code",null,"Code style",-1),m=e("code",null,"Formatter",-1),g=e("code",null,"Import",-1),f={href:"https://github.com/datasharingframework/dsf/blob/main/src/main/resources/intellij-formatter-config.xml",target:"_blank",rel:"noopener noreferrer"},b=e("code",null,"Editor",-1),_=e("code",null,"Code style",-1),v=e("code",null,"Java",-1),w=e("code",null,"import scheme",-1),y=e("code",null,"IntelliJ",-1),k=e("p",null,[t("Pull requests will only be approved if the code is formatted according to the code style configurations above. To format the code with maven before pushing to GitHub, use "),e("code",null,"mvn compile -Pformat-and-sort"),t(".")],-1),x=e("h3",{id:"branching-strategy",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#branching-strategy"},[e("span",null,"Branching strategy")])],-1),S={href:"https://www.atlassian.com/de/git/tutorials/comparing-workflows/gitflow-workflow",target:"_blank",rel:"noopener noreferrer"},D=r('
    • main
    • develop
    • issue
    • hotfix
    • release

    Notice that only the first two elements listed are actual branches. The other elements are containers to hold all branches belonging to that category.

    Branch naming

    The following ruleset is applied to name branches:

    • issue/<issue-number>_<issue-name>
    • hotfix/<version>
    • release/<version>

    Setting up the project

    This chapter lists all important requirements to get the project buildable and running properly.

    Java

    This project uses Java JDK 17, so make sure you have it installed on your system.

    Docker

    ',10),F={href:"https://www.docker.com/",target:"_blank",rel:"noopener noreferrer"},q=e("h3",{id:"maven",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#maven"},[e("span",null,"Maven")])],-1),T={href:"https://maven.apache.org/",target:"_blank",rel:"noopener noreferrer"},j=e("br",null,null,-1),C=e("em",null,"Important:",-1),B=e("br",null,null,-1),I=e("em",null,"Could not determine gpg version",-1),J={href:"https://gnupg.org/",target:"_blank",rel:"noopener noreferrer"},N=e("code",null,"-Dgpg.skip",-1),z=e("h2",{id:"workflow",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#workflow"},[e("span",null,"Workflow")])],-1),E=e("li",null,"Create an issue or comment on an issue that you want to contribute some feature",-1),G=e("li",null,"Fork the repository, create a branch and mention it in the issue",-1),P=e("li",null,"If you desire feedback, create a pull request or comment on it in the issue. Feel free to @ any member with write permissions if you feel like your request has not been registered yet. They will review your changes and/or change requests",-1),W={href:"https://github.com/datasharingframework/dsf/pulls",target:"_blank",rel:"noopener noreferrer"},M=r('

    Pull request process

    We follow Martin Fowler's method for managing pull requests. This approach categorizes pull requests based on the level of trust and experience of the contributor, as well as the impact of the changes. Here's how we apply it:

    1. Ship: For our most trusted contributors with a proven track record. These members can merge their pull requests without prior review, typically for minor or highly confident changes.

    2. Show: This level is for trusted contributors who need some oversight, as well as for experienced developers who want to demonstrate how certain changes should be made in the future. They create pull requests and show their work to the team.

    3. Ask: New or less experienced contributors, as well as those submitting more complex changes, fall into this category. They are required to ask for feedback and approval before their changes can be merged, ensuring thorough review and quality control.

    This method helps us maintain a balance between code quality and efficient development, recognizing the varying levels of expertise among our contributors.

    ',4),V={href:"https://martinfowler.com/articles/ship-show-ask.html",target:"_blank",rel:"noopener noreferrer"},A=e("h2",{id:"data-security-in-dsf-development",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#data-security-in-dsf-development"},[e("span",null,"Data Security in DSF Development")])],-1),O=e("p",null,"The DSF (Data Sharing Framework) and its process plugins are frequently used to transmit sensitive personal data. To prevent the release of personal data during development, please adhere to the following guidelines:",-1),R=e("ul",null,[e("li",null,[e("strong",null,"No development with real personal data:"),t(" Always use anonymized or synthetic data for development purposes.")]),e("li",null,[e("strong",null,"No personal data in repositories:"),t(" Ensure no personal data is present in local and remote repositories intended for publication, not even temporarily.")]),e("li",null,[e("strong",null,"Review all log files:"),t(" Before using log files in issues, examples, etc., thoroughly review them to ensure no personal and sensitive data is included.")])],-1);function Y(H,L){const n=s("ExternalLinkIcon");return l(),a("div",null,[h,e("ul",null,[e("li",null,[e("a",d,[t("Eclipse"),o(n)]),t(". Open your preferences, click on "),u,t(", "),p,t(", "),m,t(", "),g,t(" and select the downloaded file.")]),e("li",null,[e("a",f,[t("IntelliJ"),o(n)]),t(". Open your settings, click on "),b,t(", "),_,t(", "),v,t(", the settings icon, "),w,t(", "),y,t(" and select the downloaded file.")])]),k,x,e("p",null,[e("a",S,[t("Git Flow"),o(n)]),t(" is used as this project's branching strategy. Therefore, you will find the following structure:")]),D,e("p",null,[e("a",F,[t("Docker"),o(n)]),t(" is used in this project to test database functionality and to run more complex test-setups.")]),q,e("p",null,[t("The project relies on "),e("a",T,[t("Maven"),o(n)]),t(" as its management tool."),j,C,t(" When building the project you might encounter the following error:"),B,I,t(),e("a",J,[t("GPG"),o(n)]),t(" is used to sign artifacts for public release. Since this does not concern contributors, you may skip this step in the maven build process with "),N,t(".")]),z,e("ol",null,[E,G,P,e("li",null,[t("If your changes are production-ready, create a "),e("a",W,[t("pull request"),o(n)]),t(".")])]),M,e("p",null,[t("For more information on Fowler's approach, visit "),e("a",V,[t("Martin Fowler's article on Pull Requests"),o(n)]),t(".")]),A,O,R])}const Q=i(c,[["render",Y],["__file","code.html.vue"]]),X=JSON.parse('{"path":"/v1.5.1/contribute/code.html","title":"Contribute code","lang":"en-US","frontmatter":{"title":"Contribute code","icon":"info"},"headers":[{"level":3,"title":"Benefits of Contributing:","slug":"benefits-of-contributing","link":"#benefits-of-contributing","children":[]},{"level":2,"title":"General","slug":"general","link":"#general","children":[{"level":3,"title":"Code style","slug":"code-style","link":"#code-style","children":[]},{"level":3,"title":"Branching strategy","slug":"branching-strategy","link":"#branching-strategy","children":[]}]},{"level":2,"title":"Setting up the project","slug":"setting-up-the-project","link":"#setting-up-the-project","children":[{"level":3,"title":"Java","slug":"java","link":"#java","children":[]},{"level":3,"title":"Docker","slug":"docker","link":"#docker","children":[]},{"level":3,"title":"Maven","slug":"maven","link":"#maven","children":[]}]},{"level":2,"title":"Workflow","slug":"workflow","link":"#workflow","children":[{"level":3,"title":"Pull request process","slug":"pull-request-process","link":"#pull-request-process","children":[]}]},{"level":2,"title":"Data Security in DSF Development","slug":"data-security-in-dsf-development","link":"#data-security-in-dsf-development","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":2.51,"words":754},"filePathRelative":"v1.5.1/contribute/code.md","localizedDate":"April 17, 2024","excerpt":"

    Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.

    \\n

    Benefits of Contributing:

    \\n
      \\n
    • Foster community growth and diversification.
    • \\n
    • Sharpen your coding skills.
    • \\n
    • Gain recognition in the DSF community.
    • \\n
    • Directly impact the future of data sharing in medicine.
    • \\n
    "}');export{Q as comp,X as data}; diff --git a/assets/code.html-Da8veOhR.js b/assets/code.html-Da8veOhR.js new file mode 100644 index 000000000..56d23ced0 --- /dev/null +++ b/assets/code.html-Da8veOhR.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as r,c as d,a as e,d as l,w as a,b as o}from"./app-kq9lCQfY.js";const c={},h=e("h2",{id:"code-style",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#code-style"},[e("span",null,"Code Style")])],-1),u=e("p",null,"HiGHmed DSF code-style configurations for Eclipse and IntelliJ IDEA can be found here:",-1),m=e("p",null,[o("Pull Requests are only approved, if the code is formatted according to the code-style configurations above. To format the code with maven before pushing to GitHub, use "),e("code",null,"mvn compile -Pformat-and-sort"),o(".")],-1),f=e("h2",{id:"git-workflow",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#git-workflow"},[e("span",null,"Git Workflow")])],-1),p=e("code",null,"git-flow",-1),_={href:"https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow",target:"_blank",rel:"noopener noreferrer"},b=e("br",null,null,-1),g=e("code",null,"develop",-1),w=e("code",null,"master",-1),k=e("h3",{id:"branch-naming",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#branch-naming"},[e("span",null,"Branch Naming:")])],-1),v=e("ul",null,[e("li",null,[o("Features: "),e("code",null,"issue/_")]),e("li",null,[o("Hot-Fix: "),e("code",null,"hot-fix/_")]),e("li",null,[o("Release: "),e("code",null,"release/")])],-1);function x(y,C){const t=n("RouteLink"),i=n("ExternalLinkIcon");return r(),d("div",null,[h,u,e("ul",null,[e("li",null,[l(t,{to:"/oldstable/code/eclipseContent.html"},{default:a(()=>[o("Eclipse")]),_:1})]),e("li",null,[l(t,{to:"/oldstable/code/intelliJContent.html"},{default:a(()=>[o("IntelliJ IDEA")]),_:1})])]),m,f,e("p",null,[o("Since Release 0.1.0, we follow "),p,o(" as described "),e("a",_,[o("here"),l(i)]),o("."),b,o(" New features should branch from "),g,o(" and merged back if done. Hot-Fixes for the latest release will branch of "),w,o(" and will be merged into develop and later into master. A new release will branch of develop for a ramp down phase and will then be merged into master. The new master should merge back into develop to start a new development cycle.")]),k,v])}const I=s(c,[["render",x],["__file","code.html.vue"]]),S=JSON.parse('{"path":"/oldstable/code/code.html","title":"Writing Code","lang":"en-US","frontmatter":{"title":"Writing Code","icon":"code"},"headers":[{"level":2,"title":"Code Style","slug":"code-style","link":"#code-style","children":[]},{"level":2,"title":"Git Workflow","slug":"git-workflow","link":"#git-workflow","children":[{"level":3,"title":"Branch Naming:","slug":"branch-naming","link":"#branch-naming","children":[]}]}],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.54,"words":162},"filePathRelative":"oldstable/code/code.md","localizedDate":"August 23, 2023","excerpt":"

    Code Style

    \\n

    HiGHmed DSF code-style configurations for Eclipse and IntelliJ IDEA can be found here:

    \\n\\n

    Pull Requests are only approved, if the code is formatted according to the code-style configurations above. To format the code with maven before pushing to GitHub, use mvn compile -Pformat-and-sort.

    "}');export{I as comp,S as data}; diff --git a/assets/code.html-_JHNqXPS.js b/assets/code.html-_JHNqXPS.js new file mode 100644 index 000000000..00c4ee4c6 --- /dev/null +++ b/assets/code.html-_JHNqXPS.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as l,c as a,a as e,b as t,d as o,e as r}from"./app-kq9lCQfY.js";const c={},h=r('

    Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.

    Benefits of Contributing:

    • Foster community growth and diversification.
    • Sharpen your coding skills.
    • Gain recognition in the DSF community.
    • Directly impact the future of data sharing in medicine.

    Start now by visiting our contribution pages. Every line of code helps us build a stronger and more versatile DSF.

    General

    Code style

    You can import our code style for your specific IDE:

    ',7),d={href:"https://github.com/datasharingframework/dsf/blob/main/src/main/resources/eclipse-formatter-config.xml",target:"_blank",rel:"noopener noreferrer"},u=e("code",null,"Java",-1),p=e("code",null,"Code style",-1),m=e("code",null,"Formatter",-1),g=e("code",null,"Import",-1),f={href:"https://github.com/datasharingframework/dsf/blob/main/src/main/resources/intellij-formatter-config.xml",target:"_blank",rel:"noopener noreferrer"},b=e("code",null,"Editor",-1),_=e("code",null,"Code style",-1),v=e("code",null,"Java",-1),w=e("code",null,"import scheme",-1),y=e("code",null,"IntelliJ",-1),k=e("p",null,[t("Pull requests will only be approved if the code is formatted according to the code style configurations above. To format the code with maven before pushing to GitHub, use "),e("code",null,"mvn compile -Pformat-and-sort"),t(".")],-1),x=e("h3",{id:"branching-strategy",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#branching-strategy"},[e("span",null,"Branching strategy")])],-1),S={href:"https://www.atlassian.com/de/git/tutorials/comparing-workflows/gitflow-workflow",target:"_blank",rel:"noopener noreferrer"},D=r('
    • main
    • develop
    • issue
    • hotfix
    • release

    Notice that only the first two elements listed are actual branches. The other elements are containers to hold all branches belonging to that category.

    Branch naming

    The following ruleset is applied to name branches:

    • issue/<issue-number>_<issue-name>
    • hotfix/<version>
    • release/<version>

    Setting up the project

    This chapter lists all important requirements to get the project buildable and running properly.

    Java

    This project uses Java JDK 17, so make sure you have it installed on your system.

    Docker

    ',10),F={href:"https://www.docker.com/",target:"_blank",rel:"noopener noreferrer"},q=e("h3",{id:"maven",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#maven"},[e("span",null,"Maven")])],-1),T={href:"https://maven.apache.org/",target:"_blank",rel:"noopener noreferrer"},j=e("br",null,null,-1),C=e("em",null,"Important:",-1),B=e("br",null,null,-1),J=e("em",null,"Could not determine gpg version",-1),I={href:"https://gnupg.org/",target:"_blank",rel:"noopener noreferrer"},N=e("code",null,"-Dgpg.skip",-1),z=e("h2",{id:"workflow",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#workflow"},[e("span",null,"Workflow")])],-1),E=e("li",null,"Create an issue or comment on an issue that you want to contribute some feature",-1),G=e("li",null,"Fork the repository, create a branch and mention it in the issue",-1),P=e("li",null,"If you desire feedback, create a pull request or comment on it in the issue. Feel free to @ any member with write permissions if you feel like your request has not been registered yet. They will review your changes and/or change requests",-1),W={href:"https://github.com/datasharingframework/dsf/pulls",target:"_blank",rel:"noopener noreferrer"},M=r('

    Pull request process

    We follow Martin Fowler's method for managing pull requests. This approach categorizes pull requests based on the level of trust and experience of the contributor, as well as the impact of the changes. Here's how we apply it:

    1. Ship: For our most trusted contributors with a proven track record. These members can merge their pull requests without prior review, typically for minor or highly confident changes.

    2. Show: This level is for trusted contributors who need some oversight, as well as for experienced developers who want to demonstrate how certain changes should be made in the future. They create pull requests and show their work to the team.

    3. Ask: New or less experienced contributors, as well as those submitting more complex changes, fall into this category. They are required to ask for feedback and approval before their changes can be merged, ensuring thorough review and quality control.

    This method helps us maintain a balance between code quality and efficient development, recognizing the varying levels of expertise among our contributors.

    ',4),V={href:"https://martinfowler.com/articles/ship-show-ask.html",target:"_blank",rel:"noopener noreferrer"},O=e("h2",{id:"data-security-in-dsf-development",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#data-security-in-dsf-development"},[e("span",null,"Data Security in DSF Development")])],-1),R=e("p",null,"The DSF (Data Sharing Framework) and its process plugins are frequently used to transmit sensitive personal data. To prevent the release of personal data during development, please adhere to the following guidelines:",-1),Y=e("ul",null,[e("li",null,[e("strong",null,"No development with real personal data:"),t(" Always use anonymized or synthetic data for development purposes.")]),e("li",null,[e("strong",null,"No personal data in repositories:"),t(" Ensure no personal data is present in local and remote repositories intended for publication, not even temporarily.")]),e("li",null,[e("strong",null,"Review all log files:"),t(" Before using log files in issues, examples, etc., thoroughly review them to ensure no personal and sensitive data is included.")])],-1);function A(H,L){const n=s("ExternalLinkIcon");return l(),a("div",null,[h,e("ul",null,[e("li",null,[e("a",d,[t("Eclipse"),o(n)]),t(". Open your preferences, click on "),u,t(", "),p,t(", "),m,t(", "),g,t(" and select the downloaded file.")]),e("li",null,[e("a",f,[t("IntelliJ"),o(n)]),t(". Open your settings, click on "),b,t(", "),_,t(", "),v,t(", the settings icon, "),w,t(", "),y,t(" and select the downloaded file.")])]),k,x,e("p",null,[e("a",S,[t("Git Flow"),o(n)]),t(" is used as this project's branching strategy. Therefore, you will find the following structure:")]),D,e("p",null,[e("a",F,[t("Docker"),o(n)]),t(" is used in this project to test database functionality and to run more complex test-setups.")]),q,e("p",null,[t("The project relies on "),e("a",T,[t("Maven"),o(n)]),t(" as its management tool."),j,C,t(" When building the project you might encounter the following error:"),B,J,t(),e("a",I,[t("GPG"),o(n)]),t(" is used to sign artifacts for public release. Since this does not concern contributors, you may skip this step in the maven build process with "),N,t(".")]),z,e("ol",null,[E,G,P,e("li",null,[t("If your changes are production-ready, create a "),e("a",W,[t("pull request"),o(n)]),t(".")])]),M,e("p",null,[t("For more information on Fowler's approach, visit "),e("a",V,[t("Martin Fowler's article on Pull Requests"),o(n)]),t(".")]),O,R,Y])}const Q=i(c,[["render",A],["__file","code.html.vue"]]),X=JSON.parse('{"path":"/v1.4.0/contribute/code.html","title":"Contribute code","lang":"en-US","frontmatter":{"title":"Contribute code","icon":"info"},"headers":[{"level":3,"title":"Benefits of Contributing:","slug":"benefits-of-contributing","link":"#benefits-of-contributing","children":[]},{"level":2,"title":"General","slug":"general","link":"#general","children":[{"level":3,"title":"Code style","slug":"code-style","link":"#code-style","children":[]},{"level":3,"title":"Branching strategy","slug":"branching-strategy","link":"#branching-strategy","children":[]}]},{"level":2,"title":"Setting up the project","slug":"setting-up-the-project","link":"#setting-up-the-project","children":[{"level":3,"title":"Java","slug":"java","link":"#java","children":[]},{"level":3,"title":"Docker","slug":"docker","link":"#docker","children":[]},{"level":3,"title":"Maven","slug":"maven","link":"#maven","children":[]}]},{"level":2,"title":"Workflow","slug":"workflow","link":"#workflow","children":[{"level":3,"title":"Pull request process","slug":"pull-request-process","link":"#pull-request-process","children":[]}]},{"level":2,"title":"Data Security in DSF Development","slug":"data-security-in-dsf-development","link":"#data-security-in-dsf-development","children":[]}],"git":{"createdTime":1706191215000,"updatedTime":1706191215000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":2.51,"words":754},"filePathRelative":"v1.4.0/contribute/code.md","localizedDate":"January 25, 2024","excerpt":"

    Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.

    \\n

    Benefits of Contributing:

    \\n
      \\n
    • Foster community growth and diversification.
    • \\n
    • Sharpen your coding skills.
    • \\n
    • Gain recognition in the DSF community.
    • \\n
    • Directly impact the future of data sharing in medicine.
    • \\n
    "}');export{Q as comp,X as data}; diff --git a/assets/common.html-BjAsQZeB.js b/assets/common.html-BjAsQZeB.js new file mode 100644 index 000000000..4cfbff399 --- /dev/null +++ b/assets/common.html-BjAsQZeB.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as n,c as d,a as e,b as r,d as l,e as t}from"./app-kq9lCQfY.js";const c={},a=t('

    Common Parameters

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',16),_=e("strong",null,"Property:",-1),E={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},v=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),h=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),f=t('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    ',32);function u(R,p){const i=o("ExternalLinkIcon");return n(),d("div",null,[a,e("ul",null,[e("li",null,[_,r(),e("a",E,[r("dev.dsf.server.auth.oidc.client.id"),l(i)])]),v,h]),f])}const T=s(c,[["render",u],["__file","common.html.vue"]]),I=JSON.parse('{"path":"/v1.0.0/maintain/configuration/common.html","title":"Common Parameters","lang":"en-US","frontmatter":{},"headers":[{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]}],"git":{"createdTime":1692708510000,"updatedTime":1692708510000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.84,"words":552},"filePathRelative":"v1.0.0/maintain/configuration/common.md","localizedDate":"August 22, 2023","excerpt":"\\n

    DEV_DSF_SERVER_API_HOST

    \\n
      \\n
    • Property: dev.dsf.server.api.host
    • \\n
    • Required: Yes
    • \\n
    • Description: API connector host, default in docker image: 0.0.0.0
    • \\n
    • Default: 127.0.0.1
    • \\n
    "}');export{T as comp,I as data}; diff --git a/assets/configBpe.html-CkJloQiY.js b/assets/configBpe.html-CkJloQiY.js new file mode 100644 index 000000000..a50488e6b --- /dev/null +++ b/assets/configBpe.html-CkJloQiY.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as i,e as s}from"./app-kq9lCQfY.js";const o={},t=s('

    DSF 0.9.3 Configuration Parameters - BPE Server

    Please note: Additional parameters (not listed here) are used to configure process plugins.

    • Property: org.highmed.dsf.bpe.consent.webservice.factory.class
    • Required: No
    • Description: Factory for client implementations used to connect to a consent server in order to check permissions to access patient medical data
    • Recommendation: The default value is a factory for a stub implementation, change to a factory for client implementation that matches the API of your Consent server
    • Default: org.highmed.consent.client.stub.ConsentClientStubFactory

    ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD or ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: org.highmed.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    ORG_HIGHMED_DSF_BPE_DB_URL

    • Property: org.highmed.dsf.bpe.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: org.highmed.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: org.highmed.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in ORG_HIGHMED_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    ORG_HIGHMED_DSF_BPE_DB_USER_GROUP

    • Property: org.highmed.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD or ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    ORG_HIGHMED_DSF_BPE_DB_USER_USERNAME

    • Property: org.highmed.dsf.bpe.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server
    • Default: bpe_server_user

    ORG_HIGHMED_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: org.highmed.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    ORG_HIGHMED_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: org.highmed.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    ORG_HIGHMED_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: org.highmed.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable loging bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: org.highmed.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: org.highmed.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_PASSWORD or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.fhir.client.local.proxy.password
    • Required: No
    • Description: Proxy password, set if the DSF BPE server can reach internal servers, like the DSF FHIR server, only through a proxy which requests authentication
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_PASSWORD_FILE

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_URL

    • Property: org.highmed.dsf.bpe.fhir.client.local.proxy.url
    • Required: No
    • Description: Proxy location, set if the DSF BPE server can reach internal servers, like the DSF FHIR server, only through a proxy
    • Example: http://proxy.foo:8080

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_USERNAME

    • Property: org.highmed.dsf.bpe.fhir.client.local.proxy.username
    • Required: No
    • Description: Proxy username, set if the DSF BPE server can reach internal servers, like the DSF FHIR server, only through a proxy which requests authentication

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: org.highmed.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: org.highmed.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: org.highmed.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_PASSWORD or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.fhir.client.local.websocket.proxy.password
    • Required: No
    • Description: Proxy password, set if the DSF BPE server can reach internal servers via websocket, like the getSub server, only through a proxy which requests authentication
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_PASSWORD_FILE

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_URL

    • Property: org.highmed.dsf.bpe.fhir.client.local.websocket.proxy.url
    • Required: No
    • Description: Proxy location, set if the DSF BPE server can reach internal servers via websocket, like the DSF FHIR server, only through a proxy
    • Example: http://proxy.foo:8080

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_USERNAME

    • Property: org.highmed.dsf.bpe.fhir.client.local.websocket.proxy.username
    • Required: No
    • Description: Proxy username, set if the DSF BPE server can reach internal servers via websocket, like the DSF FHIR server, only through a proxy which requests authentication

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_PASSWORD or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.fhir.client.remote.proxy.password
    • Required: No
    • Description: Proxy password, set if the the DSF FHIR server can reach the internet only through a proxy which requests authentication
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_PASSWORD_FILE

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_URL

    • Property: org.highmed.dsf.bpe.fhir.client.remote.proxy.url
    • Required: No
    • Description: Proxy location, set if the DSF BPE server can reach the internet only through a proxy
    • Example: http://proxy.foo:8080

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_USERNAME

    • Property: org.highmed.dsf.bpe.fhir.client.remote.proxy.username
    • Required: No
    • Description: Proxy username, set if the the DSF BPE server can reach the internet only through a proxy which requests authentication

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: org.highmed.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: org.highmed.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: org.highmed.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_TRUST_CERTIFICATES

    • Property: org.highmed.dsf.bpe.fhir.client.trust.certificates
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    ORG_HIGHMED_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: org.highmed.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: org.highmed.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: The base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: org.highmed.dsf.bpe.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    ORG_HIGHMED_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: org.highmed.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    ORG_HIGHMED_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: org.highmed.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    ORG_HIGHMED_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: org.highmed.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: org.highmed.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: org.highmed.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    ORG_HIGHMED_DSF_BPE_MAIL_FROMADDRESS

    • Property: org.highmed.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    ORG_HIGHMED_DSF_BPE_MAIL_HOST

    • Property: org.highmed.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    ORG_HIGHMED_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: org.highmed.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    ORG_HIGHMED_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: org.highmed.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    ORG_HIGHMED_DSF_BPE_MAIL_PASSWORD or ORG_HIGHMED_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using ORG_HIGHMED_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS

    ORG_HIGHMED_DSF_BPE_MAIL_PORT

    • Property: org.highmed.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    ORG_HIGHMED_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: org.highmed.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    ORG_HIGHMED_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: org.highmed.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    ORG_HIGHMED_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: org.highmed.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    ORG_HIGHMED_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: org.highmed.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    ORG_HIGHMED_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or ORG_HIGHMED_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    ORG_HIGHMED_DSF_BPE_MAIL_TOADDRESSES

    • Property: org.highmed.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    ORG_HIGHMED_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: org.highmed.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    ORG_HIGHMED_DSF_BPE_MAIL_TRUST_CERTIFICATES

    • Property: org.highmed.dsf.bpe.mail.trust.certificates
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    ORG_HIGHMED_DSF_BPE_MAIL_USERNAME

    • Property: org.highmed.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS

    ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS

    • Property: org.highmed.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    ORG_HIGHMED_DSF_BPE_MPI_WEBSERVICE_FACTORY_CLASS

    • Property: org.highmed.dsf.bpe.mpi.webservice.factory.class
    • Required: No
    • Description: Factory for client implementations used to connect to a Master Patient Index (MPI) server in order to read patient demographic data
    • Recommendation: The default value is a factory for a stub implementation, change to a factory for client implementation that matches the API of your MPI
    • Default: org.highmed.mpi.client.stub.MasterPatientIndexClientStubFactory

    ORG_HIGHMED_DSF_BPE_OPENEHR_WEBSERVICE_FACTORY_CLASS

    • Property: org.highmed.dsf.bpe.openehr.webservice.factory.class
    • Required: No
    • Description: Factory for client implementations used to connect to an openEHR repository in order to read patient medical data
    • Recommendation: The default value is a factory for a stub implementation, change to a factory for client implementation that matches the API of your openEHR repository
    • Default: org.highmed.openehr.client.stub.OpenEhrClientStubFactory

    ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED

    • Property: org.highmed.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List

    ORG_HIGHMED_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: org.highmed.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    ORG_HIGHMED_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: org.highmed.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    ORG_HIGHMED_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: org.highmed.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    ORG_HIGHMED_DSF_BPE_PROCESS_RETIRED

    • Property: org.highmed.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available

    ORG_HIGHMED_DSF_BPE_PSEUDONYMIZATION_WEBSERVICE_FACTORY_CLASS

    • Property: org.highmed.dsf.bpe.pseudonymization.webservice.factory.class
    • Required: No
    • Description: Factory for client implementations used to connect to a pseudonymization service in order to pseudonymize patient demographic and medical data
    • Recommendation: The default value is a factory for a stub implementation, change to a factory for client implementation that matches the API of your pseudonymization service
    • Default: org.highmed.pseudonymization.client.stub.PseudonymizationClientStubFactory
    ',132),l=[t];function n(a,d){return r(),i("div",null,l)}const c=e(o,[["render",n],["__file","configBpe.html.vue"]]),_=JSON.parse('{"path":"/oldstable/releases/configBpe.html","title":"","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"DSF 0.9.3 Configuration Parameters - BPE Server","slug":"dsf-0-9-3-configuration-parameters-bpe-server","link":"#dsf-0-9-3-configuration-parameters-bpe-server","children":[{"level":3,"title":"ORG_HIGHMED_DSF_BPE_CONSENT_WEBSERVICE_FACTORY_CLASS","slug":"org-highmed-dsf-bpe-consent-webservice-factory-class","link":"#org-highmed-dsf-bpe-consent-webservice-factory-class","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD or ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE","slug":"org-highmed-dsf-bpe-db-liquibase-password-or-org-highmed-dsf-bpe-db-liquibase-password-file","link":"#org-highmed-dsf-bpe-db-liquibase-password-or-org-highmed-dsf-bpe-db-liquibase-password-file","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_USERNAME","slug":"org-highmed-dsf-bpe-db-liquibase-username","link":"#org-highmed-dsf-bpe-db-liquibase-username","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_DB_URL","slug":"org-highmed-dsf-bpe-db-url","link":"#org-highmed-dsf-bpe-db-url","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_GROUP","slug":"org-highmed-dsf-bpe-db-user-camunda-group","link":"#org-highmed-dsf-bpe-db-user-camunda-group","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE","slug":"org-highmed-dsf-bpe-db-user-camunda-password-or-org-highmed-dsf-bpe-db-user-camunda-password-file","link":"#org-highmed-dsf-bpe-db-user-camunda-password-or-org-highmed-dsf-bpe-db-user-camunda-password-file","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_USERNAME","slug":"org-highmed-dsf-bpe-db-user-camunda-username","link":"#org-highmed-dsf-bpe-db-user-camunda-username","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_DB_USER_GROUP","slug":"org-highmed-dsf-bpe-db-user-group","link":"#org-highmed-dsf-bpe-db-user-group","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD or ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD_FILE","slug":"org-highmed-dsf-bpe-db-user-password-or-org-highmed-dsf-bpe-db-user-password-file","link":"#org-highmed-dsf-bpe-db-user-password-or-org-highmed-dsf-bpe-db-user-password-file","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_DB_USER_USERNAME","slug":"org-highmed-dsf-bpe-db-user-username","link":"#org-highmed-dsf-bpe-db-user-username","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND","slug":"org-highmed-dsf-bpe-debug-log-message-onactivityend","link":"#org-highmed-dsf-bpe-debug-log-message-onactivityend","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART","slug":"org-highmed-dsf-bpe-debug-log-message-onactivitystart","link":"#org-highmed-dsf-bpe-debug-log-message-onactivitystart","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES","slug":"org-highmed-dsf-bpe-debug-log-message-variables","link":"#org-highmed-dsf-bpe-debug-log-message-variables","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE","slug":"org-highmed-dsf-bpe-fhir-client-certificate","link":"#org-highmed-dsf-bpe-fhir-client-certificate","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"org-highmed-dsf-bpe-fhir-client-certificate-private-key","link":"#org-highmed-dsf-bpe-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"org-highmed-dsf-bpe-fhir-client-certificate-private-key-password-or-org-highmed-dsf-bpe-fhir-client-certificate-private-key-password-file","link":"#org-highmed-dsf-bpe-fhir-client-certificate-private-key-password-or-org-highmed-dsf-bpe-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_PASSWORD or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_PASSWORD_FILE","slug":"org-highmed-dsf-bpe-fhir-client-local-proxy-password-or-org-highmed-dsf-bpe-fhir-client-local-proxy-password-file","link":"#org-highmed-dsf-bpe-fhir-client-local-proxy-password-or-org-highmed-dsf-bpe-fhir-client-local-proxy-password-file","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_URL","slug":"org-highmed-dsf-bpe-fhir-client-local-proxy-url","link":"#org-highmed-dsf-bpe-fhir-client-local-proxy-url","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_USERNAME","slug":"org-highmed-dsf-bpe-fhir-client-local-proxy-username","link":"#org-highmed-dsf-bpe-fhir-client-local-proxy-username","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT","slug":"org-highmed-dsf-bpe-fhir-client-local-timeout-connect","link":"#org-highmed-dsf-bpe-fhir-client-local-timeout-connect","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ","slug":"org-highmed-dsf-bpe-fhir-client-local-timeout-read","link":"#org-highmed-dsf-bpe-fhir-client-local-timeout-read","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE","slug":"org-highmed-dsf-bpe-fhir-client-local-verbose","link":"#org-highmed-dsf-bpe-fhir-client-local-verbose","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_PASSWORD or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_PASSWORD_FILE","slug":"org-highmed-dsf-bpe-fhir-client-local-websocket-proxy-password-or-org-highmed-dsf-bpe-fhir-client-local-websocket-proxy-password-file","link":"#org-highmed-dsf-bpe-fhir-client-local-websocket-proxy-password-or-org-highmed-dsf-bpe-fhir-client-local-websocket-proxy-password-file","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_URL","slug":"org-highmed-dsf-bpe-fhir-client-local-websocket-proxy-url","link":"#org-highmed-dsf-bpe-fhir-client-local-websocket-proxy-url","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_USERNAME","slug":"org-highmed-dsf-bpe-fhir-client-local-websocket-proxy-username","link":"#org-highmed-dsf-bpe-fhir-client-local-websocket-proxy-username","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_PASSWORD or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_PASSWORD_FILE","slug":"org-highmed-dsf-bpe-fhir-client-remote-proxy-password-or-org-highmed-dsf-bpe-fhir-client-remote-proxy-password-file","link":"#org-highmed-dsf-bpe-fhir-client-remote-proxy-password-or-org-highmed-dsf-bpe-fhir-client-remote-proxy-password-file","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_URL","slug":"org-highmed-dsf-bpe-fhir-client-remote-proxy-url","link":"#org-highmed-dsf-bpe-fhir-client-remote-proxy-url","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_USERNAME","slug":"org-highmed-dsf-bpe-fhir-client-remote-proxy-username","link":"#org-highmed-dsf-bpe-fhir-client-remote-proxy-username","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT","slug":"org-highmed-dsf-bpe-fhir-client-remote-timeout-connect","link":"#org-highmed-dsf-bpe-fhir-client-remote-timeout-connect","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ","slug":"org-highmed-dsf-bpe-fhir-client-remote-timeout-read","link":"#org-highmed-dsf-bpe-fhir-client-remote-timeout-read","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE","slug":"org-highmed-dsf-bpe-fhir-client-remote-verbose","link":"#org-highmed-dsf-bpe-fhir-client-remote-verbose","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_TRUST_CERTIFICATES","slug":"org-highmed-dsf-bpe-fhir-client-trust-certificates","link":"#org-highmed-dsf-bpe-fhir-client-trust-certificates","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER","slug":"org-highmed-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","link":"#org-highmed-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL","slug":"org-highmed-dsf-bpe-fhir-server-base-url","link":"#org-highmed-dsf-bpe-fhir-server-base-url","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE","slug":"org-highmed-dsf-bpe-fhir-server-organization-identifier-value","link":"#org-highmed-dsf-bpe-fhir-server-organization-identifier-value","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX","slug":"org-highmed-dsf-bpe-fhir-task-subscription-retry-max","link":"#org-highmed-dsf-bpe-fhir-task-subscription-retry-max","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP","slug":"org-highmed-dsf-bpe-fhir-task-subscription-retry-sleep","link":"#org-highmed-dsf-bpe-fhir-task-subscription-retry-sleep","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER","slug":"org-highmed-dsf-bpe-fhir-task-subscription-search-parameter","link":"#org-highmed-dsf-bpe-fhir-task-subscription-search-parameter","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE","slug":"org-highmed-dsf-bpe-mail-client-certificate","link":"#org-highmed-dsf-bpe-mail-client-certificate","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"org-highmed-dsf-bpe-mail-client-certificate-private-key","link":"#org-highmed-dsf-bpe-mail-client-certificate-private-key","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"org-highmed-dsf-bpe-mail-client-certificate-private-key-password-or-org-highmed-dsf-bpe-mail-client-certificate-private-key-password-file","link":"#org-highmed-dsf-bpe-mail-client-certificate-private-key-password-or-org-highmed-dsf-bpe-mail-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_FROMADDRESS","slug":"org-highmed-dsf-bpe-mail-fromaddress","link":"#org-highmed-dsf-bpe-mail-fromaddress","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_HOST","slug":"org-highmed-dsf-bpe-mail-host","link":"#org-highmed-dsf-bpe-mail-host","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE","slug":"org-highmed-dsf-bpe-mail-mailonerrorlogeventbuffersize","link":"#org-highmed-dsf-bpe-mail-mailonerrorlogeventbuffersize","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION","slug":"org-highmed-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","link":"#org-highmed-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_PASSWORD or ORG_HIGHMED_DSF_BPE_MAIL_PASSWORD_FILE","slug":"org-highmed-dsf-bpe-mail-password-or-org-highmed-dsf-bpe-mail-password-file","link":"#org-highmed-dsf-bpe-mail-password-or-org-highmed-dsf-bpe-mail-password-file","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_PORT","slug":"org-highmed-dsf-bpe-mail-port","link":"#org-highmed-dsf-bpe-mail-port","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_REPLYTOADDRESSES","slug":"org-highmed-dsf-bpe-mail-replytoaddresses","link":"#org-highmed-dsf-bpe-mail-replytoaddresses","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT","slug":"org-highmed-dsf-bpe-mail-sendmailonerrorlogevent","link":"#org-highmed-dsf-bpe-mail-sendmailonerrorlogevent","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP","slug":"org-highmed-dsf-bpe-mail-sendtestmailonstartup","link":"#org-highmed-dsf-bpe-mail-sendtestmailonstartup","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_SMIME_P12KEYSTORE","slug":"org-highmed-dsf-bpe-mail-smime-p12keystore","link":"#org-highmed-dsf-bpe-mail-smime-p12keystore","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or ORG_HIGHMED_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE","slug":"org-highmed-dsf-bpe-mail-smime-p12keystore-password-or-org-highmed-dsf-bpe-mail-smime-p12keystore-password-file","link":"#org-highmed-dsf-bpe-mail-smime-p12keystore-password-or-org-highmed-dsf-bpe-mail-smime-p12keystore-password-file","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_TOADDRESSES","slug":"org-highmed-dsf-bpe-mail-toaddresses","link":"#org-highmed-dsf-bpe-mail-toaddresses","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_TOADDRESSESCC","slug":"org-highmed-dsf-bpe-mail-toaddressescc","link":"#org-highmed-dsf-bpe-mail-toaddressescc","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_TRUST_CERTIFICATES","slug":"org-highmed-dsf-bpe-mail-trust-certificates","link":"#org-highmed-dsf-bpe-mail-trust-certificates","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_USERNAME","slug":"org-highmed-dsf-bpe-mail-username","link":"#org-highmed-dsf-bpe-mail-username","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS","slug":"org-highmed-dsf-bpe-mail-usesmtps","link":"#org-highmed-dsf-bpe-mail-usesmtps","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_MPI_WEBSERVICE_FACTORY_CLASS","slug":"org-highmed-dsf-bpe-mpi-webservice-factory-class","link":"#org-highmed-dsf-bpe-mpi-webservice-factory-class","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_OPENEHR_WEBSERVICE_FACTORY_CLASS","slug":"org-highmed-dsf-bpe-openehr-webservice-factory-class","link":"#org-highmed-dsf-bpe-openehr-webservice-factory-class","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED","slug":"org-highmed-dsf-bpe-process-excluded","link":"#org-highmed-dsf-bpe-process-excluded","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX","slug":"org-highmed-dsf-bpe-process-fhir-server-retry-max","link":"#org-highmed-dsf-bpe-process-fhir-server-retry-max","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP","slug":"org-highmed-dsf-bpe-process-fhir-server-retry-sleep","link":"#org-highmed-dsf-bpe-process-fhir-server-retry-sleep","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_PROCESS_PLUGIN_DIRECTROY","slug":"org-highmed-dsf-bpe-process-plugin-directroy","link":"#org-highmed-dsf-bpe-process-plugin-directroy","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_PROCESS_RETIRED","slug":"org-highmed-dsf-bpe-process-retired","link":"#org-highmed-dsf-bpe-process-retired","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_BPE_PSEUDONYMIZATION_WEBSERVICE_FACTORY_CLASS","slug":"org-highmed-dsf-bpe-pseudonymization-webservice-factory-class","link":"#org-highmed-dsf-bpe-pseudonymization-webservice-factory-class","children":[]}]}],"git":{"createdTime":1692783801000,"updatedTime":1696001091000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":7.16,"words":2148},"filePathRelative":"oldstable/releases/configBpe.md","localizedDate":"August 23, 2023","excerpt":"

    DSF 0.9.3 Configuration Parameters - BPE Server

    \\n

    Please note: Additional parameters (not listed here) are used to configure process plugins.

    \\n

    ORG_HIGHMED_DSF_BPE_CONSENT_WEBSERVICE_FACTORY_CLASS

    \\n
      \\n
    • Property: org.highmed.dsf.bpe.consent.webservice.factory.class
    • \\n
    • Required: No
    • \\n
    • Description: Factory for client implementations used to connect to a consent server in order to check permissions to access patient medical data
    • \\n
    • Recommendation: The default value is a factory for a stub implementation, change to a factory for client implementation that matches the API of your Consent server
    • \\n
    • Default: org.highmed.consent.client.stub.ConsentClientStubFactory
    • \\n
    "}');export{c as comp,_ as data}; diff --git a/assets/configFhir.html-DWtvgUJO.js b/assets/configFhir.html-DWtvgUJO.js new file mode 100644 index 000000000..539b7ad78 --- /dev/null +++ b/assets/configFhir.html-DWtvgUJO.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as i,e as s}from"./app-kq9lCQfY.js";const t={},o=s('

    DSF 0.9.3 Configuration Parameters - FHIR Server

    Please note: Additional parameters (not listed here) are used to define elements of the external FHIR bundle.

    ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: org.highmed.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: org.highmed.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: org.highmed.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_PASSWORD or ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_PASSWORD_FILE

    • Property: org.highmed.dsf.fhir.client.proxy.password
    • Required: No
    • Description: Proxy password, set if the the DSF FHIR server can reach the internet only through a proxy which requests authentication
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_PASSWORD_FILE

    ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_URL

    • Property: org.highmed.dsf.fhir.client.proxy.url
    • Required: No
    • Description: Proxy location, set if the DSF FHIR server can reach the internet only through a proxy
    • Example: http://proxy.foo:8080

    ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_USERNAME

    • Property: org.highmed.dsf.fhir.client.proxy.username
    • Required: No
    • Description: Proxy username, set if the the DSF FHIR server can reach the internet only through a proxy which requests authentication

    ORG_HIGHMED_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: org.highmed.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    ORG_HIGHMED_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: org.highmed.dsf.fhir.client.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    ORG_HIGHMED_DSF_FHIR_CLIENT_TRUST_CERTIFICATES

    • Property: org.highmed.dsf.fhir.client.trust.certificates
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    ORG_HIGHMED_DSF_FHIR_CLIENT_VERBOSE

    • Property: org.highmed.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD or ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: org.highmed.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: org.highmed.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    ORG_HIGHMED_DSF_FHIR_DB_URL

    • Property: org.highmed.dsf.fhir.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    ORG_HIGHMED_DSF_FHIR_DB_USER_GROUP

    • Property: org.highmed.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD or ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: org.highmed.dsf.fhir.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: org.highmed.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: org.highmed.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: org.highmed.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then ORG_HIGHMED_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    ORG_HIGHMED_DSF_FHIR_DB_USER_USERNAME

    • Property: org.highmed.dsf.fhir.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server
    • Default: fhir_server_user

    ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL

    • Property: org.highmed.dsf.fhir.server.base.url
    • Required: Yes
    • Description: The base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    ORG_HIGHMED_DSF_FHIR_SERVER_CORS_ORIGINS

    • Property: org.highmed.dsf.fhir.server.cors.origins
    • Required: No
    • Description: List of allowed CORS origins, used to set the Access-Control-Allow-Origin HTTP response header, which indicates whether the response can be shared with requesting code from the given origin; comma or space separated list, YAML block scalars supported

    ORG_HIGHMED_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: org.highmed.dsf.fhir.server.init.bundle
    • Required: No
    • Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: org.highmed.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    ORG_HIGHMED_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: org.highmed.dsf.fhir.server.page.count
    • Required: No
    • Description: The page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS

    • Property: org.highmed.dsf.fhir.server.user.thumbprints
    • Required: Yes
    • Description: List of SHA512 thumbprints as hex from local client certificates that can be used to access the DSF FHIR server; comma or space separated list, YAML block scalars supported
    • Recommendation: Besides the DSF BPE client certificate thumbprint, add a second thumbprint of a personal client certificate for administration purposes

    ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE

    • Property: org.highmed.dsf.fhir.server.user.thumbprints.permanent.delete
    • Required: Yes
    • Description: List of SHA512 thumbprints as hex from local client certificates that can be used to access the DSF FHIR server for permanent deletes; comma or space separated list, YAML block scalars supported
    • Recommendation: Besides the DSF BPE client certificate thumbprint, add a second thumbprint of a personal client certificate for administration purposes
    ',54),n=[o];function l(d,h){return r(),i("div",null,n)}const f=e(t,[["render",l],["__file","configFhir.html.vue"]]),_=JSON.parse('{"path":"/oldstable/releases/configFhir.html","title":"","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"DSF 0.9.3 Configuration Parameters - FHIR Server","slug":"dsf-0-9-3-configuration-parameters-fhir-server","link":"#dsf-0-9-3-configuration-parameters-fhir-server","children":[{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE","slug":"org-highmed-dsf-fhir-client-certificate","link":"#org-highmed-dsf-fhir-client-certificate","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"org-highmed-dsf-fhir-client-certificate-private-key","link":"#org-highmed-dsf-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"org-highmed-dsf-fhir-client-certificate-private-key-password-or-org-highmed-dsf-fhir-client-certificate-private-key-password-file","link":"#org-highmed-dsf-fhir-client-certificate-private-key-password-or-org-highmed-dsf-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_PASSWORD or ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_PASSWORD_FILE","slug":"org-highmed-dsf-fhir-client-proxy-password-or-org-highmed-dsf-fhir-client-proxy-password-file","link":"#org-highmed-dsf-fhir-client-proxy-password-or-org-highmed-dsf-fhir-client-proxy-password-file","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_URL","slug":"org-highmed-dsf-fhir-client-proxy-url","link":"#org-highmed-dsf-fhir-client-proxy-url","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_USERNAME","slug":"org-highmed-dsf-fhir-client-proxy-username","link":"#org-highmed-dsf-fhir-client-proxy-username","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_CLIENT_TIMEOUT_CONNECT","slug":"org-highmed-dsf-fhir-client-timeout-connect","link":"#org-highmed-dsf-fhir-client-timeout-connect","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_CLIENT_TIMEOUT_READ","slug":"org-highmed-dsf-fhir-client-timeout-read","link":"#org-highmed-dsf-fhir-client-timeout-read","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_CLIENT_TRUST_CERTIFICATES","slug":"org-highmed-dsf-fhir-client-trust-certificates","link":"#org-highmed-dsf-fhir-client-trust-certificates","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_CLIENT_VERBOSE","slug":"org-highmed-dsf-fhir-client-verbose","link":"#org-highmed-dsf-fhir-client-verbose","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD or ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE","slug":"org-highmed-dsf-fhir-db-liquibase-password-or-org-highmed-dsf-fhir-db-liquibase-password-file","link":"#org-highmed-dsf-fhir-db-liquibase-password-or-org-highmed-dsf-fhir-db-liquibase-password-file","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_USERNAME","slug":"org-highmed-dsf-fhir-db-liquibase-username","link":"#org-highmed-dsf-fhir-db-liquibase-username","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_DB_URL","slug":"org-highmed-dsf-fhir-db-url","link":"#org-highmed-dsf-fhir-db-url","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_DB_USER_GROUP","slug":"org-highmed-dsf-fhir-db-user-group","link":"#org-highmed-dsf-fhir-db-user-group","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD or ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD_FILE","slug":"org-highmed-dsf-fhir-db-user-password-or-org-highmed-dsf-fhir-db-user-password-file","link":"#org-highmed-dsf-fhir-db-user-password-or-org-highmed-dsf-fhir-db-user-password-file","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP","slug":"org-highmed-dsf-fhir-db-user-permanent-delete-group","link":"#org-highmed-dsf-fhir-db-user-permanent-delete-group","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE","slug":"org-highmed-dsf-fhir-db-user-permanent-delete-password-or-org-highmed-dsf-fhir-db-user-permanent-delete-password-file","link":"#org-highmed-dsf-fhir-db-user-permanent-delete-password-or-org-highmed-dsf-fhir-db-user-permanent-delete-password-file","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME","slug":"org-highmed-dsf-fhir-db-user-permanent-delete-username","link":"#org-highmed-dsf-fhir-db-user-permanent-delete-username","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_DB_USER_USERNAME","slug":"org-highmed-dsf-fhir-db-user-username","link":"#org-highmed-dsf-fhir-db-user-username","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL","slug":"org-highmed-dsf-fhir-server-base-url","link":"#org-highmed-dsf-fhir-server-base-url","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_SERVER_CORS_ORIGINS","slug":"org-highmed-dsf-fhir-server-cors-origins","link":"#org-highmed-dsf-fhir-server-cors-origins","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_SERVER_INIT_BUNDLE","slug":"org-highmed-dsf-fhir-server-init-bundle","link":"#org-highmed-dsf-fhir-server-init-bundle","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE","slug":"org-highmed-dsf-fhir-server-organization-identifier-value","link":"#org-highmed-dsf-fhir-server-organization-identifier-value","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_SERVER_PAGE_COUNT","slug":"org-highmed-dsf-fhir-server-page-count","link":"#org-highmed-dsf-fhir-server-page-count","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS","slug":"org-highmed-dsf-fhir-server-user-thumbprints","link":"#org-highmed-dsf-fhir-server-user-thumbprints","children":[]},{"level":3,"title":"ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE","slug":"org-highmed-dsf-fhir-server-user-thumbprints-permanent-delete","link":"#org-highmed-dsf-fhir-server-user-thumbprints-permanent-delete","children":[]}]}],"git":{"createdTime":1692783801000,"updatedTime":1696001091000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":2.98,"words":895},"filePathRelative":"oldstable/releases/configFhir.md","localizedDate":"August 23, 2023","excerpt":"

    DSF 0.9.3 Configuration Parameters - FHIR Server

    \\n

    Please note: Additional parameters (not listed here) are used to define elements of the external FHIR bundle.

    \\n

    ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE

    \\n
      \\n
    • Property: org.highmed.dsf.fhir.client.certificate
    • \\n
    • Required: Yes
    • \\n
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • \\n
    • Recommendation: Use docker secret file to configure
    • \\n
    • Example: /run/secrets/app_client_certificate.pem
    • \\n
    "}');export{f as comp,_ as data}; diff --git a/assets/configFhirReverseProxy.html-D6mB2ojQ.js b/assets/configFhirReverseProxy.html-D6mB2ojQ.js new file mode 100644 index 000000000..50da608f2 --- /dev/null +++ b/assets/configFhirReverseProxy.html-D6mB2ojQ.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,e as r}from"./app-kq9lCQfY.js";const s={},o=r('

    DSF 0.9.3 Configuration Parameters - FHIR Reverse Proxy

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem
    ',23),n=[o];function a(l,c){return t(),i("div",null,n)}const h=e(s,[["render",a],["__file","configFhirReverseProxy.html.vue"]]),f=JSON.parse('{"path":"/oldstable/releases/configFhirReverseProxy.html","title":"","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"DSF 0.9.3 Configuration Parameters - FHIR Reverse Proxy","slug":"dsf-0-9-3-configuration-parameters-fhir-reverse-proxy","link":"#dsf-0-9-3-configuration-parameters-fhir-reverse-proxy","children":[]},{"level":2,"title":"APP_SERVER_IP","slug":"app-server-ip","link":"#app-server-ip","children":[]},{"level":2,"title":"HTTPS_SERVER_NAME_PORT","slug":"https-server-name-port","link":"#https-server-name-port","children":[]},{"level":2,"title":"PROXY_PASS_CONNECTION_TIMEOUT_HTTP","slug":"proxy-pass-connection-timeout-http","link":"#proxy-pass-connection-timeout-http","children":[]},{"level":2,"title":"PROXY_PASS_CONNECTION_TIMEOUT_WS","slug":"proxy-pass-connection-timeout-ws","link":"#proxy-pass-connection-timeout-ws","children":[]},{"level":2,"title":"PROXY_PASS_TIMEOUT_HTTP","slug":"proxy-pass-timeout-http","link":"#proxy-pass-timeout-http","children":[]},{"level":2,"title":"PROXY_PASS_TIMEOUT_WS","slug":"proxy-pass-timeout-ws","link":"#proxy-pass-timeout-ws","children":[]},{"level":2,"title":"SSL_CA_CERTIFICATE_FILE","slug":"ssl-ca-certificate-file","link":"#ssl-ca-certificate-file","children":[]},{"level":2,"title":"SSL_CA_DN_REQUEST_FILE","slug":"ssl-ca-dn-request-file","link":"#ssl-ca-dn-request-file","children":[]},{"level":2,"title":"SSL_CERTIFICATE_CHAIN_FILE","slug":"ssl-certificate-chain-file","link":"#ssl-certificate-chain-file","children":[]},{"level":2,"title":"SSL_CERTIFICATE_FILE","slug":"ssl-certificate-file","link":"#ssl-certificate-file","children":[]},{"level":2,"title":"SSL_CERTIFICATE_KEY_FILE","slug":"ssl-certificate-key-file","link":"#ssl-certificate-key-file","children":[]}],"git":{"createdTime":1692783801000,"updatedTime":1696001091000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":1.17,"words":351},"filePathRelative":"oldstable/releases/configFhirReverseProxy.md","localizedDate":"August 23, 2023","excerpt":"

    DSF 0.9.3 Configuration Parameters - FHIR Reverse Proxy

    \\n

    APP_SERVER_IP

    \\n
      \\n
    • Required: Yes
    • \\n
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • \\n
    • Example: app, 172.28.1.3
    • \\n
    "}');export{h as comp,f as data}; diff --git a/assets/configuration.html-1YBSJGs3.js b/assets/configuration.html-1YBSJGs3.js new file mode 100644 index 000000000..b64fd6add --- /dev/null +++ b/assets/configuration.html-1YBSJGs3.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as n,c as d,a as e,b as r,d as l,e as i}from"./app-kq9lCQfY.js";const a={},c=i('

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client _trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: Address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: Password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: Password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: Username to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: Username to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_CURRENTUSER

    • Property: dev.dsf.fhir.debug.log.message.currentUser
    • Required: No
    • Description: To enable logging of the currently requesting user set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_DBSTATEMENT

    • Property: dev.dsf.fhir.debug.log.message.dbStatement
    • Required: No
    • Description: To enable logging of DB queries set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST

    • Property: dev.dsf.fhir.debug.log.message.webserviceRequest
    • Required: No
    • Description: To enable logging of webservices requests set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: Base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: Fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: Local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: Page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_FHIR_SERVER_UI_THEME

    • Property: dev.dsf.fhir.server.ui.theme
    • Required: No
    • Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',81),_=e("strong",null,"Property:",-1),f={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},h=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),E=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),u=i('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    ',32);function g(v,p){const t=o("ExternalLinkIcon");return n(),d("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",f,[r("dev.dsf.server.auth.oidc.client.id"),l(t)])]),h,E]),u])}const S=s(a,[["render",g],["__file","configuration.html.vue"]]),I=JSON.parse('{"path":"/v1.5.0/maintain/fhir/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-fhir-client-certificate","link":"#dev-dsf-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-fhir-client-certificate-private-key","link":"#dev-dsf-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT","slug":"dev-dsf-fhir-client-timeout-connect","link":"#dev-dsf-fhir-client-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ","slug":"dev-dsf-fhir-client-timeout-read","link":"#dev-dsf-fhir-client-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_VERBOSE","slug":"dev-dsf-fhir-client-verbose","link":"#dev-dsf-fhir-client-verbose","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-fhir-db-liquibase-forceunlock","link":"#dev-dsf-fhir-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-fhir-db-liquibase-lockwaittime","link":"#dev-dsf-fhir-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","link":"#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-fhir-db-liquibase-username","link":"#dev-dsf-fhir-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_URL","slug":"dev-dsf-fhir-db-url","link":"#dev-dsf-fhir-db-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_GROUP","slug":"dev-dsf-fhir-db-user-group","link":"#dev-dsf-fhir-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","link":"#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP","slug":"dev-dsf-fhir-db-user-permanent-delete-group","link":"#dev-dsf-fhir-db-user-permanent-delete-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","link":"#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME","slug":"dev-dsf-fhir-db-user-permanent-delete-username","link":"#dev-dsf-fhir-db-user-permanent-delete-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_USERNAME","slug":"dev-dsf-fhir-db-user-username","link":"#dev-dsf-fhir-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_CURRENTUSER","slug":"dev-dsf-fhir-debug-log-message-currentuser","link":"#dev-dsf-fhir-debug-log-message-currentuser","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_DBSTATEMENT","slug":"dev-dsf-fhir-debug-log-message-dbstatement","link":"#dev-dsf-fhir-debug-log-message-dbstatement","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST","slug":"dev-dsf-fhir-debug-log-message-webservicerequest","link":"#dev-dsf-fhir-debug-log-message-webservicerequest","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_BASE_URL","slug":"dev-dsf-fhir-server-base-url","link":"#dev-dsf-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_INIT_BUNDLE","slug":"dev-dsf-fhir-server-init-bundle","link":"#dev-dsf-fhir-server-init-bundle","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE","slug":"dev-dsf-fhir-server-organization-identifier-value","link":"#dev-dsf-fhir-server-organization-identifier-value","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT","slug":"dev-dsf-fhir-server-organization-thumbprint","link":"#dev-dsf-fhir-server-organization-thumbprint","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_PAGE_COUNT","slug":"dev-dsf-fhir-server-page-count","link":"#dev-dsf-fhir-server-page-count","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ROLECONFIG","slug":"dev-dsf-fhir-server-roleconfig","link":"#dev-dsf-fhir-server-roleconfig","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE","slug":"dev-dsf-fhir-server-static-resource-cache","link":"#dev-dsf-fhir-server-static-resource-cache","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_UI_THEME","slug":"dev-dsf-fhir-server-ui-theme","link":"#dev-dsf-fhir-server-ui-theme","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]}],"git":{"createdTime":1708419681000,"updatedTime":1708521029000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":5.15,"words":1546},"filePathRelative":"v1.5.0/maintain/fhir/configuration.md","localizedDate":"February 20, 2024","excerpt":"

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    \\n
      \\n
    • Property: dev.dsf.fhir.client.certificate
    • \\n
    • Required: Yes
    • \\n
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • \\n
    • Recommendation: Use docker secret file to configure
    • \\n
    • Example: /run/secrets/app_client_certificate.pem
    • \\n
    "}');export{S as comp,I as data}; diff --git a/assets/configuration.html-6D1Lu82s.js b/assets/configuration.html-6D1Lu82s.js new file mode 100644 index 000000000..c04eebed1 --- /dev/null +++ b/assets/configuration.html-6D1Lu82s.js @@ -0,0 +1 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as l,c as n,a as e,b as r,d,e as s}from"./app-kq9lCQfY.js";const a={},c=s('

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',15),_=e("strong",null,"Property:",-1),p={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},E=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),f=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),g=s('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL

    • Property: dev.dsf.bpe.debug.log.message.variablesLocal
    • Required: No
    • Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: The base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.corePoolSize
    • Required: No
    • Description: Process engine job executor core pool size
    • Default: 4

    DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.maxPoolSize
    • Required: No
    • Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full
    • Default: 10

    DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE

    • Property: dev.dsf.bpe.process.engine.queueSize
    • Required: No
    • Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy
    • Default: 40

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List
    • Example: dsfdev_updateAllowList|1.0, another_process|x.y

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available
    • Example: old_process|x.y

    DEV_DSF_BPE_PROCESS_THREADS

    • Property: dev.dsf.bpe.process.threads
    • Required: No
    • Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores
    • Default: -1

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    ',156);function u(v,h){const i=o("ExternalLinkIcon");return l(),n("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",p,[r("dev.dsf.server.auth.oidc.client.id"),d(i)])]),E,f]),g])}const b=t(a,[["render",u],["__file","configuration.html.vue"]]),S=JSON.parse('{"path":"/v1.3.0/maintain/bpe/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-bpe-db-liquibase-forceunlock","link":"#dev-dsf-bpe-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-bpe-db-liquibase-lockwaittime","link":"#dev-dsf-bpe-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","link":"#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-bpe-db-liquibase-username","link":"#dev-dsf-bpe-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_URL","slug":"dev-dsf-bpe-db-url","link":"#dev-dsf-bpe-db-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP","slug":"dev-dsf-bpe-db-user-camunda-group","link":"#dev-dsf-bpe-db-user-camunda-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","link":"#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME","slug":"dev-dsf-bpe-db-user-camunda-username","link":"#dev-dsf-bpe-db-user-camunda-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_GROUP","slug":"dev-dsf-bpe-db-user-group","link":"#dev-dsf-bpe-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","link":"#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_USERNAME","slug":"dev-dsf-bpe-db-user-username","link":"#dev-dsf-bpe-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND","slug":"dev-dsf-bpe-debug-log-message-onactivityend","link":"#dev-dsf-bpe-debug-log-message-onactivityend","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART","slug":"dev-dsf-bpe-debug-log-message-onactivitystart","link":"#dev-dsf-bpe-debug-log-message-onactivitystart","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES","slug":"dev-dsf-bpe-debug-log-message-variables","link":"#dev-dsf-bpe-debug-log-message-variables","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL","slug":"dev-dsf-bpe-debug-log-message-variableslocal","link":"#dev-dsf-bpe-debug-log-message-variableslocal","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-fhir-client-certificate","link":"#dev-dsf-bpe-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-fhir-client-certificate-private-key","link":"#dev-dsf-bpe-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-local-timeout-connect","link":"#dev-dsf-bpe-fhir-client-local-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-local-timeout-read","link":"#dev-dsf-bpe-fhir-client-local-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE","slug":"dev-dsf-bpe-fhir-client-local-verbose","link":"#dev-dsf-bpe-fhir-client-local-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-remote-timeout-connect","link":"#dev-dsf-bpe-fhir-client-remote-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-remote-timeout-read","link":"#dev-dsf-bpe-fhir-client-remote-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE","slug":"dev-dsf-bpe-fhir-client-remote-verbose","link":"#dev-dsf-bpe-fhir-client-remote-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-bpe-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_SERVER_BASE_URL","slug":"dev-dsf-bpe-fhir-server-base-url","link":"#dev-dsf-bpe-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX","slug":"dev-dsf-bpe-fhir-task-subscription-retry-max","link":"#dev-dsf-bpe-fhir-task-subscription-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP","slug":"dev-dsf-bpe-fhir-task-subscription-retry-sleep","link":"#dev-dsf-bpe-fhir-task-subscription-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-task-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-task-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-mail-client-certificate","link":"#dev-dsf-bpe-mail-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-mail-client-certificate-private-key","link":"#dev-dsf-bpe-mail-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_FROMADDRESS","slug":"dev-dsf-bpe-mail-fromaddress","link":"#dev-dsf-bpe-mail-fromaddress","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_HOST","slug":"dev-dsf-bpe-mail-host","link":"#dev-dsf-bpe-mail-host","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE","slug":"dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","link":"#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION","slug":"dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","link":"#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","link":"#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PORT","slug":"dev-dsf-bpe-mail-port","link":"#dev-dsf-bpe-mail-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES","slug":"dev-dsf-bpe-mail-replytoaddresses","link":"#dev-dsf-bpe-mail-replytoaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT","slug":"dev-dsf-bpe-mail-sendmailonerrorlogevent","link":"#dev-dsf-bpe-mail-sendmailonerrorlogevent","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP","slug":"dev-dsf-bpe-mail-sendtestmailonstartup","link":"#dev-dsf-bpe-mail-sendtestmailonstartup","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE","slug":"dev-dsf-bpe-mail-smime-p12keystore","link":"#dev-dsf-bpe-mail-smime-p12keystore","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","link":"#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSES","slug":"dev-dsf-bpe-mail-toaddresses","link":"#dev-dsf-bpe-mail-toaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSESCC","slug":"dev-dsf-bpe-mail-toaddressescc","link":"#dev-dsf-bpe-mail-toaddressescc","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-mail-trust-server-certificate-cas","link":"#dev-dsf-bpe-mail-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USERNAME","slug":"dev-dsf-bpe-mail-username","link":"#dev-dsf-bpe-mail-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USESMTPS","slug":"dev-dsf-bpe-mail-usesmtps","link":"#dev-dsf-bpe-mail-usesmtps","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE","slug":"dev-dsf-bpe-process-engine-corepoolsize","link":"#dev-dsf-bpe-process-engine-corepoolsize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE","slug":"dev-dsf-bpe-process-engine-maxpoolsize","link":"#dev-dsf-bpe-process-engine-maxpoolsize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE","slug":"dev-dsf-bpe-process-engine-queuesize","link":"#dev-dsf-bpe-process-engine-queuesize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_EXCLUDED","slug":"dev-dsf-bpe-process-excluded","link":"#dev-dsf-bpe-process-excluded","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX","slug":"dev-dsf-bpe-process-fhir-server-retry-max","link":"#dev-dsf-bpe-process-fhir-server-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP","slug":"dev-dsf-bpe-process-fhir-server-retry-sleep","link":"#dev-dsf-bpe-process-fhir-server-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY","slug":"dev-dsf-bpe-process-plugin-directroy","link":"#dev-dsf-bpe-process-plugin-directroy","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_RETIRED","slug":"dev-dsf-bpe-process-retired","link":"#dev-dsf-bpe-process-retired","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_THREADS","slug":"dev-dsf-bpe-process-threads","link":"#dev-dsf-bpe-process-threads","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]}],"git":{"createdTime":1696944513000,"updatedTime":1696983833000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":8.21,"words":2464},"filePathRelative":"v1.3.0/maintain/bpe/configuration.md","localizedDate":"October 10, 2023","excerpt":"

    DEV_DSF_SERVER_API_HOST

    \\n
      \\n
    • Property: dev.dsf.server.api.host
    • \\n
    • Required: Yes
    • \\n
    • Description: API connector host, default in docker image: 0.0.0.0
    • \\n
    • Default: 127.0.0.1
    • \\n
    "}');export{b as comp,S as data}; diff --git a/assets/configuration.html-AER2SVO7.js b/assets/configuration.html-AER2SVO7.js new file mode 100644 index 000000000..1180737f9 --- /dev/null +++ b/assets/configuration.html-AER2SVO7.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,e as r}from"./app-kq9lCQfY.js";const s={},o=r('

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /fhir

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    ',26),n=[o];function l(a,c){return t(),i("div",null,n)}const h=e(s,[["render",l],["__file","configuration.html.vue"]]),f=JSON.parse('{"path":"/v1.2.0/maintain/fhir-reverse-proxy/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"APP_SERVER_IP","slug":"app-server-ip","link":"#app-server-ip","children":[]},{"level":3,"title":"HTTPS_SERVER_NAME_PORT","slug":"https-server-name-port","link":"#https-server-name-port","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_HTTP","slug":"proxy-pass-connection-timeout-http","link":"#proxy-pass-connection-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_WS","slug":"proxy-pass-connection-timeout-ws","link":"#proxy-pass-connection-timeout-ws","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_HTTP","slug":"proxy-pass-timeout-http","link":"#proxy-pass-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_WS","slug":"proxy-pass-timeout-ws","link":"#proxy-pass-timeout-ws","children":[]},{"level":3,"title":"SERVER_CONTEXT_PATH","slug":"server-context-path","link":"#server-context-path","children":[]},{"level":3,"title":"SSL_CA_CERTIFICATE_FILE","slug":"ssl-ca-certificate-file","link":"#ssl-ca-certificate-file","children":[]},{"level":3,"title":"SSL_CA_DN_REQUEST_FILE","slug":"ssl-ca-dn-request-file","link":"#ssl-ca-dn-request-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_CHAIN_FILE","slug":"ssl-certificate-chain-file","link":"#ssl-certificate-chain-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_FILE","slug":"ssl-certificate-file","link":"#ssl-certificate-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_KEY_FILE","slug":"ssl-certificate-key-file","link":"#ssl-certificate-key-file","children":[]},{"level":3,"title":"SSL_VERIFY_CLIENT","slug":"ssl-verify-client","link":"#ssl-verify-client","children":[]}],"git":{"createdTime":1694544770000,"updatedTime":1699809451000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.35,"words":404},"filePathRelative":"v1.2.0/maintain/fhir-reverse-proxy/configuration.md","localizedDate":"September 12, 2023","excerpt":"

    APP_SERVER_IP

    \\n
      \\n
    • Required: Yes
    • \\n
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • \\n
    • Example: app, 172.28.1.3
    • \\n
    \\n

    HTTPS_SERVER_NAME_PORT

    "}');export{h as comp,f as data}; diff --git a/assets/configuration.html-B6IQGRyt.js b/assets/configuration.html-B6IQGRyt.js new file mode 100644 index 000000000..7f161aacc --- /dev/null +++ b/assets/configuration.html-B6IQGRyt.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as n,c as d,a as e,b as r,d as l,e as i}from"./app-kq9lCQfY.js";const a={},c=i('

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client _trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: Address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: Password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: Password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: Username to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: Username to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_CURRENTUSER

    • Property: dev.dsf.fhir.debug.log.message.currentUser
    • Required: No
    • Description: To enable logging of the currently requesting user set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_DBSTATEMENT

    • Property: dev.dsf.fhir.debug.log.message.dbStatement
    • Required: No
    • Description: To enable logging of DB queries set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST

    • Property: dev.dsf.fhir.debug.log.message.webserviceRequest
    • Required: No
    • Description: To enable logging of webservices requests set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: Base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: Fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: Local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: Page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_FHIR_SERVER_UI_THEME

    • Property: dev.dsf.fhir.server.ui.theme
    • Required: No
    • Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',81),_=e("strong",null,"Property:",-1),f={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},h=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),E=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),u=i('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    ',32);function g(v,p){const t=o("ExternalLinkIcon");return n(),d("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",f,[r("dev.dsf.server.auth.oidc.client.id"),l(t)])]),h,E]),u])}const S=s(a,[["render",g],["__file","configuration.html.vue"]]),I=JSON.parse('{"path":"/v1.5.1/maintain/fhir/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-fhir-client-certificate","link":"#dev-dsf-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-fhir-client-certificate-private-key","link":"#dev-dsf-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT","slug":"dev-dsf-fhir-client-timeout-connect","link":"#dev-dsf-fhir-client-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ","slug":"dev-dsf-fhir-client-timeout-read","link":"#dev-dsf-fhir-client-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_VERBOSE","slug":"dev-dsf-fhir-client-verbose","link":"#dev-dsf-fhir-client-verbose","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-fhir-db-liquibase-forceunlock","link":"#dev-dsf-fhir-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-fhir-db-liquibase-lockwaittime","link":"#dev-dsf-fhir-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","link":"#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-fhir-db-liquibase-username","link":"#dev-dsf-fhir-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_URL","slug":"dev-dsf-fhir-db-url","link":"#dev-dsf-fhir-db-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_GROUP","slug":"dev-dsf-fhir-db-user-group","link":"#dev-dsf-fhir-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","link":"#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP","slug":"dev-dsf-fhir-db-user-permanent-delete-group","link":"#dev-dsf-fhir-db-user-permanent-delete-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","link":"#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME","slug":"dev-dsf-fhir-db-user-permanent-delete-username","link":"#dev-dsf-fhir-db-user-permanent-delete-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_USERNAME","slug":"dev-dsf-fhir-db-user-username","link":"#dev-dsf-fhir-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_CURRENTUSER","slug":"dev-dsf-fhir-debug-log-message-currentuser","link":"#dev-dsf-fhir-debug-log-message-currentuser","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_DBSTATEMENT","slug":"dev-dsf-fhir-debug-log-message-dbstatement","link":"#dev-dsf-fhir-debug-log-message-dbstatement","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST","slug":"dev-dsf-fhir-debug-log-message-webservicerequest","link":"#dev-dsf-fhir-debug-log-message-webservicerequest","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_BASE_URL","slug":"dev-dsf-fhir-server-base-url","link":"#dev-dsf-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_INIT_BUNDLE","slug":"dev-dsf-fhir-server-init-bundle","link":"#dev-dsf-fhir-server-init-bundle","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE","slug":"dev-dsf-fhir-server-organization-identifier-value","link":"#dev-dsf-fhir-server-organization-identifier-value","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT","slug":"dev-dsf-fhir-server-organization-thumbprint","link":"#dev-dsf-fhir-server-organization-thumbprint","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_PAGE_COUNT","slug":"dev-dsf-fhir-server-page-count","link":"#dev-dsf-fhir-server-page-count","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ROLECONFIG","slug":"dev-dsf-fhir-server-roleconfig","link":"#dev-dsf-fhir-server-roleconfig","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE","slug":"dev-dsf-fhir-server-static-resource-cache","link":"#dev-dsf-fhir-server-static-resource-cache","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_UI_THEME","slug":"dev-dsf-fhir-server-ui-theme","link":"#dev-dsf-fhir-server-ui-theme","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":5.15,"words":1546},"filePathRelative":"v1.5.1/maintain/fhir/configuration.md","localizedDate":"April 17, 2024","excerpt":"

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    \\n
      \\n
    • Property: dev.dsf.fhir.client.certificate
    • \\n
    • Required: Yes
    • \\n
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • \\n
    • Recommendation: Use docker secret file to configure
    • \\n
    • Example: /run/secrets/app_client_certificate.pem
    • \\n
    "}');export{S as comp,I as data}; diff --git a/assets/configuration.html-B9hAN6Qn.js b/assets/configuration.html-B9hAN6Qn.js new file mode 100644 index 000000000..61284a0b7 --- /dev/null +++ b/assets/configuration.html-B9hAN6Qn.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,e as r}from"./app-kq9lCQfY.js";const s={},o=r('

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /fhir

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    ',26),n=[o];function l(c,a){return t(),i("div",null,n)}const h=e(s,[["render",l],["__file","configuration.html.vue"]]),f=JSON.parse('{"path":"/v1.4.0/maintain/fhir-reverse-proxy/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"APP_SERVER_IP","slug":"app-server-ip","link":"#app-server-ip","children":[]},{"level":3,"title":"HTTPS_SERVER_NAME_PORT","slug":"https-server-name-port","link":"#https-server-name-port","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_HTTP","slug":"proxy-pass-connection-timeout-http","link":"#proxy-pass-connection-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_WS","slug":"proxy-pass-connection-timeout-ws","link":"#proxy-pass-connection-timeout-ws","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_HTTP","slug":"proxy-pass-timeout-http","link":"#proxy-pass-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_WS","slug":"proxy-pass-timeout-ws","link":"#proxy-pass-timeout-ws","children":[]},{"level":3,"title":"SERVER_CONTEXT_PATH","slug":"server-context-path","link":"#server-context-path","children":[]},{"level":3,"title":"SSL_CA_CERTIFICATE_FILE","slug":"ssl-ca-certificate-file","link":"#ssl-ca-certificate-file","children":[]},{"level":3,"title":"SSL_CA_DN_REQUEST_FILE","slug":"ssl-ca-dn-request-file","link":"#ssl-ca-dn-request-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_CHAIN_FILE","slug":"ssl-certificate-chain-file","link":"#ssl-certificate-chain-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_FILE","slug":"ssl-certificate-file","link":"#ssl-certificate-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_KEY_FILE","slug":"ssl-certificate-key-file","link":"#ssl-certificate-key-file","children":[]},{"level":3,"title":"SSL_VERIFY_CLIENT","slug":"ssl-verify-client","link":"#ssl-verify-client","children":[]}],"git":{"createdTime":1702917645000,"updatedTime":1702917645000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.35,"words":404},"filePathRelative":"v1.4.0/maintain/fhir-reverse-proxy/configuration.md","localizedDate":"December 18, 2023","excerpt":"

    APP_SERVER_IP

    \\n
      \\n
    • Required: Yes
    • \\n
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • \\n
    • Example: app, 172.28.1.3
    • \\n
    \\n

    HTTPS_SERVER_NAME_PORT

    "}');export{h as comp,f as data}; diff --git a/assets/configuration.html-BCx-1jdB.js b/assets/configuration.html-BCx-1jdB.js new file mode 100644 index 000000000..633c3c818 --- /dev/null +++ b/assets/configuration.html-BCx-1jdB.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as n,c as d,a as e,b as r,d as l,e as i}from"./app-kq9lCQfY.js";const a={},c=i('

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client _trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: The base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: The page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',73),_=e("strong",null,"Property:",-1),f={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},h=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),E=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),u=i('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    ',32);function v(g,p){const t=o("ExternalLinkIcon");return n(),d("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",f,[r("dev.dsf.server.auth.oidc.client.id"),l(t)])]),h,E]),u])}const S=s(a,[["render",v],["__file","configuration.html.vue"]]),I=JSON.parse('{"path":"/v1.3.0/maintain/fhir/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-fhir-client-certificate","link":"#dev-dsf-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-fhir-client-certificate-private-key","link":"#dev-dsf-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT","slug":"dev-dsf-fhir-client-timeout-connect","link":"#dev-dsf-fhir-client-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ","slug":"dev-dsf-fhir-client-timeout-read","link":"#dev-dsf-fhir-client-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_VERBOSE","slug":"dev-dsf-fhir-client-verbose","link":"#dev-dsf-fhir-client-verbose","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-fhir-db-liquibase-forceunlock","link":"#dev-dsf-fhir-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-fhir-db-liquibase-lockwaittime","link":"#dev-dsf-fhir-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","link":"#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-fhir-db-liquibase-username","link":"#dev-dsf-fhir-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_URL","slug":"dev-dsf-fhir-db-url","link":"#dev-dsf-fhir-db-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_GROUP","slug":"dev-dsf-fhir-db-user-group","link":"#dev-dsf-fhir-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","link":"#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP","slug":"dev-dsf-fhir-db-user-permanent-delete-group","link":"#dev-dsf-fhir-db-user-permanent-delete-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","link":"#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME","slug":"dev-dsf-fhir-db-user-permanent-delete-username","link":"#dev-dsf-fhir-db-user-permanent-delete-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_USERNAME","slug":"dev-dsf-fhir-db-user-username","link":"#dev-dsf-fhir-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_BASE_URL","slug":"dev-dsf-fhir-server-base-url","link":"#dev-dsf-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_INIT_BUNDLE","slug":"dev-dsf-fhir-server-init-bundle","link":"#dev-dsf-fhir-server-init-bundle","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE","slug":"dev-dsf-fhir-server-organization-identifier-value","link":"#dev-dsf-fhir-server-organization-identifier-value","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT","slug":"dev-dsf-fhir-server-organization-thumbprint","link":"#dev-dsf-fhir-server-organization-thumbprint","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_PAGE_COUNT","slug":"dev-dsf-fhir-server-page-count","link":"#dev-dsf-fhir-server-page-count","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ROLECONFIG","slug":"dev-dsf-fhir-server-roleconfig","link":"#dev-dsf-fhir-server-roleconfig","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE","slug":"dev-dsf-fhir-server-static-resource-cache","link":"#dev-dsf-fhir-server-static-resource-cache","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]}],"git":{"createdTime":1696944513000,"updatedTime":1696983833000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":4.71,"words":1412},"filePathRelative":"v1.3.0/maintain/fhir/configuration.md","localizedDate":"October 10, 2023","excerpt":"

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    \\n
      \\n
    • Property: dev.dsf.fhir.client.certificate
    • \\n
    • Required: Yes
    • \\n
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • \\n
    • Recommendation: Use docker secret file to configure
    • \\n
    • Example: /run/secrets/app_client_certificate.pem
    • \\n
    "}');export{S as comp,I as data}; diff --git a/assets/configuration.html-BLaLcEWM.js b/assets/configuration.html-BLaLcEWM.js new file mode 100644 index 000000000..9120705cc --- /dev/null +++ b/assets/configuration.html-BLaLcEWM.js @@ -0,0 +1 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as l,c as n,a as e,b as r,d,e as s}from"./app-kq9lCQfY.js";const a={},c=s('

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',15),_=e("strong",null,"Property:",-1),p={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},E=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),f=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),g=s('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL

    • Property: dev.dsf.bpe.debug.log.message.variablesLocal
    • Required: No
    • Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: The base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.corePoolSize
    • Required: No
    • Description: Process engine job executor core pool size
    • Default: 4

    DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.maxPoolSize
    • Required: No
    • Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full
    • Default: 10

    DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE

    • Property: dev.dsf.bpe.process.engine.queueSize
    • Required: No
    • Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy
    • Default: 40

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List
    • Example: dsfdev_updateAllowList|1.0, another_process|x.y

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available
    • Example: old_process|x.y

    DEV_DSF_BPE_PROCESS_THREADS

    • Property: dev.dsf.bpe.process.threads
    • Required: No
    • Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores
    • Default: -1

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    ',156);function u(v,h){const i=o("ExternalLinkIcon");return l(),n("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",p,[r("dev.dsf.server.auth.oidc.client.id"),d(i)])]),E,f]),g])}const S=t(a,[["render",u],["__file","configuration.html.vue"]]),b=JSON.parse('{"path":"/v1.3.1/maintain/bpe/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-bpe-db-liquibase-forceunlock","link":"#dev-dsf-bpe-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-bpe-db-liquibase-lockwaittime","link":"#dev-dsf-bpe-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","link":"#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-bpe-db-liquibase-username","link":"#dev-dsf-bpe-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_URL","slug":"dev-dsf-bpe-db-url","link":"#dev-dsf-bpe-db-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP","slug":"dev-dsf-bpe-db-user-camunda-group","link":"#dev-dsf-bpe-db-user-camunda-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","link":"#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME","slug":"dev-dsf-bpe-db-user-camunda-username","link":"#dev-dsf-bpe-db-user-camunda-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_GROUP","slug":"dev-dsf-bpe-db-user-group","link":"#dev-dsf-bpe-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","link":"#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_USERNAME","slug":"dev-dsf-bpe-db-user-username","link":"#dev-dsf-bpe-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND","slug":"dev-dsf-bpe-debug-log-message-onactivityend","link":"#dev-dsf-bpe-debug-log-message-onactivityend","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART","slug":"dev-dsf-bpe-debug-log-message-onactivitystart","link":"#dev-dsf-bpe-debug-log-message-onactivitystart","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES","slug":"dev-dsf-bpe-debug-log-message-variables","link":"#dev-dsf-bpe-debug-log-message-variables","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL","slug":"dev-dsf-bpe-debug-log-message-variableslocal","link":"#dev-dsf-bpe-debug-log-message-variableslocal","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-fhir-client-certificate","link":"#dev-dsf-bpe-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-fhir-client-certificate-private-key","link":"#dev-dsf-bpe-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-local-timeout-connect","link":"#dev-dsf-bpe-fhir-client-local-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-local-timeout-read","link":"#dev-dsf-bpe-fhir-client-local-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE","slug":"dev-dsf-bpe-fhir-client-local-verbose","link":"#dev-dsf-bpe-fhir-client-local-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-remote-timeout-connect","link":"#dev-dsf-bpe-fhir-client-remote-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-remote-timeout-read","link":"#dev-dsf-bpe-fhir-client-remote-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE","slug":"dev-dsf-bpe-fhir-client-remote-verbose","link":"#dev-dsf-bpe-fhir-client-remote-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-bpe-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_SERVER_BASE_URL","slug":"dev-dsf-bpe-fhir-server-base-url","link":"#dev-dsf-bpe-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX","slug":"dev-dsf-bpe-fhir-task-subscription-retry-max","link":"#dev-dsf-bpe-fhir-task-subscription-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP","slug":"dev-dsf-bpe-fhir-task-subscription-retry-sleep","link":"#dev-dsf-bpe-fhir-task-subscription-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-task-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-task-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-mail-client-certificate","link":"#dev-dsf-bpe-mail-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-mail-client-certificate-private-key","link":"#dev-dsf-bpe-mail-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_FROMADDRESS","slug":"dev-dsf-bpe-mail-fromaddress","link":"#dev-dsf-bpe-mail-fromaddress","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_HOST","slug":"dev-dsf-bpe-mail-host","link":"#dev-dsf-bpe-mail-host","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE","slug":"dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","link":"#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION","slug":"dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","link":"#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","link":"#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PORT","slug":"dev-dsf-bpe-mail-port","link":"#dev-dsf-bpe-mail-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES","slug":"dev-dsf-bpe-mail-replytoaddresses","link":"#dev-dsf-bpe-mail-replytoaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT","slug":"dev-dsf-bpe-mail-sendmailonerrorlogevent","link":"#dev-dsf-bpe-mail-sendmailonerrorlogevent","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP","slug":"dev-dsf-bpe-mail-sendtestmailonstartup","link":"#dev-dsf-bpe-mail-sendtestmailonstartup","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE","slug":"dev-dsf-bpe-mail-smime-p12keystore","link":"#dev-dsf-bpe-mail-smime-p12keystore","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","link":"#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSES","slug":"dev-dsf-bpe-mail-toaddresses","link":"#dev-dsf-bpe-mail-toaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSESCC","slug":"dev-dsf-bpe-mail-toaddressescc","link":"#dev-dsf-bpe-mail-toaddressescc","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-mail-trust-server-certificate-cas","link":"#dev-dsf-bpe-mail-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USERNAME","slug":"dev-dsf-bpe-mail-username","link":"#dev-dsf-bpe-mail-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USESMTPS","slug":"dev-dsf-bpe-mail-usesmtps","link":"#dev-dsf-bpe-mail-usesmtps","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE","slug":"dev-dsf-bpe-process-engine-corepoolsize","link":"#dev-dsf-bpe-process-engine-corepoolsize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE","slug":"dev-dsf-bpe-process-engine-maxpoolsize","link":"#dev-dsf-bpe-process-engine-maxpoolsize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE","slug":"dev-dsf-bpe-process-engine-queuesize","link":"#dev-dsf-bpe-process-engine-queuesize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_EXCLUDED","slug":"dev-dsf-bpe-process-excluded","link":"#dev-dsf-bpe-process-excluded","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX","slug":"dev-dsf-bpe-process-fhir-server-retry-max","link":"#dev-dsf-bpe-process-fhir-server-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP","slug":"dev-dsf-bpe-process-fhir-server-retry-sleep","link":"#dev-dsf-bpe-process-fhir-server-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY","slug":"dev-dsf-bpe-process-plugin-directroy","link":"#dev-dsf-bpe-process-plugin-directroy","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_RETIRED","slug":"dev-dsf-bpe-process-retired","link":"#dev-dsf-bpe-process-retired","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_THREADS","slug":"dev-dsf-bpe-process-threads","link":"#dev-dsf-bpe-process-threads","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]}],"git":{"createdTime":1698748420000,"updatedTime":1698748420000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":8.21,"words":2464},"filePathRelative":"v1.3.1/maintain/bpe/configuration.md","localizedDate":"October 31, 2023","excerpt":"

    DEV_DSF_SERVER_API_HOST

    \\n
      \\n
    • Property: dev.dsf.server.api.host
    • \\n
    • Required: Yes
    • \\n
    • Description: API connector host, default in docker image: 0.0.0.0
    • \\n
    • Default: 127.0.0.1
    • \\n
    "}');export{S as comp,b as data}; diff --git a/assets/configuration.html-BV76pvkE.js b/assets/configuration.html-BV76pvkE.js new file mode 100644 index 000000000..b03006265 --- /dev/null +++ b/assets/configuration.html-BV76pvkE.js @@ -0,0 +1 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as l,c as n,a as e,b as r,d,e as s}from"./app-kq9lCQfY.js";const a={},c=s('

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',15),_=e("strong",null,"Property:",-1),p={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},E=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),g=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),f=s('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: Address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: Password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: Username to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: Password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: Username to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_CURRENTUSER

    • Property: dev.dsf.bpe.debug.log.message.currentUser
    • Required: No
    • Description: To enable logging of the currently requesting user set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_DBSTATEMENT

    • Property: dev.dsf.bpe.debug.log.message.dbStatement
    • Required: No
    • Description: To enable logging of DB queries set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL

    • Property: dev.dsf.bpe.debug.log.message.variablesLocal
    • Required: No
    • Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST

    • Property: dev.dsf.bpe.debug.log.message.webserviceRequest
    • Required: No
    • Description: To enable logging of webservices requests set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: Base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.corePoolSize
    • Required: No
    • Description: Process engine job executor core pool size
    • Default: 4

    DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.maxPoolSize
    • Required: No
    • Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full
    • Default: 10

    DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE

    • Property: dev.dsf.bpe.process.engine.queueSize
    • Required: No
    • Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy
    • Default: 40

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List
    • Example: dsfdev_updateAllowList|1.0, another_process|x.y

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available
    • Example: old_process|x.y

    DEV_DSF_BPE_PROCESS_THREADS

    • Property: dev.dsf.bpe.process.threads
    • Required: No
    • Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores
    • Default: -1

    DEV_DSF_BPE_SERVER_BASE_URL

    • Property: dev.dsf.bpe.server.base.url
    • Required: No
    • Description: Base address of the BPE server, configure when exposing the web-ui
    • Example: https://foo.bar/bpe
    • Default: https

    DEV_DSF_BPE_SERVER_ROLECONFIG

    DEV_DSF_BPE_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.bpe.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_BPE_SERVER_UI_THEME

    • Property: dev.dsf.bpe.server.ui.theme
    • Required: No
    • Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    ',170);function u(v,h){const i=o("ExternalLinkIcon");return l(),n("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",p,[r("dev.dsf.server.auth.oidc.client.id"),d(i)])]),E,g]),f])}const R=t(a,[["render",u],["__file","configuration.html.vue"]]),S=JSON.parse('{"path":"/v1.5.0/maintain/bpe/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-bpe-db-liquibase-forceunlock","link":"#dev-dsf-bpe-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-bpe-db-liquibase-lockwaittime","link":"#dev-dsf-bpe-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","link":"#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-bpe-db-liquibase-username","link":"#dev-dsf-bpe-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_URL","slug":"dev-dsf-bpe-db-url","link":"#dev-dsf-bpe-db-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP","slug":"dev-dsf-bpe-db-user-camunda-group","link":"#dev-dsf-bpe-db-user-camunda-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","link":"#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME","slug":"dev-dsf-bpe-db-user-camunda-username","link":"#dev-dsf-bpe-db-user-camunda-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_GROUP","slug":"dev-dsf-bpe-db-user-group","link":"#dev-dsf-bpe-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","link":"#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_USERNAME","slug":"dev-dsf-bpe-db-user-username","link":"#dev-dsf-bpe-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_CURRENTUSER","slug":"dev-dsf-bpe-debug-log-message-currentuser","link":"#dev-dsf-bpe-debug-log-message-currentuser","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_DBSTATEMENT","slug":"dev-dsf-bpe-debug-log-message-dbstatement","link":"#dev-dsf-bpe-debug-log-message-dbstatement","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND","slug":"dev-dsf-bpe-debug-log-message-onactivityend","link":"#dev-dsf-bpe-debug-log-message-onactivityend","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART","slug":"dev-dsf-bpe-debug-log-message-onactivitystart","link":"#dev-dsf-bpe-debug-log-message-onactivitystart","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES","slug":"dev-dsf-bpe-debug-log-message-variables","link":"#dev-dsf-bpe-debug-log-message-variables","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL","slug":"dev-dsf-bpe-debug-log-message-variableslocal","link":"#dev-dsf-bpe-debug-log-message-variableslocal","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST","slug":"dev-dsf-bpe-debug-log-message-webservicerequest","link":"#dev-dsf-bpe-debug-log-message-webservicerequest","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-fhir-client-certificate","link":"#dev-dsf-bpe-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-fhir-client-certificate-private-key","link":"#dev-dsf-bpe-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-local-timeout-connect","link":"#dev-dsf-bpe-fhir-client-local-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-local-timeout-read","link":"#dev-dsf-bpe-fhir-client-local-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE","slug":"dev-dsf-bpe-fhir-client-local-verbose","link":"#dev-dsf-bpe-fhir-client-local-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-remote-timeout-connect","link":"#dev-dsf-bpe-fhir-client-remote-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-remote-timeout-read","link":"#dev-dsf-bpe-fhir-client-remote-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE","slug":"dev-dsf-bpe-fhir-client-remote-verbose","link":"#dev-dsf-bpe-fhir-client-remote-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-bpe-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_SERVER_BASE_URL","slug":"dev-dsf-bpe-fhir-server-base-url","link":"#dev-dsf-bpe-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX","slug":"dev-dsf-bpe-fhir-task-subscription-retry-max","link":"#dev-dsf-bpe-fhir-task-subscription-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP","slug":"dev-dsf-bpe-fhir-task-subscription-retry-sleep","link":"#dev-dsf-bpe-fhir-task-subscription-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-task-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-task-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-mail-client-certificate","link":"#dev-dsf-bpe-mail-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-mail-client-certificate-private-key","link":"#dev-dsf-bpe-mail-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_FROMADDRESS","slug":"dev-dsf-bpe-mail-fromaddress","link":"#dev-dsf-bpe-mail-fromaddress","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_HOST","slug":"dev-dsf-bpe-mail-host","link":"#dev-dsf-bpe-mail-host","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE","slug":"dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","link":"#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION","slug":"dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","link":"#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","link":"#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PORT","slug":"dev-dsf-bpe-mail-port","link":"#dev-dsf-bpe-mail-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES","slug":"dev-dsf-bpe-mail-replytoaddresses","link":"#dev-dsf-bpe-mail-replytoaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT","slug":"dev-dsf-bpe-mail-sendmailonerrorlogevent","link":"#dev-dsf-bpe-mail-sendmailonerrorlogevent","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP","slug":"dev-dsf-bpe-mail-sendtestmailonstartup","link":"#dev-dsf-bpe-mail-sendtestmailonstartup","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE","slug":"dev-dsf-bpe-mail-smime-p12keystore","link":"#dev-dsf-bpe-mail-smime-p12keystore","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","link":"#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSES","slug":"dev-dsf-bpe-mail-toaddresses","link":"#dev-dsf-bpe-mail-toaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSESCC","slug":"dev-dsf-bpe-mail-toaddressescc","link":"#dev-dsf-bpe-mail-toaddressescc","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-mail-trust-server-certificate-cas","link":"#dev-dsf-bpe-mail-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USERNAME","slug":"dev-dsf-bpe-mail-username","link":"#dev-dsf-bpe-mail-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USESMTPS","slug":"dev-dsf-bpe-mail-usesmtps","link":"#dev-dsf-bpe-mail-usesmtps","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE","slug":"dev-dsf-bpe-process-engine-corepoolsize","link":"#dev-dsf-bpe-process-engine-corepoolsize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE","slug":"dev-dsf-bpe-process-engine-maxpoolsize","link":"#dev-dsf-bpe-process-engine-maxpoolsize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE","slug":"dev-dsf-bpe-process-engine-queuesize","link":"#dev-dsf-bpe-process-engine-queuesize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_EXCLUDED","slug":"dev-dsf-bpe-process-excluded","link":"#dev-dsf-bpe-process-excluded","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX","slug":"dev-dsf-bpe-process-fhir-server-retry-max","link":"#dev-dsf-bpe-process-fhir-server-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP","slug":"dev-dsf-bpe-process-fhir-server-retry-sleep","link":"#dev-dsf-bpe-process-fhir-server-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY","slug":"dev-dsf-bpe-process-plugin-directroy","link":"#dev-dsf-bpe-process-plugin-directroy","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_RETIRED","slug":"dev-dsf-bpe-process-retired","link":"#dev-dsf-bpe-process-retired","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_THREADS","slug":"dev-dsf-bpe-process-threads","link":"#dev-dsf-bpe-process-threads","children":[]},{"level":3,"title":"DEV_DSF_BPE_SERVER_BASE_URL","slug":"dev-dsf-bpe-server-base-url","link":"#dev-dsf-bpe-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_SERVER_ROLECONFIG","slug":"dev-dsf-bpe-server-roleconfig","link":"#dev-dsf-bpe-server-roleconfig","children":[]},{"level":3,"title":"DEV_DSF_BPE_SERVER_STATIC_RESOURCE_CACHE","slug":"dev-dsf-bpe-server-static-resource-cache","link":"#dev-dsf-bpe-server-static-resource-cache","children":[]},{"level":3,"title":"DEV_DSF_BPE_SERVER_UI_THEME","slug":"dev-dsf-bpe-server-ui-theme","link":"#dev-dsf-bpe-server-ui-theme","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]}],"git":{"createdTime":1708419681000,"updatedTime":1708521029000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":8.88,"words":2664},"filePathRelative":"v1.5.0/maintain/bpe/configuration.md","localizedDate":"February 20, 2024","excerpt":"

    DEV_DSF_SERVER_API_HOST

    \\n
      \\n
    • Property: dev.dsf.server.api.host
    • \\n
    • Required: Yes
    • \\n
    • Description: API connector host, default in docker image: 0.0.0.0
    • \\n
    • Default: 127.0.0.1
    • \\n
    "}');export{R as comp,S as data}; diff --git a/assets/configuration.html-BW2fNxdU.js b/assets/configuration.html-BW2fNxdU.js new file mode 100644 index 000000000..19351be37 --- /dev/null +++ b/assets/configuration.html-BW2fNxdU.js @@ -0,0 +1 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as l,c as n,a as e,b as r,d,e as s}from"./app-kq9lCQfY.js";const a={},c=s('

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',15),_=e("strong",null,"Property:",-1),p={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},E=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),f=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),g=s('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL

    • Property: dev.dsf.bpe.debug.log.message.variablesLocal
    • Required: No
    • Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: The base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.corePoolSize
    • Required: No
    • Description: Process engine job executor core pool size
    • Default: 4

    DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.maxPoolSize
    • Required: No
    • Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full
    • Default: 10

    DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE

    • Property: dev.dsf.bpe.process.engine.queueSize
    • Required: No
    • Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy
    • Default: 40

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List
    • Example: dsfdev_updateAllowList|1.0, another_process|x.y

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available
    • Example: old_process|x.y

    DEV_DSF_BPE_PROCESS_THREADS

    • Property: dev.dsf.bpe.process.threads
    • Required: No
    • Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores
    • Default: -1

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    ',156);function u(v,h){const i=o("ExternalLinkIcon");return l(),n("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",p,[r("dev.dsf.server.auth.oidc.client.id"),d(i)])]),E,f]),g])}const S=t(a,[["render",u],["__file","configuration.html.vue"]]),b=JSON.parse('{"path":"/v1.4.0/maintain/bpe/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-bpe-db-liquibase-forceunlock","link":"#dev-dsf-bpe-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-bpe-db-liquibase-lockwaittime","link":"#dev-dsf-bpe-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","link":"#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-bpe-db-liquibase-username","link":"#dev-dsf-bpe-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_URL","slug":"dev-dsf-bpe-db-url","link":"#dev-dsf-bpe-db-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP","slug":"dev-dsf-bpe-db-user-camunda-group","link":"#dev-dsf-bpe-db-user-camunda-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","link":"#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME","slug":"dev-dsf-bpe-db-user-camunda-username","link":"#dev-dsf-bpe-db-user-camunda-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_GROUP","slug":"dev-dsf-bpe-db-user-group","link":"#dev-dsf-bpe-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","link":"#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_USERNAME","slug":"dev-dsf-bpe-db-user-username","link":"#dev-dsf-bpe-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND","slug":"dev-dsf-bpe-debug-log-message-onactivityend","link":"#dev-dsf-bpe-debug-log-message-onactivityend","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART","slug":"dev-dsf-bpe-debug-log-message-onactivitystart","link":"#dev-dsf-bpe-debug-log-message-onactivitystart","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES","slug":"dev-dsf-bpe-debug-log-message-variables","link":"#dev-dsf-bpe-debug-log-message-variables","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL","slug":"dev-dsf-bpe-debug-log-message-variableslocal","link":"#dev-dsf-bpe-debug-log-message-variableslocal","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-fhir-client-certificate","link":"#dev-dsf-bpe-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-fhir-client-certificate-private-key","link":"#dev-dsf-bpe-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-local-timeout-connect","link":"#dev-dsf-bpe-fhir-client-local-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-local-timeout-read","link":"#dev-dsf-bpe-fhir-client-local-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE","slug":"dev-dsf-bpe-fhir-client-local-verbose","link":"#dev-dsf-bpe-fhir-client-local-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-remote-timeout-connect","link":"#dev-dsf-bpe-fhir-client-remote-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-remote-timeout-read","link":"#dev-dsf-bpe-fhir-client-remote-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE","slug":"dev-dsf-bpe-fhir-client-remote-verbose","link":"#dev-dsf-bpe-fhir-client-remote-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-bpe-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_SERVER_BASE_URL","slug":"dev-dsf-bpe-fhir-server-base-url","link":"#dev-dsf-bpe-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX","slug":"dev-dsf-bpe-fhir-task-subscription-retry-max","link":"#dev-dsf-bpe-fhir-task-subscription-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP","slug":"dev-dsf-bpe-fhir-task-subscription-retry-sleep","link":"#dev-dsf-bpe-fhir-task-subscription-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-task-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-task-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-mail-client-certificate","link":"#dev-dsf-bpe-mail-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-mail-client-certificate-private-key","link":"#dev-dsf-bpe-mail-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_FROMADDRESS","slug":"dev-dsf-bpe-mail-fromaddress","link":"#dev-dsf-bpe-mail-fromaddress","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_HOST","slug":"dev-dsf-bpe-mail-host","link":"#dev-dsf-bpe-mail-host","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE","slug":"dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","link":"#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION","slug":"dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","link":"#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","link":"#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PORT","slug":"dev-dsf-bpe-mail-port","link":"#dev-dsf-bpe-mail-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES","slug":"dev-dsf-bpe-mail-replytoaddresses","link":"#dev-dsf-bpe-mail-replytoaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT","slug":"dev-dsf-bpe-mail-sendmailonerrorlogevent","link":"#dev-dsf-bpe-mail-sendmailonerrorlogevent","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP","slug":"dev-dsf-bpe-mail-sendtestmailonstartup","link":"#dev-dsf-bpe-mail-sendtestmailonstartup","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE","slug":"dev-dsf-bpe-mail-smime-p12keystore","link":"#dev-dsf-bpe-mail-smime-p12keystore","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","link":"#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSES","slug":"dev-dsf-bpe-mail-toaddresses","link":"#dev-dsf-bpe-mail-toaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSESCC","slug":"dev-dsf-bpe-mail-toaddressescc","link":"#dev-dsf-bpe-mail-toaddressescc","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-mail-trust-server-certificate-cas","link":"#dev-dsf-bpe-mail-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USERNAME","slug":"dev-dsf-bpe-mail-username","link":"#dev-dsf-bpe-mail-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USESMTPS","slug":"dev-dsf-bpe-mail-usesmtps","link":"#dev-dsf-bpe-mail-usesmtps","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE","slug":"dev-dsf-bpe-process-engine-corepoolsize","link":"#dev-dsf-bpe-process-engine-corepoolsize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE","slug":"dev-dsf-bpe-process-engine-maxpoolsize","link":"#dev-dsf-bpe-process-engine-maxpoolsize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE","slug":"dev-dsf-bpe-process-engine-queuesize","link":"#dev-dsf-bpe-process-engine-queuesize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_EXCLUDED","slug":"dev-dsf-bpe-process-excluded","link":"#dev-dsf-bpe-process-excluded","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX","slug":"dev-dsf-bpe-process-fhir-server-retry-max","link":"#dev-dsf-bpe-process-fhir-server-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP","slug":"dev-dsf-bpe-process-fhir-server-retry-sleep","link":"#dev-dsf-bpe-process-fhir-server-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY","slug":"dev-dsf-bpe-process-plugin-directroy","link":"#dev-dsf-bpe-process-plugin-directroy","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_RETIRED","slug":"dev-dsf-bpe-process-retired","link":"#dev-dsf-bpe-process-retired","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_THREADS","slug":"dev-dsf-bpe-process-threads","link":"#dev-dsf-bpe-process-threads","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]}],"git":{"createdTime":1702917645000,"updatedTime":1702917645000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":8.21,"words":2464},"filePathRelative":"v1.4.0/maintain/bpe/configuration.md","localizedDate":"December 18, 2023","excerpt":"

    DEV_DSF_SERVER_API_HOST

    \\n
      \\n
    • Property: dev.dsf.server.api.host
    • \\n
    • Required: Yes
    • \\n
    • Description: API connector host, default in docker image: 0.0.0.0
    • \\n
    • Default: 127.0.0.1
    • \\n
    "}');export{S as comp,b as data}; diff --git a/assets/configuration.html-BXSsgalC.js b/assets/configuration.html-BXSsgalC.js new file mode 100644 index 000000000..8dbd4c22e --- /dev/null +++ b/assets/configuration.html-BXSsgalC.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,e as r}from"./app-kq9lCQfY.js";const s={},o=r('

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR server application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /fhir

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    ',26),n=[o];function l(a,c){return t(),i("div",null,n)}const h=e(s,[["render",l],["__file","configuration.html.vue"]]),f=JSON.parse('{"path":"/v1.5.2/maintain/fhir-reverse-proxy/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"APP_SERVER_IP","slug":"app-server-ip","link":"#app-server-ip","children":[]},{"level":3,"title":"HTTPS_SERVER_NAME_PORT","slug":"https-server-name-port","link":"#https-server-name-port","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_HTTP","slug":"proxy-pass-connection-timeout-http","link":"#proxy-pass-connection-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_WS","slug":"proxy-pass-connection-timeout-ws","link":"#proxy-pass-connection-timeout-ws","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_HTTP","slug":"proxy-pass-timeout-http","link":"#proxy-pass-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_WS","slug":"proxy-pass-timeout-ws","link":"#proxy-pass-timeout-ws","children":[]},{"level":3,"title":"SERVER_CONTEXT_PATH","slug":"server-context-path","link":"#server-context-path","children":[]},{"level":3,"title":"SSL_CA_CERTIFICATE_FILE","slug":"ssl-ca-certificate-file","link":"#ssl-ca-certificate-file","children":[]},{"level":3,"title":"SSL_CA_DN_REQUEST_FILE","slug":"ssl-ca-dn-request-file","link":"#ssl-ca-dn-request-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_CHAIN_FILE","slug":"ssl-certificate-chain-file","link":"#ssl-certificate-chain-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_FILE","slug":"ssl-certificate-file","link":"#ssl-certificate-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_KEY_FILE","slug":"ssl-certificate-key-file","link":"#ssl-certificate-key-file","children":[]},{"level":3,"title":"SSL_VERIFY_CLIENT","slug":"ssl-verify-client","link":"#ssl-verify-client","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.35,"words":404},"filePathRelative":"v1.5.2/maintain/fhir-reverse-proxy/configuration.md","localizedDate":"July 8, 2024","excerpt":"

    APP_SERVER_IP

    \\n
      \\n
    • Required: Yes
    • \\n
    • Description: Hostname or IP-Address of the DSF FHIR server application container, the reverse proxy target
    • \\n
    • Example: app, 172.28.1.3
    • \\n
    \\n

    HTTPS_SERVER_NAME_PORT

    "}');export{h as comp,f as data}; diff --git a/assets/configuration.html-BdZ0J6H6.js b/assets/configuration.html-BdZ0J6H6.js new file mode 100644 index 000000000..5dedb76be --- /dev/null +++ b/assets/configuration.html-BdZ0J6H6.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as n,c as d,a as e,b as r,d as l,e as i}from"./app-kq9lCQfY.js";const a={},c=i('

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_server_trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: The base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: The page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    • Property: dev.dsf.fhir.server.roleConfig
    • Required: Yes
    • Description: Role config YAML as defined in FHIR Server: Access Control.
    • Recommendation: Use an empty string "" or a single block scalar | character if no roles should be configured

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',73),_=e("strong",null,"Property:",-1),f={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},h=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),E=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),u=i('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    ',32);function v(g,p){const t=o("ExternalLinkIcon");return n(),d("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",f,[r("dev.dsf.server.auth.oidc.client.id"),l(t)])]),h,E]),u])}const S=s(a,[["render",v],["__file","configuration.html.vue"]]),I=JSON.parse('{"path":"/v1.1.0/maintain/fhir/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-fhir-client-certificate","link":"#dev-dsf-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-fhir-client-certificate-private-key","link":"#dev-dsf-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT","slug":"dev-dsf-fhir-client-timeout-connect","link":"#dev-dsf-fhir-client-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ","slug":"dev-dsf-fhir-client-timeout-read","link":"#dev-dsf-fhir-client-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_VERBOSE","slug":"dev-dsf-fhir-client-verbose","link":"#dev-dsf-fhir-client-verbose","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-fhir-db-liquibase-forceunlock","link":"#dev-dsf-fhir-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-fhir-db-liquibase-lockwaittime","link":"#dev-dsf-fhir-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","link":"#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-fhir-db-liquibase-username","link":"#dev-dsf-fhir-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_URL","slug":"dev-dsf-fhir-db-url","link":"#dev-dsf-fhir-db-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_GROUP","slug":"dev-dsf-fhir-db-user-group","link":"#dev-dsf-fhir-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","link":"#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP","slug":"dev-dsf-fhir-db-user-permanent-delete-group","link":"#dev-dsf-fhir-db-user-permanent-delete-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","link":"#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME","slug":"dev-dsf-fhir-db-user-permanent-delete-username","link":"#dev-dsf-fhir-db-user-permanent-delete-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_USERNAME","slug":"dev-dsf-fhir-db-user-username","link":"#dev-dsf-fhir-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_BASE_URL","slug":"dev-dsf-fhir-server-base-url","link":"#dev-dsf-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_INIT_BUNDLE","slug":"dev-dsf-fhir-server-init-bundle","link":"#dev-dsf-fhir-server-init-bundle","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE","slug":"dev-dsf-fhir-server-organization-identifier-value","link":"#dev-dsf-fhir-server-organization-identifier-value","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT","slug":"dev-dsf-fhir-server-organization-thumbprint","link":"#dev-dsf-fhir-server-organization-thumbprint","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_PAGE_COUNT","slug":"dev-dsf-fhir-server-page-count","link":"#dev-dsf-fhir-server-page-count","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ROLECONFIG","slug":"dev-dsf-fhir-server-roleconfig","link":"#dev-dsf-fhir-server-roleconfig","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE","slug":"dev-dsf-fhir-server-static-resource-cache","link":"#dev-dsf-fhir-server-static-resource-cache","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]}],"git":{"createdTime":1693251017000,"updatedTime":1694430076000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":4.76,"words":1428},"filePathRelative":"v1.1.0/maintain/fhir/configuration.md","localizedDate":"August 28, 2023","excerpt":"

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    \\n
      \\n
    • Property: dev.dsf.fhir.client.certificate
    • \\n
    • Required: Yes
    • \\n
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • \\n
    • Recommendation: Use docker secret file to configure
    • \\n
    • Example: /run/secrets/app_client_certificate.pem
    • \\n
    "}');export{S as comp,I as data}; diff --git a/assets/configuration.html-BeW8pTce.js b/assets/configuration.html-BeW8pTce.js new file mode 100644 index 000000000..c9ca90a49 --- /dev/null +++ b/assets/configuration.html-BeW8pTce.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,e as r}from"./app-kq9lCQfY.js";const s={},o=r('

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /fhir

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    ',26),n=[o];function l(a,c){return t(),i("div",null,n)}const h=e(s,[["render",l],["__file","configuration.html.vue"]]),f=JSON.parse('{"path":"/v1.3.0/maintain/fhir-reverse-proxy/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"APP_SERVER_IP","slug":"app-server-ip","link":"#app-server-ip","children":[]},{"level":3,"title":"HTTPS_SERVER_NAME_PORT","slug":"https-server-name-port","link":"#https-server-name-port","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_HTTP","slug":"proxy-pass-connection-timeout-http","link":"#proxy-pass-connection-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_WS","slug":"proxy-pass-connection-timeout-ws","link":"#proxy-pass-connection-timeout-ws","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_HTTP","slug":"proxy-pass-timeout-http","link":"#proxy-pass-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_WS","slug":"proxy-pass-timeout-ws","link":"#proxy-pass-timeout-ws","children":[]},{"level":3,"title":"SERVER_CONTEXT_PATH","slug":"server-context-path","link":"#server-context-path","children":[]},{"level":3,"title":"SSL_CA_CERTIFICATE_FILE","slug":"ssl-ca-certificate-file","link":"#ssl-ca-certificate-file","children":[]},{"level":3,"title":"SSL_CA_DN_REQUEST_FILE","slug":"ssl-ca-dn-request-file","link":"#ssl-ca-dn-request-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_CHAIN_FILE","slug":"ssl-certificate-chain-file","link":"#ssl-certificate-chain-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_FILE","slug":"ssl-certificate-file","link":"#ssl-certificate-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_KEY_FILE","slug":"ssl-certificate-key-file","link":"#ssl-certificate-key-file","children":[]},{"level":3,"title":"SSL_VERIFY_CLIENT","slug":"ssl-verify-client","link":"#ssl-verify-client","children":[]}],"git":{"createdTime":1696944513000,"updatedTime":1699809451000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.35,"words":404},"filePathRelative":"v1.3.0/maintain/fhir-reverse-proxy/configuration.md","localizedDate":"October 10, 2023","excerpt":"

    APP_SERVER_IP

    \\n
      \\n
    • Required: Yes
    • \\n
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • \\n
    • Example: app, 172.28.1.3
    • \\n
    \\n

    HTTPS_SERVER_NAME_PORT

    "}');export{h as comp,f as data}; diff --git a/assets/configuration.html-BwxW1XeX.js b/assets/configuration.html-BwxW1XeX.js new file mode 100644 index 000000000..2f729d94b --- /dev/null +++ b/assets/configuration.html-BwxW1XeX.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as n,c as d,a as e,b as r,d as l,e as i}from"./app-kq9lCQfY.js";const a={},c=i('

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client _trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: Address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: Password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: Password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: Username to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: Username to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_CURRENTUSER

    • Property: dev.dsf.fhir.debug.log.message.currentUser
    • Required: No
    • Description: To enable logging of the currently requesting user set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_DBSTATEMENT

    • Property: dev.dsf.fhir.debug.log.message.dbStatement
    • Required: No
    • Description: To enable logging of DB queries set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST

    • Property: dev.dsf.fhir.debug.log.message.webserviceRequest
    • Required: No
    • Description: To enable logging of webservices requests set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: Base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: Fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: Local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: Page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_FHIR_SERVER_UI_THEME

    • Property: dev.dsf.fhir.server.ui.theme
    • Required: No
    • Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',81),_=e("strong",null,"Property:",-1),f={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},h=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),E=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),u=i('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    ',32);function g(v,p){const t=o("ExternalLinkIcon");return n(),d("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",f,[r("dev.dsf.server.auth.oidc.client.id"),l(t)])]),h,E]),u])}const S=s(a,[["render",g],["__file","configuration.html.vue"]]),I=JSON.parse('{"path":"/v1.5.2/maintain/fhir/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-fhir-client-certificate","link":"#dev-dsf-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-fhir-client-certificate-private-key","link":"#dev-dsf-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT","slug":"dev-dsf-fhir-client-timeout-connect","link":"#dev-dsf-fhir-client-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ","slug":"dev-dsf-fhir-client-timeout-read","link":"#dev-dsf-fhir-client-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_VERBOSE","slug":"dev-dsf-fhir-client-verbose","link":"#dev-dsf-fhir-client-verbose","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-fhir-db-liquibase-forceunlock","link":"#dev-dsf-fhir-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-fhir-db-liquibase-lockwaittime","link":"#dev-dsf-fhir-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","link":"#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-fhir-db-liquibase-username","link":"#dev-dsf-fhir-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_URL","slug":"dev-dsf-fhir-db-url","link":"#dev-dsf-fhir-db-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_GROUP","slug":"dev-dsf-fhir-db-user-group","link":"#dev-dsf-fhir-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","link":"#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP","slug":"dev-dsf-fhir-db-user-permanent-delete-group","link":"#dev-dsf-fhir-db-user-permanent-delete-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","link":"#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME","slug":"dev-dsf-fhir-db-user-permanent-delete-username","link":"#dev-dsf-fhir-db-user-permanent-delete-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_USERNAME","slug":"dev-dsf-fhir-db-user-username","link":"#dev-dsf-fhir-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_CURRENTUSER","slug":"dev-dsf-fhir-debug-log-message-currentuser","link":"#dev-dsf-fhir-debug-log-message-currentuser","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_DBSTATEMENT","slug":"dev-dsf-fhir-debug-log-message-dbstatement","link":"#dev-dsf-fhir-debug-log-message-dbstatement","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST","slug":"dev-dsf-fhir-debug-log-message-webservicerequest","link":"#dev-dsf-fhir-debug-log-message-webservicerequest","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_BASE_URL","slug":"dev-dsf-fhir-server-base-url","link":"#dev-dsf-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_INIT_BUNDLE","slug":"dev-dsf-fhir-server-init-bundle","link":"#dev-dsf-fhir-server-init-bundle","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE","slug":"dev-dsf-fhir-server-organization-identifier-value","link":"#dev-dsf-fhir-server-organization-identifier-value","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT","slug":"dev-dsf-fhir-server-organization-thumbprint","link":"#dev-dsf-fhir-server-organization-thumbprint","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_PAGE_COUNT","slug":"dev-dsf-fhir-server-page-count","link":"#dev-dsf-fhir-server-page-count","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ROLECONFIG","slug":"dev-dsf-fhir-server-roleconfig","link":"#dev-dsf-fhir-server-roleconfig","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE","slug":"dev-dsf-fhir-server-static-resource-cache","link":"#dev-dsf-fhir-server-static-resource-cache","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_UI_THEME","slug":"dev-dsf-fhir-server-ui-theme","link":"#dev-dsf-fhir-server-ui-theme","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":5.15,"words":1546},"filePathRelative":"v1.5.2/maintain/fhir/configuration.md","localizedDate":"July 8, 2024","excerpt":"

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    \\n
      \\n
    • Property: dev.dsf.fhir.client.certificate
    • \\n
    • Required: Yes
    • \\n
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • \\n
    • Recommendation: Use docker secret file to configure
    • \\n
    • Example: /run/secrets/app_client_certificate.pem
    • \\n
    "}');export{S as comp,I as data}; diff --git a/assets/configuration.html-C9PtkIpc.js b/assets/configuration.html-C9PtkIpc.js new file mode 100644 index 000000000..86b26c082 --- /dev/null +++ b/assets/configuration.html-C9PtkIpc.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,e as s}from"./app-kq9lCQfY.js";const r={},o=s('

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    ',24),n=[o];function l(c,a){return t(),i("div",null,n)}const h=e(r,[["render",l],["__file","configuration.html.vue"]]),f=JSON.parse('{"path":"/v1.1.0/maintain/fhir-reverse-proxy/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"APP_SERVER_IP","slug":"app-server-ip","link":"#app-server-ip","children":[]},{"level":3,"title":"HTTPS_SERVER_NAME_PORT","slug":"https-server-name-port","link":"#https-server-name-port","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_HTTP","slug":"proxy-pass-connection-timeout-http","link":"#proxy-pass-connection-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_WS","slug":"proxy-pass-connection-timeout-ws","link":"#proxy-pass-connection-timeout-ws","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_HTTP","slug":"proxy-pass-timeout-http","link":"#proxy-pass-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_WS","slug":"proxy-pass-timeout-ws","link":"#proxy-pass-timeout-ws","children":[]},{"level":3,"title":"SSL_CA_CERTIFICATE_FILE","slug":"ssl-ca-certificate-file","link":"#ssl-ca-certificate-file","children":[]},{"level":3,"title":"SSL_CA_DN_REQUEST_FILE","slug":"ssl-ca-dn-request-file","link":"#ssl-ca-dn-request-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_CHAIN_FILE","slug":"ssl-certificate-chain-file","link":"#ssl-certificate-chain-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_FILE","slug":"ssl-certificate-file","link":"#ssl-certificate-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_KEY_FILE","slug":"ssl-certificate-key-file","link":"#ssl-certificate-key-file","children":[]},{"level":3,"title":"SSL_VERIFY_CLIENT","slug":"ssl-verify-client","link":"#ssl-verify-client","children":[]}],"git":{"createdTime":1693251017000,"updatedTime":1693251017000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.23,"words":370},"filePathRelative":"v1.1.0/maintain/fhir-reverse-proxy/configuration.md","localizedDate":"August 28, 2023","excerpt":"

    APP_SERVER_IP

    \\n
      \\n
    • Required: Yes
    • \\n
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • \\n
    • Example: app, 172.28.1.3
    • \\n
    \\n

    HTTPS_SERVER_NAME_PORT

    "}');export{h as comp,f as data}; diff --git a/assets/configuration.html-CNdymila.js b/assets/configuration.html-CNdymila.js new file mode 100644 index 000000000..5db5e1ac1 --- /dev/null +++ b/assets/configuration.html-CNdymila.js @@ -0,0 +1 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as l,c as d,a as e,b as r,d as n,e as s}from"./app-kq9lCQfY.js";const a={},c=s('

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',15),_=e("strong",null,"Property:",-1),p={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},E=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),g=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),f=s('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: Address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: Password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: Username to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: Password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: Username to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_CURRENTUSER

    • Property: dev.dsf.bpe.debug.log.message.currentUser
    • Required: No
    • Description: To enable logging of the currently requesting user set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_DBSTATEMENT

    • Property: dev.dsf.bpe.debug.log.message.dbStatement
    • Required: No
    • Description: To enable logging of DB queries set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL

    • Property: dev.dsf.bpe.debug.log.message.variablesLocal
    • Required: No
    • Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST

    • Property: dev.dsf.bpe.debug.log.message.webserviceRequest
    • Required: No
    • Description: To enable logging of webservices requests set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: Base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.corePoolSize
    • Required: No
    • Description: Process engine job executor core pool size
    • Default: 4

    DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.maxPoolSize
    • Required: No
    • Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full
    • Default: 10

    DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE

    • Property: dev.dsf.bpe.process.engine.queueSize
    • Required: No
    • Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy
    • Default: 40

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List
    • Example: dsfdev_updateAllowList|1.0, another_process|x.y

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available
    • Example: old_process|x.y

    DEV_DSF_BPE_PROCESS_THREADS

    • Property: dev.dsf.bpe.process.threads
    • Required: No
    • Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores
    • Default: -1

    DEV_DSF_BPE_SERVER_BASE_URL

    • Property: dev.dsf.bpe.server.base.url
    • Required: No
    • Description: Base address of the BPE server, configure when exposing the web-ui
    • Example: https://foo.bar/bpe
    • Default: https

    DEV_DSF_BPE_SERVER_ROLECONFIG

    DEV_DSF_BPE_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.bpe.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_BPE_SERVER_UI_THEME

    • Property: dev.dsf.bpe.server.ui.theme
    • Required: No
    • Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    ',170);function u(v,h){const i=o("ExternalLinkIcon");return l(),d("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",p,[r("dev.dsf.server.auth.oidc.client.id"),n(i)])]),E,g]),f])}const R=t(a,[["render",u],["__file","configuration.html.vue"]]),S=JSON.parse('{"path":"/stable/maintain/bpe/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-bpe-db-liquibase-forceunlock","link":"#dev-dsf-bpe-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-bpe-db-liquibase-lockwaittime","link":"#dev-dsf-bpe-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","link":"#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-bpe-db-liquibase-username","link":"#dev-dsf-bpe-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_URL","slug":"dev-dsf-bpe-db-url","link":"#dev-dsf-bpe-db-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP","slug":"dev-dsf-bpe-db-user-camunda-group","link":"#dev-dsf-bpe-db-user-camunda-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","link":"#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME","slug":"dev-dsf-bpe-db-user-camunda-username","link":"#dev-dsf-bpe-db-user-camunda-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_GROUP","slug":"dev-dsf-bpe-db-user-group","link":"#dev-dsf-bpe-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","link":"#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_USERNAME","slug":"dev-dsf-bpe-db-user-username","link":"#dev-dsf-bpe-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_CURRENTUSER","slug":"dev-dsf-bpe-debug-log-message-currentuser","link":"#dev-dsf-bpe-debug-log-message-currentuser","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_DBSTATEMENT","slug":"dev-dsf-bpe-debug-log-message-dbstatement","link":"#dev-dsf-bpe-debug-log-message-dbstatement","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND","slug":"dev-dsf-bpe-debug-log-message-onactivityend","link":"#dev-dsf-bpe-debug-log-message-onactivityend","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART","slug":"dev-dsf-bpe-debug-log-message-onactivitystart","link":"#dev-dsf-bpe-debug-log-message-onactivitystart","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES","slug":"dev-dsf-bpe-debug-log-message-variables","link":"#dev-dsf-bpe-debug-log-message-variables","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL","slug":"dev-dsf-bpe-debug-log-message-variableslocal","link":"#dev-dsf-bpe-debug-log-message-variableslocal","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST","slug":"dev-dsf-bpe-debug-log-message-webservicerequest","link":"#dev-dsf-bpe-debug-log-message-webservicerequest","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-fhir-client-certificate","link":"#dev-dsf-bpe-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-fhir-client-certificate-private-key","link":"#dev-dsf-bpe-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-local-timeout-connect","link":"#dev-dsf-bpe-fhir-client-local-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-local-timeout-read","link":"#dev-dsf-bpe-fhir-client-local-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE","slug":"dev-dsf-bpe-fhir-client-local-verbose","link":"#dev-dsf-bpe-fhir-client-local-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-remote-timeout-connect","link":"#dev-dsf-bpe-fhir-client-remote-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-remote-timeout-read","link":"#dev-dsf-bpe-fhir-client-remote-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE","slug":"dev-dsf-bpe-fhir-client-remote-verbose","link":"#dev-dsf-bpe-fhir-client-remote-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-bpe-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_SERVER_BASE_URL","slug":"dev-dsf-bpe-fhir-server-base-url","link":"#dev-dsf-bpe-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX","slug":"dev-dsf-bpe-fhir-task-subscription-retry-max","link":"#dev-dsf-bpe-fhir-task-subscription-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP","slug":"dev-dsf-bpe-fhir-task-subscription-retry-sleep","link":"#dev-dsf-bpe-fhir-task-subscription-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-task-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-task-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-mail-client-certificate","link":"#dev-dsf-bpe-mail-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-mail-client-certificate-private-key","link":"#dev-dsf-bpe-mail-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_FROMADDRESS","slug":"dev-dsf-bpe-mail-fromaddress","link":"#dev-dsf-bpe-mail-fromaddress","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_HOST","slug":"dev-dsf-bpe-mail-host","link":"#dev-dsf-bpe-mail-host","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE","slug":"dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","link":"#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION","slug":"dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","link":"#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","link":"#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PORT","slug":"dev-dsf-bpe-mail-port","link":"#dev-dsf-bpe-mail-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES","slug":"dev-dsf-bpe-mail-replytoaddresses","link":"#dev-dsf-bpe-mail-replytoaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT","slug":"dev-dsf-bpe-mail-sendmailonerrorlogevent","link":"#dev-dsf-bpe-mail-sendmailonerrorlogevent","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP","slug":"dev-dsf-bpe-mail-sendtestmailonstartup","link":"#dev-dsf-bpe-mail-sendtestmailonstartup","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE","slug":"dev-dsf-bpe-mail-smime-p12keystore","link":"#dev-dsf-bpe-mail-smime-p12keystore","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","link":"#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSES","slug":"dev-dsf-bpe-mail-toaddresses","link":"#dev-dsf-bpe-mail-toaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSESCC","slug":"dev-dsf-bpe-mail-toaddressescc","link":"#dev-dsf-bpe-mail-toaddressescc","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-mail-trust-server-certificate-cas","link":"#dev-dsf-bpe-mail-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USERNAME","slug":"dev-dsf-bpe-mail-username","link":"#dev-dsf-bpe-mail-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USESMTPS","slug":"dev-dsf-bpe-mail-usesmtps","link":"#dev-dsf-bpe-mail-usesmtps","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE","slug":"dev-dsf-bpe-process-engine-corepoolsize","link":"#dev-dsf-bpe-process-engine-corepoolsize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE","slug":"dev-dsf-bpe-process-engine-maxpoolsize","link":"#dev-dsf-bpe-process-engine-maxpoolsize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE","slug":"dev-dsf-bpe-process-engine-queuesize","link":"#dev-dsf-bpe-process-engine-queuesize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_EXCLUDED","slug":"dev-dsf-bpe-process-excluded","link":"#dev-dsf-bpe-process-excluded","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX","slug":"dev-dsf-bpe-process-fhir-server-retry-max","link":"#dev-dsf-bpe-process-fhir-server-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP","slug":"dev-dsf-bpe-process-fhir-server-retry-sleep","link":"#dev-dsf-bpe-process-fhir-server-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY","slug":"dev-dsf-bpe-process-plugin-directroy","link":"#dev-dsf-bpe-process-plugin-directroy","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_RETIRED","slug":"dev-dsf-bpe-process-retired","link":"#dev-dsf-bpe-process-retired","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_THREADS","slug":"dev-dsf-bpe-process-threads","link":"#dev-dsf-bpe-process-threads","children":[]},{"level":3,"title":"DEV_DSF_BPE_SERVER_BASE_URL","slug":"dev-dsf-bpe-server-base-url","link":"#dev-dsf-bpe-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_SERVER_ROLECONFIG","slug":"dev-dsf-bpe-server-roleconfig","link":"#dev-dsf-bpe-server-roleconfig","children":[]},{"level":3,"title":"DEV_DSF_BPE_SERVER_STATIC_RESOURCE_CACHE","slug":"dev-dsf-bpe-server-static-resource-cache","link":"#dev-dsf-bpe-server-static-resource-cache","children":[]},{"level":3,"title":"DEV_DSF_BPE_SERVER_UI_THEME","slug":"dev-dsf-bpe-server-ui-theme","link":"#dev-dsf-bpe-server-ui-theme","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]}],"git":{"createdTime":null,"updatedTime":null,"contributors":[]},"readingTime":{"minutes":8.88,"words":2664},"filePathRelative":"stable/maintain/bpe/configuration.md","excerpt":"

    DEV_DSF_SERVER_API_HOST

    \\n
      \\n
    • Property: dev.dsf.server.api.host
    • \\n
    • Required: Yes
    • \\n
    • Description: API connector host, default in docker image: 0.0.0.0
    • \\n
    • Default: 127.0.0.1
    • \\n
    "}');export{R as comp,S as data}; diff --git a/assets/configuration.html-CRtcdzwb.js b/assets/configuration.html-CRtcdzwb.js new file mode 100644 index 000000000..593c74dd6 --- /dev/null +++ b/assets/configuration.html-CRtcdzwb.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as n,c as d,a as e,b as r,d as l,e as i}from"./app-kq9lCQfY.js";const a={},c=i('

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client _trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: The base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: The page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',73),_=e("strong",null,"Property:",-1),f={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},h=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),E=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),u=i('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    ',32);function v(g,p){const t=o("ExternalLinkIcon");return n(),d("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",f,[r("dev.dsf.server.auth.oidc.client.id"),l(t)])]),h,E]),u])}const S=s(a,[["render",v],["__file","configuration.html.vue"]]),I=JSON.parse('{"path":"/v1.4.0/maintain/fhir/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-fhir-client-certificate","link":"#dev-dsf-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-fhir-client-certificate-private-key","link":"#dev-dsf-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT","slug":"dev-dsf-fhir-client-timeout-connect","link":"#dev-dsf-fhir-client-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ","slug":"dev-dsf-fhir-client-timeout-read","link":"#dev-dsf-fhir-client-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_VERBOSE","slug":"dev-dsf-fhir-client-verbose","link":"#dev-dsf-fhir-client-verbose","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-fhir-db-liquibase-forceunlock","link":"#dev-dsf-fhir-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-fhir-db-liquibase-lockwaittime","link":"#dev-dsf-fhir-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","link":"#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-fhir-db-liquibase-username","link":"#dev-dsf-fhir-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_URL","slug":"dev-dsf-fhir-db-url","link":"#dev-dsf-fhir-db-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_GROUP","slug":"dev-dsf-fhir-db-user-group","link":"#dev-dsf-fhir-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","link":"#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP","slug":"dev-dsf-fhir-db-user-permanent-delete-group","link":"#dev-dsf-fhir-db-user-permanent-delete-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","link":"#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME","slug":"dev-dsf-fhir-db-user-permanent-delete-username","link":"#dev-dsf-fhir-db-user-permanent-delete-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_USERNAME","slug":"dev-dsf-fhir-db-user-username","link":"#dev-dsf-fhir-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_BASE_URL","slug":"dev-dsf-fhir-server-base-url","link":"#dev-dsf-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_INIT_BUNDLE","slug":"dev-dsf-fhir-server-init-bundle","link":"#dev-dsf-fhir-server-init-bundle","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE","slug":"dev-dsf-fhir-server-organization-identifier-value","link":"#dev-dsf-fhir-server-organization-identifier-value","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT","slug":"dev-dsf-fhir-server-organization-thumbprint","link":"#dev-dsf-fhir-server-organization-thumbprint","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_PAGE_COUNT","slug":"dev-dsf-fhir-server-page-count","link":"#dev-dsf-fhir-server-page-count","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ROLECONFIG","slug":"dev-dsf-fhir-server-roleconfig","link":"#dev-dsf-fhir-server-roleconfig","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE","slug":"dev-dsf-fhir-server-static-resource-cache","link":"#dev-dsf-fhir-server-static-resource-cache","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]}],"git":{"createdTime":1702917645000,"updatedTime":1702917645000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":4.71,"words":1412},"filePathRelative":"v1.4.0/maintain/fhir/configuration.md","localizedDate":"December 18, 2023","excerpt":"

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    \\n
      \\n
    • Property: dev.dsf.fhir.client.certificate
    • \\n
    • Required: Yes
    • \\n
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • \\n
    • Recommendation: Use docker secret file to configure
    • \\n
    • Example: /run/secrets/app_client_certificate.pem
    • \\n
    "}');export{S as comp,I as data}; diff --git a/assets/configuration.html-CTyYG9BU.js b/assets/configuration.html-CTyYG9BU.js new file mode 100644 index 000000000..222ed3cfc --- /dev/null +++ b/assets/configuration.html-CTyYG9BU.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,e as r}from"./app-kq9lCQfY.js";const s={},o=r('

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF BPE server application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF BPE server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /bpe

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    ',26),n=[o];function l(a,c){return t(),i("div",null,n)}const h=e(s,[["render",l],["__file","configuration.html.vue"]]),g=JSON.parse('{"path":"/v1.5.2/maintain/bpe-reverse-proxy/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"APP_SERVER_IP","slug":"app-server-ip","link":"#app-server-ip","children":[]},{"level":3,"title":"HTTPS_SERVER_NAME_PORT","slug":"https-server-name-port","link":"#https-server-name-port","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_HTTP","slug":"proxy-pass-connection-timeout-http","link":"#proxy-pass-connection-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_WS","slug":"proxy-pass-connection-timeout-ws","link":"#proxy-pass-connection-timeout-ws","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_HTTP","slug":"proxy-pass-timeout-http","link":"#proxy-pass-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_WS","slug":"proxy-pass-timeout-ws","link":"#proxy-pass-timeout-ws","children":[]},{"level":3,"title":"SERVER_CONTEXT_PATH","slug":"server-context-path","link":"#server-context-path","children":[]},{"level":3,"title":"SSL_CA_CERTIFICATE_FILE","slug":"ssl-ca-certificate-file","link":"#ssl-ca-certificate-file","children":[]},{"level":3,"title":"SSL_CA_DN_REQUEST_FILE","slug":"ssl-ca-dn-request-file","link":"#ssl-ca-dn-request-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_CHAIN_FILE","slug":"ssl-certificate-chain-file","link":"#ssl-certificate-chain-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_FILE","slug":"ssl-certificate-file","link":"#ssl-certificate-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_KEY_FILE","slug":"ssl-certificate-key-file","link":"#ssl-certificate-key-file","children":[]},{"level":3,"title":"SSL_VERIFY_CLIENT","slug":"ssl-verify-client","link":"#ssl-verify-client","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.35,"words":404},"filePathRelative":"v1.5.2/maintain/bpe-reverse-proxy/configuration.md","localizedDate":"July 8, 2024","excerpt":"

    APP_SERVER_IP

    \\n
      \\n
    • Required: Yes
    • \\n
    • Description: Hostname or IP-Address of the DSF BPE server application container, the reverse proxy target
    • \\n
    • Example: app, 172.28.1.3
    • \\n
    \\n

    HTTPS_SERVER_NAME_PORT

    "}');export{h as comp,g as data}; diff --git a/assets/configuration.html-Ckb_V_64.js b/assets/configuration.html-Ckb_V_64.js new file mode 100644 index 000000000..cc5deb914 --- /dev/null +++ b/assets/configuration.html-Ckb_V_64.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,e as r}from"./app-kq9lCQfY.js";const s={},o=r('

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR server application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /fhir

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    ',26),n=[o];function l(a,c){return t(),i("div",null,n)}const h=e(s,[["render",l],["__file","configuration.html.vue"]]),f=JSON.parse('{"path":"/v1.5.0/maintain/fhir-reverse-proxy/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"APP_SERVER_IP","slug":"app-server-ip","link":"#app-server-ip","children":[]},{"level":3,"title":"HTTPS_SERVER_NAME_PORT","slug":"https-server-name-port","link":"#https-server-name-port","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_HTTP","slug":"proxy-pass-connection-timeout-http","link":"#proxy-pass-connection-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_WS","slug":"proxy-pass-connection-timeout-ws","link":"#proxy-pass-connection-timeout-ws","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_HTTP","slug":"proxy-pass-timeout-http","link":"#proxy-pass-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_WS","slug":"proxy-pass-timeout-ws","link":"#proxy-pass-timeout-ws","children":[]},{"level":3,"title":"SERVER_CONTEXT_PATH","slug":"server-context-path","link":"#server-context-path","children":[]},{"level":3,"title":"SSL_CA_CERTIFICATE_FILE","slug":"ssl-ca-certificate-file","link":"#ssl-ca-certificate-file","children":[]},{"level":3,"title":"SSL_CA_DN_REQUEST_FILE","slug":"ssl-ca-dn-request-file","link":"#ssl-ca-dn-request-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_CHAIN_FILE","slug":"ssl-certificate-chain-file","link":"#ssl-certificate-chain-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_FILE","slug":"ssl-certificate-file","link":"#ssl-certificate-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_KEY_FILE","slug":"ssl-certificate-key-file","link":"#ssl-certificate-key-file","children":[]},{"level":3,"title":"SSL_VERIFY_CLIENT","slug":"ssl-verify-client","link":"#ssl-verify-client","children":[]}],"git":{"createdTime":1708419681000,"updatedTime":1708517817000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.35,"words":404},"filePathRelative":"v1.5.0/maintain/fhir-reverse-proxy/configuration.md","localizedDate":"February 20, 2024","excerpt":"

    APP_SERVER_IP

    \\n
      \\n
    • Required: Yes
    • \\n
    • Description: Hostname or IP-Address of the DSF FHIR server application container, the reverse proxy target
    • \\n
    • Example: app, 172.28.1.3
    • \\n
    \\n

    HTTPS_SERVER_NAME_PORT

    "}');export{h as comp,f as data}; diff --git a/assets/configuration.html-CtDCRuS7.js b/assets/configuration.html-CtDCRuS7.js new file mode 100644 index 000000000..bb8047023 --- /dev/null +++ b/assets/configuration.html-CtDCRuS7.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,e as r}from"./app-kq9lCQfY.js";const s={},o=r('

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR server application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /fhir

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    ',26),n=[o];function l(a,c){return t(),i("div",null,n)}const h=e(s,[["render",l],["__file","configuration.html.vue"]]),f=JSON.parse('{"path":"/stable/maintain/fhir-reverse-proxy/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"APP_SERVER_IP","slug":"app-server-ip","link":"#app-server-ip","children":[]},{"level":3,"title":"HTTPS_SERVER_NAME_PORT","slug":"https-server-name-port","link":"#https-server-name-port","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_HTTP","slug":"proxy-pass-connection-timeout-http","link":"#proxy-pass-connection-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_WS","slug":"proxy-pass-connection-timeout-ws","link":"#proxy-pass-connection-timeout-ws","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_HTTP","slug":"proxy-pass-timeout-http","link":"#proxy-pass-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_WS","slug":"proxy-pass-timeout-ws","link":"#proxy-pass-timeout-ws","children":[]},{"level":3,"title":"SERVER_CONTEXT_PATH","slug":"server-context-path","link":"#server-context-path","children":[]},{"level":3,"title":"SSL_CA_CERTIFICATE_FILE","slug":"ssl-ca-certificate-file","link":"#ssl-ca-certificate-file","children":[]},{"level":3,"title":"SSL_CA_DN_REQUEST_FILE","slug":"ssl-ca-dn-request-file","link":"#ssl-ca-dn-request-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_CHAIN_FILE","slug":"ssl-certificate-chain-file","link":"#ssl-certificate-chain-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_FILE","slug":"ssl-certificate-file","link":"#ssl-certificate-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_KEY_FILE","slug":"ssl-certificate-key-file","link":"#ssl-certificate-key-file","children":[]},{"level":3,"title":"SSL_VERIFY_CLIENT","slug":"ssl-verify-client","link":"#ssl-verify-client","children":[]}],"git":{"createdTime":null,"updatedTime":null,"contributors":[]},"readingTime":{"minutes":1.35,"words":404},"filePathRelative":"stable/maintain/fhir-reverse-proxy/configuration.md","excerpt":"

    APP_SERVER_IP

    \\n
      \\n
    • Required: Yes
    • \\n
    • Description: Hostname or IP-Address of the DSF FHIR server application container, the reverse proxy target
    • \\n
    • Example: app, 172.28.1.3
    • \\n
    \\n

    HTTPS_SERVER_NAME_PORT

    "}');export{h as comp,f as data}; diff --git a/assets/configuration.html-CuSzWF3M.js b/assets/configuration.html-CuSzWF3M.js new file mode 100644 index 000000000..5c9ff8e7c --- /dev/null +++ b/assets/configuration.html-CuSzWF3M.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as n,c as d,a as e,b as r,d as l,e as i}from"./app-kq9lCQfY.js";const a={},c=i('

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client _trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: The base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: The page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',73),_=e("strong",null,"Property:",-1),f={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},h=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),E=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),u=i('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    ',32);function v(g,p){const t=o("ExternalLinkIcon");return n(),d("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",f,[r("dev.dsf.server.auth.oidc.client.id"),l(t)])]),h,E]),u])}const S=s(a,[["render",v],["__file","configuration.html.vue"]]),I=JSON.parse('{"path":"/v1.3.2/maintain/fhir/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-fhir-client-certificate","link":"#dev-dsf-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-fhir-client-certificate-private-key","link":"#dev-dsf-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT","slug":"dev-dsf-fhir-client-timeout-connect","link":"#dev-dsf-fhir-client-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ","slug":"dev-dsf-fhir-client-timeout-read","link":"#dev-dsf-fhir-client-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_VERBOSE","slug":"dev-dsf-fhir-client-verbose","link":"#dev-dsf-fhir-client-verbose","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-fhir-db-liquibase-forceunlock","link":"#dev-dsf-fhir-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-fhir-db-liquibase-lockwaittime","link":"#dev-dsf-fhir-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","link":"#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-fhir-db-liquibase-username","link":"#dev-dsf-fhir-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_URL","slug":"dev-dsf-fhir-db-url","link":"#dev-dsf-fhir-db-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_GROUP","slug":"dev-dsf-fhir-db-user-group","link":"#dev-dsf-fhir-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","link":"#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP","slug":"dev-dsf-fhir-db-user-permanent-delete-group","link":"#dev-dsf-fhir-db-user-permanent-delete-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","link":"#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME","slug":"dev-dsf-fhir-db-user-permanent-delete-username","link":"#dev-dsf-fhir-db-user-permanent-delete-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_USERNAME","slug":"dev-dsf-fhir-db-user-username","link":"#dev-dsf-fhir-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_BASE_URL","slug":"dev-dsf-fhir-server-base-url","link":"#dev-dsf-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_INIT_BUNDLE","slug":"dev-dsf-fhir-server-init-bundle","link":"#dev-dsf-fhir-server-init-bundle","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE","slug":"dev-dsf-fhir-server-organization-identifier-value","link":"#dev-dsf-fhir-server-organization-identifier-value","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT","slug":"dev-dsf-fhir-server-organization-thumbprint","link":"#dev-dsf-fhir-server-organization-thumbprint","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_PAGE_COUNT","slug":"dev-dsf-fhir-server-page-count","link":"#dev-dsf-fhir-server-page-count","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ROLECONFIG","slug":"dev-dsf-fhir-server-roleconfig","link":"#dev-dsf-fhir-server-roleconfig","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE","slug":"dev-dsf-fhir-server-static-resource-cache","link":"#dev-dsf-fhir-server-static-resource-cache","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]}],"git":{"createdTime":1701710218000,"updatedTime":1701710218000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":4.71,"words":1412},"filePathRelative":"v1.3.2/maintain/fhir/configuration.md","localizedDate":"December 4, 2023","excerpt":"

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    \\n
      \\n
    • Property: dev.dsf.fhir.client.certificate
    • \\n
    • Required: Yes
    • \\n
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • \\n
    • Recommendation: Use docker secret file to configure
    • \\n
    • Example: /run/secrets/app_client_certificate.pem
    • \\n
    "}');export{S as comp,I as data}; diff --git a/assets/configuration.html-D3kNqaHh.js b/assets/configuration.html-D3kNqaHh.js new file mode 100644 index 000000000..a63742fb3 --- /dev/null +++ b/assets/configuration.html-D3kNqaHh.js @@ -0,0 +1 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as l,c as n,a as e,b as r,d,e as s}from"./app-kq9lCQfY.js";const a={},c=s('

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',15),_=e("strong",null,"Property:",-1),p={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},E=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),g=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),f=s('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: Address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: Password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: Username to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: Password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: Username to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_CURRENTUSER

    • Property: dev.dsf.bpe.debug.log.message.currentUser
    • Required: No
    • Description: To enable logging of the currently requesting user set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_DBSTATEMENT

    • Property: dev.dsf.bpe.debug.log.message.dbStatement
    • Required: No
    • Description: To enable logging of DB queries set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL

    • Property: dev.dsf.bpe.debug.log.message.variablesLocal
    • Required: No
    • Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST

    • Property: dev.dsf.bpe.debug.log.message.webserviceRequest
    • Required: No
    • Description: To enable logging of webservices requests set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: Base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.corePoolSize
    • Required: No
    • Description: Process engine job executor core pool size
    • Default: 4

    DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.maxPoolSize
    • Required: No
    • Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full
    • Default: 10

    DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE

    • Property: dev.dsf.bpe.process.engine.queueSize
    • Required: No
    • Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy
    • Default: 40

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List
    • Example: dsfdev_updateAllowList|1.0, another_process|x.y

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available
    • Example: old_process|x.y

    DEV_DSF_BPE_PROCESS_THREADS

    • Property: dev.dsf.bpe.process.threads
    • Required: No
    • Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores
    • Default: -1

    DEV_DSF_BPE_SERVER_BASE_URL

    • Property: dev.dsf.bpe.server.base.url
    • Required: No
    • Description: Base address of the BPE server, configure when exposing the web-ui
    • Example: https://foo.bar/bpe
    • Default: https

    DEV_DSF_BPE_SERVER_ROLECONFIG

    DEV_DSF_BPE_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.bpe.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_BPE_SERVER_UI_THEME

    • Property: dev.dsf.bpe.server.ui.theme
    • Required: No
    • Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    ',170);function u(v,h){const i=o("ExternalLinkIcon");return l(),n("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",p,[r("dev.dsf.server.auth.oidc.client.id"),d(i)])]),E,g]),f])}const R=t(a,[["render",u],["__file","configuration.html.vue"]]),S=JSON.parse('{"path":"/v1.5.1/maintain/bpe/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-bpe-db-liquibase-forceunlock","link":"#dev-dsf-bpe-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-bpe-db-liquibase-lockwaittime","link":"#dev-dsf-bpe-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","link":"#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-bpe-db-liquibase-username","link":"#dev-dsf-bpe-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_URL","slug":"dev-dsf-bpe-db-url","link":"#dev-dsf-bpe-db-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP","slug":"dev-dsf-bpe-db-user-camunda-group","link":"#dev-dsf-bpe-db-user-camunda-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","link":"#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME","slug":"dev-dsf-bpe-db-user-camunda-username","link":"#dev-dsf-bpe-db-user-camunda-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_GROUP","slug":"dev-dsf-bpe-db-user-group","link":"#dev-dsf-bpe-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","link":"#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_USERNAME","slug":"dev-dsf-bpe-db-user-username","link":"#dev-dsf-bpe-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_CURRENTUSER","slug":"dev-dsf-bpe-debug-log-message-currentuser","link":"#dev-dsf-bpe-debug-log-message-currentuser","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_DBSTATEMENT","slug":"dev-dsf-bpe-debug-log-message-dbstatement","link":"#dev-dsf-bpe-debug-log-message-dbstatement","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND","slug":"dev-dsf-bpe-debug-log-message-onactivityend","link":"#dev-dsf-bpe-debug-log-message-onactivityend","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART","slug":"dev-dsf-bpe-debug-log-message-onactivitystart","link":"#dev-dsf-bpe-debug-log-message-onactivitystart","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES","slug":"dev-dsf-bpe-debug-log-message-variables","link":"#dev-dsf-bpe-debug-log-message-variables","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL","slug":"dev-dsf-bpe-debug-log-message-variableslocal","link":"#dev-dsf-bpe-debug-log-message-variableslocal","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST","slug":"dev-dsf-bpe-debug-log-message-webservicerequest","link":"#dev-dsf-bpe-debug-log-message-webservicerequest","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-fhir-client-certificate","link":"#dev-dsf-bpe-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-fhir-client-certificate-private-key","link":"#dev-dsf-bpe-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-local-timeout-connect","link":"#dev-dsf-bpe-fhir-client-local-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-local-timeout-read","link":"#dev-dsf-bpe-fhir-client-local-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE","slug":"dev-dsf-bpe-fhir-client-local-verbose","link":"#dev-dsf-bpe-fhir-client-local-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-remote-timeout-connect","link":"#dev-dsf-bpe-fhir-client-remote-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-remote-timeout-read","link":"#dev-dsf-bpe-fhir-client-remote-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE","slug":"dev-dsf-bpe-fhir-client-remote-verbose","link":"#dev-dsf-bpe-fhir-client-remote-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-bpe-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_SERVER_BASE_URL","slug":"dev-dsf-bpe-fhir-server-base-url","link":"#dev-dsf-bpe-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX","slug":"dev-dsf-bpe-fhir-task-subscription-retry-max","link":"#dev-dsf-bpe-fhir-task-subscription-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP","slug":"dev-dsf-bpe-fhir-task-subscription-retry-sleep","link":"#dev-dsf-bpe-fhir-task-subscription-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-task-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-task-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-mail-client-certificate","link":"#dev-dsf-bpe-mail-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-mail-client-certificate-private-key","link":"#dev-dsf-bpe-mail-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_FROMADDRESS","slug":"dev-dsf-bpe-mail-fromaddress","link":"#dev-dsf-bpe-mail-fromaddress","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_HOST","slug":"dev-dsf-bpe-mail-host","link":"#dev-dsf-bpe-mail-host","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE","slug":"dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","link":"#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION","slug":"dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","link":"#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","link":"#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PORT","slug":"dev-dsf-bpe-mail-port","link":"#dev-dsf-bpe-mail-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES","slug":"dev-dsf-bpe-mail-replytoaddresses","link":"#dev-dsf-bpe-mail-replytoaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT","slug":"dev-dsf-bpe-mail-sendmailonerrorlogevent","link":"#dev-dsf-bpe-mail-sendmailonerrorlogevent","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP","slug":"dev-dsf-bpe-mail-sendtestmailonstartup","link":"#dev-dsf-bpe-mail-sendtestmailonstartup","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE","slug":"dev-dsf-bpe-mail-smime-p12keystore","link":"#dev-dsf-bpe-mail-smime-p12keystore","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","link":"#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSES","slug":"dev-dsf-bpe-mail-toaddresses","link":"#dev-dsf-bpe-mail-toaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSESCC","slug":"dev-dsf-bpe-mail-toaddressescc","link":"#dev-dsf-bpe-mail-toaddressescc","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-mail-trust-server-certificate-cas","link":"#dev-dsf-bpe-mail-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USERNAME","slug":"dev-dsf-bpe-mail-username","link":"#dev-dsf-bpe-mail-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USESMTPS","slug":"dev-dsf-bpe-mail-usesmtps","link":"#dev-dsf-bpe-mail-usesmtps","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE","slug":"dev-dsf-bpe-process-engine-corepoolsize","link":"#dev-dsf-bpe-process-engine-corepoolsize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE","slug":"dev-dsf-bpe-process-engine-maxpoolsize","link":"#dev-dsf-bpe-process-engine-maxpoolsize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE","slug":"dev-dsf-bpe-process-engine-queuesize","link":"#dev-dsf-bpe-process-engine-queuesize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_EXCLUDED","slug":"dev-dsf-bpe-process-excluded","link":"#dev-dsf-bpe-process-excluded","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX","slug":"dev-dsf-bpe-process-fhir-server-retry-max","link":"#dev-dsf-bpe-process-fhir-server-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP","slug":"dev-dsf-bpe-process-fhir-server-retry-sleep","link":"#dev-dsf-bpe-process-fhir-server-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY","slug":"dev-dsf-bpe-process-plugin-directroy","link":"#dev-dsf-bpe-process-plugin-directroy","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_RETIRED","slug":"dev-dsf-bpe-process-retired","link":"#dev-dsf-bpe-process-retired","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_THREADS","slug":"dev-dsf-bpe-process-threads","link":"#dev-dsf-bpe-process-threads","children":[]},{"level":3,"title":"DEV_DSF_BPE_SERVER_BASE_URL","slug":"dev-dsf-bpe-server-base-url","link":"#dev-dsf-bpe-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_SERVER_ROLECONFIG","slug":"dev-dsf-bpe-server-roleconfig","link":"#dev-dsf-bpe-server-roleconfig","children":[]},{"level":3,"title":"DEV_DSF_BPE_SERVER_STATIC_RESOURCE_CACHE","slug":"dev-dsf-bpe-server-static-resource-cache","link":"#dev-dsf-bpe-server-static-resource-cache","children":[]},{"level":3,"title":"DEV_DSF_BPE_SERVER_UI_THEME","slug":"dev-dsf-bpe-server-ui-theme","link":"#dev-dsf-bpe-server-ui-theme","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":8.88,"words":2664},"filePathRelative":"v1.5.1/maintain/bpe/configuration.md","localizedDate":"April 17, 2024","excerpt":"

    DEV_DSF_SERVER_API_HOST

    \\n
      \\n
    • Property: dev.dsf.server.api.host
    • \\n
    • Required: Yes
    • \\n
    • Description: API connector host, default in docker image: 0.0.0.0
    • \\n
    • Default: 127.0.0.1
    • \\n
    "}');export{R as comp,S as data}; diff --git a/assets/configuration.html-D3nBgzQc.js b/assets/configuration.html-D3nBgzQc.js new file mode 100644 index 000000000..7f8e42eb2 --- /dev/null +++ b/assets/configuration.html-D3nBgzQc.js @@ -0,0 +1 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as l,c as n,a as e,b as r,d,e as s}from"./app-kq9lCQfY.js";const a={},c=s('

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',15),_=e("strong",null,"Property:",-1),p={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},E=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),f=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),g=s('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL

    • Property: dev.dsf.bpe.debug.log.message.variablesLocal
    • Required: No
    • Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_server_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: The base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.corePoolSize
    • Required: No
    • Description: Process engine job executor core pool size
    • Default: 4

    DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.maxPoolSize
    • Required: No
    • Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full
    • Default: 10

    DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE

    • Property: dev.dsf.bpe.process.engine.queueSize
    • Required: No
    • Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy
    • Default: 40

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List
    • Example: dsfdev_updateAllowList|1.0, another_process|x.y

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available
    • Example: old_process|x.y

    DEV_DSF_BPE_PROCESS_THREADS

    • Property: dev.dsf.bpe.process.threads
    • Required: No
    • Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores
    • Default: -1

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    ',156);function u(v,h){const i=o("ExternalLinkIcon");return l(),n("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",p,[r("dev.dsf.server.auth.oidc.client.id"),d(i)])]),E,f]),g])}const S=t(a,[["render",u],["__file","configuration.html.vue"]]),b=JSON.parse('{"path":"/v1.2.0/maintain/bpe/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-bpe-db-liquibase-forceunlock","link":"#dev-dsf-bpe-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-bpe-db-liquibase-lockwaittime","link":"#dev-dsf-bpe-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","link":"#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-bpe-db-liquibase-username","link":"#dev-dsf-bpe-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_URL","slug":"dev-dsf-bpe-db-url","link":"#dev-dsf-bpe-db-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP","slug":"dev-dsf-bpe-db-user-camunda-group","link":"#dev-dsf-bpe-db-user-camunda-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","link":"#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME","slug":"dev-dsf-bpe-db-user-camunda-username","link":"#dev-dsf-bpe-db-user-camunda-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_GROUP","slug":"dev-dsf-bpe-db-user-group","link":"#dev-dsf-bpe-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","link":"#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_USERNAME","slug":"dev-dsf-bpe-db-user-username","link":"#dev-dsf-bpe-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND","slug":"dev-dsf-bpe-debug-log-message-onactivityend","link":"#dev-dsf-bpe-debug-log-message-onactivityend","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART","slug":"dev-dsf-bpe-debug-log-message-onactivitystart","link":"#dev-dsf-bpe-debug-log-message-onactivitystart","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES","slug":"dev-dsf-bpe-debug-log-message-variables","link":"#dev-dsf-bpe-debug-log-message-variables","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL","slug":"dev-dsf-bpe-debug-log-message-variableslocal","link":"#dev-dsf-bpe-debug-log-message-variableslocal","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-fhir-client-certificate","link":"#dev-dsf-bpe-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-fhir-client-certificate-private-key","link":"#dev-dsf-bpe-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-local-timeout-connect","link":"#dev-dsf-bpe-fhir-client-local-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-local-timeout-read","link":"#dev-dsf-bpe-fhir-client-local-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE","slug":"dev-dsf-bpe-fhir-client-local-verbose","link":"#dev-dsf-bpe-fhir-client-local-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-remote-timeout-connect","link":"#dev-dsf-bpe-fhir-client-remote-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-remote-timeout-read","link":"#dev-dsf-bpe-fhir-client-remote-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE","slug":"dev-dsf-bpe-fhir-client-remote-verbose","link":"#dev-dsf-bpe-fhir-client-remote-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-bpe-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_SERVER_BASE_URL","slug":"dev-dsf-bpe-fhir-server-base-url","link":"#dev-dsf-bpe-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX","slug":"dev-dsf-bpe-fhir-task-subscription-retry-max","link":"#dev-dsf-bpe-fhir-task-subscription-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP","slug":"dev-dsf-bpe-fhir-task-subscription-retry-sleep","link":"#dev-dsf-bpe-fhir-task-subscription-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-task-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-task-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-mail-client-certificate","link":"#dev-dsf-bpe-mail-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-mail-client-certificate-private-key","link":"#dev-dsf-bpe-mail-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_FROMADDRESS","slug":"dev-dsf-bpe-mail-fromaddress","link":"#dev-dsf-bpe-mail-fromaddress","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_HOST","slug":"dev-dsf-bpe-mail-host","link":"#dev-dsf-bpe-mail-host","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE","slug":"dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","link":"#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION","slug":"dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","link":"#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","link":"#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PORT","slug":"dev-dsf-bpe-mail-port","link":"#dev-dsf-bpe-mail-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES","slug":"dev-dsf-bpe-mail-replytoaddresses","link":"#dev-dsf-bpe-mail-replytoaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT","slug":"dev-dsf-bpe-mail-sendmailonerrorlogevent","link":"#dev-dsf-bpe-mail-sendmailonerrorlogevent","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP","slug":"dev-dsf-bpe-mail-sendtestmailonstartup","link":"#dev-dsf-bpe-mail-sendtestmailonstartup","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE","slug":"dev-dsf-bpe-mail-smime-p12keystore","link":"#dev-dsf-bpe-mail-smime-p12keystore","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","link":"#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSES","slug":"dev-dsf-bpe-mail-toaddresses","link":"#dev-dsf-bpe-mail-toaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSESCC","slug":"dev-dsf-bpe-mail-toaddressescc","link":"#dev-dsf-bpe-mail-toaddressescc","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-mail-trust-server-certificate-cas","link":"#dev-dsf-bpe-mail-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USERNAME","slug":"dev-dsf-bpe-mail-username","link":"#dev-dsf-bpe-mail-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USESMTPS","slug":"dev-dsf-bpe-mail-usesmtps","link":"#dev-dsf-bpe-mail-usesmtps","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE","slug":"dev-dsf-bpe-process-engine-corepoolsize","link":"#dev-dsf-bpe-process-engine-corepoolsize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE","slug":"dev-dsf-bpe-process-engine-maxpoolsize","link":"#dev-dsf-bpe-process-engine-maxpoolsize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE","slug":"dev-dsf-bpe-process-engine-queuesize","link":"#dev-dsf-bpe-process-engine-queuesize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_EXCLUDED","slug":"dev-dsf-bpe-process-excluded","link":"#dev-dsf-bpe-process-excluded","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX","slug":"dev-dsf-bpe-process-fhir-server-retry-max","link":"#dev-dsf-bpe-process-fhir-server-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP","slug":"dev-dsf-bpe-process-fhir-server-retry-sleep","link":"#dev-dsf-bpe-process-fhir-server-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY","slug":"dev-dsf-bpe-process-plugin-directroy","link":"#dev-dsf-bpe-process-plugin-directroy","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_RETIRED","slug":"dev-dsf-bpe-process-retired","link":"#dev-dsf-bpe-process-retired","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_THREADS","slug":"dev-dsf-bpe-process-threads","link":"#dev-dsf-bpe-process-threads","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]}],"git":{"createdTime":1694544770000,"updatedTime":1694545952000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":8.21,"words":2464},"filePathRelative":"v1.2.0/maintain/bpe/configuration.md","localizedDate":"September 12, 2023","excerpt":"

    DEV_DSF_SERVER_API_HOST

    \\n
      \\n
    • Property: dev.dsf.server.api.host
    • \\n
    • Required: Yes
    • \\n
    • Description: API connector host, default in docker image: 0.0.0.0
    • \\n
    • Default: 127.0.0.1
    • \\n
    "}');export{S as comp,b as data}; diff --git a/assets/configuration.html-DBRn85K3.js b/assets/configuration.html-DBRn85K3.js new file mode 100644 index 000000000..78d33b67f --- /dev/null +++ b/assets/configuration.html-DBRn85K3.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,e as r}from"./app-kq9lCQfY.js";const s={},o=r('

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF BPE server application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF BPE server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /bpe

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    ',26),n=[o];function l(a,c){return t(),i("div",null,n)}const h=e(s,[["render",l],["__file","configuration.html.vue"]]),g=JSON.parse('{"path":"/stable/maintain/bpe-reverse-proxy/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"APP_SERVER_IP","slug":"app-server-ip","link":"#app-server-ip","children":[]},{"level":3,"title":"HTTPS_SERVER_NAME_PORT","slug":"https-server-name-port","link":"#https-server-name-port","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_HTTP","slug":"proxy-pass-connection-timeout-http","link":"#proxy-pass-connection-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_WS","slug":"proxy-pass-connection-timeout-ws","link":"#proxy-pass-connection-timeout-ws","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_HTTP","slug":"proxy-pass-timeout-http","link":"#proxy-pass-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_WS","slug":"proxy-pass-timeout-ws","link":"#proxy-pass-timeout-ws","children":[]},{"level":3,"title":"SERVER_CONTEXT_PATH","slug":"server-context-path","link":"#server-context-path","children":[]},{"level":3,"title":"SSL_CA_CERTIFICATE_FILE","slug":"ssl-ca-certificate-file","link":"#ssl-ca-certificate-file","children":[]},{"level":3,"title":"SSL_CA_DN_REQUEST_FILE","slug":"ssl-ca-dn-request-file","link":"#ssl-ca-dn-request-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_CHAIN_FILE","slug":"ssl-certificate-chain-file","link":"#ssl-certificate-chain-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_FILE","slug":"ssl-certificate-file","link":"#ssl-certificate-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_KEY_FILE","slug":"ssl-certificate-key-file","link":"#ssl-certificate-key-file","children":[]},{"level":3,"title":"SSL_VERIFY_CLIENT","slug":"ssl-verify-client","link":"#ssl-verify-client","children":[]}],"git":{"createdTime":null,"updatedTime":null,"contributors":[]},"readingTime":{"minutes":1.35,"words":404},"filePathRelative":"stable/maintain/bpe-reverse-proxy/configuration.md","excerpt":"

    APP_SERVER_IP

    \\n
      \\n
    • Required: Yes
    • \\n
    • Description: Hostname or IP-Address of the DSF BPE server application container, the reverse proxy target
    • \\n
    • Example: app, 172.28.1.3
    • \\n
    \\n

    HTTPS_SERVER_NAME_PORT

    "}');export{h as comp,g as data}; diff --git a/assets/configuration.html-DLYIRIRZ.js b/assets/configuration.html-DLYIRIRZ.js new file mode 100644 index 000000000..ce494ba4c --- /dev/null +++ b/assets/configuration.html-DLYIRIRZ.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as n,c as d,a as e,b as r,d as l,e as i}from"./app-kq9lCQfY.js";const a={},c=i('

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_server_trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: The base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: The page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',73),_=e("strong",null,"Property:",-1),f={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},h=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),E=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),u=i('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    ',32);function v(g,p){const t=o("ExternalLinkIcon");return n(),d("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",f,[r("dev.dsf.server.auth.oidc.client.id"),l(t)])]),h,E]),u])}const S=s(a,[["render",v],["__file","configuration.html.vue"]]),I=JSON.parse('{"path":"/v1.2.0/maintain/fhir/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-fhir-client-certificate","link":"#dev-dsf-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-fhir-client-certificate-private-key","link":"#dev-dsf-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT","slug":"dev-dsf-fhir-client-timeout-connect","link":"#dev-dsf-fhir-client-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ","slug":"dev-dsf-fhir-client-timeout-read","link":"#dev-dsf-fhir-client-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_VERBOSE","slug":"dev-dsf-fhir-client-verbose","link":"#dev-dsf-fhir-client-verbose","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-fhir-db-liquibase-forceunlock","link":"#dev-dsf-fhir-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-fhir-db-liquibase-lockwaittime","link":"#dev-dsf-fhir-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","link":"#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-fhir-db-liquibase-username","link":"#dev-dsf-fhir-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_URL","slug":"dev-dsf-fhir-db-url","link":"#dev-dsf-fhir-db-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_GROUP","slug":"dev-dsf-fhir-db-user-group","link":"#dev-dsf-fhir-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","link":"#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP","slug":"dev-dsf-fhir-db-user-permanent-delete-group","link":"#dev-dsf-fhir-db-user-permanent-delete-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","link":"#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME","slug":"dev-dsf-fhir-db-user-permanent-delete-username","link":"#dev-dsf-fhir-db-user-permanent-delete-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_USERNAME","slug":"dev-dsf-fhir-db-user-username","link":"#dev-dsf-fhir-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_BASE_URL","slug":"dev-dsf-fhir-server-base-url","link":"#dev-dsf-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_INIT_BUNDLE","slug":"dev-dsf-fhir-server-init-bundle","link":"#dev-dsf-fhir-server-init-bundle","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE","slug":"dev-dsf-fhir-server-organization-identifier-value","link":"#dev-dsf-fhir-server-organization-identifier-value","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT","slug":"dev-dsf-fhir-server-organization-thumbprint","link":"#dev-dsf-fhir-server-organization-thumbprint","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_PAGE_COUNT","slug":"dev-dsf-fhir-server-page-count","link":"#dev-dsf-fhir-server-page-count","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ROLECONFIG","slug":"dev-dsf-fhir-server-roleconfig","link":"#dev-dsf-fhir-server-roleconfig","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE","slug":"dev-dsf-fhir-server-static-resource-cache","link":"#dev-dsf-fhir-server-static-resource-cache","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]}],"git":{"createdTime":1694544770000,"updatedTime":1694545952000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":4.7,"words":1411},"filePathRelative":"v1.2.0/maintain/fhir/configuration.md","localizedDate":"September 12, 2023","excerpt":"

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    \\n
      \\n
    • Property: dev.dsf.fhir.client.certificate
    • \\n
    • Required: Yes
    • \\n
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • \\n
    • Recommendation: Use docker secret file to configure
    • \\n
    • Example: /run/secrets/app_client_certificate.pem
    • \\n
    "}');export{S as comp,I as data}; diff --git a/assets/configuration.html-DRsDJDIQ.js b/assets/configuration.html-DRsDJDIQ.js new file mode 100644 index 000000000..265802377 --- /dev/null +++ b/assets/configuration.html-DRsDJDIQ.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as n,c as d,a as e,b as r,d as l,e as i}from"./app-kq9lCQfY.js";const a={},c=i('

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client _trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: The base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: The page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',73),_=e("strong",null,"Property:",-1),f={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},h=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),E=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),u=i('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    ',32);function v(g,p){const t=o("ExternalLinkIcon");return n(),d("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",f,[r("dev.dsf.server.auth.oidc.client.id"),l(t)])]),h,E]),u])}const S=s(a,[["render",v],["__file","configuration.html.vue"]]),I=JSON.parse('{"path":"/v1.3.1/maintain/fhir/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-fhir-client-certificate","link":"#dev-dsf-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-fhir-client-certificate-private-key","link":"#dev-dsf-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT","slug":"dev-dsf-fhir-client-timeout-connect","link":"#dev-dsf-fhir-client-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ","slug":"dev-dsf-fhir-client-timeout-read","link":"#dev-dsf-fhir-client-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_VERBOSE","slug":"dev-dsf-fhir-client-verbose","link":"#dev-dsf-fhir-client-verbose","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-fhir-db-liquibase-forceunlock","link":"#dev-dsf-fhir-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-fhir-db-liquibase-lockwaittime","link":"#dev-dsf-fhir-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","link":"#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-fhir-db-liquibase-username","link":"#dev-dsf-fhir-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_URL","slug":"dev-dsf-fhir-db-url","link":"#dev-dsf-fhir-db-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_GROUP","slug":"dev-dsf-fhir-db-user-group","link":"#dev-dsf-fhir-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","link":"#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP","slug":"dev-dsf-fhir-db-user-permanent-delete-group","link":"#dev-dsf-fhir-db-user-permanent-delete-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","link":"#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME","slug":"dev-dsf-fhir-db-user-permanent-delete-username","link":"#dev-dsf-fhir-db-user-permanent-delete-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_USERNAME","slug":"dev-dsf-fhir-db-user-username","link":"#dev-dsf-fhir-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_BASE_URL","slug":"dev-dsf-fhir-server-base-url","link":"#dev-dsf-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_INIT_BUNDLE","slug":"dev-dsf-fhir-server-init-bundle","link":"#dev-dsf-fhir-server-init-bundle","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE","slug":"dev-dsf-fhir-server-organization-identifier-value","link":"#dev-dsf-fhir-server-organization-identifier-value","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT","slug":"dev-dsf-fhir-server-organization-thumbprint","link":"#dev-dsf-fhir-server-organization-thumbprint","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_PAGE_COUNT","slug":"dev-dsf-fhir-server-page-count","link":"#dev-dsf-fhir-server-page-count","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ROLECONFIG","slug":"dev-dsf-fhir-server-roleconfig","link":"#dev-dsf-fhir-server-roleconfig","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE","slug":"dev-dsf-fhir-server-static-resource-cache","link":"#dev-dsf-fhir-server-static-resource-cache","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]}],"git":{"createdTime":1698748420000,"updatedTime":1698748420000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":4.71,"words":1412},"filePathRelative":"v1.3.1/maintain/fhir/configuration.md","localizedDate":"October 31, 2023","excerpt":"

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    \\n
      \\n
    • Property: dev.dsf.fhir.client.certificate
    • \\n
    • Required: Yes
    • \\n
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • \\n
    • Recommendation: Use docker secret file to configure
    • \\n
    • Example: /run/secrets/app_client_certificate.pem
    • \\n
    "}');export{S as comp,I as data}; diff --git a/assets/configuration.html-DTrhBlyo.js b/assets/configuration.html-DTrhBlyo.js new file mode 100644 index 000000000..a8cb457f3 --- /dev/null +++ b/assets/configuration.html-DTrhBlyo.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,e as r}from"./app-kq9lCQfY.js";const s={},o=r('

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF BPE server application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF BPE server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /bpe

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    ',26),n=[o];function l(c,a){return t(),i("div",null,n)}const h=e(s,[["render",l],["__file","configuration.html.vue"]]),g=JSON.parse('{"path":"/v1.5.1/maintain/bpe-reverse-proxy/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"APP_SERVER_IP","slug":"app-server-ip","link":"#app-server-ip","children":[]},{"level":3,"title":"HTTPS_SERVER_NAME_PORT","slug":"https-server-name-port","link":"#https-server-name-port","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_HTTP","slug":"proxy-pass-connection-timeout-http","link":"#proxy-pass-connection-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_WS","slug":"proxy-pass-connection-timeout-ws","link":"#proxy-pass-connection-timeout-ws","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_HTTP","slug":"proxy-pass-timeout-http","link":"#proxy-pass-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_WS","slug":"proxy-pass-timeout-ws","link":"#proxy-pass-timeout-ws","children":[]},{"level":3,"title":"SERVER_CONTEXT_PATH","slug":"server-context-path","link":"#server-context-path","children":[]},{"level":3,"title":"SSL_CA_CERTIFICATE_FILE","slug":"ssl-ca-certificate-file","link":"#ssl-ca-certificate-file","children":[]},{"level":3,"title":"SSL_CA_DN_REQUEST_FILE","slug":"ssl-ca-dn-request-file","link":"#ssl-ca-dn-request-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_CHAIN_FILE","slug":"ssl-certificate-chain-file","link":"#ssl-certificate-chain-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_FILE","slug":"ssl-certificate-file","link":"#ssl-certificate-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_KEY_FILE","slug":"ssl-certificate-key-file","link":"#ssl-certificate-key-file","children":[]},{"level":3,"title":"SSL_VERIFY_CLIENT","slug":"ssl-verify-client","link":"#ssl-verify-client","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.35,"words":404},"filePathRelative":"v1.5.1/maintain/bpe-reverse-proxy/configuration.md","localizedDate":"April 17, 2024","excerpt":"

    APP_SERVER_IP

    \\n
      \\n
    • Required: Yes
    • \\n
    • Description: Hostname or IP-Address of the DSF BPE server application container, the reverse proxy target
    • \\n
    • Example: app, 172.28.1.3
    • \\n
    \\n

    HTTPS_SERVER_NAME_PORT

    "}');export{h as comp,g as data}; diff --git a/assets/configuration.html-DWRgeTav.js b/assets/configuration.html-DWRgeTav.js new file mode 100644 index 000000000..9b0c03017 --- /dev/null +++ b/assets/configuration.html-DWRgeTav.js @@ -0,0 +1 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as l,c as n,a as e,b as r,d,e as s}from"./app-kq9lCQfY.js";const a={},c=s('

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',15),_=e("strong",null,"Property:",-1),p={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},E=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),f=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),g=s('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL

    • Property: dev.dsf.bpe.debug.log.message.variablesLocal
    • Required: No
    • Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: The base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.corePoolSize
    • Required: No
    • Description: Process engine job executor core pool size
    • Default: 4

    DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.maxPoolSize
    • Required: No
    • Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full
    • Default: 10

    DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE

    • Property: dev.dsf.bpe.process.engine.queueSize
    • Required: No
    • Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy
    • Default: 40

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List
    • Example: dsfdev_updateAllowList|1.0, another_process|x.y

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available
    • Example: old_process|x.y

    DEV_DSF_BPE_PROCESS_THREADS

    • Property: dev.dsf.bpe.process.threads
    • Required: No
    • Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores
    • Default: -1

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    ',156);function u(v,h){const i=o("ExternalLinkIcon");return l(),n("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",p,[r("dev.dsf.server.auth.oidc.client.id"),d(i)])]),E,f]),g])}const S=t(a,[["render",u],["__file","configuration.html.vue"]]),b=JSON.parse('{"path":"/v1.3.2/maintain/bpe/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-bpe-db-liquibase-forceunlock","link":"#dev-dsf-bpe-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-bpe-db-liquibase-lockwaittime","link":"#dev-dsf-bpe-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","link":"#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-bpe-db-liquibase-username","link":"#dev-dsf-bpe-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_URL","slug":"dev-dsf-bpe-db-url","link":"#dev-dsf-bpe-db-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP","slug":"dev-dsf-bpe-db-user-camunda-group","link":"#dev-dsf-bpe-db-user-camunda-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","link":"#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME","slug":"dev-dsf-bpe-db-user-camunda-username","link":"#dev-dsf-bpe-db-user-camunda-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_GROUP","slug":"dev-dsf-bpe-db-user-group","link":"#dev-dsf-bpe-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","link":"#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_USERNAME","slug":"dev-dsf-bpe-db-user-username","link":"#dev-dsf-bpe-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND","slug":"dev-dsf-bpe-debug-log-message-onactivityend","link":"#dev-dsf-bpe-debug-log-message-onactivityend","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART","slug":"dev-dsf-bpe-debug-log-message-onactivitystart","link":"#dev-dsf-bpe-debug-log-message-onactivitystart","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES","slug":"dev-dsf-bpe-debug-log-message-variables","link":"#dev-dsf-bpe-debug-log-message-variables","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL","slug":"dev-dsf-bpe-debug-log-message-variableslocal","link":"#dev-dsf-bpe-debug-log-message-variableslocal","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-fhir-client-certificate","link":"#dev-dsf-bpe-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-fhir-client-certificate-private-key","link":"#dev-dsf-bpe-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-local-timeout-connect","link":"#dev-dsf-bpe-fhir-client-local-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-local-timeout-read","link":"#dev-dsf-bpe-fhir-client-local-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE","slug":"dev-dsf-bpe-fhir-client-local-verbose","link":"#dev-dsf-bpe-fhir-client-local-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-remote-timeout-connect","link":"#dev-dsf-bpe-fhir-client-remote-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-remote-timeout-read","link":"#dev-dsf-bpe-fhir-client-remote-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE","slug":"dev-dsf-bpe-fhir-client-remote-verbose","link":"#dev-dsf-bpe-fhir-client-remote-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-bpe-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_SERVER_BASE_URL","slug":"dev-dsf-bpe-fhir-server-base-url","link":"#dev-dsf-bpe-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX","slug":"dev-dsf-bpe-fhir-task-subscription-retry-max","link":"#dev-dsf-bpe-fhir-task-subscription-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP","slug":"dev-dsf-bpe-fhir-task-subscription-retry-sleep","link":"#dev-dsf-bpe-fhir-task-subscription-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-task-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-task-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-mail-client-certificate","link":"#dev-dsf-bpe-mail-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-mail-client-certificate-private-key","link":"#dev-dsf-bpe-mail-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_FROMADDRESS","slug":"dev-dsf-bpe-mail-fromaddress","link":"#dev-dsf-bpe-mail-fromaddress","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_HOST","slug":"dev-dsf-bpe-mail-host","link":"#dev-dsf-bpe-mail-host","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE","slug":"dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","link":"#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION","slug":"dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","link":"#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","link":"#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PORT","slug":"dev-dsf-bpe-mail-port","link":"#dev-dsf-bpe-mail-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES","slug":"dev-dsf-bpe-mail-replytoaddresses","link":"#dev-dsf-bpe-mail-replytoaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT","slug":"dev-dsf-bpe-mail-sendmailonerrorlogevent","link":"#dev-dsf-bpe-mail-sendmailonerrorlogevent","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP","slug":"dev-dsf-bpe-mail-sendtestmailonstartup","link":"#dev-dsf-bpe-mail-sendtestmailonstartup","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE","slug":"dev-dsf-bpe-mail-smime-p12keystore","link":"#dev-dsf-bpe-mail-smime-p12keystore","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","link":"#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSES","slug":"dev-dsf-bpe-mail-toaddresses","link":"#dev-dsf-bpe-mail-toaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSESCC","slug":"dev-dsf-bpe-mail-toaddressescc","link":"#dev-dsf-bpe-mail-toaddressescc","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-mail-trust-server-certificate-cas","link":"#dev-dsf-bpe-mail-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USERNAME","slug":"dev-dsf-bpe-mail-username","link":"#dev-dsf-bpe-mail-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USESMTPS","slug":"dev-dsf-bpe-mail-usesmtps","link":"#dev-dsf-bpe-mail-usesmtps","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE","slug":"dev-dsf-bpe-process-engine-corepoolsize","link":"#dev-dsf-bpe-process-engine-corepoolsize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE","slug":"dev-dsf-bpe-process-engine-maxpoolsize","link":"#dev-dsf-bpe-process-engine-maxpoolsize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE","slug":"dev-dsf-bpe-process-engine-queuesize","link":"#dev-dsf-bpe-process-engine-queuesize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_EXCLUDED","slug":"dev-dsf-bpe-process-excluded","link":"#dev-dsf-bpe-process-excluded","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX","slug":"dev-dsf-bpe-process-fhir-server-retry-max","link":"#dev-dsf-bpe-process-fhir-server-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP","slug":"dev-dsf-bpe-process-fhir-server-retry-sleep","link":"#dev-dsf-bpe-process-fhir-server-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY","slug":"dev-dsf-bpe-process-plugin-directroy","link":"#dev-dsf-bpe-process-plugin-directroy","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_RETIRED","slug":"dev-dsf-bpe-process-retired","link":"#dev-dsf-bpe-process-retired","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_THREADS","slug":"dev-dsf-bpe-process-threads","link":"#dev-dsf-bpe-process-threads","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]}],"git":{"createdTime":1701710218000,"updatedTime":1701710218000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":8.21,"words":2464},"filePathRelative":"v1.3.2/maintain/bpe/configuration.md","localizedDate":"December 4, 2023","excerpt":"

    DEV_DSF_SERVER_API_HOST

    \\n
      \\n
    • Property: dev.dsf.server.api.host
    • \\n
    • Required: Yes
    • \\n
    • Description: API connector host, default in docker image: 0.0.0.0
    • \\n
    • Default: 127.0.0.1
    • \\n
    "}');export{S as comp,b as data}; diff --git a/assets/configuration.html-DhKNa3Mm.js b/assets/configuration.html-DhKNa3Mm.js new file mode 100644 index 000000000..0fc516f11 --- /dev/null +++ b/assets/configuration.html-DhKNa3Mm.js @@ -0,0 +1 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as l,c as n,a as e,b as r,d,e as s}from"./app-kq9lCQfY.js";const a={},c=s('

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',15),_=e("strong",null,"Property:",-1),p={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},E=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),f=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),g=s('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable loging bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_server_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: The base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.bpe.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    ',148);function u(v,h){const i=o("ExternalLinkIcon");return l(),n("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",p,[r("dev.dsf.server.auth.oidc.client.id"),d(i)])]),E,f]),g])}const S=t(a,[["render",u],["__file","configuration.html.vue"]]),b=JSON.parse('{"path":"/v1.1.0/maintain/bpe/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-bpe-db-liquibase-forceunlock","link":"#dev-dsf-bpe-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-bpe-db-liquibase-lockwaittime","link":"#dev-dsf-bpe-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","link":"#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-bpe-db-liquibase-username","link":"#dev-dsf-bpe-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_URL","slug":"dev-dsf-bpe-db-url","link":"#dev-dsf-bpe-db-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP","slug":"dev-dsf-bpe-db-user-camunda-group","link":"#dev-dsf-bpe-db-user-camunda-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","link":"#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME","slug":"dev-dsf-bpe-db-user-camunda-username","link":"#dev-dsf-bpe-db-user-camunda-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_GROUP","slug":"dev-dsf-bpe-db-user-group","link":"#dev-dsf-bpe-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","link":"#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_USERNAME","slug":"dev-dsf-bpe-db-user-username","link":"#dev-dsf-bpe-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND","slug":"dev-dsf-bpe-debug-log-message-onactivityend","link":"#dev-dsf-bpe-debug-log-message-onactivityend","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART","slug":"dev-dsf-bpe-debug-log-message-onactivitystart","link":"#dev-dsf-bpe-debug-log-message-onactivitystart","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES","slug":"dev-dsf-bpe-debug-log-message-variables","link":"#dev-dsf-bpe-debug-log-message-variables","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-fhir-client-certificate","link":"#dev-dsf-bpe-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-fhir-client-certificate-private-key","link":"#dev-dsf-bpe-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-local-timeout-connect","link":"#dev-dsf-bpe-fhir-client-local-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-local-timeout-read","link":"#dev-dsf-bpe-fhir-client-local-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE","slug":"dev-dsf-bpe-fhir-client-local-verbose","link":"#dev-dsf-bpe-fhir-client-local-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-remote-timeout-connect","link":"#dev-dsf-bpe-fhir-client-remote-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-remote-timeout-read","link":"#dev-dsf-bpe-fhir-client-remote-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE","slug":"dev-dsf-bpe-fhir-client-remote-verbose","link":"#dev-dsf-bpe-fhir-client-remote-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-bpe-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_SERVER_BASE_URL","slug":"dev-dsf-bpe-fhir-server-base-url","link":"#dev-dsf-bpe-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE","slug":"dev-dsf-bpe-fhir-server-organization-identifier-value","link":"#dev-dsf-bpe-fhir-server-organization-identifier-value","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX","slug":"dev-dsf-bpe-fhir-task-subscription-retry-max","link":"#dev-dsf-bpe-fhir-task-subscription-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP","slug":"dev-dsf-bpe-fhir-task-subscription-retry-sleep","link":"#dev-dsf-bpe-fhir-task-subscription-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-task-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-task-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-mail-client-certificate","link":"#dev-dsf-bpe-mail-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-mail-client-certificate-private-key","link":"#dev-dsf-bpe-mail-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_FROMADDRESS","slug":"dev-dsf-bpe-mail-fromaddress","link":"#dev-dsf-bpe-mail-fromaddress","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_HOST","slug":"dev-dsf-bpe-mail-host","link":"#dev-dsf-bpe-mail-host","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE","slug":"dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","link":"#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION","slug":"dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","link":"#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","link":"#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PORT","slug":"dev-dsf-bpe-mail-port","link":"#dev-dsf-bpe-mail-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES","slug":"dev-dsf-bpe-mail-replytoaddresses","link":"#dev-dsf-bpe-mail-replytoaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT","slug":"dev-dsf-bpe-mail-sendmailonerrorlogevent","link":"#dev-dsf-bpe-mail-sendmailonerrorlogevent","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP","slug":"dev-dsf-bpe-mail-sendtestmailonstartup","link":"#dev-dsf-bpe-mail-sendtestmailonstartup","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE","slug":"dev-dsf-bpe-mail-smime-p12keystore","link":"#dev-dsf-bpe-mail-smime-p12keystore","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","link":"#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSES","slug":"dev-dsf-bpe-mail-toaddresses","link":"#dev-dsf-bpe-mail-toaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSESCC","slug":"dev-dsf-bpe-mail-toaddressescc","link":"#dev-dsf-bpe-mail-toaddressescc","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-mail-trust-server-certificate-cas","link":"#dev-dsf-bpe-mail-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USERNAME","slug":"dev-dsf-bpe-mail-username","link":"#dev-dsf-bpe-mail-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USESMTPS","slug":"dev-dsf-bpe-mail-usesmtps","link":"#dev-dsf-bpe-mail-usesmtps","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_EXCLUDED","slug":"dev-dsf-bpe-process-excluded","link":"#dev-dsf-bpe-process-excluded","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX","slug":"dev-dsf-bpe-process-fhir-server-retry-max","link":"#dev-dsf-bpe-process-fhir-server-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP","slug":"dev-dsf-bpe-process-fhir-server-retry-sleep","link":"#dev-dsf-bpe-process-fhir-server-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY","slug":"dev-dsf-bpe-process-plugin-directroy","link":"#dev-dsf-bpe-process-plugin-directroy","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_RETIRED","slug":"dev-dsf-bpe-process-retired","link":"#dev-dsf-bpe-process-retired","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]}],"git":{"createdTime":1693251017000,"updatedTime":1693251017000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":7.77,"words":2331},"filePathRelative":"v1.1.0/maintain/bpe/configuration.md","localizedDate":"August 28, 2023","excerpt":"

    DEV_DSF_SERVER_API_HOST

    \\n
      \\n
    • Property: dev.dsf.server.api.host
    • \\n
    • Required: Yes
    • \\n
    • Description: API connector host, default in docker image: 0.0.0.0
    • \\n
    • Default: 127.0.0.1
    • \\n
    "}');export{S as comp,b as data}; diff --git a/assets/configuration.html-Djb_ityZ.js b/assets/configuration.html-Djb_ityZ.js new file mode 100644 index 000000000..20a643c35 --- /dev/null +++ b/assets/configuration.html-Djb_ityZ.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,e as r}from"./app-kq9lCQfY.js";const s={},o=r('

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF BPE server application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF BPE server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /bpe

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    ',26),n=[o];function l(a,c){return t(),i("div",null,n)}const h=e(s,[["render",l],["__file","configuration.html.vue"]]),g=JSON.parse('{"path":"/v1.5.0/maintain/bpe-reverse-proxy/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"APP_SERVER_IP","slug":"app-server-ip","link":"#app-server-ip","children":[]},{"level":3,"title":"HTTPS_SERVER_NAME_PORT","slug":"https-server-name-port","link":"#https-server-name-port","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_HTTP","slug":"proxy-pass-connection-timeout-http","link":"#proxy-pass-connection-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_WS","slug":"proxy-pass-connection-timeout-ws","link":"#proxy-pass-connection-timeout-ws","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_HTTP","slug":"proxy-pass-timeout-http","link":"#proxy-pass-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_WS","slug":"proxy-pass-timeout-ws","link":"#proxy-pass-timeout-ws","children":[]},{"level":3,"title":"SERVER_CONTEXT_PATH","slug":"server-context-path","link":"#server-context-path","children":[]},{"level":3,"title":"SSL_CA_CERTIFICATE_FILE","slug":"ssl-ca-certificate-file","link":"#ssl-ca-certificate-file","children":[]},{"level":3,"title":"SSL_CA_DN_REQUEST_FILE","slug":"ssl-ca-dn-request-file","link":"#ssl-ca-dn-request-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_CHAIN_FILE","slug":"ssl-certificate-chain-file","link":"#ssl-certificate-chain-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_FILE","slug":"ssl-certificate-file","link":"#ssl-certificate-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_KEY_FILE","slug":"ssl-certificate-key-file","link":"#ssl-certificate-key-file","children":[]},{"level":3,"title":"SSL_VERIFY_CLIENT","slug":"ssl-verify-client","link":"#ssl-verify-client","children":[]}],"git":{"createdTime":1708517817000,"updatedTime":1708517817000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.35,"words":404},"filePathRelative":"v1.5.0/maintain/bpe-reverse-proxy/configuration.md","localizedDate":"February 21, 2024","excerpt":"

    APP_SERVER_IP

    \\n
      \\n
    • Required: Yes
    • \\n
    • Description: Hostname or IP-Address of the DSF BPE server application container, the reverse proxy target
    • \\n
    • Example: app, 172.28.1.3
    • \\n
    \\n

    HTTPS_SERVER_NAME_PORT

    "}');export{h as comp,g as data}; diff --git a/assets/configuration.html-DkcRMl9h.js b/assets/configuration.html-DkcRMl9h.js new file mode 100644 index 000000000..83cca2164 --- /dev/null +++ b/assets/configuration.html-DkcRMl9h.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,e as r}from"./app-kq9lCQfY.js";const s={},o=r('

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR server application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /fhir

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    ',26),n=[o];function l(c,a){return t(),i("div",null,n)}const h=e(s,[["render",l],["__file","configuration.html.vue"]]),f=JSON.parse('{"path":"/v1.5.1/maintain/fhir-reverse-proxy/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"APP_SERVER_IP","slug":"app-server-ip","link":"#app-server-ip","children":[]},{"level":3,"title":"HTTPS_SERVER_NAME_PORT","slug":"https-server-name-port","link":"#https-server-name-port","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_HTTP","slug":"proxy-pass-connection-timeout-http","link":"#proxy-pass-connection-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_WS","slug":"proxy-pass-connection-timeout-ws","link":"#proxy-pass-connection-timeout-ws","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_HTTP","slug":"proxy-pass-timeout-http","link":"#proxy-pass-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_WS","slug":"proxy-pass-timeout-ws","link":"#proxy-pass-timeout-ws","children":[]},{"level":3,"title":"SERVER_CONTEXT_PATH","slug":"server-context-path","link":"#server-context-path","children":[]},{"level":3,"title":"SSL_CA_CERTIFICATE_FILE","slug":"ssl-ca-certificate-file","link":"#ssl-ca-certificate-file","children":[]},{"level":3,"title":"SSL_CA_DN_REQUEST_FILE","slug":"ssl-ca-dn-request-file","link":"#ssl-ca-dn-request-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_CHAIN_FILE","slug":"ssl-certificate-chain-file","link":"#ssl-certificate-chain-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_FILE","slug":"ssl-certificate-file","link":"#ssl-certificate-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_KEY_FILE","slug":"ssl-certificate-key-file","link":"#ssl-certificate-key-file","children":[]},{"level":3,"title":"SSL_VERIFY_CLIENT","slug":"ssl-verify-client","link":"#ssl-verify-client","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.35,"words":404},"filePathRelative":"v1.5.1/maintain/fhir-reverse-proxy/configuration.md","localizedDate":"April 17, 2024","excerpt":"

    APP_SERVER_IP

    \\n
      \\n
    • Required: Yes
    • \\n
    • Description: Hostname or IP-Address of the DSF FHIR server application container, the reverse proxy target
    • \\n
    • Example: app, 172.28.1.3
    • \\n
    \\n

    HTTPS_SERVER_NAME_PORT

    "}');export{h as comp,f as data}; diff --git a/assets/configuration.html-DuKh6Fgm.js b/assets/configuration.html-DuKh6Fgm.js new file mode 100644 index 000000000..c1bd76fde --- /dev/null +++ b/assets/configuration.html-DuKh6Fgm.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,e as r}from"./app-kq9lCQfY.js";const s={},o=r('

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /fhir

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    ',26),n=[o];function l(a,c){return t(),i("div",null,n)}const h=e(s,[["render",l],["__file","configuration.html.vue"]]),f=JSON.parse('{"path":"/v1.3.1/maintain/fhir-reverse-proxy/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"APP_SERVER_IP","slug":"app-server-ip","link":"#app-server-ip","children":[]},{"level":3,"title":"HTTPS_SERVER_NAME_PORT","slug":"https-server-name-port","link":"#https-server-name-port","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_HTTP","slug":"proxy-pass-connection-timeout-http","link":"#proxy-pass-connection-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_WS","slug":"proxy-pass-connection-timeout-ws","link":"#proxy-pass-connection-timeout-ws","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_HTTP","slug":"proxy-pass-timeout-http","link":"#proxy-pass-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_WS","slug":"proxy-pass-timeout-ws","link":"#proxy-pass-timeout-ws","children":[]},{"level":3,"title":"SERVER_CONTEXT_PATH","slug":"server-context-path","link":"#server-context-path","children":[]},{"level":3,"title":"SSL_CA_CERTIFICATE_FILE","slug":"ssl-ca-certificate-file","link":"#ssl-ca-certificate-file","children":[]},{"level":3,"title":"SSL_CA_DN_REQUEST_FILE","slug":"ssl-ca-dn-request-file","link":"#ssl-ca-dn-request-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_CHAIN_FILE","slug":"ssl-certificate-chain-file","link":"#ssl-certificate-chain-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_FILE","slug":"ssl-certificate-file","link":"#ssl-certificate-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_KEY_FILE","slug":"ssl-certificate-key-file","link":"#ssl-certificate-key-file","children":[]},{"level":3,"title":"SSL_VERIFY_CLIENT","slug":"ssl-verify-client","link":"#ssl-verify-client","children":[]}],"git":{"createdTime":1698748420000,"updatedTime":1699809451000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.35,"words":404},"filePathRelative":"v1.3.1/maintain/fhir-reverse-proxy/configuration.md","localizedDate":"October 31, 2023","excerpt":"

    APP_SERVER_IP

    \\n
      \\n
    • Required: Yes
    • \\n
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • \\n
    • Example: app, 172.28.1.3
    • \\n
    \\n

    HTTPS_SERVER_NAME_PORT

    "}');export{h as comp,f as data}; diff --git a/assets/configuration.html-JHRlAgB7.js b/assets/configuration.html-JHRlAgB7.js new file mode 100644 index 000000000..338b1cfcb --- /dev/null +++ b/assets/configuration.html-JHRlAgB7.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,e as r}from"./app-kq9lCQfY.js";const s={},o=r('

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /fhir

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    ',26),n=[o];function l(c,a){return t(),i("div",null,n)}const h=e(s,[["render",l],["__file","configuration.html.vue"]]),f=JSON.parse('{"path":"/v1.3.2/maintain/fhir-reverse-proxy/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"APP_SERVER_IP","slug":"app-server-ip","link":"#app-server-ip","children":[]},{"level":3,"title":"HTTPS_SERVER_NAME_PORT","slug":"https-server-name-port","link":"#https-server-name-port","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_HTTP","slug":"proxy-pass-connection-timeout-http","link":"#proxy-pass-connection-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_WS","slug":"proxy-pass-connection-timeout-ws","link":"#proxy-pass-connection-timeout-ws","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_HTTP","slug":"proxy-pass-timeout-http","link":"#proxy-pass-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_WS","slug":"proxy-pass-timeout-ws","link":"#proxy-pass-timeout-ws","children":[]},{"level":3,"title":"SERVER_CONTEXT_PATH","slug":"server-context-path","link":"#server-context-path","children":[]},{"level":3,"title":"SSL_CA_CERTIFICATE_FILE","slug":"ssl-ca-certificate-file","link":"#ssl-ca-certificate-file","children":[]},{"level":3,"title":"SSL_CA_DN_REQUEST_FILE","slug":"ssl-ca-dn-request-file","link":"#ssl-ca-dn-request-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_CHAIN_FILE","slug":"ssl-certificate-chain-file","link":"#ssl-certificate-chain-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_FILE","slug":"ssl-certificate-file","link":"#ssl-certificate-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_KEY_FILE","slug":"ssl-certificate-key-file","link":"#ssl-certificate-key-file","children":[]},{"level":3,"title":"SSL_VERIFY_CLIENT","slug":"ssl-verify-client","link":"#ssl-verify-client","children":[]}],"git":{"createdTime":1701710218000,"updatedTime":1701710218000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.35,"words":404},"filePathRelative":"v1.3.2/maintain/fhir-reverse-proxy/configuration.md","localizedDate":"December 4, 2023","excerpt":"

    APP_SERVER_IP

    \\n
      \\n
    • Required: Yes
    • \\n
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • \\n
    • Example: app, 172.28.1.3
    • \\n
    \\n

    HTTPS_SERVER_NAME_PORT

    "}');export{h as comp,f as data}; diff --git a/assets/configuration.html-JO85txHz.js b/assets/configuration.html-JO85txHz.js new file mode 100644 index 000000000..5686379b4 --- /dev/null +++ b/assets/configuration.html-JO85txHz.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as n,c as d,a as e,b as r,d as l,e as i}from"./app-kq9lCQfY.js";const a={},c=i('

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client _trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: Address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: Password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: Password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: Username to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: Username to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_CURRENTUSER

    • Property: dev.dsf.fhir.debug.log.message.currentUser
    • Required: No
    • Description: To enable logging of the currently requesting user set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_DBSTATEMENT

    • Property: dev.dsf.fhir.debug.log.message.dbStatement
    • Required: No
    • Description: To enable logging of DB queries set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST

    • Property: dev.dsf.fhir.debug.log.message.webserviceRequest
    • Required: No
    • Description: To enable logging of webservices requests set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: Base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: Fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: Local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: Page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_FHIR_SERVER_UI_THEME

    • Property: dev.dsf.fhir.server.ui.theme
    • Required: No
    • Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',81),_=e("strong",null,"Property:",-1),f={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},h=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),E=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),u=i('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    ',32);function g(v,p){const t=o("ExternalLinkIcon");return n(),d("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",f,[r("dev.dsf.server.auth.oidc.client.id"),l(t)])]),h,E]),u])}const S=s(a,[["render",g],["__file","configuration.html.vue"]]),I=JSON.parse('{"path":"/stable/maintain/fhir/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-fhir-client-certificate","link":"#dev-dsf-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-fhir-client-certificate-private-key","link":"#dev-dsf-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT","slug":"dev-dsf-fhir-client-timeout-connect","link":"#dev-dsf-fhir-client-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ","slug":"dev-dsf-fhir-client-timeout-read","link":"#dev-dsf-fhir-client-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_VERBOSE","slug":"dev-dsf-fhir-client-verbose","link":"#dev-dsf-fhir-client-verbose","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-fhir-db-liquibase-forceunlock","link":"#dev-dsf-fhir-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-fhir-db-liquibase-lockwaittime","link":"#dev-dsf-fhir-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","link":"#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-fhir-db-liquibase-username","link":"#dev-dsf-fhir-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_URL","slug":"dev-dsf-fhir-db-url","link":"#dev-dsf-fhir-db-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_GROUP","slug":"dev-dsf-fhir-db-user-group","link":"#dev-dsf-fhir-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","link":"#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP","slug":"dev-dsf-fhir-db-user-permanent-delete-group","link":"#dev-dsf-fhir-db-user-permanent-delete-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","link":"#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME","slug":"dev-dsf-fhir-db-user-permanent-delete-username","link":"#dev-dsf-fhir-db-user-permanent-delete-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_USERNAME","slug":"dev-dsf-fhir-db-user-username","link":"#dev-dsf-fhir-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_CURRENTUSER","slug":"dev-dsf-fhir-debug-log-message-currentuser","link":"#dev-dsf-fhir-debug-log-message-currentuser","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_DBSTATEMENT","slug":"dev-dsf-fhir-debug-log-message-dbstatement","link":"#dev-dsf-fhir-debug-log-message-dbstatement","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST","slug":"dev-dsf-fhir-debug-log-message-webservicerequest","link":"#dev-dsf-fhir-debug-log-message-webservicerequest","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_BASE_URL","slug":"dev-dsf-fhir-server-base-url","link":"#dev-dsf-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_INIT_BUNDLE","slug":"dev-dsf-fhir-server-init-bundle","link":"#dev-dsf-fhir-server-init-bundle","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE","slug":"dev-dsf-fhir-server-organization-identifier-value","link":"#dev-dsf-fhir-server-organization-identifier-value","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT","slug":"dev-dsf-fhir-server-organization-thumbprint","link":"#dev-dsf-fhir-server-organization-thumbprint","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_PAGE_COUNT","slug":"dev-dsf-fhir-server-page-count","link":"#dev-dsf-fhir-server-page-count","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ROLECONFIG","slug":"dev-dsf-fhir-server-roleconfig","link":"#dev-dsf-fhir-server-roleconfig","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE","slug":"dev-dsf-fhir-server-static-resource-cache","link":"#dev-dsf-fhir-server-static-resource-cache","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_UI_THEME","slug":"dev-dsf-fhir-server-ui-theme","link":"#dev-dsf-fhir-server-ui-theme","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]}],"git":{"createdTime":null,"updatedTime":null,"contributors":[]},"readingTime":{"minutes":5.15,"words":1546},"filePathRelative":"stable/maintain/fhir/configuration.md","excerpt":"

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    \\n
      \\n
    • Property: dev.dsf.fhir.client.certificate
    • \\n
    • Required: Yes
    • \\n
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • \\n
    • Recommendation: Use docker secret file to configure
    • \\n
    • Example: /run/secrets/app_client_certificate.pem
    • \\n
    "}');export{S as comp,I as data}; diff --git a/assets/configuration.html-SiknXzZc.js b/assets/configuration.html-SiknXzZc.js new file mode 100644 index 000000000..63e5fff96 --- /dev/null +++ b/assets/configuration.html-SiknXzZc.js @@ -0,0 +1 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as l,c as d,a as e,b as r,d as n,e as s}from"./app-kq9lCQfY.js";const a={},c=s('

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    ',15),_=e("strong",null,"Property:",-1),p={href:"http://dev.dsf.server.auth.oidc.client.id",target:"_blank",rel:"noopener noreferrer"},E=e("li",null,[e("strong",null,"Required:"),r(" No")],-1),g=e("li",null,[e("strong",null,"Description:"),r(" OIDC provider client_id, must be specified if "),e("em",null,"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW"),r(" is enabled")],-1),f=s('

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: Address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: Password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: Username to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: Password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: Username to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_CURRENTUSER

    • Property: dev.dsf.bpe.debug.log.message.currentUser
    • Required: No
    • Description: To enable logging of the currently requesting user set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_DBSTATEMENT

    • Property: dev.dsf.bpe.debug.log.message.dbStatement
    • Required: No
    • Description: To enable logging of DB queries set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL

    • Property: dev.dsf.bpe.debug.log.message.variablesLocal
    • Required: No
    • Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST

    • Property: dev.dsf.bpe.debug.log.message.webserviceRequest
    • Required: No
    • Description: To enable logging of webservices requests set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: Base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.corePoolSize
    • Required: No
    • Description: Process engine job executor core pool size
    • Default: 4

    DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.maxPoolSize
    • Required: No
    • Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full
    • Default: 10

    DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE

    • Property: dev.dsf.bpe.process.engine.queueSize
    • Required: No
    • Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy
    • Default: 40

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List
    • Example: dsfdev_updateAllowList|1.0, another_process|x.y

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available
    • Example: old_process|x.y

    DEV_DSF_BPE_PROCESS_THREADS

    • Property: dev.dsf.bpe.process.threads
    • Required: No
    • Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores
    • Default: -1

    DEV_DSF_BPE_SERVER_BASE_URL

    • Property: dev.dsf.bpe.server.base.url
    • Required: No
    • Description: Base address of the BPE server, configure when exposing the web-ui
    • Example: https://foo.bar/bpe
    • Default: https

    DEV_DSF_BPE_SERVER_ROLECONFIG

    DEV_DSF_BPE_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.bpe.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_BPE_SERVER_UI_THEME

    • Property: dev.dsf.bpe.server.ui.theme
    • Required: No
    • Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    ',170);function u(v,h){const i=o("ExternalLinkIcon");return l(),d("div",null,[c,e("ul",null,[e("li",null,[_,r(),e("a",p,[r("dev.dsf.server.auth.oidc.client.id"),n(i)])]),E,g]),f])}const R=t(a,[["render",u],["__file","configuration.html.vue"]]),S=JSON.parse('{"path":"/v1.5.2/maintain/bpe/configuration.html","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":3,"title":"DEV_DSF_SERVER_API_HOST","slug":"dev-dsf-server-api-host","link":"#dev-dsf-server-api-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_API_PORT","slug":"dev-dsf-server-api-port","link":"#dev-dsf-server-api-port","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER","slug":"dev-dsf-server-auth-client-certificate-header","link":"#dev-dsf-server-auth-client-certificate-header","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW","slug":"dev-dsf-server-auth-oidc-authorization-code-flow","link":"#dev-dsf-server-auth-oidc-authorization-code-flow","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT","slug":"dev-dsf-server-auth-oidc-back-channel-logout","link":"#dev-dsf-server-auth-oidc-back-channel-logout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH","slug":"dev-dsf-server-auth-oidc-back-channel-logout-path","link":"#dev-dsf-server-auth-oidc-back-channel-logout-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN","slug":"dev-dsf-server-auth-oidc-bearer-token","link":"#dev-dsf-server-auth-oidc-bearer-token","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID","slug":"dev-dsf-server-auth-oidc-client-id","link":"#dev-dsf-server-auth-oidc-client-id","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET","slug":"dev-dsf-server-auth-oidc-client-secret","link":"#dev-dsf-server-auth-oidc-client-secret","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate","link":"#dev-dsf-server-auth-oidc-provider-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","link":"#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-connecttimeout","link":"#dev-dsf-server-auth-oidc-provider-client-connecttimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT","slug":"dev-dsf-server-auth-oidc-provider-client-idletimeout","link":"#dev-dsf-server-auth-oidc-provider-client-idletimeout","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","link":"#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL","slug":"dev-dsf-server-auth-oidc-provider-realm-base-url","link":"#dev-dsf-server-auth-oidc-provider-realm-base-url","children":[]},{"level":3,"title":"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS","slug":"dev-dsf-server-auth-trust-client-certificate-cas","link":"#dev-dsf-server-auth-trust-client-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE","slug":"dev-dsf-server-certificate","link":"#dev-dsf-server-certificate","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_CHAIN","slug":"dev-dsf-server-certificate-chain","link":"#dev-dsf-server-certificate-chain","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY","slug":"dev-dsf-server-certificate-key","link":"#dev-dsf-server-certificate-key","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE","slug":"dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","link":"#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_SERVER_CONTEXT_PATH","slug":"dev-dsf-server-context-path","link":"#dev-dsf-server-context-path","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_HOST","slug":"dev-dsf-server-status-host","link":"#dev-dsf-server-status-host","children":[]},{"level":3,"title":"DEV_DSF_SERVER_STATUS_PORT","slug":"dev-dsf-server-status-port","link":"#dev-dsf-server-status-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-bpe-db-liquibase-forceunlock","link":"#dev-dsf-bpe-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-bpe-db-liquibase-lockwaittime","link":"#dev-dsf-bpe-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","link":"#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-bpe-db-liquibase-username","link":"#dev-dsf-bpe-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_URL","slug":"dev-dsf-bpe-db-url","link":"#dev-dsf-bpe-db-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP","slug":"dev-dsf-bpe-db-user-camunda-group","link":"#dev-dsf-bpe-db-user-camunda-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","link":"#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME","slug":"dev-dsf-bpe-db-user-camunda-username","link":"#dev-dsf-bpe-db-user-camunda-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_GROUP","slug":"dev-dsf-bpe-db-user-group","link":"#dev-dsf-bpe-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE","slug":"dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","link":"#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_DB_USER_USERNAME","slug":"dev-dsf-bpe-db-user-username","link":"#dev-dsf-bpe-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_CURRENTUSER","slug":"dev-dsf-bpe-debug-log-message-currentuser","link":"#dev-dsf-bpe-debug-log-message-currentuser","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_DBSTATEMENT","slug":"dev-dsf-bpe-debug-log-message-dbstatement","link":"#dev-dsf-bpe-debug-log-message-dbstatement","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND","slug":"dev-dsf-bpe-debug-log-message-onactivityend","link":"#dev-dsf-bpe-debug-log-message-onactivityend","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART","slug":"dev-dsf-bpe-debug-log-message-onactivitystart","link":"#dev-dsf-bpe-debug-log-message-onactivitystart","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES","slug":"dev-dsf-bpe-debug-log-message-variables","link":"#dev-dsf-bpe-debug-log-message-variables","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL","slug":"dev-dsf-bpe-debug-log-message-variableslocal","link":"#dev-dsf-bpe-debug-log-message-variableslocal","children":[]},{"level":3,"title":"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST","slug":"dev-dsf-bpe-debug-log-message-webservicerequest","link":"#dev-dsf-bpe-debug-log-message-webservicerequest","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-fhir-client-certificate","link":"#dev-dsf-bpe-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-fhir-client-certificate-private-key","link":"#dev-dsf-bpe-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-local-timeout-connect","link":"#dev-dsf-bpe-fhir-client-local-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-local-timeout-read","link":"#dev-dsf-bpe-fhir-client-local-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE","slug":"dev-dsf-bpe-fhir-client-local-verbose","link":"#dev-dsf-bpe-fhir-client-local-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT","slug":"dev-dsf-bpe-fhir-client-remote-timeout-connect","link":"#dev-dsf-bpe-fhir-client-remote-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ","slug":"dev-dsf-bpe-fhir-client-remote-timeout-read","link":"#dev-dsf-bpe-fhir-client-remote-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE","slug":"dev-dsf-bpe-fhir-client-remote-verbose","link":"#dev-dsf-bpe-fhir-client-remote-verbose","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-bpe-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_SERVER_BASE_URL","slug":"dev-dsf-bpe-fhir-server-base-url","link":"#dev-dsf-bpe-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX","slug":"dev-dsf-bpe-fhir-task-subscription-retry-max","link":"#dev-dsf-bpe-fhir-task-subscription-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP","slug":"dev-dsf-bpe-fhir-task-subscription-retry-sleep","link":"#dev-dsf-bpe-fhir-task-subscription-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER","slug":"dev-dsf-bpe-fhir-task-subscription-search-parameter","link":"#dev-dsf-bpe-fhir-task-subscription-search-parameter","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE","slug":"dev-dsf-bpe-mail-client-certificate","link":"#dev-dsf-bpe-mail-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-bpe-mail-client-certificate-private-key","link":"#dev-dsf-bpe-mail-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","link":"#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_FROMADDRESS","slug":"dev-dsf-bpe-mail-fromaddress","link":"#dev-dsf-bpe-mail-fromaddress","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_HOST","slug":"dev-dsf-bpe-mail-host","link":"#dev-dsf-bpe-mail-host","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE","slug":"dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","link":"#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION","slug":"dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","link":"#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","link":"#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_PORT","slug":"dev-dsf-bpe-mail-port","link":"#dev-dsf-bpe-mail-port","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES","slug":"dev-dsf-bpe-mail-replytoaddresses","link":"#dev-dsf-bpe-mail-replytoaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT","slug":"dev-dsf-bpe-mail-sendmailonerrorlogevent","link":"#dev-dsf-bpe-mail-sendmailonerrorlogevent","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP","slug":"dev-dsf-bpe-mail-sendtestmailonstartup","link":"#dev-dsf-bpe-mail-sendtestmailonstartup","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE","slug":"dev-dsf-bpe-mail-smime-p12keystore","link":"#dev-dsf-bpe-mail-smime-p12keystore","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE","slug":"dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","link":"#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSES","slug":"dev-dsf-bpe-mail-toaddresses","link":"#dev-dsf-bpe-mail-toaddresses","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TOADDRESSESCC","slug":"dev-dsf-bpe-mail-toaddressescc","link":"#dev-dsf-bpe-mail-toaddressescc","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-bpe-mail-trust-server-certificate-cas","link":"#dev-dsf-bpe-mail-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USERNAME","slug":"dev-dsf-bpe-mail-username","link":"#dev-dsf-bpe-mail-username","children":[]},{"level":3,"title":"DEV_DSF_BPE_MAIL_USESMTPS","slug":"dev-dsf-bpe-mail-usesmtps","link":"#dev-dsf-bpe-mail-usesmtps","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE","slug":"dev-dsf-bpe-process-engine-corepoolsize","link":"#dev-dsf-bpe-process-engine-corepoolsize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE","slug":"dev-dsf-bpe-process-engine-maxpoolsize","link":"#dev-dsf-bpe-process-engine-maxpoolsize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE","slug":"dev-dsf-bpe-process-engine-queuesize","link":"#dev-dsf-bpe-process-engine-queuesize","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_EXCLUDED","slug":"dev-dsf-bpe-process-excluded","link":"#dev-dsf-bpe-process-excluded","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX","slug":"dev-dsf-bpe-process-fhir-server-retry-max","link":"#dev-dsf-bpe-process-fhir-server-retry-max","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP","slug":"dev-dsf-bpe-process-fhir-server-retry-sleep","link":"#dev-dsf-bpe-process-fhir-server-retry-sleep","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY","slug":"dev-dsf-bpe-process-plugin-directroy","link":"#dev-dsf-bpe-process-plugin-directroy","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_RETIRED","slug":"dev-dsf-bpe-process-retired","link":"#dev-dsf-bpe-process-retired","children":[]},{"level":3,"title":"DEV_DSF_BPE_PROCESS_THREADS","slug":"dev-dsf-bpe-process-threads","link":"#dev-dsf-bpe-process-threads","children":[]},{"level":3,"title":"DEV_DSF_BPE_SERVER_BASE_URL","slug":"dev-dsf-bpe-server-base-url","link":"#dev-dsf-bpe-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_BPE_SERVER_ROLECONFIG","slug":"dev-dsf-bpe-server-roleconfig","link":"#dev-dsf-bpe-server-roleconfig","children":[]},{"level":3,"title":"DEV_DSF_BPE_SERVER_STATIC_RESOURCE_CACHE","slug":"dev-dsf-bpe-server-static-resource-cache","link":"#dev-dsf-bpe-server-static-resource-cache","children":[]},{"level":3,"title":"DEV_DSF_BPE_SERVER_UI_THEME","slug":"dev-dsf-bpe-server-ui-theme","link":"#dev-dsf-bpe-server-ui-theme","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":8.88,"words":2664},"filePathRelative":"v1.5.2/maintain/bpe/configuration.md","localizedDate":"July 8, 2024","excerpt":"

    DEV_DSF_SERVER_API_HOST

    \\n
      \\n
    • Property: dev.dsf.server.api.host
    • \\n
    • Required: Yes
    • \\n
    • Description: API connector host, default in docker image: 0.0.0.0
    • \\n
    • Default: 127.0.0.1
    • \\n
    "}');export{R as comp,S as data}; diff --git a/assets/contact.html-BIg2xi0b.js b/assets/contact.html-BIg2xi0b.js new file mode 100644 index 000000000..f183e4656 --- /dev/null +++ b/assets/contact.html-BIg2xi0b.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as l,c,a as e,b as t,d as o,w as i,e as h}from"./app-kq9lCQfY.js";const d={},u=h('

    ✉️ E-MAIL

    Feel free to contact us via E-Mail (dsf-gecko@hs-heilbronn.de) and we will take care of your request as soon as possible.

    👥 COMMUNITY

    DSF's community is growing and we welcome anyone who would like to join! 🚀

    Stay up to Date

    ',5),m={href:"https://github.com/datasharingframework/dsf",target:"_blank",rel:"noopener noreferrer"},p={href:"https://mii.zulipchat.com",target:"_blank",rel:"noopener noreferrer"},f=e("a",{href:"mailto:dsf-gecko@hs-heilbronn.de"},"E-MAIL",-1),b=e("h3",{id:"contribute-code",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contribute-code"},[e("span",null,"Contribute Code")])],-1),_={href:"https://github.com/datasharingframework/dsf/tree/develop",target:"_blank",rel:"noopener noreferrer"},g=e("h3",{id:"share-your-experience-get-support",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#share-your-experience-get-support"},[e("span",null,"Share your Experience & Get support")])],-1),k={href:"https://github.com/datasharingframework/dsf/issues",target:"_blank",rel:"noopener noreferrer"};function y(w,x){const a=r("ExternalLinkIcon"),n=r("RouteLink");return l(),c("div",null,[u,e("ul",null,[e("li",null,[e("a",m,[t("GitHub"),o(a)])]),e("li",null,[t("Follow our "),o(n,{to:"/about/learnmore/team.html"},{default:i(()=>[t("contributors")]),_:1}),t(" on GitHub")]),e("li",null,[e("a",p,[t("Zulip Chat - MII"),o(a)]),t(" (If you would like access, please write us an "),f,t(")")])]),b,e("p",null,[t("You can get familiar with the DSF code on GitHub. Branching follows the git-flow model, for the latest development version see branch "),e("a",_,[t("develop"),o(a)]),t(". Additionally, you can find more information "),o(n,{to:"/stable/"},{default:i(()=>[t("here")]),_:1}),t(" in the documentation.")]),g,e("p",null,[t("You´re welcome to share your experience with the Community. If you have a bug to report or feature to request, that's what the "),e("a",k,[t("GitHub issues"),o(a)]),t(" are for.")])])}const M=s(d,[["render",y],["__file","contact.html.vue"]]),I=JSON.parse('{"path":"/about/learnmore/contact.html","title":"Contact & Community","lang":"en-US","frontmatter":{"title":"Contact & Community","icon":"call"},"headers":[{"level":2,"title":"✉️ E-MAIL","slug":"e-mail","link":"#e-mail","children":[]},{"level":2,"title":"👥 COMMUNITY","slug":"community","link":"#community","children":[{"level":3,"title":"Stay up to Date","slug":"stay-up-to-date","link":"#stay-up-to-date","children":[]},{"level":3,"title":"Contribute Code","slug":"contribute-code","link":"#contribute-code","children":[]},{"level":3,"title":"Share your Experience & Get support","slug":"share-your-experience-get-support","link":"#share-your-experience-get-support","children":[]}]}],"git":{"createdTime":1683798956000,"updatedTime":1691142763000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":3},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.58,"words":174},"filePathRelative":"about/learnmore/contact.md","localizedDate":"May 11, 2023","excerpt":"

    ✉️ E-MAIL

    \\n

    Feel free to contact us via E-Mail (dsf-gecko@hs-heilbronn.de) and we will take care of your request as soon as possible.

    "}');export{M as comp,I as data}; diff --git a/assets/create.html-B8YWfO5m.js b/assets/create.html-B8YWfO5m.js new file mode 100644 index 000000000..a8aa34332 --- /dev/null +++ b/assets/create.html-B8YWfO5m.js @@ -0,0 +1 @@ +import{_ as l}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as i,c as s,a as e,b as t,d as o,w as c}from"./app-kq9lCQfY.js";const p={},h={class:"hint-container tip"},d=e("p",{class:"hint-container-title"},"Work in progress",-1),m={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function f(_,w){const a=n("RouteLink"),r=n("ExternalLinkIcon");return i(),s("div",null,[e("div",h,[d,e("p",null,[t("We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the "),o(a,{to:"/oldstable/tutorial/"},{default:c(()=>[t("process plugin tutorial")]),_:1}),t(". Additionally, we recommend to take a look at the upgraded DSF processes here:")]),e("ul",null,[e("li",null,[t("The "),e("a",m,[t("hello world plugin"),o(r)])]),e("li",null,[t("The "),e("a",u,[t("ping pong plugin"),o(r)])]),e("li",null,[t("The "),e("a",g,[t("update allowlist plugin"),o(r)])])])])])}const v=l(p,[["render",f],["__file","create.html.vue"]]),T=JSON.parse('{"path":"/v1.2.0/develop/create.html","title":"Create a new process plugin","lang":"en-US","frontmatter":{"title":"Create a new process plugin","icon":"code"},"headers":[],"git":{"createdTime":1694544770000,"updatedTime":1699955216000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":0.29,"words":88},"filePathRelative":"v1.2.0/develop/create.md","localizedDate":"September 12, 2023","excerpt":"
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the process plugin tutorial. Additionally, we recommend to take a look at the upgraded DSF processes here:

    \\n\\n
    "}');export{v as comp,T as data}; diff --git a/assets/create.html-BBL4dAdr.js b/assets/create.html-BBL4dAdr.js new file mode 100644 index 000000000..d6d0bf96c --- /dev/null +++ b/assets/create.html-BBL4dAdr.js @@ -0,0 +1 @@ +import{_ as l}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as i,c as s,a as e,b as t,d as o,w as c}from"./app-kq9lCQfY.js";const p={},d={class:"hint-container tip"},h=e("p",{class:"hint-container-title"},"Work in progress",-1),u={href:"https://github.com/datasharingframework/dsf-process-hello-world/tree/develop",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function f(_,w){const a=n("RouteLink"),r=n("ExternalLinkIcon");return i(),s("div",null,[e("div",d,[h,e("p",null,[t("We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the "),o(a,{to:"/oldstable/guideline/tutorial/"},{default:c(()=>[t("process plugin tutorial")]),_:1}),t(". Additionally, we recommend to take a look at the upgraded DSF processes here:")]),e("ul",null,[e("li",null,[t("The "),e("a",u,[t("hello world plugin"),o(r)])]),e("li",null,[t("The "),e("a",g,[t("ping pong plugin"),o(r)])]),e("li",null,[t("The "),e("a",m,[t("update allowlist plugin"),o(r)])])])])])}const v=l(p,[["render",f],["__file","create.html.vue"]]),T=JSON.parse('{"path":"/v1.0.0/develop/create.html","title":"Create a new process plugin","lang":"en-US","frontmatter":{"title":"Create a new process plugin","icon":"code"},"headers":[],"git":{"createdTime":1692708510000,"updatedTime":1692708510000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.29,"words":88},"filePathRelative":"v1.0.0/develop/create.md","localizedDate":"August 22, 2023","excerpt":"
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the process plugin tutorial. Additionally, we recommend to take a look at the upgraded DSF processes here:

    \\n\\n
    "}');export{v as comp,T as data}; diff --git a/assets/create.html-BKJiEx7Q.js b/assets/create.html-BKJiEx7Q.js new file mode 100644 index 000000000..d20a1a79c --- /dev/null +++ b/assets/create.html-BKJiEx7Q.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as s,c as p,a as t,b as e,d as o,w as l}from"./app-kq9lCQfY.js";const c={},h={class:"hint-container tip"},d=t("p",{class:"hint-container-title"},"Work in progress",-1),u={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function f(_,w){const n=a("RouteLink"),r=a("ExternalLinkIcon");return s(),p("div",null,[t("p",null,[e("Visit the "),o(n,{to:"/for-you/"},{default:l(()=>[e("how the DSF can help you")]),_:1}),e(" page to get started.")]),t("div",h,[d,t("p",null,[e("We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the "),o(n,{to:"/oldstable/tutorial/"},{default:l(()=>[e("process plugin tutorial")]),_:1}),e(". Additionally, we recommend to take a look at the upgraded DSF processes here:")]),t("ul",null,[t("li",null,[e("The "),t("a",u,[e("hello world plugin"),o(r)])]),t("li",null,[e("The "),t("a",g,[e("ping pong plugin"),o(r)])]),t("li",null,[e("The "),t("a",m,[e("update allowlist plugin"),o(r)])])])])])}const v=i(c,[["render",f],["__file","create.html.vue"]]),y=JSON.parse('{"path":"/v1.5.1/develop/create.html","title":"Create a new process plugin","lang":"en-US","frontmatter":{"title":"Create a new process plugin","icon":"code"},"headers":[],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.34,"words":102},"filePathRelative":"v1.5.1/develop/create.md","localizedDate":"April 17, 2024","excerpt":"

    Visit the how the DSF can help you page to get started.

    \\n
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the process plugin tutorial. Additionally, we recommend to take a look at the upgraded DSF processes here:

    \\n\\n
    "}');export{v as comp,y as data}; diff --git a/assets/create.html-CYJ8kogk.js b/assets/create.html-CYJ8kogk.js new file mode 100644 index 000000000..9a5021c19 --- /dev/null +++ b/assets/create.html-CYJ8kogk.js @@ -0,0 +1 @@ +import{_ as l}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as i,c as s,a as e,b as t,d as o,w as c}from"./app-kq9lCQfY.js";const p={},h={class:"hint-container tip"},d=e("p",{class:"hint-container-title"},"Work in progress",-1),u={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function f(_,w){const a=n("RouteLink"),r=n("ExternalLinkIcon");return i(),s("div",null,[e("div",h,[d,e("p",null,[t("We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the "),o(a,{to:"/oldstable/tutorial/"},{default:c(()=>[t("process plugin tutorial")]),_:1}),t(". Additionally, we recommend to take a look at the upgraded DSF processes here:")]),e("ul",null,[e("li",null,[t("The "),e("a",u,[t("hello world plugin"),o(r)])]),e("li",null,[t("The "),e("a",m,[t("ping pong plugin"),o(r)])]),e("li",null,[t("The "),e("a",g,[t("update allowlist plugin"),o(r)])])])])])}const v=l(p,[["render",f],["__file","create.html.vue"]]),T=JSON.parse('{"path":"/v1.3.0/develop/create.html","title":"Create a new process plugin","lang":"en-US","frontmatter":{"title":"Create a new process plugin","icon":"code"},"headers":[],"git":{"createdTime":1696944513000,"updatedTime":1699955216000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":0.29,"words":88},"filePathRelative":"v1.3.0/develop/create.md","localizedDate":"October 10, 2023","excerpt":"
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the process plugin tutorial. Additionally, we recommend to take a look at the upgraded DSF processes here:

    \\n\\n
    "}');export{v as comp,T as data}; diff --git a/assets/create.html-Cd0lu8lU.js b/assets/create.html-Cd0lu8lU.js new file mode 100644 index 000000000..66dd0a889 --- /dev/null +++ b/assets/create.html-Cd0lu8lU.js @@ -0,0 +1 @@ +import{_ as l}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as i,c as s,a as e,b as t,d as o,w as c}from"./app-kq9lCQfY.js";const p={},h={class:"hint-container tip"},d=e("p",{class:"hint-container-title"},"Work in progress",-1),u={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function f(_,w){const a=n("RouteLink"),r=n("ExternalLinkIcon");return i(),s("div",null,[e("div",h,[d,e("p",null,[t("We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the "),o(a,{to:"/oldstable/tutorial/"},{default:c(()=>[t("process plugin tutorial")]),_:1}),t(". Additionally, we recommend to take a look at the upgraded DSF processes here:")]),e("ul",null,[e("li",null,[t("The "),e("a",u,[t("hello world plugin"),o(r)])]),e("li",null,[t("The "),e("a",m,[t("ping pong plugin"),o(r)])]),e("li",null,[t("The "),e("a",g,[t("update allowlist plugin"),o(r)])])])])])}const v=l(p,[["render",f],["__file","create.html.vue"]]),T=JSON.parse('{"path":"/v1.1.0/develop/create.html","title":"Create a new process plugin","lang":"en-US","frontmatter":{"title":"Create a new process plugin","icon":"code"},"headers":[],"git":{"createdTime":1692790324000,"updatedTime":1699955216000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2},{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.29,"words":88},"filePathRelative":"v1.1.0/develop/create.md","localizedDate":"August 23, 2023","excerpt":"
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the process plugin tutorial. Additionally, we recommend to take a look at the upgraded DSF processes here:

    \\n\\n
    "}');export{v as comp,T as data}; diff --git a/assets/create.html-D-hEIIMO.js b/assets/create.html-D-hEIIMO.js new file mode 100644 index 000000000..91ca347e5 --- /dev/null +++ b/assets/create.html-D-hEIIMO.js @@ -0,0 +1 @@ +import{_ as l}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as i,c as s,a as e,b as t,d as o,w as c}from"./app-kq9lCQfY.js";const p={},h={class:"hint-container tip"},d=e("p",{class:"hint-container-title"},"Work in progress",-1),u={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function f(_,w){const a=n("RouteLink"),r=n("ExternalLinkIcon");return i(),s("div",null,[e("div",h,[d,e("p",null,[t("We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the "),o(a,{to:"/oldstable/tutorial/"},{default:c(()=>[t("process plugin tutorial")]),_:1}),t(". Additionally, we recommend to take a look at the upgraded DSF processes here:")]),e("ul",null,[e("li",null,[t("The "),e("a",u,[t("hello world plugin"),o(r)])]),e("li",null,[t("The "),e("a",m,[t("ping pong plugin"),o(r)])]),e("li",null,[t("The "),e("a",g,[t("update allowlist plugin"),o(r)])])])])])}const v=l(p,[["render",f],["__file","create.html.vue"]]),T=JSON.parse('{"path":"/v1.3.1/develop/create.html","title":"Create a new process plugin","lang":"en-US","frontmatter":{"title":"Create a new process plugin","icon":"code"},"headers":[],"git":{"createdTime":1698748420000,"updatedTime":1699955216000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":0.29,"words":88},"filePathRelative":"v1.3.1/develop/create.md","localizedDate":"October 31, 2023","excerpt":"
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the process plugin tutorial. Additionally, we recommend to take a look at the upgraded DSF processes here:

    \\n\\n
    "}');export{v as comp,T as data}; diff --git a/assets/create.html-DM1ZPu4j.js b/assets/create.html-DM1ZPu4j.js new file mode 100644 index 000000000..030b73136 --- /dev/null +++ b/assets/create.html-DM1ZPu4j.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as i,c as p,a as t,b as e,d as o,w as l}from"./app-kq9lCQfY.js";const c={},h={class:"hint-container tip"},d=t("p",{class:"hint-container-title"},"Work in progress",-1),u={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function f(_,w){const n=a("RouteLink"),r=a("ExternalLinkIcon");return i(),p("div",null,[t("p",null,[e("Visit the "),o(n,{to:"/for-you/"},{default:l(()=>[e("how the DSF can help you")]),_:1}),e(" page to get started.")]),t("div",h,[d,t("p",null,[e("We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the "),o(n,{to:"/oldstable/tutorial/"},{default:l(()=>[e("process plugin tutorial")]),_:1}),e(". Additionally, we recommend to take a look at the upgraded DSF processes here:")]),t("ul",null,[t("li",null,[e("The "),t("a",u,[e("hello world plugin"),o(r)])]),t("li",null,[e("The "),t("a",g,[e("ping pong plugin"),o(r)])]),t("li",null,[e("The "),t("a",m,[e("update allowlist plugin"),o(r)])])])])])}const v=s(c,[["render",f],["__file","create.html.vue"]]),y=JSON.parse('{"path":"/v1.5.2/develop/create.html","title":"Create a new process plugin","lang":"en-US","frontmatter":{"title":"Create a new process plugin","icon":"code"},"headers":[],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.34,"words":102},"filePathRelative":"v1.5.2/develop/create.md","localizedDate":"July 8, 2024","excerpt":"

    Visit the how the DSF can help you page to get started.

    \\n
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the process plugin tutorial. Additionally, we recommend to take a look at the upgraded DSF processes here:

    \\n\\n
    "}');export{v as comp,y as data}; diff --git a/assets/create.html-DTtN2S-o.js b/assets/create.html-DTtN2S-o.js new file mode 100644 index 000000000..0dbb85ed7 --- /dev/null +++ b/assets/create.html-DTtN2S-o.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as s,c as p,a as t,b as e,d as o,w as l}from"./app-kq9lCQfY.js";const c={},h={class:"hint-container tip"},d=t("p",{class:"hint-container-title"},"Work in progress",-1),u={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function f(_,w){const n=a("RouteLink"),r=a("ExternalLinkIcon");return s(),p("div",null,[t("p",null,[e("Visit the "),o(n,{to:"/for-you/"},{default:l(()=>[e("how the DSF can help you")]),_:1}),e(" page to get started.")]),t("div",h,[d,t("p",null,[e("We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the "),o(n,{to:"/oldstable/tutorial/"},{default:l(()=>[e("process plugin tutorial")]),_:1}),e(". Additionally, we recommend to take a look at the upgraded DSF processes here:")]),t("ul",null,[t("li",null,[e("The "),t("a",u,[e("hello world plugin"),o(r)])]),t("li",null,[e("The "),t("a",g,[e("ping pong plugin"),o(r)])]),t("li",null,[e("The "),t("a",m,[e("update allowlist plugin"),o(r)])])])])])}const v=i(c,[["render",f],["__file","create.html.vue"]]),y=JSON.parse('{"path":"/v1.5.0/develop/create.html","title":"Create a new process plugin","lang":"en-US","frontmatter":{"title":"Create a new process plugin","icon":"code"},"headers":[],"git":{"createdTime":1708419681000,"updatedTime":1708419681000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.34,"words":102},"filePathRelative":"v1.5.0/develop/create.md","localizedDate":"February 20, 2024","excerpt":"

    Visit the how the DSF can help you page to get started.

    \\n
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the process plugin tutorial. Additionally, we recommend to take a look at the upgraded DSF processes here:

    \\n\\n
    "}');export{v as comp,y as data}; diff --git a/assets/create.html-DYPU2UUv.js b/assets/create.html-DYPU2UUv.js new file mode 100644 index 000000000..7a8332619 --- /dev/null +++ b/assets/create.html-DYPU2UUv.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as s,c as p,a as t,b as e,d as o,w as l}from"./app-kq9lCQfY.js";const c={},h={class:"hint-container tip"},d=t("p",{class:"hint-container-title"},"Work in progress",-1),u={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function f(_,w){const n=a("RouteLink"),r=a("ExternalLinkIcon");return s(),p("div",null,[t("p",null,[e("Visit the "),o(n,{to:"/for-you/"},{default:l(()=>[e("how the DSF can help you")]),_:1}),e(" page to get started.")]),t("div",h,[d,t("p",null,[e("We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the "),o(n,{to:"/oldstable/tutorial/"},{default:l(()=>[e("process plugin tutorial")]),_:1}),e(". Additionally, we recommend to take a look at the upgraded DSF processes here:")]),t("ul",null,[t("li",null,[e("The "),t("a",u,[e("hello world plugin"),o(r)])]),t("li",null,[e("The "),t("a",m,[e("ping pong plugin"),o(r)])]),t("li",null,[e("The "),t("a",g,[e("update allowlist plugin"),o(r)])])])])])}const v=i(c,[["render",f],["__file","create.html.vue"]]),y=JSON.parse('{"path":"/stable/develop/create.html","title":"Create a new process plugin","lang":"en-US","frontmatter":{"title":"Create a new process plugin","icon":"code"},"headers":[],"git":{"createdTime":1688985700000,"updatedTime":1692790324000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2},{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.34,"words":102},"filePathRelative":"stable/develop/create.md","localizedDate":"July 10, 2023","excerpt":"

    Visit the how the DSF can help you page to get started.

    \\n
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the process plugin tutorial. Additionally, we recommend to take a look at the upgraded DSF processes here:

    \\n\\n
    "}');export{v as comp,y as data}; diff --git a/assets/create.html-Dk6P19fM.js b/assets/create.html-Dk6P19fM.js new file mode 100644 index 000000000..59e3aba3c --- /dev/null +++ b/assets/create.html-Dk6P19fM.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as s,c as p,a as t,b as e,d as o,w as l}from"./app-kq9lCQfY.js";const c={},h={class:"hint-container tip"},d=t("p",{class:"hint-container-title"},"Work in progress",-1),u={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function f(_,w){const n=a("RouteLink"),r=a("ExternalLinkIcon");return s(),p("div",null,[t("p",null,[e("Visit the "),o(n,{to:"/for-you/"},{default:l(()=>[e("how the DSF can help you")]),_:1}),e(" page to get started.")]),t("div",h,[d,t("p",null,[e("We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the "),o(n,{to:"/oldstable/tutorial/"},{default:l(()=>[e("process plugin tutorial")]),_:1}),e(". Additionally, we recommend to take a look at the upgraded DSF processes here:")]),t("ul",null,[t("li",null,[e("The "),t("a",u,[e("hello world plugin"),o(r)])]),t("li",null,[e("The "),t("a",g,[e("ping pong plugin"),o(r)])]),t("li",null,[e("The "),t("a",m,[e("update allowlist plugin"),o(r)])])])])])}const v=i(c,[["render",f],["__file","create.html.vue"]]),y=JSON.parse('{"path":"/v1.4.0/develop/create.html","title":"Create a new process plugin","lang":"en-US","frontmatter":{"title":"Create a new process plugin","icon":"code"},"headers":[],"git":{"createdTime":1702917645000,"updatedTime":1706902325000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":0.34,"words":102},"filePathRelative":"v1.4.0/develop/create.md","localizedDate":"December 18, 2023","excerpt":"

    Visit the how the DSF can help you page to get started.

    \\n
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the process plugin tutorial. Additionally, we recommend to take a look at the upgraded DSF processes here:

    \\n\\n
    "}');export{v as comp,y as data}; diff --git a/assets/create.html-STcXv8Ol.js b/assets/create.html-STcXv8Ol.js new file mode 100644 index 000000000..38f672939 --- /dev/null +++ b/assets/create.html-STcXv8Ol.js @@ -0,0 +1 @@ +import{_ as l}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as i,c as s,a as e,b as t,d as o,w as c}from"./app-kq9lCQfY.js";const p={},h={class:"hint-container tip"},d=e("p",{class:"hint-container-title"},"Work in progress",-1),m={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function f(_,w){const a=n("RouteLink"),r=n("ExternalLinkIcon");return i(),s("div",null,[e("div",h,[d,e("p",null,[t("We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the "),o(a,{to:"/oldstable/tutorial/"},{default:c(()=>[t("process plugin tutorial")]),_:1}),t(". Additionally, we recommend to take a look at the upgraded DSF processes here:")]),e("ul",null,[e("li",null,[t("The "),e("a",m,[t("hello world plugin"),o(r)])]),e("li",null,[t("The "),e("a",u,[t("ping pong plugin"),o(r)])]),e("li",null,[t("The "),e("a",g,[t("update allowlist plugin"),o(r)])])])])])}const v=l(p,[["render",f],["__file","create.html.vue"]]),T=JSON.parse('{"path":"/v1.3.2/develop/create.html","title":"Create a new process plugin","lang":"en-US","frontmatter":{"title":"Create a new process plugin","icon":"code"},"headers":[],"git":{"createdTime":1701710218000,"updatedTime":1701710218000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.29,"words":88},"filePathRelative":"v1.3.2/develop/create.md","localizedDate":"December 4, 2023","excerpt":"
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the process plugin tutorial. Additionally, we recommend to take a look at the upgraded DSF processes here:

    \\n\\n
    "}');export{v as comp,T as data}; diff --git a/assets/documentation.html-BhU3Negt.js b/assets/documentation.html-BhU3Negt.js new file mode 100644 index 000000000..25c03cf40 --- /dev/null +++ b/assets/documentation.html-BhU3Negt.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as i,c as s,a as e,b as t,d as n}from"./app-kq9lCQfY.js";const u={},c=e("p",null,[e("strong",null,"Join us in enhancing our documentation!")],-1),l=e("p",null,"We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!",-1),h=e("li",null,[e("strong",null,"Contact us with feedback"),t(": If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.")],-1),d=e("strong",null,"Create an issue",-1),m={href:"https://github.com/datasharingframework/datasharingframework.github.io/issues",target:"_blank",rel:"noopener noreferrer"},p=e("strong",null,"Contribute directly with a pull request",-1),g={href:"https://github.com/datasharingframework/datasharingframework.github.io",target:"_blank",rel:"noopener noreferrer"},f=e("p",null,"We're excited to see your suggestions and are grateful for every contribution that helps us improve. Let's build better documentation together!",-1);function y(b,w){const o=a("ExternalLinkIcon");return i(),s("div",null,[c,l,e("ol",null,[h,e("li",null,[d,t(": You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at "),e("a",m,[t("Data Sharing Framework Documentation"),n(o)]),t(" and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.")]),e("li",null,[p,t(": If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at "),e("a",g,[t("Data Sharing Framework Documentation"),n(o)]),t(" and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.")])]),f])}const v=r(u,[["render",y],["__file","documentation.html.vue"]]),x=JSON.parse(`{"path":"/v1.5.0/contribute/documentation.html","title":"Contribute documentation","lang":"en-US","frontmatter":{"title":"Contribute documentation","icon":"info"},"headers":[],"git":{"createdTime":1708419681000,"updatedTime":1708419681000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.74,"words":222},"filePathRelative":"v1.5.0/contribute/documentation.md","localizedDate":"February 20, 2024","excerpt":"

    Join us in enhancing our documentation!

    \\n

    We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!

    \\n
      \\n
    1. Contact us with feedback: If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.
    2. \\n
    3. Create an issue: You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at Data Sharing Framework Documentation and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.
    4. \\n
    5. Contribute directly with a pull request: If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at Data Sharing Framework Documentation and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.
    6. \\n
    "}`);export{v as comp,x as data}; diff --git a/assets/documentation.html-C_QbE0N7.js b/assets/documentation.html-C_QbE0N7.js new file mode 100644 index 000000000..55c9adead --- /dev/null +++ b/assets/documentation.html-C_QbE0N7.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as i,c as s,a as e,b as t,d as n}from"./app-kq9lCQfY.js";const u={},c=e("p",null,[e("strong",null,"Join us in enhancing our documentation!")],-1),l=e("p",null,"We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!",-1),h=e("li",null,[e("strong",null,"Contact us with feedback"),t(": If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.")],-1),d=e("strong",null,"Create an issue",-1),m={href:"https://github.com/datasharingframework/datasharingframework.github.io/issues",target:"_blank",rel:"noopener noreferrer"},p=e("strong",null,"Contribute directly with a pull request",-1),g={href:"https://github.com/datasharingframework/datasharingframework.github.io",target:"_blank",rel:"noopener noreferrer"},f=e("p",null,"We're excited to see your suggestions and are grateful for every contribution that helps us improve. Let's build better documentation together!",-1);function y(b,w){const o=a("ExternalLinkIcon");return i(),s("div",null,[c,l,e("ol",null,[h,e("li",null,[d,t(": You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at "),e("a",m,[t("Data Sharing Framework Documentation"),n(o)]),t(" and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.")]),e("li",null,[p,t(": If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at "),e("a",g,[t("Data Sharing Framework Documentation"),n(o)]),t(" and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.")])]),f])}const v=r(u,[["render",y],["__file","documentation.html.vue"]]),x=JSON.parse(`{"path":"/v1.4.0/contribute/documentation.html","title":"Contribute documentation","lang":"en-US","frontmatter":{"title":"Contribute documentation","icon":"info"},"headers":[],"git":{"createdTime":1706191215000,"updatedTime":1706191215000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.74,"words":222},"filePathRelative":"v1.4.0/contribute/documentation.md","localizedDate":"January 25, 2024","excerpt":"

    Join us in enhancing our documentation!

    \\n

    We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!

    \\n
      \\n
    1. Contact us with feedback: If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.
    2. \\n
    3. Create an issue: You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at Data Sharing Framework Documentation and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.
    4. \\n
    5. Contribute directly with a pull request: If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at Data Sharing Framework Documentation and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.
    6. \\n
    "}`);export{v as comp,x as data}; diff --git a/assets/documentation.html-D45C1fbl.js b/assets/documentation.html-D45C1fbl.js new file mode 100644 index 000000000..edc6400c0 --- /dev/null +++ b/assets/documentation.html-D45C1fbl.js @@ -0,0 +1 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as i,c as s,a as e,b as t,d as n}from"./app-kq9lCQfY.js";const u={},c=e("p",null,[e("strong",null,"Join us in enhancing our documentation!")],-1),l=e("p",null,"We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!",-1),d=e("li",null,[e("strong",null,"Contact us with feedback"),t(": If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.")],-1),h=e("strong",null,"Create an issue",-1),m={href:"https://github.com/datasharingframework/datasharingframework.github.io/issues",target:"_blank",rel:"noopener noreferrer"},p=e("strong",null,"Contribute directly with a pull request",-1),g={href:"https://github.com/datasharingframework/datasharingframework.github.io",target:"_blank",rel:"noopener noreferrer"},f=e("p",null,"We're excited to see your suggestions and are grateful for every contribution that helps us improve. Let's build better documentation together!",-1);function y(b,_){const o=r("ExternalLinkIcon");return i(),s("div",null,[c,l,e("ol",null,[d,e("li",null,[h,t(": You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at "),e("a",m,[t("Data Sharing Framework Documentation"),n(o)]),t(" and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.")]),e("li",null,[p,t(": If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at "),e("a",g,[t("Data Sharing Framework Documentation"),n(o)]),t(" and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.")])]),f])}const v=a(u,[["render",y],["__file","documentation.html.vue"]]),x=JSON.parse(`{"path":"/v1.5.2/contribute/documentation.html","title":"Contribute documentation","lang":"en-US","frontmatter":{"title":"Contribute documentation","icon":"info"},"headers":[],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.74,"words":222},"filePathRelative":"v1.5.2/contribute/documentation.md","localizedDate":"July 8, 2024","excerpt":"

    Join us in enhancing our documentation!

    \\n

    We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!

    \\n
      \\n
    1. Contact us with feedback: If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.
    2. \\n
    3. Create an issue: You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at Data Sharing Framework Documentation and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.
    4. \\n
    5. Contribute directly with a pull request: If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at Data Sharing Framework Documentation and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.
    6. \\n
    "}`);export{v as comp,x as data}; diff --git a/assets/documentation.html-DQT8Cd3U.js b/assets/documentation.html-DQT8Cd3U.js new file mode 100644 index 000000000..e8fe8188b --- /dev/null +++ b/assets/documentation.html-DQT8Cd3U.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as i,c as s,a as e,b as t,d as n}from"./app-kq9lCQfY.js";const u={},c=e("p",null,[e("strong",null,"Join us in enhancing our documentation!")],-1),l=e("p",null,"We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!",-1),h=e("li",null,[e("strong",null,"Contact us with feedback"),t(": If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.")],-1),d=e("strong",null,"Create an issue",-1),m={href:"https://github.com/datasharingframework/datasharingframework.github.io/issues",target:"_blank",rel:"noopener noreferrer"},p=e("strong",null,"Contribute directly with a pull request",-1),g={href:"https://github.com/datasharingframework/datasharingframework.github.io",target:"_blank",rel:"noopener noreferrer"},f=e("p",null,"We're excited to see your suggestions and are grateful for every contribution that helps us improve. Let's build better documentation together!",-1);function y(b,w){const o=a("ExternalLinkIcon");return i(),s("div",null,[c,l,e("ol",null,[h,e("li",null,[d,t(": You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at "),e("a",m,[t("Data Sharing Framework Documentation"),n(o)]),t(" and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.")]),e("li",null,[p,t(": If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at "),e("a",g,[t("Data Sharing Framework Documentation"),n(o)]),t(" and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.")])]),f])}const v=r(u,[["render",y],["__file","documentation.html.vue"]]),x=JSON.parse(`{"path":"/v1.5.1/contribute/documentation.html","title":"Contribute documentation","lang":"en-US","frontmatter":{"title":"Contribute documentation","icon":"info"},"headers":[],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.74,"words":222},"filePathRelative":"v1.5.1/contribute/documentation.md","localizedDate":"April 17, 2024","excerpt":"

    Join us in enhancing our documentation!

    \\n

    We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!

    \\n
      \\n
    1. Contact us with feedback: If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.
    2. \\n
    3. Create an issue: You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at Data Sharing Framework Documentation and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.
    4. \\n
    5. Contribute directly with a pull request: If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at Data Sharing Framework Documentation and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.
    6. \\n
    "}`);export{v as comp,x as data}; diff --git a/assets/documentation.html-DZPnnDjT.js b/assets/documentation.html-DZPnnDjT.js new file mode 100644 index 000000000..ff68e68b0 --- /dev/null +++ b/assets/documentation.html-DZPnnDjT.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as i,c as s,a as e,b as t,d as n}from"./app-kq9lCQfY.js";const u={},c=e("p",null,[e("strong",null,"Join us in enhancing our documentation!")],-1),l=e("p",null,"We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!",-1),d=e("li",null,[e("strong",null,"Contact us with feedback"),t(": If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.")],-1),h=e("strong",null,"Create an issue",-1),m={href:"https://github.com/datasharingframework/datasharingframework.github.io/issues",target:"_blank",rel:"noopener noreferrer"},p=e("strong",null,"Contribute directly with a pull request",-1),g={href:"https://github.com/datasharingframework/datasharingframework.github.io",target:"_blank",rel:"noopener noreferrer"},f=e("p",null,"We're excited to see your suggestions and are grateful for every contribution that helps us improve. Let's build better documentation together!",-1);function y(b,_){const o=a("ExternalLinkIcon");return i(),s("div",null,[c,l,e("ol",null,[d,e("li",null,[h,t(": You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at "),e("a",m,[t("Data Sharing Framework Documentation"),n(o)]),t(" and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.")]),e("li",null,[p,t(": If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at "),e("a",g,[t("Data Sharing Framework Documentation"),n(o)]),t(" and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.")])]),f])}const v=r(u,[["render",y],["__file","documentation.html.vue"]]),x=JSON.parse(`{"path":"/stable/contribute/documentation.html","title":"Contribute documentation","lang":"en-US","frontmatter":{"title":"Contribute documentation","icon":"info"},"headers":[],"git":{"createdTime":null,"updatedTime":null,"contributors":[]},"readingTime":{"minutes":0.74,"words":222},"filePathRelative":"stable/contribute/documentation.md","excerpt":"

    Join us in enhancing our documentation!

    \\n

    We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!

    \\n
      \\n
    1. Contact us with feedback: If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.
    2. \\n
    3. Create an issue: You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at Data Sharing Framework Documentation and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.
    4. \\n
    5. Contribute directly with a pull request: If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at Data Sharing Framework Documentation and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.
    6. \\n
    "}`);export{v as comp,x as data}; diff --git a/assets/dsf-concept-Dbcu0twt.js b/assets/dsf-concept-Dbcu0twt.js new file mode 100644 index 000000000..5fb26f4e0 --- /dev/null +++ b/assets/dsf-concept-Dbcu0twt.js @@ -0,0 +1 @@ +const o="/photos/info/introduction/dsf-concept.png";export{o as _}; diff --git a/assets/dsf-for-dev.html-B0G-bUeQ.js b/assets/dsf-for-dev.html-B0G-bUeQ.js new file mode 100644 index 000000000..b32c24b6d --- /dev/null +++ b/assets/dsf-for-dev.html-B0G-bUeQ.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as t}from"./app-kq9lCQfY.js";const o={};function i(s,a){return r(),t("div")}const m=e(o,[["render",i],["__file","dsf-for-dev.html.vue"]]),d=JSON.parse('{"path":"/v1.5.0/dsf-for-dev.html","title":"DSF for Developers","lang":"en-US","frontmatter":{"title":"DSF for Developers","icon":"info"},"headers":[],"git":{"createdTime":1708419681000,"updatedTime":1708419681000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.5.0/dsf-for-dev.md","localizedDate":"February 20, 2024","excerpt":""}');export{m as comp,d as data}; diff --git a/assets/dsf-for-dev.html-BY2mYYLX.js b/assets/dsf-for-dev.html-BY2mYYLX.js new file mode 100644 index 000000000..39e15921a --- /dev/null +++ b/assets/dsf-for-dev.html-BY2mYYLX.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o}from"./app-kq9lCQfY.js";const r={};function i(s,a){return t(),o("div")}const m=e(r,[["render",i],["__file","dsf-for-dev.html.vue"]]),d=JSON.parse('{"path":"/v1.1.0/dsf-for-dev.html","title":"DSF for Developers","lang":"en-US","frontmatter":{"title":"DSF for Developers","icon":"info"},"headers":[],"git":{"createdTime":1692790324000,"updatedTime":1692790324000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.1.0/dsf-for-dev.md","localizedDate":"August 23, 2023","excerpt":""}');export{m as comp,d as data}; diff --git a/assets/dsf-for-dev.html-CM31T0vP.js b/assets/dsf-for-dev.html-CM31T0vP.js new file mode 100644 index 000000000..a96913487 --- /dev/null +++ b/assets/dsf-for-dev.html-CM31T0vP.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o}from"./app-kq9lCQfY.js";const r={};function i(s,n){return t(),o("div")}const c=e(r,[["render",i],["__file","dsf-for-dev.html.vue"]]),d=JSON.parse('{"path":"/stable/dsf-for-dev.html","title":"DSF for Developers","lang":"en-US","frontmatter":{"title":"DSF for Developers","icon":"info"},"headers":[],"git":{"createdTime":1690473388000,"updatedTime":1692790324000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"stable/dsf-for-dev.md","localizedDate":"July 27, 2023","excerpt":""}');export{c as comp,d as data}; diff --git a/assets/dsf-for-dev.html-Cwbe2fMU.js b/assets/dsf-for-dev.html-Cwbe2fMU.js new file mode 100644 index 000000000..414e7933a --- /dev/null +++ b/assets/dsf-for-dev.html-Cwbe2fMU.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o}from"./app-kq9lCQfY.js";const r={};function i(s,a){return t(),o("div")}const m=e(r,[["render",i],["__file","dsf-for-dev.html.vue"]]),d=JSON.parse('{"path":"/v1.3.1/dsf-for-dev.html","title":"DSF for Developers","lang":"en-US","frontmatter":{"title":"DSF for Developers","icon":"info"},"headers":[],"git":{"createdTime":1698748420000,"updatedTime":1698748420000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.3.1/dsf-for-dev.md","localizedDate":"October 31, 2023","excerpt":""}');export{m as comp,d as data}; diff --git a/assets/dsf-for-dev.html-DU7CIKrg.js b/assets/dsf-for-dev.html-DU7CIKrg.js new file mode 100644 index 000000000..10c41ca9f --- /dev/null +++ b/assets/dsf-for-dev.html-DU7CIKrg.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o}from"./app-kq9lCQfY.js";const r={};function i(s,a){return t(),o("div")}const m=e(r,[["render",i],["__file","dsf-for-dev.html.vue"]]),d=JSON.parse('{"path":"/v1.5.1/dsf-for-dev.html","title":"DSF for Developers","lang":"en-US","frontmatter":{"title":"DSF for Developers","icon":"info"},"headers":[],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.5.1/dsf-for-dev.md","localizedDate":"April 17, 2024","excerpt":""}');export{m as comp,d as data}; diff --git a/assets/dsf-for-dev.html-DiPpVl74.js b/assets/dsf-for-dev.html-DiPpVl74.js new file mode 100644 index 000000000..f8227f77d --- /dev/null +++ b/assets/dsf-for-dev.html-DiPpVl74.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o}from"./app-kq9lCQfY.js";const r={};function i(s,a){return t(),o("div")}const m=e(r,[["render",i],["__file","dsf-for-dev.html.vue"]]),d=JSON.parse('{"path":"/v1.4.0/dsf-for-dev.html","title":"DSF for Developers","lang":"en-US","frontmatter":{"title":"DSF for Developers","icon":"info"},"headers":[],"git":{"createdTime":1702917645000,"updatedTime":1702917645000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.4.0/dsf-for-dev.md","localizedDate":"December 18, 2023","excerpt":""}');export{m as comp,d as data}; diff --git a/assets/dsf-for-dev.html-DtYXgtPv.js b/assets/dsf-for-dev.html-DtYXgtPv.js new file mode 100644 index 000000000..526260e5b --- /dev/null +++ b/assets/dsf-for-dev.html-DtYXgtPv.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o}from"./app-kq9lCQfY.js";const r={};function i(s,a){return t(),o("div")}const m=e(r,[["render",i],["__file","dsf-for-dev.html.vue"]]),d=JSON.parse('{"path":"/v1.0.0/dsf-for-dev.html","title":"DSF for Developers","lang":"en-US","frontmatter":{"title":"DSF for Developers","icon":"info"},"headers":[],"git":{"createdTime":1692708510000,"updatedTime":1692708510000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.0.0/dsf-for-dev.md","localizedDate":"August 22, 2023","excerpt":""}');export{m as comp,d as data}; diff --git a/assets/dsf-for-dev.html-DyM8l128.js b/assets/dsf-for-dev.html-DyM8l128.js new file mode 100644 index 000000000..66531e020 --- /dev/null +++ b/assets/dsf-for-dev.html-DyM8l128.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o}from"./app-kq9lCQfY.js";const r={};function a(n,i){return t(),o("div")}const c=e(r,[["render",a],["__file","dsf-for-dev.html.vue"]]),m=JSON.parse('{"path":"/v1.5.2/dsf-for-dev.html","title":"DSF for Developers","lang":"en-US","frontmatter":{"title":"DSF for Developers","icon":"info"},"headers":[],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.5.2/dsf-for-dev.md","localizedDate":"July 8, 2024","excerpt":""}');export{c as comp,m as data}; diff --git a/assets/dsf-for-dev.html-gVMw1jIa.js b/assets/dsf-for-dev.html-gVMw1jIa.js new file mode 100644 index 000000000..85cc1c144 --- /dev/null +++ b/assets/dsf-for-dev.html-gVMw1jIa.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o}from"./app-kq9lCQfY.js";const r={};function i(s,a){return t(),o("div")}const m=e(r,[["render",i],["__file","dsf-for-dev.html.vue"]]),d=JSON.parse('{"path":"/v1.3.2/dsf-for-dev.html","title":"DSF for Developers","lang":"en-US","frontmatter":{"title":"DSF for Developers","icon":"info"},"headers":[],"git":{"createdTime":1701710218000,"updatedTime":1701710218000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.3.2/dsf-for-dev.md","localizedDate":"December 4, 2023","excerpt":""}');export{m as comp,d as data}; diff --git a/assets/dsf-for-dev.html-mtyY8dnA.js b/assets/dsf-for-dev.html-mtyY8dnA.js new file mode 100644 index 000000000..2d9dfd6a2 --- /dev/null +++ b/assets/dsf-for-dev.html-mtyY8dnA.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o}from"./app-kq9lCQfY.js";const r={};function i(s,a){return t(),o("div")}const m=e(r,[["render",i],["__file","dsf-for-dev.html.vue"]]),d=JSON.parse('{"path":"/v1.3.0/dsf-for-dev.html","title":"DSF for Developers","lang":"en-US","frontmatter":{"title":"DSF for Developers","icon":"info"},"headers":[],"git":{"createdTime":1696944513000,"updatedTime":1696944513000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.3.0/dsf-for-dev.md","localizedDate":"October 10, 2023","excerpt":""}');export{m as comp,d as data}; diff --git a/assets/dsf-for-dev.html-ztYNqQri.js b/assets/dsf-for-dev.html-ztYNqQri.js new file mode 100644 index 000000000..d8371801d --- /dev/null +++ b/assets/dsf-for-dev.html-ztYNqQri.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o}from"./app-kq9lCQfY.js";const r={};function i(s,a){return t(),o("div")}const m=e(r,[["render",i],["__file","dsf-for-dev.html.vue"]]),d=JSON.parse('{"path":"/v1.2.0/dsf-for-dev.html","title":"DSF for Developers","lang":"en-US","frontmatter":{"title":"DSF for Developers","icon":"info"},"headers":[],"git":{"createdTime":1694544770000,"updatedTime":1694544770000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.2.0/dsf-for-dev.md","localizedDate":"September 12, 2023","excerpt":""}');export{m as comp,d as data}; diff --git a/assets/eclipseContent.html-kdqNoPL9.js b/assets/eclipseContent.html-kdqNoPL9.js new file mode 100644 index 000000000..15ceed8a6 --- /dev/null +++ b/assets/eclipseContent.html-kdqNoPL9.js @@ -0,0 +1,323 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as c,c as u,a as n,d as s,w as t,e as l,b as p}from"./app-kq9lCQfY.js";const i={},k=l(`
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    +<profiles version="15">
    +    <profile kind="CodeFormatterProfile" name="highmed_dsf" version="15">
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
    +        <setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="120"/>
    +        <setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_method_body_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_loops" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_module_statements" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="2147483647"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
    +        <setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_code_block_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="tab"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
    +        <setting id="org.eclipse.jdt.core.formatter.lineSplit" value="120"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
    +    </profile>
    +</profiles>
    +
    `,1);function r(g,_){const a=o("RouteLink");return c(),u("div",null,[n("p",null,[s(a,{to:"/oldstable/code/code.html"},{default:t(()=>[p("Back")]),_:1})]),k,n("p",null,[s(a,{to:"/oldstable/code/code.html"},{default:t(()=>[p("Back")]),_:1})])])}const d=e(i,[["render",r],["__file","eclipseContent.html.vue"]]),q=JSON.parse('{"path":"/oldstable/code/eclipseContent.html","title":"Eclipse code-style configurations","lang":"en-US","frontmatter":{"title":"Eclipse code-style configurations","icon":"code"},"headers":[],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":7.13,"words":2138},"filePathRelative":"oldstable/code/eclipseContent.md","localizedDate":"August 23, 2023","excerpt":"

    Back

    \\n
    <?xml version=\\"1.0\\" encoding=\\"UTF-8\\" standalone=\\"no\\"?>\\n<profiles version=\\"15\\">\\n    <profile kind=\\"CodeFormatterProfile\\" name=\\"highmed_dsf\\" version=\\"15\\">\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_ellipsis\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment\\" value=\\"common_lines\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation\\" value=\\"common_lines\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.blank_lines_after_imports\\" value=\\"1\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement\\" value=\\"common_lines\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.format_javadoc_comments\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.indentation.size\\" value=\\"4\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration\\" value=\\"common_lines\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.align_with_spaces\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.disabling_tag\\" value=\\"@formatter:off\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.continuation_indentation\\" value=\\"2\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_enum_constants\\" value=\\"0\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.blank_lines_before_imports\\" value=\\"1\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.blank_lines_after_package\\" value=\\"1\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_binary_operator\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement\\" value=\\"common_lines\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.indent_root_tags\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.enabling_tag\\" value=\\"@formatter:on\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations\\" value=\\"1\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references\\" value=\\"0\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line\\" value=\\"one_line_never\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.indent_statements_compare_to_block\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration\\" value=\\"next_line\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.line_length\\" value=\\"120\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.use_on_off_tags\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.keep_method_body_on_one_line\\" value=\\"one_line_never\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line\\" value=\\"one_line_never\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.brace_position_for_method_declaration\\" value=\\"next_line\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line\\" value=\\"one_line_never\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line\\" value=\\"one_line_never\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body\\" value=\\"0\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_binary_expression\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause\\" value=\\"common_lines\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line\\" value=\\"one_line_never\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.brace_position_for_block\\" value=\\"next_line\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration\\" value=\\"next_line\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.brace_position_for_lambda_body\\" value=\\"next_line\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.compact_else_if\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_type_parameters\\" value=\\"0\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_compact_loops\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_binary_operator\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_unary_operator\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve\\" value=\\"1\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation\\" value=\\"common_lines\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_ellipsis\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.format_line_comments\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.align_type_members_on_columns\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_assignment\\" value=\\"0\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_module_statements\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line\\" value=\\"one_line_never\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration\\" value=\\"0\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_conditional_expression\\" value=\\"80\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration\\" value=\\"next_line\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.brace_position_for_block_in_case\\" value=\\"next_line\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.format_header\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_method_declaration\\" value=\\"0\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.join_wrapped_lines\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.wrap_before_conditional_operator\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines\\" value=\\"2147483647\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration\\" value=\\"next_line\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_resources_in_try\\" value=\\"80\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause\\" value=\\"common_lines\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.keep_code_block_on_one_line\\" value=\\"one_line_never\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.tabulation.size\\" value=\\"4\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.format_source_code\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.blank_lines_before_field\\" value=\\"0\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer\\" value=\\"2\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.blank_lines_before_method\\" value=\\"1\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.wrap_before_assignment_operator\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.brace_position_for_switch\\" value=\\"next_line\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.format_html\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration\\" value=\\"common_lines\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_compact_if\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line\\" value=\\"one_line_never\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.indent_empty_lines\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_type_arguments\\" value=\\"0\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_unary_operator\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation\\" value=\\"0\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk\\" value=\\"1\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_new_line_after_label\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.blank_lines_before_member_type\\" value=\\"1\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_semicolon\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.format_block_comments\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.indent_statements_compare_to_body\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_multiple_fields\\" value=\\"16\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.brace_position_for_array_initializer\\" value=\\"end_of_line\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.wrap_before_binary_operator\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration\\" value=\\"common_lines\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line\\" value=\\"one_line_never\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.brace_position_for_enum_constant\\" value=\\"next_line\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.brace_position_for_type_declaration\\" value=\\"next_line\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.blank_lines_before_package\\" value=\\"0\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header\\" value=\\"0\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line\\" value=\\"false\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.join_lines_in_comments\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.comment.indent_parameter_description\\" value=\\"true\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement\\" value=\\"insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.tabulation.char\\" value=\\"tab\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.blank_lines_between_import_groups\\" value=\\"1\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.lineSplit\\" value=\\"120\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation\\" value=\\"do not insert\\"/>\\n        <setting id=\\"org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch\\" value=\\"insert\\"/>\\n    </profile>\\n</profiles>\\n
    "}');export{d as comp,q as data}; diff --git a/assets/ex11-docker-composeyml.html-MLKKlt0T.js b/assets/ex11-docker-composeyml.html-MLKKlt0T.js new file mode 100644 index 000000000..9d2251add --- /dev/null +++ b/assets/ex11-docker-composeyml.html-MLKKlt0T.js @@ -0,0 +1,459 @@ +import{_ as p}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as l,c,a as t,d as a,w as e,b as n,e as u}from"./app-kq9lCQfY.js";const o={},r=u(`

    docker-compose.yml

    version: '3.8'
    +services:
    +  proxy:
    +    image: nginx:1.23
    +    restart: "no"
    +    ports:
    +      - 127.0.0.1:443:443
    +    secrets:
    +      - proxy_certificate_and_int_cas.pem
    +      - proxy_certificate_private_key.pem
    +      - proxy_trusted_client_cas.pem
    +    volumes:
    +      - type: bind
    +        source: ./proxy/conf.d
    +        target: /etc/nginx/conf.d
    +        read_only: true
    +      - type: bind
    +        source: ./proxy/nginx.conf
    +        target: /etc/nginx/nginx.conf
    +        read_only: true
    +    networks:
    +      dic-fhir-frontend:
    +        ipv4_address: 172.20.0.66
    +      hrp-fhir-frontend:
    +        ipv4_address: 172.20.0.82
    +      cos-fhir-frontend:
    +        ipv4_address: 172.20.0.98
    +      internet:
    +        aliases:
    +          - cos
    +          - dic
    +          - hrp
    +    environment:
    +      TZ: Europe/Berlin
    +
    +  db:
    +    image: postgres:13
    +    restart: "no"
    +    healthcheck:
    +      test: ["CMD-SHELL", "pg_isready -U liquibase_user -d postgres"]
    +      interval: 10s
    +      timeout: 5s
    +      retries: 5
    +    environment:
    +      TZ: Europe/Berlin
    +      POSTGRES_PASSWORD_FILE: /run/secrets/db_liquibase.password
    +      POSTGRES_USER: liquibase_user
    +      POSTGRES_DB: postgres
    +    networks:
    +      - cos-fhir-backend
    +      - dic-fhir-backend
    +      - hrp-fhir-backend
    +      - cos-bpe-backend
    +      - dic-bpe-backend
    +      - hrp-bpe-backend
    +    secrets:
    +      - db_liquibase.password
    +    volumes:
    +      - type: volume
    +        source: db-data
    +        target: /var/lib/postgresql/data
    +      - type: bind
    +        source: ./db/init-db.sh
    +        target: /docker-entrypoint-initdb.d/init-db.sh
    +        read_only: true
    +
    +  cos-fhir:
    +    image: ghcr.io/highmed/fhir:0.7.0
    +    restart: "no"
    +    ports:
    +      - 127.0.0.1:5002:5002
    +    secrets:
    +      - db_liquibase.password
    +      - db_cos_fhir_user.password
    +      - db_cos_fhir_user_permanent_delete.password
    +      - app_client_trust_certificates.pem
    +      - app_cos_client_certificate.pem
    +      - app_cos_client_certificate_private_key.pem
    +      - app_client_certificate_private_key.pem.password
    +    volumes:
    +      - type: bind
    +        source: ./cos/fhir/conf/bundle.xml
    +        target: /opt/fhir/conf/bundle.xml
    +      - type: bind
    +        source: ./cos/fhir/log
    +        target: /opt/fhir/log
    +    environment:
    +      TZ: Europe/Berlin
    +      EXTRA_JVM_ARGS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5002
    +      ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE: /run/secrets/db_liquibase.password
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD_FILE: /run/secrets/db_cos_fhir_user.password
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE: /run/secrets/db_cos_fhir_user_permanent_delete.password
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_TRUST_CERTIFICATES: /run/secrets/app_client_trust_certificates.pem
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE: /run/secrets/app_cos_client_certificate.pem
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY: /run/secrets/app_cos_client_certificate_private_key.pem
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
    +      ORG_HIGHMED_DSF_FHIR_DB_URL: jdbc:postgresql://db/cos_fhir
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_GROUP: cos_fhir_users
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_USERNAME: cos_fhir_server_user
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP: cos_fhir_permanent_delete_users
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME: cos_fhir_server_permanent_delete_user
    +      ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL: https://cos/fhir
    +      ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: Test_COS
    +      ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS: ${COS_USER_THUMBPRINTS}
    +      ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE: ${COS_USER_THUMBPRINTS_PERMANENT_DELETE}
    +    networks:
    +      cos-fhir-frontend:
    +        ipv4_address: 172.20.0.99
    +      cos-fhir-backend:
    +      internet:
    +    depends_on:
    +      - db
    +      - proxy
    +  cos-bpe:
    +    image: ghcr.io/highmed/bpe:0.7.0
    +    restart: "no"
    +    ports:
    +      - 127.0.0.1:5005:5005
    +    secrets:
    +      - db_liquibase.password
    +      - db_cos_bpe_user.password
    +      - db_cos_bpe_user_camunda.password
    +      - app_client_trust_certificates.pem
    +      - app_cos_client_certificate.pem
    +      - app_cos_client_certificate_private_key.pem
    +      - app_client_certificate_private_key.pem.password
    +    volumes:
    +      - type: bind
    +        source: ./cos/bpe/plugin
    +        target: /opt/bpe/plugin
    +        read_only: true
    +      - type: bind
    +        source: ./cos/bpe/process
    +        target: /opt/bpe/process
    +        read_only: true
    +      - type: bind
    +        source: ./cos/bpe/log
    +        target: /opt/bpe/log
    +      - type: bind
    +        source: ./cos/bpe/last_event
    +        target: /opt/bpe/last_event
    +    environment:
    +      TZ: Europe/Berlin
    +      EXTRA_JVM_ARGS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
    +      ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE: /run/secrets/db_liquibase.password
    +      ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD_FILE: /run/secrets/db_cos_bpe_user.password
    +      ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE: /run/secrets/db_cos_bpe_user_camunda.password
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_TRUST_CERTIFICATES: /run/secrets/app_client_trust_certificates.pem
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE: /run/secrets/app_cos_client_certificate.pem
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY: /run/secrets/app_cos_client_certificate_private_key.pem
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
    +      ORG_HIGHMED_DSF_BPE_DB_URL: jdbc:postgresql://db/cos_bpe
    +      ORG_HIGHMED_DSF_BPE_DB_USER_GROUP: cos_bpe_users
    +      ORG_HIGHMED_DSF_BPE_DB_USER_USERNAME: cos_bpe_server_user
    +      ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_GROUP: cos_camunda_users
    +      ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_USERNAME: cos_camunda_server_user
    +      ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: Test_COS
    +      ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://cos/fhir
    +    networks:
    +      cos-bpe-frontend:
    +      cos-bpe-backend:
    +      internet:
    +    depends_on:
    +      - db
    +      - cos-fhir
    +
    +  dic-fhir:
    +    image: ghcr.io/highmed/fhir:0.7.0
    +    restart: "no"
    +    ports:
    +      - 127.0.0.1:5000:5000
    +    secrets:
    +      - db_liquibase.password
    +      - db_dic_fhir_user.password
    +      - db_dic_fhir_user_permanent_delete.password
    +      - app_client_trust_certificates.pem
    +      - app_dic_client_certificate.pem
    +      - app_dic_client_certificate_private_key.pem
    +      - app_client_certificate_private_key.pem.password
    +    volumes:
    +      - type: bind
    +        source: ./dic/fhir/conf/bundle.xml
    +        target: /opt/fhir/conf/bundle.xml
    +      - type: bind
    +        source: ./dic/fhir/log
    +        target: /opt/fhir/log
    +    environment:
    +      TZ: Europe/Berlin
    +      EXTRA_JVM_ARGS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5000
    +      ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE: /run/secrets/db_liquibase.password
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD_FILE: /run/secrets/db_dic_fhir_user.password
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE: /run/secrets/db_dic_fhir_user_permanent_delete.password
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_TRUST_CERTIFICATES: /run/secrets/app_client_trust_certificates.pem
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE: /run/secrets/app_dic_client_certificate.pem
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY: /run/secrets/app_dic_client_certificate_private_key.pem
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
    +      ORG_HIGHMED_DSF_FHIR_DB_URL: jdbc:postgresql://db/dic_fhir
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_GROUP: dic_fhir_users
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_USERNAME: dic_fhir_server_user
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP: dic_fhir_permanent_delete_users
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME: dic_fhir_server_permanent_delete_user
    +      ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL: https://dic/fhir
    +      ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: Test_DIC
    +      ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS: ${DIC_USER_THUMBPRINTS}
    +      ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE: ${DIC_USER_THUMBPRINTS_PERMANENT_DELETE}
    +    networks:
    +      dic-fhir-frontend:
    +        ipv4_address: 172.20.0.67
    +      dic-fhir-backend:
    +      internet:
    +    depends_on:
    +      - db
    +      - proxy
    +  dic-bpe:
    +    image: ghcr.io/highmed/bpe:0.7.0
    +    restart: "no"
    +    ports:
    +      - 127.0.0.1:5003:5003
    +    secrets:
    +      - db_liquibase.password
    +      - db_dic_bpe_user.password
    +      - db_dic_bpe_user_camunda.password
    +      - app_client_trust_certificates.pem
    +      - app_dic_client_certificate.pem
    +      - app_dic_client_certificate_private_key.pem
    +      - app_client_certificate_private_key.pem.password
    +    volumes:
    +      - type: bind
    +        source: ./dic/bpe/plugin
    +        target: /opt/bpe/plugin
    +        read_only: true
    +      - type: bind
    +        source: ./dic/bpe/process
    +        target: /opt/bpe/process
    +        read_only: true
    +      - type: bind
    +        source: ./dic/bpe/log
    +        target: /opt/bpe/log
    +      - type: bind
    +        source: ./dic/bpe/last_event
    +        target: /opt/bpe/last_event
    +    environment:
    +      TZ: Europe/Berlin
    +      EXTRA_JVM_ARGS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5003
    +      ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE: /run/secrets/db_liquibase.password
    +      ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD_FILE: /run/secrets/db_dic_bpe_user.password
    +      ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE: /run/secrets/db_dic_bpe_user_camunda.password
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_TRUST_CERTIFICATES: /run/secrets/app_client_trust_certificates.pem
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE: /run/secrets/app_dic_client_certificate.pem
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY: /run/secrets/app_dic_client_certificate_private_key.pem
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
    +      ORG_HIGHMED_DSF_BPE_DB_URL: jdbc:postgresql://db/dic_bpe
    +      ORG_HIGHMED_DSF_BPE_DB_USER_GROUP: dic_bpe_users
    +      ORG_HIGHMED_DSF_BPE_DB_USER_USERNAME: dic_bpe_server_user
    +      ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_GROUP: dic_camunda_users
    +      ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_USERNAME: dic_camunda_server_user
    +      ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: Test_DIC
    +      ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://dic/fhir
    +    networks:
    +      dic-bpe-frontend:
    +      dic-bpe-backend:
    +      internet:
    +    depends_on:
    +      - db
    +      - dic-fhir
    +
    +  hrp-fhir:
    +    image: ghcr.io/highmed/fhir:0.7.0
    +    restart: "no"
    +    ports:
    +      - 127.0.0.1:5001:5001
    +    secrets:
    +      - db_liquibase.password
    +      - db_hrp_fhir_user.password
    +      - db_hrp_fhir_user_permanent_delete.password
    +      - app_client_trust_certificates.pem
    +      - app_hrp_client_certificate.pem
    +      - app_hrp_client_certificate_private_key.pem
    +      - app_client_certificate_private_key.pem.password
    +    volumes:
    +      - type: bind
    +        source: ./hrp/fhir/conf/bundle.xml
    +        target: /opt/fhir/conf/bundle.xml
    +      - type: bind
    +        source: ./hrp/fhir/log
    +        target: /opt/fhir/log
    +    environment:
    +      TZ: Europe/Berlin
    +      EXTRA_JVM_ARGS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5001
    +      ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE: /run/secrets/db_liquibase.password
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD_FILE: /run/secrets/db_hrp_fhir_user.password
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE: /run/secrets/db_hrp_fhir_user_permanent_delete.password
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_TRUST_CERTIFICATES: /run/secrets/app_client_trust_certificates.pem
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE: /run/secrets/app_hrp_client_certificate.pem
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY: /run/secrets/app_hrp_client_certificate_private_key.pem
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
    +      ORG_HIGHMED_DSF_FHIR_DB_URL: jdbc:postgresql://db/hrp_fhir
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_GROUP: hrp_fhir_users
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_USERNAME: hrp_fhir_server_user
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP: hrp_fhir_permanent_delete_users
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME: hrp_fhir_server_permanent_delete_user
    +      ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL: https://hrp/fhir
    +      ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS: ${HRP_USER_THUMBPRINTS}
    +      ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE: ${HRP_USER_THUMBPRINTS_PERMANENT_DELETE}
    +      ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: Test_HRP
    +    networks:
    +      hrp-fhir-frontend:
    +        ipv4_address: 172.20.0.83
    +      hrp-fhir-backend:
    +      internet:
    +    depends_on:
    +      - db
    +      - proxy
    +  hrp-bpe:
    +    image: ghcr.io/highmed/bpe:0.7.0
    +    restart: "no"
    +    ports:
    +      - 127.0.0.1:5004:5004
    +    secrets:
    +      - db_liquibase.password
    +      - db_hrp_bpe_user.password
    +      - db_hrp_bpe_user_camunda.password
    +      - app_client_trust_certificates.pem
    +      - app_hrp_client_certificate.pem
    +      - app_hrp_client_certificate_private_key.pem
    +      - app_client_certificate_private_key.pem.password
    +    volumes:
    +      - type: bind
    +        source: ./hrp/bpe/plugin
    +        target: /opt/bpe/plugin
    +        read_only: true
    +      - type: bind
    +        source: ./hrp/bpe/process
    +        target: /opt/bpe/process
    +        read_only: true
    +      - type: bind
    +        source: ./hrp/bpe/log
    +        target: /opt/bpe/log
    +      - type: bind
    +        source: ./hrp/bpe/last_event
    +        target: /opt/bpe/last_event
    +    environment:
    +      TZ: Europe/Berlin
    +      EXTRA_JVM_ARGS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5004
    +      ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE: /run/secrets/db_liquibase.password
    +      ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD_FILE: /run/secrets/db_hrp_bpe_user.password
    +      ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE: /run/secrets/db_hrp_bpe_user_camunda.password
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_TRUST_CERTIFICATES: /run/secrets/app_client_trust_certificates.pem
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE: /run/secrets/app_hrp_client_certificate.pem
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY: /run/secrets/app_hrp_client_certificate_private_key.pem
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
    +      ORG_HIGHMED_DSF_BPE_DB_URL: jdbc:postgresql://db/hrp_bpe
    +      ORG_HIGHMED_DSF_BPE_DB_USER_GROUP: hrp_bpe_users
    +      ORG_HIGHMED_DSF_BPE_DB_USER_USERNAME: hrp_bpe_server_user
    +      ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_GROUP: hrp_camunda_users
    +      ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_USERNAME: hrp_camunda_server_user
    +      ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: Test_HRP
    +      ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://hrp/fhir
    +    networks:
    +      hrp-bpe-frontend:
    +      hrp-bpe-backend:
    +      internet:
    +    depends_on:
    +      - db
    +      - hrp-fhir
    +
    +secrets:
    +  proxy_certificate_and_int_cas.pem:
    +    file: ./secrets/proxy_certificate_and_int_cas.pem
    +  proxy_certificate_private_key.pem:
    +    file: ./secrets/proxy_certificate_private_key.pem
    +  proxy_trusted_client_cas.pem:
    +    file: ./secrets/proxy_trusted_client_cas.pem
    +
    +  db_liquibase.password:
    +    file: ./secrets/db_liquibase.password
    +
    +  db_dic_fhir_user.password:
    +    file: ./secrets/db_dic_fhir_user.password
    +  db_dic_fhir_user_permanent_delete.password:
    +    file: ./secrets/db_dic_fhir_user_permanent_delete.password
    +  db_dic_bpe_user.password:
    +    file: ./secrets/db_dic_bpe_user.password
    +  db_dic_bpe_user_camunda.password:
    +    file: ./secrets/db_dic_bpe_user_camunda.password
    +
    +  db_hrp_fhir_user.password:
    +    file: ./secrets/db_hrp_fhir_user.password
    +  db_hrp_fhir_user_permanent_delete.password:
    +    file: ./secrets/db_hrp_fhir_user_permanent_delete.password
    +  db_hrp_bpe_user.password:
    +    file: ./secrets/db_hrp_bpe_user.password
    +  db_hrp_bpe_user_camunda.password:
    +    file: ./secrets/db_hrp_bpe_user_camunda.password
    +
    +  db_cos_fhir_user.password:
    +    file: ./secrets/db_cos_fhir_user.password
    +  db_cos_fhir_user_permanent_delete.password:
    +    file: ./secrets/db_cos_fhir_user_permanent_delete.password
    +  db_cos_bpe_user.password:
    +    file: ./secrets/db_cos_bpe_user.password
    +  db_cos_bpe_user_camunda.password:
    +    file: ./secrets/db_cos_bpe_user_camunda.password
    +
    +  app_client_trust_certificates.pem:
    +    file: ./secrets/app_client_trust_certificates.pem
    +  app_client_certificate_private_key.pem.password:
    +    file: ./secrets/app_client_certificate_private_key.pem.password
    +
    +  app_dic_client_certificate.pem:
    +    file: ./secrets/app_dic_client_certificate.pem
    +  app_dic_client_certificate_private_key.pem:
    +    file: ./secrets/app_dic_client_certificate_private_key.pem
    +
    +  app_hrp_client_certificate.pem:
    +    file: ./secrets/app_hrp_client_certificate.pem
    +  app_hrp_client_certificate_private_key.pem:
    +    file: ./secrets/app_hrp_client_certificate_private_key.pem
    +
    +  app_cos_client_certificate.pem:
    +    file: ./secrets/app_cos_client_certificate.pem
    +  app_cos_client_certificate_private_key.pem:
    +    file: ./secrets/app_cos_client_certificate_private_key.pem
    +
    +networks:
    +  internet:
    +  dic-fhir-frontend:
    +    driver: bridge
    +    ipam:
    +      driver: default
    +      config:
    +        - subnet: 172.20.0.64/28
    +  dic-fhir-backend:
    +  dic-bpe-frontend:
    +  dic-bpe-backend:
    +  hrp-fhir-frontend:
    +    driver: bridge
    +    ipam:
    +      driver: default
    +      config:
    +        - subnet: 172.20.0.80/28
    +  hrp-fhir-backend:
    +  hrp-bpe-frontend:
    +  hrp-bpe-backend:
    +  cos-fhir-frontend:
    +    driver: bridge
    +    ipam:
    +      driver: default
    +      config:
    +        - subnet: 172.20.0.96/28
    +  cos-fhir-backend:
    +  cos-bpe-frontend:
    +  cos-bpe-backend:
    +
    +
    +volumes:
    +  db-data:
    +    name: dsf-process-tutorial-db
    +
    `,2);function k(d,_){const s=i("RouteLink");return l(),c("div",null,[t("p",null,[a(s,{to:"/oldstable/tutorial/prerequisites.html"},{default:e(()=>[n("Prerequisites")]),_:1}),n(" | "),a(s,{to:"/oldstable/tutorial/exercise1-simpleProcess.html"},{default:e(()=>[n("Exercise 1")]),_:1}),n(" | "),a(s,{to:"/oldstable/tutorial/exercise11-processDebugging.html"},{default:e(()=>[n("Exercise 1.1")]),_:1}),n(" | "),a(s,{to:"/oldstable/tutorial/exercise2-inputParameters.html"},{default:e(()=>[n("Exercise 2")]),_:1}),n(" | "),a(s,{to:"/oldstable/tutorial/exercise3-messageEvents.html"},{default:e(()=>[n("Exercise 3")]),_:1}),n(" | "),a(s,{to:"/oldstable/tutorial/exercise4-exclusiveGateways.html"},{default:e(()=>[n("Exercise 4")]),_:1}),n(" | "),a(s,{to:"/oldstable/tutorial/exercise5-eventBasedGateways.html"},{default:e(()=>[n("Exercise 5")]),_:1})]),r,t("p",null,[a(s,{to:"/oldstable/tutorial/prerequisites.html"},{default:e(()=>[n("Prerequisites")]),_:1}),n(" | "),a(s,{to:"/oldstable/tutorial/exercise1-simpleProcess.html"},{default:e(()=>[n("Exercise 1")]),_:1}),n(" | "),a(s,{to:"/oldstable/tutorial/exercise11-processDebugging.html"},{default:e(()=>[n("Exercise 1.1")]),_:1}),n(" | "),a(s,{to:"/oldstable/tutorial/exercise2-inputParameters.html"},{default:e(()=>[n("Exercise 2")]),_:1}),n(" | "),a(s,{to:"/oldstable/tutorial/exercise3-messageEvents.html"},{default:e(()=>[n("Exercise 3")]),_:1}),n(" | "),a(s,{to:"/oldstable/tutorial/exercise4-exclusiveGateways.html"},{default:e(()=>[n("Exercise 4")]),_:1}),n(" | "),a(s,{to:"/oldstable/tutorial/exercise5-eventBasedGateways.html"},{default:e(()=>[n("Exercise 5")]),_:1})])])}const m=p(o,[["render",k],["__file","ex11-docker-composeyml.html.vue"]]),E=JSON.parse('{"path":"/oldstable/tutorial/ex11-docker-composeyml.html","title":"Exercise 1.1 - Process Debugging","lang":"en-US","frontmatter":{"title":"Exercise 1.1 - Process Debugging","icon":"slides"},"headers":[{"level":3,"title":"docker-compose.yml","slug":"docker-compose-yml","link":"#docker-compose-yml","children":[]}],"git":{"createdTime":1692783801000,"updatedTime":1692786258000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":3.1,"words":931},"filePathRelative":"oldstable/tutorial/ex11-docker-composeyml.md","localizedDate":"August 23, 2023","excerpt":"

    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    "}');export{m as comp,E as data}; diff --git a/assets/exercise1-simpleProcess.html-1gmKbyng.js b/assets/exercise1-simpleProcess.html-1gmKbyng.js new file mode 100644 index 000000000..377fd208e --- /dev/null +++ b/assets/exercise1-simpleProcess.html-1gmKbyng.js @@ -0,0 +1,4 @@ +import{_ as c}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as l,c as d,a as t,d as s,w as a,b as e,e as i}from"./app-kq9lCQfY.js";const h={},u=i('

    Exercise 1 - Simple Process

    The first exercise focuses on setting up the testing environment used in this tutorial and shows how to implement and execute a simple BPMN process.

    With this exercise we will take a look at the general setup of the tutorial code base, modify a service class and execute the service within a simple demo process.

    Introduction


    Tutorial Code Base Structure and Docker Test Setup

    The tutorial project consists of three parts: A test-data-generator project used to generate X.509 certificates and FHIR resources during the maven build of the project. The certificates and FHIR resources are needed to start DSF instances simulating installations at three different organizations used for this tutorial. The DSF instances are configured using a docker-compose.yml file in the test-setup folder. The docker-compose test setup uses a single PostgreSQL database server, a single nginx reverse proxy as well as three separate DSF FHIR server- and 3 separate DSF BPE server instances. The tutorial-process project contains all resource (FHIR resources, BPMN process models and Java code) for the actual DSF process plugin.

    Java code for the tutorial-process project is located at src/main/java, FHIR resources and BPMN process models at src/main/resources as well as prepared JUnit tests to verify your solution at src/test/java.

    Process Plugin Main Components

    ',9),p=t("code",null,"org.highmed.dsf.bpe.ProcessPluginDefinition",-1),f={href:"https://github.com/highmed/highmed-dsf/packages/503054",target:"_blank",rel:"noopener noreferrer"},m={href:"https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ServiceLoader.html",target:"_blank",rel:"noopener noreferrer"},g=t("code",null,"TutorialProcessPluginDefinition",-1),_=t("code",null,"src/main/resources/META-INF/services/org.highmed.dsf.bpe",-1),b=t("code",null,"TutorialProcessPluginDefinition",-1),v=t("code",null,"TutorialProcessPluginDefinition",-1),x={href:"https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-java-basic-concepts",target:"_blank",rel:"noopener noreferrer"},k=t("code",null,"TutorialConfig",-1),w={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/tasks/service-task/",target:"_blank",rel:"noopener noreferrer"},T=t("code",null,"org.highmed.dsf.bpe.delegate.AbstractServiceDelegate",-1),y={href:"https://github.com/highmed/highmed-dsf/packages/503054",target:"_blank",rel:"noopener noreferrer"},S=t("h4",{id:"process-execution-and-fhir-task-resources",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#process-execution-and-fhir-task-resources"},[t("span",null,"Process Execution and FHIR Task Resources")])],-1),D={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},E={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},F={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},P=t("code",null,"org.highmed.dsf.bpe.delegate.AbstractServiceDelegate",-1),R={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},I=t("h4",{id:"process-access-control",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#process-access-control"},[t("span",null,"Process Access Control")])],-1),B={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},H={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},A={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},C={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},N=i(`

    Exercise Tasks


    1. Add a log message to the HelloDic#doExecute method that logs the recipient organization identifier from the "leading" Task.
    2. Register the HelloDic class as a singleton bean in the TutorialConfig class.
    3. Set the HelloDic class as the service implementation of the appropriate service task within the hello-dic.bpmn process model.
    4. Modify the ActivityDefinition for the highmedorg_helloDic process to only allow local clients to instantiate the process via a helloDic message.

    Solution Verification


    Maven Build and Automated Tests

    Execute a maven build of the dsf-process-tutorial parent module via:

    mvn clean install -Pexercise-1
    +

    Verify that the build was successful and no test failures occurred.

    Process Execution and Manual Tests

    To verify the highmedorg_helloDic process can be executed successfully, we need to deploy it into a DSF instance and execute the process. The maven install build is configured to create a process jar file with all necessary resources and to copy the jar to the appropriate locations of the docker test setup.

    1. Start the DSF FHIR server for the Test_DIC organization in a console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-fhir
    +
    `,13),j={href:"https://dic/fhir",target:"_blank",rel:"noopener noreferrer"},q=t("br",null,null,-1),M=t("code",null,".../dsf-process-tutorial/test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12",-1),z=i(`

    Caution: If you add the generated Root CA to your browsers certificate store as a trusted Root CA, make sure you are the only one with access to the private key at .../dsf-process-tutorial/test-data-generator/cert/ca/testca_private-key.pem.

    1. Start the DSF BPE server for the Test_DIC organization in a second console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-bpe
    +
    `,3),V={href:"https://dic/fhir/ActivityDefinition",target:"_blank",rel:"noopener noreferrer"},J={href:"https://dic/fhir/StructureDefinition?url=http://highmed.org/fhir/StructureDefinition/task-hello-dic",target:"_blank",rel:"noopener noreferrer"},L={start:"3"},G=t("code",null,"highmedorg_helloDic",-1),W={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},U={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},O={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},Q=t("code",null,"main",-1),X=t("code",null,"org.highmed.dsf.process.tutorial.TutorialExampleStarter",-1),Y=t("ul",null,[t("li",null,[e("Either specify the location and password via program arguments: 1. location of the client certificate ("),t("code",null,".../dsf-process-tutorial/test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12"),e("), 2. password for the client certificate ("),t("code",null,"password"),e(")")]),t("li",null,[e("Or set the environment variables "),t("code",null,"DSF_CLIENT_CERTIFICATE_PATH"),e(" and "),t("code",null,"DSF_CLIENT_CERTIFICATE_PASSWORD"),e(" with the appropriate values.")])],-1),K={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},Z=t("code",null,"HTTP 201: Created",-1),$={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},ee=t("p",null,[e("Verify that the "),t("code",null,"highmedorg_helloDic"),e(" process was executed by the DSF BPE server. The BPE server should print a message showing that the process was started, print the log message you added to the "),t("code",null,"HelloDic"),e(" class and end with a message showing that the process finished.")],-1),te=t("hr",null,null,-1);function se(re,oe){const o=n("RouteLink"),r=n("ExternalLinkIcon");return l(),d("div",null,[t("p",null,[s(o,{to:"/oldstable/tutorial/prerequisites.html"},{default:a(()=>[e("Prerequisites")]),_:1}),e(" | Exercise 1 | "),s(o,{to:"/oldstable/tutorial/exercise11-processDebugging.html"},{default:a(()=>[e("Exercise 1.1")]),_:1}),e(" | "),s(o,{to:"/oldstable/tutorial/exercise2-inputParameters.html"},{default:a(()=>[e("Exercise 2")]),_:1}),e(" | "),s(o,{to:"/oldstable/tutorial/exercise3-messageEvents.html"},{default:a(()=>[e("Exercise 3")]),_:1}),e(" | "),s(o,{to:"/oldstable/tutorial/exercise4-exclusiveGateways.html"},{default:a(()=>[e("Exercise 4")]),_:1}),e(" | "),s(o,{to:"/oldstable/tutorial/exercise5-eventBasedGateways.html"},{default:a(()=>[e("Exercise 5")]),_:1})]),u,t("p",null,[e("The most imported Java class used to specify the process plugin for the DSF BPE server is a class that implements the "),p,e(" interface from the DSF "),t("a",f,[e("dsf-bpe-process-base"),s(r)]),e(" module. The DSF BPE server searches for classes implementing this interface using the Java "),t("a",m,[e("ServiceLoader"),s(r)]),e(" mechanism. For this tutorial the "),g,e(" class implements this interface. It is appropriately specified in the "),_,e(".ProcessPluginDefinition file. The "),b,e(" class is used to specify name and version of the process plugin, what BPMN processes are to be deployed and what FHIR resources and required by the BPMN processes. For the implementation of service task and message events of the processes a special Spring context is used for every process plugin. The "),v,e(" class specifies what via "),t("a",x,[e("Spring-Framework configuration class"),s(r)]),e(" with Spring Beans are used for the process plugin specific Spring Context. For this plugin the "),k,e(" cass is used to define Spring Beans.")]),t("p",null,[e("The business process engine used by the DSF BPE server is based on the OpenSource Camunda Process Engine 7. In order to specify what Java code should be executed for a BPMN "),t("a",w,[e("ServiceTask"),s(r)]),e(" you need to specify the fully-qualified Java class name in the ServiceTask inside the BPMN model. To be executable the Java class needs to extend the "),T,e(" from the DSF "),t("a",y,[e("dsf-bpe-process-base"),s(r)]),e(" module and the class needs to be defined as as Spring Bean.")]),S,t("p",null,[e("Business process instances are started or the execution continued via FHIR "),t("a",D,[e("Task"),s(r)]),e(" resources. The "),t("a",E,[e("Task"),s(r)]),e(" resource specifies what process to instantiate or continue, what organization is requesting this action and what organization is the target for the request. When a "),t("a",F,[e("Task"),s(r)]),e(` resource starts a process we call it "leading", when it continues a process it's called "current". This differentiation is important for multi-instance use cases not covered by this tutorial. Each Java class extending the abstract class `),P,e(" has methods to access both types of "),t("a",R,[e("Task"),s(r)]),e(" resources.")]),I,t("p",null,[e("FHIR "),t("a",B,[e("ActivityDefinition"),s(r)]),e(" resources are used to announce what processes can be instantiated at a given DSF instance. These resources are used by the DSF to specify what profile the "),t("a",H,[e("Task"),s(r)]),e(" resource needs to conform to and what BPMN message name is used to correlate the appropriate start or intermediate event within the BPMN model. The "),t("a",A,[e("ActivityDefinition"),s(r)]),e(" also defines what kind of organization can request the instantiation or continuation of a process instance and what kind of organization are allowed to fulfill the request.")]),t("p",null,[e("We will take a closer look as "),t("a",C,[e("ActivityDefinition"),s(r)]),e(" resources in "),s(o,{to:"/oldstable/tutorial/exercise3-messageEvents.html"},{default:a(()=>[e("Exercise 3")]),_:1}),e(" and "),s(o,{to:"/oldstable/tutorial/exercise5-eventBasedGateways.html"},{default:a(()=>[e("Exercise 5")]),_:1}),e(".")]),N,t("p",null,[e("Verify the DSF FHIR server started successfully. You can access the webservice of the DSF FHIR server at "),t("a",j,[e("https://dic/fhir"),s(r)]),e("."),q,e(" The DSF FHIR server uses a server certificate that was generated during the first maven install build. To authenticate yourself to the server you can use the client certificate located at "),M,e(" (Password: password). Add the certificate and the generated Root CA to your browser certificate store.")]),z,t("p",null,[e("Verify the DSF BPE server started successfully and deployed the highmedorg_helloDic process. The DSF BPE server should print a message that the process was deployed. The DSF FHIR server should now have a new ActivityDefinition resource. Go to "),t("a",V,[e("https://dic/fhir/ActivityDefinition"),s(r)]),e(" to check if the expected resource was created by the BPE while deploying the process. The returned FHIR Bundle should contain a single ActivityDefinition. Also, go to "),t("a",J,[e("https://dic/fhir/StructureDefinition?url=http://highmed.org/fhir/StructureDefinition/task-hello-dic"),s(r)]),e(" to check if the expected Task profile was created.")]),t("ol",L,[t("li",null,[e("Start the "),G,e(" process by posting an appropriate FHIR "),t("a",W,[e("Task"),s(r)]),e(" resource to the DSF FHIR server:")])]),t("p",null,[e("The "),t("a",U,[e("Task"),s(r)]),e(" resource is used to tell the DSF BPE server via the DSF FHIR server that a specific organization wants to start (or continue) one process instance at a specified organization. The needed "),t("a",O,[e("Task"),s(r)]),e(" resource can be generated and posted to the DSF FHIR server by executing the "),Q,e(" method of the "),X,e(" class. For the TutorialExampleStarter to work the location of the client certificate and its password need to be specified:")]),Y,t("p",null,[e("Verify that the FHIR "),t("a",K,[e("Task"),s(r)]),e(" resource could be created at the DSF FHIR server. The TutorialExampleStarter class should print a message "),Z,e(" showing that the "),t("a",$,[e("Task"),s(r)]),e(" resource was created.")]),ee,t("p",null,[e("Continue with "),s(o,{to:"/oldstable/tutorial/exercise11-processDebugging.html"},{default:a(()=>[e("Exercise 1.1")]),_:1}),e(".")]),te,t("p",null,[s(o,{to:"/oldstable/tutorial/prerequisites.html"},{default:a(()=>[e("Prerequisites")]),_:1}),e(" | Exercise 1 | "),s(o,{to:"/oldstable/tutorial/exercise11-processDebugging.html"},{default:a(()=>[e("Exercise 1.1")]),_:1}),e(" | "),s(o,{to:"/oldstable/tutorial/exercise2-inputParameters.html"},{default:a(()=>[e("Exercise 2")]),_:1}),e(" | "),s(o,{to:"/oldstable/tutorial/exercise3-messageEvents.html"},{default:a(()=>[e("Exercise 3")]),_:1}),e(" | "),s(o,{to:"/oldstable/tutorial/exercise4-exclusiveGateways.html"},{default:a(()=>[e("Exercise 4")]),_:1}),e(" | "),s(o,{to:"/oldstable/tutorial/exercise5-eventBasedGateways.html"},{default:a(()=>[e("Exercise 5")]),_:1})])])}const ne=c(h,[["render",se],["__file","exercise1-simpleProcess.html.vue"]]),ce=JSON.parse('{"path":"/oldstable/tutorial/exercise1-simpleProcess.html","title":"Exercise 1 - Simple Process","lang":"en-US","frontmatter":{"title":"Exercise 1 - Simple Process","icon":"slides"},"headers":[{"level":2,"title":"Exercise 1 - Simple Process","slug":"exercise-1-simple-process","link":"#exercise-1-simple-process","children":[{"level":3,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":3,"title":"Exercise Tasks","slug":"exercise-tasks","link":"#exercise-tasks","children":[]},{"level":3,"title":"Solution Verification","slug":"solution-verification","link":"#solution-verification","children":[]}]}],"git":{"createdTime":1692783801000,"updatedTime":1692786258000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":4.59,"words":1376},"filePathRelative":"oldstable/tutorial/exercise1-simpleProcess.md","localizedDate":"August 23, 2023","excerpt":"

    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    "}');export{ne as comp,ce as data}; diff --git a/assets/exercise11-processDebugging.html-H4aFbuic.js b/assets/exercise11-processDebugging.html-H4aFbuic.js new file mode 100644 index 000000000..e1424059d --- /dev/null +++ b/assets/exercise11-processDebugging.html-H4aFbuic.js @@ -0,0 +1,3 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as l,o as c,c as n,a as t,d as s,w as o,b as e,e as d}from"./app-kq9lCQfY.js";const u="/photos/guideline/tutorial/eclipse.png",h="/photos/guideline/tutorial/intelliJ.png",m={},p=t("h2",{id:"exercise-1-1-process-debugging",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#exercise-1-1-process-debugging"},[t("span",null,"Exercise 1.1 - Process Debugging")])],-1),g=t("p",null,"This exercise looks at how to use the Java debugger of your IDE to remote debug the execution of a process plugin.",-1),x=t("h3",{id:"introduction",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#introduction"},[t("span",null,"Introduction")])],-1),b=t("hr",null,null,-1),_={href:"http://ghcr.io/highmed/fhir",target:"_blank",rel:"noopener noreferrer"},f={href:"http://ghcr.io/highmed/bpe",target:"_blank",rel:"noopener noreferrer"},E=t("code",null,"EXTRA_JVM_ARGS",-1),v=t("code",null,"EXTRA_JVM_ARGS",-1),k=d(`

    Exercise Tasks


    1. Start the DSF FHIR server for the Test_DIC organization in a console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-fhir
    +
    1. Start the DSF BPE server for the Test_DIC organization in second console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-bpe
    +
    1. Configure your Java IDE for remote debugging
    • Eclipse:
      Eclipse

    • IntelliJ:
      IntelliJ

    1. Create a debug breakpoint in the first line of the HelloDic class doExecute method.

    2. Start your previously defined remote Java debugger in your IDE.

    3. Execute the TutorialExampleStarter class to start highmed_helloDic process.

    4. User your IDE's debugger to step thru the code of the HelloDic class doExecute method.

    ',9),D=t("hr",null,null,-1);function y(P,S){const i=l("RouteLink"),r=l("ExternalLinkIcon");return c(),n("div",null,[t("p",null,[s(i,{to:"/oldstable/tutorial/prerequisites.html"},{default:o(()=>[e("Prerequisites")]),_:1}),e(" | "),s(i,{to:"/oldstable/tutorial/exercise1-simpleProcess.html"},{default:o(()=>[e("Exercise 1")]),_:1}),e(" | Exercise 1.1 | "),s(i,{to:"/oldstable/tutorial/exercise2-inputParameters.html"},{default:o(()=>[e("Exercise 2")]),_:1}),e(" | "),s(i,{to:"/oldstable/tutorial/exercise3-messageEvents.html"},{default:o(()=>[e("Exercise 3")]),_:1}),e(" | "),s(i,{to:"/oldstable/tutorial/exercise4-exclusiveGateways.html"},{default:o(()=>[e("Exercise 4")]),_:1}),e(" | "),s(i,{to:"/oldstable/tutorial/exercise5-eventBasedGateways.html"},{default:o(()=>[e("Exercise 5")]),_:1})]),p,g,x,b,t("p",null,[e("The DSF FHIR server and the DSF BPE server applications are written in Java and as such are execute on a headless JRE 11 within their docker containers. Command line arguments can be passed to the JVM inside the "),t("a",_,[e("ghcr.io/highmed/fhir"),s(r)]),e(" and "),t("a",f,[e("ghcr.io/highmed/bpe"),s(r)]),e(" docker images by specifying the environment variable "),E,e(". This can be used for example to configure the minimum and maximum heap of the JVM; but can also be used to specify a remote debugging port, which we will use in this exercise.")]),t("p",null,[e("An "),v,e(" environment variable is already configure for all DSF FHIR server and DSF BPE server docker containers in the tutorial docker-compose test setup. Take a look at the "),s(i,{to:"/oldstable/tutorial/ex11-docker-composeyml.html"},{default:o(()=>[e("docker-compose.yml")]),_:1}),e(" file to lookup the port numbers specified for the different DSF FHIR and DSF BPE servers.")]),k,t("p",null,[e("Continue with "),s(i,{to:"/oldstable/tutorial/exercise2-inputParameters.html"},{default:o(()=>[e("Exercise 2")]),_:1}),e(".")]),D,t("p",null,[s(i,{to:"/oldstable/tutorial/prerequisites.html"},{default:o(()=>[e("Prerequisites")]),_:1}),e(" | "),s(i,{to:"/oldstable/tutorial/exercise1-simpleProcess.html"},{default:o(()=>[e("Exercise 1")]),_:1}),e(" | Exercise 1.1 | "),s(i,{to:"/oldstable/tutorial/exercise2-inputParameters.html"},{default:o(()=>[e("Exercise 2")]),_:1}),e(" | "),s(i,{to:"/oldstable/tutorial/exercise3-messageEvents.html"},{default:o(()=>[e("Exercise 3")]),_:1}),e(" | "),s(i,{to:"/oldstable/tutorial/exercise4-exclusiveGateways.html"},{default:o(()=>[e("Exercise 4")]),_:1}),e(" | "),s(i,{to:"/oldstable/tutorial/exercise5-eventBasedGateways.html"},{default:o(()=>[e("Exercise 5")]),_:1})])])}const T=a(m,[["render",y],["__file","exercise11-processDebugging.html.vue"]]),J=JSON.parse('{"path":"/oldstable/tutorial/exercise11-processDebugging.html","title":"Exercise 1.1 - Process Debugging","lang":"en-US","frontmatter":{"title":"Exercise 1.1 - Process Debugging","icon":"slides"},"headers":[{"level":2,"title":"Exercise 1.1 - Process Debugging","slug":"exercise-1-1-process-debugging","link":"#exercise-1-1-process-debugging","children":[{"level":3,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":3,"title":"Exercise Tasks","slug":"exercise-tasks","link":"#exercise-tasks","children":[]}]}],"git":{"createdTime":1692783801000,"updatedTime":1692786258000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.14,"words":341},"filePathRelative":"oldstable/tutorial/exercise11-processDebugging.md","localizedDate":"August 23, 2023","excerpt":"

    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    "}');export{T as comp,J as data}; diff --git a/assets/exercise2-inputParameters.html-D05ppcsc.js b/assets/exercise2-inputParameters.html-D05ppcsc.js new file mode 100644 index 000000000..5b3bfc590 --- /dev/null +++ b/assets/exercise2-inputParameters.html-D05ppcsc.js @@ -0,0 +1,10 @@ +import{_ as l}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as c,c as d,a as t,d as s,w as n,b as e,e as r}from"./app-kq9lCQfY.js";const h={},u=t("h2",{id:"exercise-2-input-parameters",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#exercise-2-input-parameters"},[t("span",null,"Exercise 2 - Input Parameters")])],-1),p=t("p",null,[e("In order to configure processes that are packaged as process plugins, we will take a look at two possibilities on how to pass parameters to a process. The goal of this exercise is to enhance the "),t("code",null,"highmedorg_helloDic"),e(" process by trying them both.")],-1),m=t("h3",{id:"introduction",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#introduction"},[t("span",null,"Introduction")])],-1),f=t("hr",null,null,-1),g=t("p",null,"DSF process plugins can be configured with input parameters using two different approaches:",-1),_=t("li",null,"Static configuration using environment variables during the deployment of a process plugin.",-1),b={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},v=t("h4",{id:"environment-variables",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#environment-variables"},[t("span",null,"Environment Variables")])],-1),k={href:"https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-value-annotations",target:"_blank",rel:"noopener noreferrer"},x=t("code",null,"TutorialConfig",-1),y=t("code",null,"${..}",-1),w=t("code",null,"${some.property:defaultValue}",-1),T=t("code",null,"some.property",-1),S=t("code",null,"SOME_PROPERTY",-1),D={href:"https://github.com/highmed/highmed-dsf/blob/main/dsf-tools/dsf-tools-documentation-generator/src/main/java/org/highmed/dsf/tools/generator/ProcessDocumentation.java",target:"_blank",rel:"noopener noreferrer"},E=t("code",null,"org.highmed.dsf.tools.generator",-1),P=t("code",null,"pom.xml",-1),R=t("code",null,"tutorial-process",-1),I={href:"https://github.com/highmed/highmed-dsf/blob/main/dsf-tools/dsf-tools-documentation-generator/src/main/java/org/highmed/dsf/tools/generator/DocumentationGenerator.java",target:"_blank",rel:"noopener noreferrer"},F={href:"https://github.com/highmed/highmed-dsf/blob/main/dsf-tools/dsf-tools-documentation-generator/src/main/java/org/highmed/dsf/tools/generator/ProcessDocumentation.java",target:"_blank",rel:"noopener noreferrer"},C=t("h4",{id:"task-input-parameters",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#task-input-parameters"},[t("span",null,"Task Input Parameters")])],-1),V={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},B={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},q={href:"https://github.com/highmed/highmed-dsf/blob/main/dsf-fhir/dsf-fhir-validation/src/main/resources/fhir/StructureDefinition/highmed-task-base-0.5.0.xml",target:"_blank",rel:"noopener noreferrer"},H=t("ul",null,[t("li",null,[t("code",null,"message-name"),e(" (mandatory 1..1): the name of the BPMN message event, same as in the BPMN model")]),t("li",null,[t("code",null,"business-key"),e(" (optional 0..1): used to identify process instances")]),t("li",null,[t("code",null,"correlation-key"),e("(optional 0..1): used to identify multi-instance process instances used for messaging multiple targets")])],-1),A=t("p",null,"A later exercise will examine these input parameters and their meaning in more detail.",-1),M={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},z={href:"http://hl7.org/fhir/R4/codesystem.html",target:"_blank",rel:"noopener noreferrer"},N={href:"https://github.com/highmed/highmed-dsf/blob/main/dsf-fhir/dsf-fhir-validation/src/main/resources/fhir/CodeSystem/highmed-bpmn-message-0.5.0.xml",target:"_blank",rel:"noopener noreferrer"},j={href:"https://github.com/highmed/highmed-dsf/blob/main/dsf-fhir/dsf-fhir-validation/src/main/resources/fhir/ValueSet/highmed-bpmn-message-0.5.0.xml",target:"_blank",rel:"noopener noreferrer"},G={href:"https://github.com/highmed/highmed-dsf/blob/main/dsf-fhir/dsf-fhir-validation/src/main/resources/fhir/StructureDefinition/highmed-task-base-0.5.0.xml",target:"_blank",rel:"noopener noreferrer"},L={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},O=t("h4",{id:"version-and-release-date-placeholders",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#version-and-release-date-placeholders"},[t("span",null,"Version and Release-Date Placeholders")])],-1),U={href:"http://hl7.org/fhir/R4/codesystem.html",target:"_blank",rel:"noopener noreferrer"},W={href:"http://hl7.org/fhir/R4/structuredefinition.html",target:"_blank",rel:"noopener noreferrer"},$={href:"http://hl7.org/fhir/R4/valueset.html",target:"_blank",rel:"noopener noreferrer"},J=t("code",null,"#{version}",-1),Y=t("code",null,"#{date}",-1),K=t("code",null,"ProcessPluginDefinition#getVersion()",-1),Q=t("code",null,"ProcessPluginDefinition#getReleaseDate()",-1),X=t("br",null,null,-1),Z={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},ee={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},te=t("code",null,"Resource.meta.tag",-1),se=t("code",null,"read-access-tag",-1),ae=r(`
    <meta>
    +   <tag>
    +      <system value="http://highmed.org/fhir/CodeSystem/read-access-tag" />
    +      <code value="ALL" />
    +   </tag>
    +</meta>
    +
    `,1),oe={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},ne=t("code",null,"Task.requester",-1),re=t("code",null,"Task.restriction.recipient",-1),ie=t("code",null,"read-access-tag",-1),le=t("p",null,"It is also possible to restrict read access of FHIR resources to organizations with a specific role in a consortium or a specific identifier, but this is not covered in the tutorial.",-1),ce={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},de={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},he=t("h3",{id:"exercise-tasks",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#exercise-tasks"},[t("span",null,"Exercise Tasks")])],-1),ue=t("hr",null,null,-1),pe=r("
  • Add an environment variable to enable/disable logging to the TutorialConfig class specify the default value as false.
  • Inject the value of the environment variable in to HelloDic class, by modifying its constructor and using the new field of the TutorialConfig class.
  • Use the value of the environment variable in the HelloDic class to decide whether the log message from exercise 1 should be printed.
  • Adapt test-setup/docker-compose.yml by adding the new environment variable to the service dic-bpe and set the value to "true".
  • ",4),me={href:"http://hl7.org/fhir/R4/codesystem.html",target:"_blank",rel:"noopener noreferrer"},fe=t("code",null,"http://highmed.org/fhir/CodeSystem/tutorial",-1),ge=t("code",null,"tutorial-input",-1),_e={href:"http://hl7.org/fhir/R4/valueset.html",target:"_blank",rel:"noopener noreferrer"},be=t("code",null,"http://highmed.org/fhir/ValueSet/tutorial",-1),ve={href:"http://hl7.org/fhir/R4/codesystem.html",target:"_blank",rel:"noopener noreferrer"},ke={href:"http://hl7.org/fhir/R4/codesystem.html",target:"_blank",rel:"noopener noreferrer"},xe=t("code",null,"string",-1),ye=t("code",null,"task-hello-dic.xml",-1),we={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},Te={href:"http://hl7.org/fhir/R4/codesystem.html",target:"_blank",rel:"noopener noreferrer"},Se=t("code",null,"HelloDic",-1),De={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},Ee=t("li",null,[e("Adapt the starter class "),t("code",null,"TutorialExampleStarter"),e(" by adding the new input parameter with an arbitrary string.")],-1),Pe=r(`

    Solution Verification


    Maven Build and Automated Tests

    Execute a maven build of the dsf-process-tutorial parent module via:

    mvn clean install -Pexercise-2
    +

    Verify that the build was successful and no test failures occurred.

    Process Execution and Manual Tests

    To verify the highmedorg_helloDic process can be executed successfully, we need to deploy it into a DSF instance and execute the process. The maven install build is configured to create a process jar file with all necessary resources and copy the jar to the appropriate locations of the docker test setup.

    1. Start the DSF FHIR server for the Test_DIC organization in a console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-fhir
    +

    Verify the DSF FHIR server started successfully.

    1. Start the DSF BPE server for the Test_DIC organization in second console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-bpe
    +

    Verify the DSF BPE server started successfully and deployed the highmedorg_helloDic process.

    `,14),Re={start:"3"},Ie=t("code",null,"highmedorg_helloDic",-1),Fe={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},Ce=t("code",null,"Test_DIC",-1),Ve=t("code",null,"main",-1),Be=t("code",null,"org.highmed.dsf.process.tutorial.TutorialExampleStarter",-1),qe={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},He=t("code",null,"highmedorg_helloDic",-1),Ae=r("

    Verify that the highmedorg_helloDic process was executed by the DSF BPE server. The BPE server should:

    • Print a message showing that the process was started.
    • If logging is enabled - print the log message and the value of the input parameter you added to the HelloDic implementation.
    • Print a message showing that the process finished.

    Check that you can disable logging of you message by modifying the docker-compose.yml file and configuring your environment variable with the value "false" or removing the environment variable.
    Note: Changes to environment variable require recreating the docker container.

    ",3),Me={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},ze=t("code",null,"TutorialExampleStarter",-1),Ne=t("hr",null,null,-1);function je(Ge,Le){const o=i("RouteLink"),a=i("ExternalLinkIcon");return c(),d("div",null,[t("p",null,[s(o,{to:"/oldstable/tutorial/prerequisites.html"},{default:n(()=>[e("Prerequisites")]),_:1}),e(" | "),s(o,{to:"/oldstable/tutorial/exercise1-simpleProcess.html"},{default:n(()=>[e("Exercise 1")]),_:1}),e(" | "),s(o,{to:"/oldstable/tutorial/exercise11-processDebugging.html"},{default:n(()=>[e("Exercise 1.1")]),_:1}),e(" | Exercise 2 | "),s(o,{to:"/oldstable/tutorial/exercise3-messageEvents.html"},{default:n(()=>[e("Exercise 3")]),_:1}),e(" | "),s(o,{to:"/oldstable/tutorial/exercise4-exclusiveGateways.html"},{default:n(()=>[e("Exercise 4")]),_:1}),e(" | "),s(o,{to:"/oldstable/tutorial/exercise5-eventBasedGateways.html"},{default:n(()=>[e("Exercise 5")]),_:1})]),u,p,m,f,g,t("ul",null,[_,t("li",null,[e("Dynamic configuration by sending values as part of the "),t("a",b,[e("Task"),s(a)]),e(" resource to start or continue a process instance.")])]),v,t("p",null,[e("Environment variables are the same for all running process instances and allow static configuration of processes. They can be defined by adding a member variable having the "),t("a",k,[e("Spring-Framework @Value"),s(a)]),e(" annotation to the configuration class "),x,e(". The value of the annotation uses the "),y,e(" notation and follows the form "),w,e(", where each dot in the property name corresponds to an underscore in the environment variable and environment variables are always written upper-case. The property "),T,e(" therefore corresponds to the environment variable "),S,e(".")]),t("p",null,[e("To create an automated documentation of environment variables during the Maven build process, the DSF provided "),t("a",D,[e("@ProcessDocumentation"),s(a)]),e(" annotation from the package "),E,e(" can be used. The "),P,e(" of the "),R,e(" submodule calls the DSF provided "),t("a",I,[e("DocumentGenerator"),s(a)]),e(" class from the same package during the prepare-package phase of the build process. The generator searches for all "),t("a",F,[e("@ProcessDocumentation"),s(a)]),e(" annotations and generates a Markdown documentation based on the annotation's values in the target folder.")]),C,t("p",null,[e("Providing input parameters to a specific process instance allows for dynamic configuration of process instances. It can be done by sending additional values as part of the "),t("a",V,[e("Task"),s(a)]),e(" resource that starts or continues a process instance. It should be noted that a FHIR profile must be created for each "),t("a",B,[e("Task"),s(a)]),e(" resource, i.e. for each message event in a process model, which inherits from the "),t("a",q,[e("DSF Task Base Profile"),s(a)]),e(". This base profile defines three default input parameters:")]),H,A,t("p",null,[e("Since input parameters of "),t("a",M,[e("Task"),s(a)]),e(" resources are identified by predefined codes, they are defined via FHIR "),t("a",z,[e("CodeSystem"),s(a)]),e(" and "),s(o,{to:"/oldstable/tutorial/hl7.org/fhir/R4/valueset.html"},{default:n(()=>[e("ValueSet")]),_:1}),e(" resources. The "),t("a",N,[e("BPMN-Message CodeSystem"),s(a)]),e(" and the "),t("a",j,[e("BPMN-Message ValueSet"),s(a)]),e(" are used in the "),t("a",G,[e("DSF Task Base Profile"),s(a)]),e(" to define the three default input parameters of "),t("a",L,[e("Task"),s(a)]),e(" resources.")]),O,t("p",null,[e("To avoid the need to specify the version and release date for each "),t("a",U,[e("CodeSystem"),s(a)]),e(", "),t("a",W,[e("StructureDefinition (Task profile)"),s(a)]),e(" and "),t("a",$,[e("ValueSet"),s(a)]),e(" resource, the placeholders "),J,e(" and "),Y,e(" can be used. They are replaced with the values returned by the methods "),K,e(" and "),Q,e(" respectively during deployment of a process plugin by the DSF BPE server.")]),t("p",null,[e("Read Access Tag"),X,e(" While writing FHIR resources on the DSF FHIR server is only allowed by the own organization (except "),t("a",Z,[e("Task"),s(a)]),e("), rules have to be defined for reading FHIR resources by external organizations (again except "),t("a",ee,[e("Task"),s(a)]),e("). The "),te,e(" field is used for this purpose. To allow read access for all organizations (the standard for metadata resources), the following "),se,e(" value can be written into this field:")]),ae,t("p",null,[e("The read access rules for "),t("a",oe,[e("Task"),s(a)]),e(" resources are defined through the fields "),ne,e(" and "),re,e(". Therefore, no "),ie,e(" is needed.")]),le,t("p",null,[e("The write access rules for "),t("a",ce,[e("Task"),s(a)]),e(" resources are defined through the "),t("a",de,[e("ActivityDefinition"),s(a)]),e(" resources belonging to the process. We will take a look at this in "),s(o,{to:"/oldstable/tutorial/exercise3-messageEvents.html"},{default:n(()=>[e("exercise 3")]),_:1}),e(" and "),s(o,{to:"/oldstable/tutorial/exercise5-eventBasedGateways.html"},{default:n(()=>[e("exercise 5")]),_:1}),e(".")]),he,ue,t("ol",null,[pe,t("li",null,[e("Create a new "),t("a",me,[e("CodeSystem"),s(a)]),e(" with url "),fe,e(" having a concept with code "),ge,e(".")]),t("li",null,[e("Create a new "),t("a",_e,[e("ValueSet"),s(a)]),e(" with url "),be,e(" that includes all concepts from the "),t("a",ve,[e("CodeSystem"),s(a)]),e(".")]),t("li",null,[e("Add the new "),t("a",ke,[e("CodeSystem"),s(a)]),e(" and ValueSet resources to the highmedorg_helloDic process in the TutorialProcessPluginDefinition class.")]),t("li",null,[e("Add a new input parameter of type "),xe,e(" to the "),ye,e(),t("a",we,[e("Task"),s(a)]),e(" profile using the concept of the new "),t("a",Te,[e("CodeSystem"),s(a)]),e(" as a fixed coding.")]),t("li",null,[e("Read the new input parameter in the "),Se,e(' class from the "leading" '),t("a",De,[e("Task"),s(a)]),e(" and add the value to the log message from exercise 1.")]),Ee]),Pe,t("ol",Re,[t("li",null,[e("Start the "),Ie,e(" process by posting an appropriate FHIR "),t("a",Fe,[e("Task"),s(a)]),e(" resource to the DSF FHIR server of the "),Ce,e(" organization: Execute the "),Ve,e(" method of the "),Be,e(" class as in "),s(o,{to:"/oldstable/tutorial/exercise1-simpleProcess.html"},{default:n(()=>[e("exercise 1")]),_:1}),e(" to create the "),t("a",qe,[e("Task"),s(a)]),e(" resource needed to start the "),He,e(" process.")])]),Ae,t("p",null,[e("Also check that modification to the "),t("a",Me,[e("Task"),s(a)]),e(" input parameter specified in the "),ze,e(" class, have the appropriate effect on your log message.")]),t("p",null,[e("Continue with "),s(o,{to:"/oldstable/tutorial/exercise3-messageEvents.html"},{default:n(()=>[e("Exercise 3")]),_:1}),e(".")]),Ne,t("p",null,[s(o,{to:"/oldstable/tutorial/prerequisites.html"},{default:n(()=>[e("Prerequisites")]),_:1}),e(" | "),s(o,{to:"/oldstable/tutorial/exercise1-simpleProcess.html"},{default:n(()=>[e("Exercise 1")]),_:1}),e(" | "),s(o,{to:"/oldstable/tutorial/exercise11-processDebugging.html"},{default:n(()=>[e("Exercise 1.1")]),_:1}),e(" | Exercise 2 | "),s(o,{to:"/oldstable/tutorial/exercise3-messageEvents.html"},{default:n(()=>[e("Exercise 3")]),_:1}),e(" | "),s(o,{to:"/oldstable/tutorial/exercise4-exclusiveGateways.html"},{default:n(()=>[e("Exercise 4")]),_:1}),e(" | "),s(o,{to:"/oldstable/tutorial/exercise5-eventBasedGateways.html"},{default:n(()=>[e("Exercise 5")]),_:1})])])}const We=l(h,[["render",je],["__file","exercise2-inputParameters.html.vue"]]),$e=JSON.parse('{"path":"/oldstable/tutorial/exercise2-inputParameters.html","title":"Exercise 2 - Input Parameters","lang":"en-US","frontmatter":{"title":"Exercise 2 - Input Parameters","icon":"slides"},"headers":[{"level":2,"title":"Exercise 2 - Input Parameters","slug":"exercise-2-input-parameters","link":"#exercise-2-input-parameters","children":[{"level":3,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":3,"title":"Exercise Tasks","slug":"exercise-tasks","link":"#exercise-tasks","children":[]},{"level":3,"title":"Solution Verification","slug":"solution-verification","link":"#solution-verification","children":[]}]}],"git":{"createdTime":1692783801000,"updatedTime":1692786258000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":4.58,"words":1373},"filePathRelative":"oldstable/tutorial/exercise2-inputParameters.md","localizedDate":"August 23, 2023","excerpt":"

    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    "}');export{We as comp,$e as data}; diff --git a/assets/exercise3-messageEvents.html-BvCPZCXY.js b/assets/exercise3-messageEvents.html-BvCPZCXY.js new file mode 100644 index 000000000..37246080e --- /dev/null +++ b/assets/exercise3-messageEvents.html-BvCPZCXY.js @@ -0,0 +1,41 @@ +import{_ as l}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as c,c as p,a as t,d as n,w as o,b as e,e as i}from"./app-kq9lCQfY.js";const u="/photos/guideline/tutorial/ex3.png",h={},d=t("h2",{id:"exercise-3-message-events",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#exercise-3-message-events"},[t("span",null,"Exercise 3 - Message Events")])],-1),g=t("p",null,"Communication between organizations is modeled using message flow in BPMN processes. The third exercise shows how a process at one organization can trigger a process at another organization.",-1),f=t("code",null,"highmedorg_helloDic",-1),m=t("code",null,"highmedorg_helloCos",-1),_=t("code",null,"Test_DIC",-1),k=t("code",null,"Test_COS",-1),v={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},b=t("code",null,"Test_DIC",-1),x=t("code",null,"Test_COS",-1),D=t("h3",{id:"introduction",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#introduction"},[t("span",null,"Introduction")])],-1),S=t("hr",null,null,-1),y=t("h4",{id:"message-flow-and-fhir-task-resources",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#message-flow-and-fhir-task-resources"},[t("span",null,"Message Flow and FHIR Task resources")])],-1),z={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},w={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},E=t("p",null,'In order to exchange information between different processes, for example at two different organizations, BPMN message flow is used. Typically represented by a dashed line arrow between elements with black (send) and white (receive) envelop icons. The following BPMN collaboration diagram shows two processes. The process at "Organization 1" is sending a message to "Organization 2" which results in the instantiation and execution of new process instance at the second organization.',-1),T=t("figure",null,[t("img",{src:u,alt:"Message Flow",tabindex:"0",loading:"lazy"}),t("figcaption",null,"Message Flow")],-1),R={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},I={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/message-events/#message-start-event",target:"_blank",rel:"noopener noreferrer"},F={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/message-events/#message-intermediate-catching-event",target:"_blank",rel:"noopener noreferrer"},q=t("em",null,"Business Key",-1),C=t("em",null,"Correlation Key",-1),A=i(`

    BPMN Process Definition Key vs. FHIR Task.instantiatesUri and ActivityDefinition.url / version

    FHIR ActivityDefinition resources are used to announce what processes can be instantiated at a given DSF instance. They also control what kind of organization can request the instantiation or continuation of a process instance and what kind of organization is allowed to fulfill the request.

    In order to link the FHIR and BPMN worlds the BPMN process definition key needs to be specified following the pattern ^[-a-zA-Z0-9]+_[-a-zA-Z0-9]+$ for example:

    domainorg_processKey
    +

    In addition the BPM process needs to specify a process version with the pattern ^\\d+.\\d+.\\d+$ for example:

    1.0.0
    +

    This results in a canonical URL used to identify the process, for example:

    http://domain.org/bpe/Process/processKey/1.0.0
    +
    `,8),O={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},P={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},M=t("h4",{id:"activitydefinitions-for-the-dsf",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#activitydefinitions-for-the-dsf"},[t("span",null,"ActivityDefinitions for the DSF")])],-1),H={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},B={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},L={href:"http://highmed.org/fhir/StructureDefinition/activity-definition",target:"_blank",rel:"noopener noreferrer"},N={href:"http://highmed.org/fhir/StructureDefinition/extension-process-authorization",target:"_blank",rel:"noopener noreferrer"},V=t("p",null,"The authorization extension needs to be configured at least once and has four sub extensions:",-1),G=t("h5",{id:"message-name-1-1",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#message-name-1-1"},[t("span",null,"message-name [1..1]")])],-1),U={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/message-events/#message-start-event",target:"_blank",rel:"noopener noreferrer"},Z={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/message-events/#message-intermediate-catching-event",target:"_blank",rel:"noopener noreferrer"},K={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/tasks/receive-task/",target:"_blank",rel:"noopener noreferrer"},j=t("h5",{id:"task-profile-1-1",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#task-profile-1-1"},[t("span",null,"task-profile [1..1]")])],-1),W={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},$=t("h5",{id:"requester-1",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#requester-1"},[t("span",null,"requester [1..]")])],-1),J={href:"http://highmed.org/fhir/ValueSet/process-authorization-requester",target:"_blank",rel:"noopener noreferrer"},Y={href:"http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization",target:"_blank",rel:"noopener noreferrer"},Q={href:"http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization",target:"_blank",rel:"noopener noreferrer"},X={href:"http://hl7.org/fhir/R4/organizationaffiliation.html",target:"_blank",rel:"noopener noreferrer"},ee={href:"http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role",target:"_blank",rel:"noopener noreferrer"},te={href:"http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role",target:"_blank",rel:"noopener noreferrer"},ne=t("li",null,[t("p",null,"LOCAL_ALL All local organizations regardless of their identifier or role in a consortium.")],-1),se=t("li",null,[t("p",null,"REMOTE_ALL All remote (non local) organizations regardless of their identifier or role in a consortium.")],-1),ae=t("h5",{id:"recipient-1",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#recipient-1"},[t("span",null,"recipient [1..]")])],-1),oe={href:"http://highmed.org/fhir/ValueSet/process-authorization-recipient",target:"_blank",rel:"noopener noreferrer"},ie={href:"http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization",target:"_blank",rel:"noopener noreferrer"},re={href:"http://hl7.org/fhir/R4/organizationaffiliation.html",target:"_blank",rel:"noopener noreferrer"},le={href:"http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role",target:"_blank",rel:"noopener noreferrer"},ce=t("li",null,[t("p",null,"LOCAL_ALL All organizations regardless of their identifier or role in a consortium.")],-1),pe={href:"https://github.com/highmed/highmed-dsf/wiki/DSF-0.7.0-Configuration-Parameters-FHIR#org_highmed_dsf_fhir_server_organization_identifier_value",target:"_blank",rel:"noopener noreferrer"},ue={href:"https://github.com/highmed/highmed-dsf/wiki/DSF-0.7.0-Configuration-Parameters-BPE#org_highmed_dsf_bpe_fhir_server_organization_identifier_value",target:"_blank",rel:"noopener noreferrer"},he=i(`

    Authorization Extension Example

    The following example specifies that process execution can only be requested by a organization with a specific identifier and only allows execution of the process in the DSF instance of an organization with a specific identifier.

    <extension url="http://highmed.org/fhir/StructureDefinition/extension-process-authorization">
    +	<extension url="message-name">
    +		<valueString value="some-message-name" />
    +	</extension>
    +	<extension url="task-profile">
    +		<valueCanonical value="http://foo.org/fhir/StructureDefinition/profile|#{version}" />
    +	</extension>
    +	<extension url="requester">
    +		<valueCoding>
    +			<extension url="http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization">
    +				<valueIdentifier>
    +					<system value="http://highmed.org/sid/organization-identifier" />
    +					<value value="identifier.remote.org" />
    +				</valueIdentifier>
    +			</extension>
    +			<system value="http://highmed.org/fhir/CodeSystem/process-authorization" />
    +			<code value="REMOTE_ORGANIZATION" />
    +		</valueCoding>
    +	</extension>
    +	<extension url="recipient">
    +		<valueCoding>
    +			<extension url="http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization">
    +				<valueIdentifier>
    +					<system value="http://highmed.org/sid/organization-identifier" />
    +					<value value="identifier.local.org" />
    +				</valueIdentifier>
    +			</extension>
    +			<system value="http://highmed.org/fhir/CodeSystem/process-authorization" />
    +			<code value="LOCAL_ORGANIZATION" />
    +		</valueCoding>
    +	</extension>
    +</extension>
    +

    Exercise Tasks


    `,5),de=t("code",null,"highmedorg_helloDic",-1),ge=t("code",null,"hello-dic.bpmn",-1),fe={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/none-events/#none-end-event",target:"_blank",rel:"noopener noreferrer"},me={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/message-events/#message-end-event",target:"_blank",rel:"noopener noreferrer"},_e=t("code",null,"instantiatesUri",-1),ke=t("code",null,"profile",-1),ve=t("code",null,"messageName",-1),be={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/message-events/#message-end-event",target:"_blank",rel:"noopener noreferrer"},xe={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/message-events/#message-end-event",target:"_blank",rel:"noopener noreferrer"},De=t("br",null,null,-1),Se={href:"http://highmed.org/fhir/StructureDefinition/task-hello-cos%7C#%7Bversion%7D",target:"_blank",rel:"noopener noreferrer"},ye=t("code",null,"helloCos",-1),ze=t("code",null,"instantiatesUri",-1),we=t("code",null,"highmedorg_helloCos",-1),Ee=t("code",null,"hello-cos.bpmn",-1),Te={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/message-events/#message-start-event",target:"_blank",rel:"noopener noreferrer"},Re={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/message-events/#message-end-event",target:"_blank",rel:"noopener noreferrer"},Ie=t("code",null,"highmedorg_helloDic",-1),Fe={href:"http://hl7.org/fhir/R4/structuredefinition.html",target:"_blank",rel:"noopener noreferrer"},qe={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},Ce=t("code",null,"helloCos",-1),Ae={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},Oe=t("code",null,"highmedorg_helloCos",-1),Pe=t("code",null,"Test_DIC",-1),Me=t("code",null,"Test_COS",-1),He=i("
  • Add the highmedorg_helloCos process and its resources to the TutorialProcessPluginDefinition class.
  • Modify HelloDic service class to set the target process variable for the Test_COS organization.
  • Configure the HelloCosMessage class as a spring in the TutorialConfig class.
  • ",3),Be=i(`

    Solution Verification


    Maven Build and Automated Tests

    Execute a maven build of the dsf-process-tutorial parent module via:

    mvn clean install -Pexercise-3
    +

    Verify that the build was successful and no test failures occurred.

    Process Execution and Manual Tests

    To verify the highmedorg_helloDic and highmedorg_helloCos processes can be executed successfully, we need to deploy them into DSF instances and execute the highmedorg_helloDic process. The maven install build is configured to create a process jar file with all necessary resources and copy the jar to the appropriate locations of the docker test setup.

    1. Start the DSF FHIR server for the Test_DIC organization in a console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-fhir
    +

    Verify the DSF FHIR server started successfully.

    1. Start the DSF BPE server for the Test_DIC organization in another console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-bpe
    +

    Verify the DSF BPE server started successfully and deployed the highmedorg_helloDic process.

    1. Start the DSF FHIR server for the Test_COS organization in a console at location .../dsf-process-tutorial/test-setup:
    docker-compose up cos-fhir
    +
    `,16),Le={href:"https://cos/fhir",target:"_blank",rel:"noopener noreferrer"},Ne=t("br",null,null,-1),Ve=t("code",null,".../dsf-process-tutorial/test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12",-1),Ge=i(`
    1. Start the DSF BPE server for the Test_COS organization in another console at location .../dsf-process-tutorial/test-setup:
    docker-compose up cos-bpe
    +
    `,2),Ue=t("code",null,"highmedorg_helloCos",-1),Ze={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},Ke={href:"https://cos/fhir/ActivityDefinition",target:"_blank",rel:"noopener noreferrer"},je={href:"http://hl7.org/fhir/R4/bundle.html",target:"_blank",rel:"noopener noreferrer"},We={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},$e={href:"https://cos/fhir/StructureDefinition?url=http://highmed.org/fhir/StructureDefinition/task-hello-cos",target:"_blank",rel:"noopener noreferrer"},Je={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},Ye={start:"5"},Qe=t("code",null,"highmedorg_helloDic",-1),Xe={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},et=t("code",null,"Test_DIC",-1),tt=t("code",null,"main",-1),nt=t("code",null,"org.highmed.dsf.process.tutorial.TutorialExampleStarter",-1),st=t("code",null,"highmedorg_helloDic",-1),at={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},ot=t("code",null,"highmedorg_helloDic",-1),it=t("code",null,"Test_DIC",-1),rt=t("code",null,"Test_DIC",-1),lt={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},ct=t("code",null,"highmedorg_helloCos",-1),pt=t("code",null,"Test_COS",-1),ut=t("br",null,null,-1),ht={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},dt=t("code",null,"Test_COS",-1),gt=t("code",null,"highmedorg_helloCos",-1),ft=t("code",null,"Test_COS",-1),mt=t("hr",null,null,-1);function _t(kt,vt){const a=r("RouteLink"),s=r("ExternalLinkIcon");return c(),p("div",null,[t("p",null,[n(a,{to:"/oldstable/tutorial/prerequisites.html"},{default:o(()=>[e("Prerequisites")]),_:1}),e(" | "),n(a,{to:"/oldstable/tutorial/exercise1-simpleProcess.html"},{default:o(()=>[e("Exercise 1")]),_:1}),e(" | "),n(a,{to:"/oldstable/tutorial/exercise11-processDebugging.html"},{default:o(()=>[e("Exercise 1.1")]),_:1}),e(" | "),n(a,{to:"/oldstable/tutorial/exercise2-inputParameters.html"},{default:o(()=>[e("Exercise 2")]),_:1}),e(" | Exercise 3 | "),n(a,{to:"/oldstable/tutorial/exercise4-exclusiveGateways.html"},{default:o(()=>[e("Exercise 4")]),_:1}),e(" | "),n(a,{to:"/oldstable/tutorial/exercise5-eventBasedGateways.html"},{default:o(()=>[e("Exercise 5")]),_:1})]),d,g,t("p",null,[e("To demonstrate communication between two organizations we will configure message flow between the processes "),f,e(" and "),m,e(". The processes are then to be executed at the organizations "),_,e(" and "),k,e(" respectively in the docker test setup, with the former triggering execution of the latter by automatically sending a "),t("a",v,[e("Task"),n(s)]),e(" from organization "),b,e(" to organization "),x,e(".")]),D,S,y,t("p",null,[e("BPMN processes are instantiated and started within the DSF by creating a matching FHIR "),t("a",z,[e("Task"),n(s)]),e(" resource in the DSF FHIR server. This is true for executing a process on the local DSF BPE server by manually creating a "),t("a",w,[e("Task"),n(s)]),e(" resource, but also works by creating and starting a process instance at a remote DSF BPE server from an executing process automatically.")]),E,T,t("p",null,[e("Every time message flow is used in a BPMN process for the DSF, a corresponding FHIR "),t("a",R,[e("Task"),n(s)]),e(" profile needs to be specified for every interaction. This profile specifies which process should be started or continued and what the message name is when correlating the appropriate "),t("a",I,[e("Message Start Event"),n(s)]),e(" or "),t("a",F,[e("Intermediate Message Catch Event"),n(s)]),e(". A "),q,e(" and a "),C,e(" are specified if different process instances need to be linked to a single execution, for example to be able to send a message back.")]),A,t("p",null,[e("The canonical URL is used for "),t("a",O,[e("Task.instantiatesUri"),n(s)]),e(" and "),t("a",P,[e("ActivityDefinition.url / version"),n(s)]),e(".")]),M,t("p",null,[e("FHIR "),t("a",H,[e("ActivityDefinition"),n(s)]),e(" resources are used to announce what processes can be instantiated at a given DSF instance and contain the authorization rules for the specified process. "),t("a",B,[e("ActivityDefinition"),n(s)]),e(" for the DSF need to comply with the "),t("a",L,[e("http://highmed.org/fhir/StructureDefinition/activity-definition"),n(s)]),e(" profile, with authorization rules configured using the "),t("a",N,[e("http://highmed.org/fhir/StructureDefinition/extension-process-authorization"),n(s)]),e(" extension.")]),V,G,t("p",null,[e("String value specifying the message name of "),t("a",U,[e("Message Start Event"),n(s)]),e(", "),t("a",Z,[e("Intermediate Message Catch Event"),n(s)]),e(" or "),t("a",K,[e("Message Receive Task"),n(s)]),e(" this authorization rule should match. Can only be specified once per authorization rule extension.")]),j,t("p",null,[e("Canonical URL value specifying the "),t("a",W,[e("Task"),n(s)]),e(" profile this authorization rule should match. Can only be specified once per authorization rule extension.")]),$,t("p",null,[e("Coding value matching entries from the "),t("a",J,[e("http://highmed.org/fhir/ValueSet/process-authorization-requester"),n(s)]),e(" ValueSet:")]),t("ul",null,[t("li",null,[t("p",null,[e("LOCAL_ORGANIZATION A local organization with a specific identifier. The organization identifier needs to specified using the "),t("a",Y,[e("http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization"),n(s)]),e(" extension.")])]),t("li",null,[t("p",null,[e("REMOTE_ORGANIZATION A remote (non local) organization with a specific identifier. The organization identifier needs to specified using the "),t("a",Q,[e("http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization"),n(s)]),e(" extension.")])]),t("li",null,[t("p",null,[e("LOCAL_ROLE A local organizations with a specific role defined via "),t("a",X,[e("OrganizationAffiliation"),n(s)]),e(". Role and consortium identifier need to be specified using the "),t("a",ee,[e("http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role"),n(s)]),e(" extension.")])]),t("li",null,[t("p",null,[e("REMOTE_ROLE A remote (non local) organizations with a specific role defined via "),n(a,{to:"/oldstable/tutorial/hl7.org/fhir/R4/organizationaffiliation.html"},{default:o(()=>[e("OrganizationAffiliation")]),_:1}),e(". Role and consortium identifier need to be specified using the "),t("a",te,[e("http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role"),n(s)]),e(" extension.")])]),ne,se]),ae,t("p",null,[e("Coding value matching entries from the "),t("a",oe,[e("http://highmed.org/fhir/ValueSet/process-authorization-recipient"),n(s)]),e(" ValueSet.")]),t("ul",null,[t("li",null,[t("p",null,[e("LOCAL_ORGANIZATION Organization with a specific identifier. The organization identifier needs to specified using the "),t("a",ie,[e("http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization"),n(s)]),e(" extension.")])]),t("li",null,[t("p",null,[e("LOCAL_ROLE Organizations with a specific role defined via "),t("a",re,[e("OrganizationAffiliation"),n(s)]),e(". Role and consortium identifier need to be specified using the "),t("a",le,[e("http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role"),n(s)]),e(" extension.")])]),ce]),t("p",null,[e("The local organization of a DSF instance is configured using the environment variables "),t("a",pe,[e("ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE"),n(s)]),e(" for the DSF FHIR server and "),t("a",ue,[e("ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE"),n(s)]),e(" for the DSF BPE server.")]),he,t("ol",null,[t("li",null,[e("Modify the "),de,e(" process in the "),ge,e(" file and replace the "),t("a",fe,[e("End Event"),n(s)]),e(" with a "),t("a",me,[e("Message End Event"),n(s)]),e(". Configure input parameters "),_e,e(", "),ke,e(" and "),ve,e(" in the BPMN model for the "),t("a",be,[e("Message End Event"),n(s)]),e(". Set the message name of the "),t("a",xe,[e("Message End Event"),n(s)]),e(" and configure it to be executed using the HelloCosMessage class."),De,e(" Use "),t("a",Se,[e("http://highmed.org/fhir/StructureDefinition/task-hello-cos|#{version}"),n(s)]),e(" as the profile and "),ye,e(" as the message name. Figure out what the appropriate "),ze,e(" value is, based on the name (process definition key) of the process to be triggered.")]),t("li",null,[e("Modify the "),we,e(" process in the "),Ee,e(" file and configure the message name of the "),t("a",Te,[e("Message Start Event"),n(s)]),e(" with the same value as the message name of the "),t("a",Re,[e("Message End Event"),n(s)]),e(" in the "),Ie,e(" process.")]),t("li",null,[e("Create a new "),t("a",Fe,[e("StructureDefinition"),n(s)]),e(" with a "),t("a",qe,[e("Task"),n(s)]),e(" profile for the "),Ce,e(" message.")]),t("li",null,[e("Create a new "),t("a",Ae,[e("ActivityDefinition"),n(s)]),e(" resource for the "),Oe,e(" process and configure the authorization extension to allow the "),Pe,e(" organization as the requester and the "),Me,e(" organization as the recipient.")]),He]),Be,t("p",null,[e("Verify the DSF FHIR server started successfully. You can access the webservice of the DSF FHIR server at "),t("a",Le,[e("https://cos/fhir"),n(s)]),e("."),Ne,e(" The DSF FHIR server uses a server certificate that was generated during the first maven build. To authenticate yourself to the server you can use the client certificate located at "),Ve,e(" (Password: password).")]),Ge,t("p",null,[e("Verify the DSF BPE server started successfully and deployed the "),Ue,e(" process. The DSF BPE server should print a message that the process was deployed. The DSF FHIR server should now have a new "),t("a",Ze,[e("ActivityDefinition"),n(s)]),e(" resource. Go to "),t("a",Ke,[e("https://cos/fhir/ActivityDefinition"),n(s)]),e(" to check if the expected resource was created by the BPE while deploying the process. The returned FHIR "),t("a",je,[e("Bundle"),n(s)]),e(" should contain two "),t("a",We,[e("ActivityDefinition"),n(s)]),e(" resources. Also, go to "),t("a",$e,[e("https://cos/fhir/StructureDefinition?url=http://highmed.org/fhir/StructureDefinition/task-hello-cos"),n(s)]),e(" to check if the expected "),t("a",Je,[e("Task"),n(s)]),e(" profile was created.")]),t("ol",Ye,[t("li",null,[e("Start the "),Qe,e(" process by posting a specific FHIR "),t("a",Xe,[e("Task"),n(s)]),e(" resource to the DSF FHIR server of the "),et,e(" organization: Execute therefore the "),tt,e(" method of the "),nt,e(" class to create the Task resource needed to start the "),st,e(" process.")])]),t("p",null,[e("Verify that the FHIR "),t("a",at,[e("Task"),n(s)]),e(" resource was created at the DSF FHIR server and the "),ot,e(" process was executed by the DSF BPE server of the "),it,e(" organization. The DSF BPE server of the "),rt,e(" organization should print a message showing that a "),t("a",lt,[e("Task"),n(s)]),e(" resource to start the "),ct,e(" process was send to the "),pt,e(" organization."),ut,e(" Verify that a FHIR "),t("a",ht,[e("Task"),n(s)]),e(" resource was created at the DSF FHIR server of the "),dt,e(" organization and the "),gt,e(" process was then executed by the DSF BPE server of the "),ft,e(" organization.")]),t("p",null,[e("Continue with "),n(a,{to:"/oldstable/tutorial/exercise4-exclusiveGateways.html"},{default:o(()=>[e("exercise 4")]),_:1}),e(".")]),mt,t("p",null,[n(a,{to:"/oldstable/tutorial/prerequisites.html"},{default:o(()=>[e("Prerequisites")]),_:1}),e(" | "),n(a,{to:"/oldstable/tutorial/exercise1-simpleProcess.html"},{default:o(()=>[e("Exercise 1")]),_:1}),e(" | "),n(a,{to:"/oldstable/tutorial/exercise11-processDebugging.html"},{default:o(()=>[e("Exercise 1.1")]),_:1}),e(" | "),n(a,{to:"/oldstable/tutorial/exercise2-inputParameters.html"},{default:o(()=>[e("Exercise 2")]),_:1}),e(" | Exercise 3 | "),n(a,{to:"/oldstable/tutorial/exercise4-exclusiveGateways.html"},{default:o(()=>[e("Exercise 4")]),_:1}),e(" | "),n(a,{to:"/oldstable/tutorial/exercise5-eventBasedGateways.html"},{default:o(()=>[e("Exercise 5")]),_:1})])])}const Dt=l(h,[["render",_t],["__file","exercise3-messageEvents.html.vue"]]),St=JSON.parse('{"path":"/oldstable/tutorial/exercise3-messageEvents.html","title":"Exercise 3 - Message Events","lang":"en-US","frontmatter":{"title":"Exercise 3 - Message Events","icon":"slides"},"headers":[{"level":2,"title":"Exercise 3 - Message Events","slug":"exercise-3-message-events","link":"#exercise-3-message-events","children":[{"level":3,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":3,"title":"Exercise Tasks","slug":"exercise-tasks","link":"#exercise-tasks","children":[]},{"level":3,"title":"Solution Verification","slug":"solution-verification","link":"#solution-verification","children":[]}]}],"git":{"createdTime":1692783801000,"updatedTime":1692786258000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":6.16,"words":1849},"filePathRelative":"oldstable/tutorial/exercise3-messageEvents.md","localizedDate":"August 23, 2023","excerpt":"

    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    "}');export{Dt as comp,St as data}; diff --git a/assets/exercise4-exclusiveGateways.html-CNjavIrD.js b/assets/exercise4-exclusiveGateways.html-CNjavIrD.js new file mode 100644 index 000000000..2ae526e2e --- /dev/null +++ b/assets/exercise4-exclusiveGateways.html-CNjavIrD.js @@ -0,0 +1,9 @@ +import{_ as l}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as c,c as d,a as t,d as s,w as o,b as e,e as r}from"./app-kq9lCQfY.js";const h={},u=r('

    Exercise 4 - Exclusive Gateways

    Different execution paths in a process based on the state of process variables can be achieved using Exclusive Gateways. In Exercise 4 we will examine how this can be implemented by modifying the highmedorg_helloDic process.

    Introduction


    Exclusive Gateways

    ',5),p={href:"https://docs.camunda.org/manual/7.4/reference/bpmn20/gateways/exclusive-gateway/",target:"_blank",rel:"noopener noreferrer"},g={href:"https://docs.camunda.org/manual/7.17/user-guide/process-engine/expression-language/#conditions",target:"_blank",rel:"noopener noreferrer"},m=t("h4",{id:"condition-expressions",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#condition-expressions"},[t("span",null,"Condition Expressions")])],-1),x={href:"https://docs.camunda.org/manual/7.17/user-guide/process-engine/expression-language/#conditions",target:"_blank",rel:"noopener noreferrer"},b=t("code",null,"${..}",-1),f={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/tasks/service-task/",target:"_blank",rel:"noopener noreferrer"},v={href:"https://docs.camunda.org/manual/7.17/user-guide/process-engine/expression-language/#conditions",target:"_blank",rel:"noopener noreferrer"},_=t("code",null,"${cohortSize > 100}",-1),w=t("em",null,"cohortSize",-1),E=r(`

    Storing / Modifying Process Variables

    Via the DelegateExecution execution parameter of the doExecute method of a class extending AbstractServiceDelegate, we can write and read process variables of the current process instance. The following code listing show how to write and read a boolean variable:

    {
    +	execution.setVariable("variable-name", Variables.booleanValue(false));
    +	boolean variable = (boolean) execution.getVariable("variable-name");
    +}
    +
    `,3),y={href:"https://docs.camunda.org/manual/7.17/user-guide/process-engine/variables/",target:"_blank",rel:"noopener noreferrer"},k=r(`

    Exercise Tasks


    1. In the HelloDic class, write an algorithm deciding based on the "leading" Task's input parameter tutorial-input, whether the highmedorg_helloCos process should be started.
    2. Add a boolean variable to the process instance execution variables storing the decision.
    3. Add an exclusive gateway to the highmedorg_helloDic process model and two outgoing sequence flows - the first starting process highmedorg_helloDic, the second stopping process highmedorg_helloDic without starting process highmedorg_helloCos.
    4. Add a condition expressions to each outgoing sequence flow based on the previously stored execution variable.

    Solution Verification


    Maven Build and Automated Tests

    Execute a maven build of the dsf-process-tutorial parent module via:

    mvn clean install -Pexercise-4
    +

    Verify that the build was successful and no test failures occurred.

    Process Execution and Manual Tests

    To verify the highmedorg_helloDic and highmedorg_helloCos processes can be executed successfully, we need to deploy them into DSF instances and execute the highmedorg_helloDic process. The maven install build is configured to create a process jar file with all necessary resources and copy the jar to the appropriate locations of the docker test setup.

    1. Start the DSF FHIR server for the Test_DIC organization in a console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-fhir
    +

    Verify the DSF FHIR server started successfully.

    1. Start the DSF BPE server for the Test_DIC organization in a second console at location .../dsf-process-tutorial/test-setup:
    docker-compose up cos-fhir
    +

    Verify the DSF FHIR server started successfully.

    1. Start the DSF BPE server for the Test_COS organization in a fourth console at location .../dsf-process-tutorial/test-setup:
    docker-compose up cos-bpe
    +

    Verify the DSF BPE server started successfully and deployed the highmedorg_helloCos process.

    `,20),D={start:"4"},S=t("code",null,"highmedorg_helloDic",-1),P={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},T=t("code",null,"Test_DIC",-1),C=t("code",null,"main",-1),B=t("code",null,"org.highmed.dsf.process.tutorial.TutorialExampleStarter",-1),F={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},q=t("code",null,"highmedorg_helloDic",-1),V=t("p",null,[e("Verify that the "),t("code",null,"highmedorg_helloDic"),e(" process was executed successfully by the "),t("code",null,"Test_DIC"),e(" DSF BPE server and possibly the "),t("code",null,"highmedorg_helloCos"),e(" process by the "),t("code",null,"Test_COS"),e(" DSF BPE server, depending on whether decision of your algorithm based on the input parameter allowed to start the "),t("code",null,"highmedorg_helloDic"),e(" process.")],-1),G=t("hr",null,null,-1);function I(R,N){const a=n("RouteLink"),i=n("ExternalLinkIcon");return c(),d("div",null,[t("p",null,[s(a,{to:"/oldstable/tutorial/prerequisites.html"},{default:o(()=>[e("Prerequisites")]),_:1}),e(" | "),s(a,{to:"/oldstable/tutorial/exercise1-simpleProcess.html"},{default:o(()=>[e("Exercise 1")]),_:1}),e(" | "),s(a,{to:"/oldstable/tutorial/exercise11-processDebugging.html"},{default:o(()=>[e("Exercise 1.1")]),_:1}),e(" | "),s(a,{to:"/oldstable/tutorial/exercise2-inputParameters.html"},{default:o(()=>[e("Exercise 2")]),_:1}),e(" | "),s(a,{to:"/oldstable/tutorial/exercise3-messageEvents.html"},{default:o(()=>[e("Exercise 3")]),_:1}),e(" | Exercise 4 | "),s(a,{to:"/oldstable/tutorial/exercise5-eventBasedGateways.html"},{default:o(()=>[e("Exercise 5")]),_:1})]),u,t("p",null,[e("Different sequence flows during the execution of a process instance can be modeled using BPMN "),t("a",p,[e("Exclusive Gateways"),s(i)]),e(". For each outgoing sequence flow of the gateway, a BPMN "),t("a",g,[e("Condition Expression"),s(i)]),e(" can be added to the process model, deciding whether a sequence flow should be followed. Thereby, all condition decisions must be in an XOR relationship to each other.")]),m,t("p",null,[e("A BPMN "),t("a",x,[e("Condition Expression"),s(i)]),e(" uses the "),b,e(" notation. Within the curly braces all execution variables of a process instance can be accessed, e.g. the ones that were stored in a previous Java implementation of a BPMN "),t("a",f,[e("ServiceTask"),s(i)]),e(". For example, the BPMN "),t("a",v,[e("Condition Expression"),s(i)]),e(),_,e(" checks whether the value in the execution variable "),w,e(" is greater than 100.")]),E,t("p",null,[e("For more details on process variables see the "),t("a",y,[e("Camunda documentation"),s(i)]),e(".")]),k,t("ol",D,[t("li",null,[e("Start the "),S,e(" process by posting a specific FHIR "),t("a",P,[e("Task"),s(i)]),e(" resource to the DSF FHIR server of the "),T,e(" organization: Execute therefore the "),C,e(" method of the "),B,e(" class to create the "),t("a",F,[e("Task"),s(i)]),e(" resource needed to start the "),q,e(" process.")])]),V,t("p",null,[e("Continue with "),s(a,{to:"/oldstable/tutorial/exercise5-eventBasedGateways.html"},{default:o(()=>[e("exercise 5")]),_:1})]),G,t("p",null,[s(a,{to:"/oldstable/tutorial/prerequisites.html"},{default:o(()=>[e("Prerequisites")]),_:1}),e(" | "),s(a,{to:"/oldstable/tutorial/exercise1-simpleProcess.html"},{default:o(()=>[e("Exercise 1")]),_:1}),e(" | "),s(a,{to:"/oldstable/tutorial/exercise11-processDebugging.html"},{default:o(()=>[e("Exercise 1.1")]),_:1}),e(" | "),s(a,{to:"/oldstable/tutorial/exercise2-inputParameters.html"},{default:o(()=>[e("Exercise 2")]),_:1}),e(" | "),s(a,{to:"/oldstable/tutorial/exercise3-messageEvents.html"},{default:o(()=>[e("Exercise 3")]),_:1}),e(" | Exercise 4 | "),s(a,{to:"/oldstable/tutorial/exercise5-eventBasedGateways.html"},{default:o(()=>[e("Exercise 5")]),_:1})])])}const M=l(h,[["render",I],["__file","exercise4-exclusiveGateways.html.vue"]]),A=JSON.parse('{"path":"/oldstable/tutorial/exercise4-exclusiveGateways.html","title":"Exercise 4 - Exclusive Gateways","lang":"en-US","frontmatter":{"title":"Exercise 4 - Exclusive Gateways","icon":"slides"},"headers":[{"level":2,"title":"Exercise 4 - Exclusive Gateways","slug":"exercise-4-exclusive-gateways","link":"#exercise-4-exclusive-gateways","children":[{"level":3,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":3,"title":"Exercise Tasks","slug":"exercise-tasks","link":"#exercise-tasks","children":[]},{"level":3,"title":"Solution Verification","slug":"solution-verification","link":"#solution-verification","children":[]}]}],"git":{"createdTime":1692783801000,"updatedTime":1692786258000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":2.29,"words":686},"filePathRelative":"oldstable/tutorial/exercise4-exclusiveGateways.md","localizedDate":"August 23, 2023","excerpt":"

    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    "}');export{M as comp,A as data}; diff --git a/assets/exercise5-eventBasedGateways.html-TXYnwT8n.js b/assets/exercise5-eventBasedGateways.html-TXYnwT8n.js new file mode 100644 index 000000000..ab0ee1dc2 --- /dev/null +++ b/assets/exercise5-eventBasedGateways.html-TXYnwT8n.js @@ -0,0 +1,56 @@ +import{_ as l}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as c,c as p,a as t,d as n,w as o,b as e,e as i}from"./app-kq9lCQfY.js";const u="/photos/guideline/tutorial/ex5.png",h={},d=i('

    Exercise 5 - Event Based Gateways and Intermediate Events

    In the final exercise we will look at message flow between three organizations as well as how to continue a waiting process if no return message arrives. With this exercise we will add a third process and complete a message loop from Test_DIC to Test_COR to Test_HRP back to Test_DIC.

    Introduction


    Managing Multiple- and Missing Messages

    ',5),g={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},f={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},m={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/gateways/event-based-gateway/",target:"_blank",rel:"noopener noreferrer"},k={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},_={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/timer-events/#timer-intermediate-catching-event",target:"_blank",rel:"noopener noreferrer"},v=t("figure",null,[t("img",{src:u,alt:"",tabindex:"0",loading:"lazy"}),t("figcaption")],-1),b=t("h5",{id:"timer-events",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#timer-events"},[t("span",null,"Timer Events")])],-1),x={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/timer-events/",target:"_blank",rel:"noopener noreferrer"},y={href:"https://en.wikipedia.org/wiki/ISO_8601#Durations",target:"_blank",rel:"noopener noreferrer"},E={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/timer-events/#time-duration",target:"_blank",rel:"noopener noreferrer"},w=t("h4",{id:"matching-process-instances-with-business-keys",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#matching-process-instances-with-business-keys"},[t("span",null,"Matching Process Instances With Business Keys")])],-1),D={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},S={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},z=t("p",null,"If multiple message are send in a 1:n relationship with a n:1 return an additional correlation-key needs to be configured in order to correlate every bidirectional communication between two DSF instances.",-1),q=t("h4",{id:"activitydefinitions-for-the-dsf",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#activitydefinitions-for-the-dsf"},[t("span",null,"ActivityDefinitions for the DSF")])],-1),R={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},T={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},I={href:"http://highmed.org/fhir/StructureDefinition/activity-definition",target:"_blank",rel:"noopener noreferrer"},F={href:"http://highmed.org/fhir/StructureDefinition/extension-process-authorization",target:"_blank",rel:"noopener noreferrer"},C=t("p",null,"The authorization extension needs to be configured at least once and has four sub extensions:",-1),A=t("h5",{id:"message-name-1-1",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#message-name-1-1"},[t("span",null,"message-name [1..1]")])],-1),O={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/message-events/#message-start-event",target:"_blank",rel:"noopener noreferrer"},H={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/message-events/#message-intermediate-catching-event",target:"_blank",rel:"noopener noreferrer"},P={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/tasks/receive-task/",target:"_blank",rel:"noopener noreferrer"},B=t("h5",{id:"task-profile-1-1",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#task-profile-1-1"},[t("span",null,"task-profile [1..1]")])],-1),L={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},M=t("h5",{id:"requester-1",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#requester-1"},[t("span",null,"requester [1..]")])],-1),V={href:"http://highmed.org/fhir/ValueSet/process-authorization-requester",target:"_blank",rel:"noopener noreferrer"},G={href:"http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization",target:"_blank",rel:"noopener noreferrer"},N={href:"http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization",target:"_blank",rel:"noopener noreferrer"},U={href:"http://hl7.org/fhir/R4/organizationaffiliation.html",target:"_blank",rel:"noopener noreferrer"},W={href:"http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role",target:"_blank",rel:"noopener noreferrer"},Z={href:"http://hl7.org/fhir/R4/organizationaffiliation.html",target:"_blank",rel:"noopener noreferrer"},j={href:"http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role",target:"_blank",rel:"noopener noreferrer"},J=t("li",null,[t("p",null,"LOCAL_ALL All local organizations regardless of their identifier or role in a consortium.")],-1),K=t("li",null,[t("p",null,"REMOTE_ALL All remote (non local) organizations regardless of their identifier or role in a consortium.")],-1),Y=t("h5",{id:"recipient-1",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#recipient-1"},[t("span",null,"recipient [1..]")])],-1),Q={href:"http://highmed.org/fhir/ValueSet/process-authorization-recipient",target:"_blank",rel:"noopener noreferrer"},X={href:"http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization",target:"_blank",rel:"noopener noreferrer"},$={href:"http://hl7.org/fhir/R4/organizationaffiliation.html",target:"_blank",rel:"noopener noreferrer"},ee={href:"http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role",target:"_blank",rel:"noopener noreferrer"},te=t("li",null,[t("p",null,"LOCAL_ALL All organizations regardless of their identifier or role in a consortium.")],-1),ne={href:"https://github.com/highmed/highmed-dsf/wiki/DSF-0.7.0-Configuration-Parameters-FHIR#org_highmed_dsf_fhir_server_organization_identifier_value",target:"_blank",rel:"noopener noreferrer"},se={href:"https://github.com/highmed/highmed-dsf/wiki/DSF-0.7.0-Configuration-Parameters-BPE#org_highmed_dsf_bpe_fhir_server_organization_identifier_value",target:"_blank",rel:"noopener noreferrer"},ae=i(`

    Authorization Extension Example

    The following example specifies that process execution can only be requested by a organization with a specific identifier and only allows execution of the process in the DSF instance of an organization with a specific identifier.

    <extension url="http://highmed.org/fhir/StructureDefinition/extension-process-authorization">
    +	<extension url="message-name">
    +		<valueString value="some-message-name" />
    +	</extension>
    +	<extension url="task-profile">
    +		<valueCanonical value="http://foo.org/fhir/StructureDefinition/profile|#{version}" />
    +	</extension>
    +	<extension url="requester">
    +		<valueCoding>
    +			<extension url="http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role">
    +				<extension url="consortium">
    +					<valueIdentifier>
    +						<system value="http://highmed.org/sid/organization-identifier" />
    +						<value value="identifier.consortium.org" />
    +					</valueIdentifier>
    +				</extension>
    +				<extension url="role">
    +					<valueCoding>
    +						<system value="http://highmed.org/fhir/CodeSystem/organization-role" />
    +						<code value="SOME_ROLE" />
    +					</valueCoding>
    +				</extension>
    +			</extension>
    +			<system value="http://highmed.org/fhir/CodeSystem/process-authorization" />
    +			<code value="REMOTE_ROLE" />
    +		</valueCoding>
    +	</extension>
    +	<extension url="recipient">
    +		<valueCoding>
    +			<extension url="http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role">
    +				<extension url="consortium">
    +					<valueIdentifier>
    +						<system value="http://highmed.org/sid/organization-identifier" />
    +						<value value="identifier.consortium.org" />
    +					</valueIdentifier>
    +				</extension>
    +				<extension url="role">
    +					<valueCoding>
    +						<system value="http://highmed.org/fhir/CodeSystem/organization-role" />
    +						<code value="SOME_ROLE" />
    +					</valueCoding>
    +				</extension>
    +			</extension>
    +			<system value="http://highmed.org/fhir/CodeSystem/process-authorization" />
    +			<code value="LOCAL_ROLE" />
    +		</valueCoding>
    +	</extension>
    +</extension>
    +

    Exercise Tasks


    `,5),oe=t("code",null,"HelloCosMessage",-1),ie={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},re=t("code",null,"helloDic",-1),le={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},ce=t("code",null,"highmedorg_helloCos",-1),pe={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},ue=t("code",null,"helloCos",-1),he=t("code",null,"getAdditionalInputParameters",-1),de={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},ge=t("code",null,"highmedorg_helloCos",-1),fe={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/message-events/#message-end-event",target:"_blank",rel:"noopener noreferrer"},me=t("code",null,"hello-hrp.bpmn",-1),ke=t("code",null,"instantiatesUri",-1),_e=t("code",null,"profile",-1),ve=t("code",null,"messageName",-1),be={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/message-events/#message-end-event",target:"_blank",rel:"noopener noreferrer"},xe={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},ye=t("code",null,"hello-hrp.xml",-1),Ee=t("code",null,"highmedorg_helloDic",-1),we={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/message-events/#message-end-event",target:"_blank",rel:"noopener noreferrer"},De={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/message-events/#message-intermediate-throwing-event",target:"_blank",rel:"noopener noreferrer"},Se={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/gateways/event-based-gateway/",target:"_blank",rel:"noopener noreferrer"},ze={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/gateways/event-based-gateway/",target:"_blank",rel:"noopener noreferrer"},qe={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/message-events/#message-intermediate-catching-event",target:"_blank",rel:"noopener noreferrer"},Re=t("code",null,"goodbyDic",-1),Te=t("code",null,"highmedorg_helloHrp",-1),Ie={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/timer-events/#timer-intermediate-catching-event",target:"_blank",rel:"noopener noreferrer"},Fe=t("code",null,"highmedorg_helloHrp",-1),Ce={href:"https://docs.camunda.org/manual/7.17/reference/bpmn20/events/none-events/",target:"_blank",rel:"noopener noreferrer"},Ae=t("code",null,"hello-hrp.bpmn",-1),Oe={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},He=t("code",null,"hello-hrp.xml",-1),Pe=i("
  • Add the process in file hello-hrp.bpmn to the TutorialProcessPluginDefinition and configure the FHIR resources needed for the three processes.
  • Add the HelloCos, HelloHrpMessage , HelloHrp and GoodbyeDicMessage classes as spring beans.
  • ",2),Be=i(`

    Solution Verification


    Maven Build and Automated Tests

    Execute a maven build of the dsf-process-tutorial parent module via:

    mvn clean install -Pexercise-5
    +

    Verify that the build was successful and no test failures occurred.

    Process Execution and Manual Tests

    To verify the highmedorg_helloDic, highmedorg_helloCos and highmedorg_helloHrp processes can be executed successfully, we need to deploy them into DSF instances and execute the highmedorg_helloDic process. The maven install build is configured to create a process jar file with all necessary resources and copy the jar to the appropriate locations of the docker test setup.

    1. Start the DSF FHIR server for the Test_DIC organization in a console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-fhir
    +

    Verify the DSF FHIR server started successfully.

    1. Start the DSF BPE server for the Test_DIC organization in a second console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-bpe
    +

    Verify the DSF BPE server started successfully and deployed the highmedorg_helloDic process.

    1. Start the DSF FHIR server for the Test_COS organization in a third console at location .../dsf-process-tutorial/test-setup:
    docker-compose up cos-fhir
    +

    Verify the DSF FHIR server started successfully.

    1. Start the DSF BPE server for the Test_COS organization in a fourth console at location .../dsf-process-tutorial/test-setup:
    docker-compose up cos-bpe
    +

    Verify the DSF BPE server started successfully and deployed the highmedorg_helloDic process.

    1. Start the DSF FHIR server for the Test_HRP organization in a fifth at location .../dsf-process-tutorial/test-setup:
    docker-compose up hrp-fhir
    +
    `,22),Le={href:"https://hrp/fhir",target:"_blank",rel:"noopener noreferrer"},Me=t("br",null,null,-1),Ve=t("code",null,".../dsf-process-tutorial/test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12",-1),Ge=i(`
    1. Start the DSF BPE server for the Test_HRP organization in a sixth console at location .../dsf-process-tutorial/test-setup:
    docker-compose up hrp-bpe
    +
    `,2),Ne=t("code",null,"highmedorg_helloHrp",-1),Ue={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},We={href:"https://hrp/fhir/ActivityDefinition",target:"_blank",rel:"noopener noreferrer"},Ze={href:"http://hl7.org/fhir/R4/bundle.html",target:"_blank",rel:"noopener noreferrer"},je={href:"http://hl7.org/fhir/R4/activitydefinition.html",target:"_blank",rel:"noopener noreferrer"},Je={href:"https://hrp/fhir/StructureDefinition?url=http://highmed.org/fhir/StructureDefinition/task-hello-hrp",target:"_blank",rel:"noopener noreferrer"},Ke={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},Ye={start:"7"},Qe=t("code",null,"highmedorg_helloDic",-1),Xe={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},$e=t("code",null,"Test_DIC",-1),et=t("code",null,"main",-1),tt=t("code",null,"org.highmed.dsf.process.tutorial.TutorialExampleStarter",-1),nt={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},st=t("code",null,"highmedorg_helloDic",-1),at={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},ot=t("code",null,"highmedorg_helloDic",-1),it=t("code",null,"Test_DIC",-1),rt=t("code",null,"Test_DIC",-1),lt={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},ct=t("code",null,"highmedorg_helloCos",-1),pt=t("code",null,"Test_COS",-1),ut=t("br",null,null,-1),ht={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},dt=t("code",null,"Test_COS",-1),gt=t("code",null,"highmedorg_helloCos",-1),ft=t("code",null,"Test_COS",-1),mt=t("code",null,"Test_COS",-1),kt={href:"http://hl7.org/fhir/R4/task.html",target:"_blank",rel:"noopener noreferrer"},_t=t("code",null,"highmedorg_helloHrp",-1),vt=t("code",null,"Test_HRP",-1),bt=i("

    Based on the value of the Task.input parameter you send, the highmedorg_helloHrp process will either send a goodbyDic message to the Test_DIC organization or finish without sending a message.

    To trigger the goodbyDic message, use send-response as the http://highmed.org/fhir/CodeSystem/tutorial#tutorial-input input parameter.

    Verify that the highmedorg_helloDic process either finishes with the arrival of the goodbyDic message or after waiting for two minutes.


    ",4);function xt(yt,Et){const a=r("RouteLink"),s=r("ExternalLinkIcon");return c(),p("div",null,[t("p",null,[n(a,{to:"/oldstable/tutorial/prerequisites.html"},{default:o(()=>[e("Prerequisites")]),_:1}),e(" | "),n(a,{to:"/oldstable/tutorial/exercise1-simpleProcess.html"},{default:o(()=>[e("Exercise 1")]),_:1}),e(" | "),n(a,{to:"/oldstable/tutorial/exercise11-processDebugging.html"},{default:o(()=>[e("Exercise 1.1")]),_:1}),e(" | "),n(a,{to:"/oldstable/tutorial/exercise2-inputParameters.html"},{default:o(()=>[e("Exercise 2")]),_:1}),e(" | "),n(a,{to:"/oldstable/tutorial/exercise3-messageEvents.html"},{default:o(()=>[e("Exercise 3")]),_:1}),e(" | "),n(a,{to:"/oldstable/tutorial/exercise4-exclusiveGateways.html"},{default:o(()=>[e("Exercise 4")]),_:1}),e(" | Exercise 5")]),d,t("p",null,[e("If an existing and started process instance is waiting for a message from another organization, the corresponding FHIR "),t("a",g,[e("Task"),n(s)]),e(' may never arrive. Either because the other organization decides to never send the "message" or because some technical problem prohibits the '),t("a",f,[e("Task"),n(s)]),e(" resource from being posted to the DSF FHIR server. This would result in stale process instances that never finish.")]),t("p",null,[e("In order to solve this problem we can add an "),t("a",m,[e("Event Based Gateway"),n(s)]),e(" to the process waiting for a response and then either handle a "),t("a",k,[e("Task"),n(s)]),e(" resource with the response and finish the process in a success state or fire of an "),t("a",_,[e("Intermediate Timer Catch Event"),n(s)]),e(" after a defined wait period and finish the process in an error state. The following BPMN collaboration diagram shows how the process at the first organization would look like if two different message or no message could be received:")]),v,b,t("p",null,[e("For "),t("a",x,[e("Timer Events"),n(s)]),e(" the duration until the timer fires is specified using the "),t("a",y,[e("ISO 8601 Durations"),n(s)]),e(" format. Examples can be found in the "),t("a",E,[e("Camunda 7 documentation"),n(s)]),e(".")]),w,t("p",null,[e('In the example above the first organization is sending a "message" to the second and waiting for a reply. In order to correlate the return message with the waiting process instance, a unique identifier needs to be exchanged between both process instances. Within the DSF this is implemented using the process instance business-key and a corresponding '),t("a",D,[e("Task.input"),n(s)]),e(" parameter. For 1:1 communication relationships this is handled by the DSF BPE servers automatically, but the corresponding "),t("a",S,[e("Task"),n(s)]),e(" profiles need to define the business-key input parameter as mandatory.")]),z,q,t("p",null,[e("FHIR "),t("a",R,[e("ActivityDefinition"),n(s)]),e(" resources are used to announce what processes can be instantiated at a given DSF instance and contain the authorization rules for the specified process. "),t("a",T,[e("ActivityDefinition"),n(s)]),e(" for the DSF need to comply with the "),t("a",I,[e("http://highmed.org/fhir/StructureDefinition/activity-definition"),n(s)]),e(" profile, with authorization rules configured using the "),t("a",F,[e("http://highmed.org/fhir/StructureDefinition/extension-process-authorization"),n(s)]),e(" extension.")]),C,A,t("p",null,[e("String value specifying the message name of "),t("a",O,[e("Message Start Event"),n(s)]),e(", "),t("a",H,[e("Intermediate Message Catch Event"),n(s)]),e(" or "),t("a",P,[e("Message Receive Task"),n(s)]),e(" this authorization rule should match. Can only be specified once per authorization rule extension.")]),B,t("p",null,[e("Canonical URL value specifying the "),t("a",L,[e("Task"),n(s)]),e(" profile this authorization rule should match. Can only be specified once per authorization rule extension.")]),M,t("p",null,[e("Coding value matching entries from the "),t("a",V,[e("http://highmed.org/fhir/ValueSet/process-authorization-requester"),n(s)]),e(" ValueSet:")]),t("ul",null,[t("li",null,[t("p",null,[e("LOCAL_ORGANIZATION A local organization with a specific identifier. The organization identifier needs to specified using the "),t("a",G,[e("http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization"),n(s)]),e(" extension.")])]),t("li",null,[t("p",null,[e("REMOTE_ORGANIZATION A remote (non local) organization with a specific identifier. The organization identifier needs to specified using the "),t("a",N,[e("http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization"),n(s)]),e(" extension.")])]),t("li",null,[t("p",null,[e("LOCAL_ROLE A local organizations with a specific role defined via "),t("a",U,[e("OrganizationAffiliation"),n(s)]),e(". Role and consortium identifier need to be specified using the "),t("a",W,[e("http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role"),n(s)]),e(" extension.")])]),t("li",null,[t("p",null,[e("REMOTE_ROLE A remote (non local) organizations with a specific role defined via "),t("a",Z,[e("OrganizationAffiliation"),n(s)]),e(". Role and consortium identifier need to be specified using the "),t("a",j,[e("http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role"),n(s)]),e(" extension.")])]),J,K]),Y,t("p",null,[e("Coding value matching entries from the "),t("a",Q,[e("http://highmed.org/fhir/ValueSet/process-authorization-recipient"),n(s)]),e(" ValueSet.")]),t("ul",null,[t("li",null,[t("p",null,[e("LOCAL_ORGANIZATION Organization with a specific identifier. The organization identifier needs to specified using the "),t("a",X,[e("http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization"),n(s)]),e(" extension.")])]),t("li",null,[t("p",null,[e("LOCAL_ROLE Organizations with a specific role defined via "),t("a",$,[e("OrganizationAffiliation"),n(s)]),e(". Role and consortium identifier need to be specified using the "),t("a",ee,[e("http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role"),n(s)]),e(" extension.")])]),te]),t("p",null,[e("The local organization of a DSF instance is configured using the environment variables "),t("a",ne,[e("ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE"),n(s)]),e(" for the DSF FHIR server and "),t("a",se,[e("ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE"),n(s)]),e(" for the DSF BPE server.")]),ae,t("ol",null,[t("li",null,[e("Modify the "),oe,e(" and use the value from the "),t("a",ie,[e("Task.input"),n(s)]),e(" parameter of the "),re,e(),t("a",le,[e("Task"),n(s)]),e(" to send it to the "),ce,e(" process via a "),t("a",pe,[e("Task.input"),n(s)]),e(" parameter in the "),ue,e(" Task. Override the "),he,e(" to configure a "),t("a",de,[e("Task.input"),n(s)]),e(" parameter to be send.")]),t("li",null,[e("Modify the "),ge,e(" process to use a "),t("a",fe,[e("Message End Event"),n(s)]),e(" to trigger the process in file "),me,e(". Figure out the values for the "),ke,e(", "),_e,e(" and "),ve,e(" input parameters of the "),t("a",be,[e("Message End Event"),n(s)]),e(" based on the "),t("a",xe,[e("AcitvityDefinition"),n(s)]),e(" in file "),ye,e(".")]),t("li",null,[e("Modify the "),Ee,e(" process: "),t("ul",null,[t("li",null,[e("Change the "),t("a",we,[e("Message End Event"),n(s)]),e(" to an "),t("a",De,[e("Intermediate Message Throw Event"),n(s)])]),t("li",null,[e("Add an "),t("a",Se,[e("Event Based Gateway"),n(s)]),e(" after the throw event")]),t("li",null,[e("Configure two cases for the "),t("a",ze,[e("Event Based Gateway"),n(s)]),e(": "),t("ol",null,[t("li",null,[e("An "),t("a",qe,[e("Intermediate Message Catch Event"),n(s)]),e(" to catch the "),Re,e(" message from the "),Te,e(" process.")]),t("li",null,[e("An "),t("a",Ie,[e("Intermediate Timer Catch Event"),n(s)]),e(" to end the process if no message is sent by the "),Fe,e(" process after two minutes. Make sure both cases finish with a process "),t("a",Ce,[e("End Event"),n(s)]),e(".")])])])])]),t("li",null,[e("Modify the process in file "),Ae,e(" and set the process definition key and version. Figure out the appropriate values based on the "),t("a",Oe,[e("AcitvityDefinition"),n(s)]),e(" in file "),He,e(".")]),Pe]),Be,t("p",null,[e("Verify the DSF FHIR server started successfully. You can access the webservice of the DSF FHIR server at "),t("a",Le,[e("https://hrp/fhir"),n(s)]),e("."),Me,e(" The DSF FHIR server uses a server certificate that was generated during the first maven build. To authenticate yourself to the server you can use the client certificate located at "),Ve,e(" (Password: password).")]),Ge,t("p",null,[e("Verify the DSF BPE server started successfully and deployed the "),Ne,e(" process. The DSF BPE server should print a message that the process was deployed. The DSF FHIR server should now have a new "),t("a",Ue,[e("ActivityDefinition"),n(s)]),e(" resource. Go to "),t("a",We,[e("https://hrp/fhir/ActivityDefinition"),n(s)]),e(" to check if the expected resource was created by the BPE while deploying the process. The returned FHIR "),t("a",Ze,[e("Bundle"),n(s)]),e(" should contain a three "),t("a",je,[e("ActivityDefinition"),n(s)]),e(" resources. Also, go to "),t("a",Je,[e("https://hrp/fhir/StructureDefinition?url=http://highmed.org/fhir/StructureDefinition/task-hello-hrp"),n(s)]),e(" to check if the expected "),t("a",Ke,[e("Task"),n(s)]),e(" profile was created.")]),t("ol",Ye,[t("li",null,[e("Start the "),Qe,e(" process by posting a specific FHIR "),t("a",Xe,[e("Task"),n(s)]),e(" resource to the DSF FHIR server of the "),$e,e(" organization: Execute therefore the "),et,e(" method of the "),tt,e(" class to create the "),t("a",nt,[e("Task"),n(s)]),e(" resource needed to start the "),st,e(" process.")])]),t("p",null,[e("Verify that the FHIR "),t("a",at,[e("Task"),n(s)]),e(" resource was created at the DSF FHIR server and the "),ot,e(" process was executed by the DSF BPE server of the "),it,e(" organization. The DSF BPE server of the "),rt,e(" organization should print a message showing that a "),t("a",lt,[e("Task"),n(s)]),e(" resource to start the "),ct,e(" process was sent to the "),pt,e(" organization."),ut,e(" Verify that a FHIR "),t("a",ht,[e("Task"),n(s)]),e(" resource was created at the DSF FHIR server of the "),dt,e(" organization and the "),gt,e(" process was executed by the DSF BPE server of the "),ft,e(" organization. The DSF BPE server of the "),mt,e(" organization should print a message showing that a "),t("a",kt,[e("Task"),n(s)]),e(" resource to start the "),_t,e(" process was send to the "),vt,e(" organization.")]),bt,t("p",null,[n(a,{to:"/oldstable/tutorial/prerequisites.html"},{default:o(()=>[e("Prerequisites")]),_:1}),e(" | "),n(a,{to:"/oldstable/tutorial/exercise1-simpleProcess.html"},{default:o(()=>[e("Exercise 1")]),_:1}),e(" | "),n(a,{to:"/oldstable/tutorial/exercise11-processDebugging.html"},{default:o(()=>[e("Exercise 1.1")]),_:1}),e(" | "),n(a,{to:"/oldstable/tutorial/exercise2-inputParameters.html"},{default:o(()=>[e("Exercise 2")]),_:1}),e(" | "),n(a,{to:"/oldstable/tutorial/exercise3-messageEvents.html"},{default:o(()=>[e("Exercise 3")]),_:1}),e(" | "),n(a,{to:"/oldstable/tutorial/exercise4-exclusiveGateways.html"},{default:o(()=>[e("Exercise 4")]),_:1}),e(" | Exercise 5")])])}const St=l(h,[["render",xt],["__file","exercise5-eventBasedGateways.html.vue"]]),zt=JSON.parse('{"path":"/oldstable/tutorial/exercise5-eventBasedGateways.html","title":"Exercise 5 - Event Based Gateways and Intermediate Events","lang":"en-US","frontmatter":{"title":"Exercise 5 - Event Based Gateways and Intermediate Events","icon":"slides"},"headers":[{"level":2,"title":"Exercise 5 - Event Based Gateways and Intermediate Events","slug":"exercise-5-event-based-gateways-and-intermediate-events","link":"#exercise-5-event-based-gateways-and-intermediate-events","children":[{"level":3,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":3,"title":"Exercise Tasks","slug":"exercise-tasks","link":"#exercise-tasks","children":[]},{"level":3,"title":"Solution Verification","slug":"solution-verification","link":"#solution-verification","children":[]}]}],"git":{"createdTime":1692783801000,"updatedTime":1692786258000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":6.73,"words":2019},"filePathRelative":"oldstable/tutorial/exercise5-eventBasedGateways.md","localizedDate":"August 23, 2023","excerpt":"

    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    "}');export{St as comp,zt as data}; diff --git a/assets/feasibility.html-fV-0rrxS.js b/assets/feasibility.html-fV-0rrxS.js new file mode 100644 index 000000000..19c69f0cd --- /dev/null +++ b/assets/feasibility.html-fV-0rrxS.js @@ -0,0 +1 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as n,c as o,a as e,b as i,d as r}from"./app-kq9lCQfY.js";const l={},c=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),h={href:"https://www.forschen-fuer-gesundheit.de/menu_standorte.php",target:"_blank",rel:"noopener noreferrer"},d={href:"https://github.com/medizininformatik-initiative/feasibility-dsf-process/",target:"_blank",rel:"noopener noreferrer"},f={href:"https://www.forschen-fuer-gesundheit.de/",target:"_blank",rel:"noopener noreferrer"},m={href:"https://www.medizininformatik-initiative.de/sites/default/files/2023-05/20230509_TMF_Faltflyer_A4_digital.pdf",target:"_blank",rel:"noopener noreferrer"},u=e("h2",{id:"the-feasibility-process",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#the-feasibility-process"},[e("span",null,"The Feasibility Process")])],-1),p=e("p",null,"Medical routine data holds great promise for advancing research, yet its integration into a research context poses significant challenges. To address this, Medical Data Integration Centers have been established, by the medical informatics initiative to consolidate data from primary information systems into a central repository. However, relying on data from only one organization is rarely sufficient to answer complex research questions, so merging data across institutional boundaries is necessary.",-1),b={href:"https://github.com/medizininformatik-initiative/feasibility-dsf-process/",target:"_blank",rel:"noopener noreferrer"},y=e("h2",{id:"technical-information",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#technical-information"},[e("span",null,"Technical Information")])],-1),_={href:"https://github.com/medizininformatik-initiative/feasibility-deploy/wiki/DSF-Middleware-Setup",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/medizininformatik-initiative/feasibility-dsf-process/",target:"_blank",rel:"noopener noreferrer"},v={href:"https://github.com/medizininformatik-initiative/feasibility-deploy/tree/main/feasibility-triangle",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/medizininformatik-initiative/mii-dsf-processes/tree/main",target:"_blank",rel:"noopener noreferrer"},k={href:"https://github.com/medizininformatik-initiative/mii-dsf-processes/blob/main/mii-dsf-processes-docker-test-setup/README-Process-Projectathon-Data-Sharing.md",target:"_blank",rel:"noopener noreferrer"};function F(T,z){const t=s("ExternalLinkIcon");return n(),o("div",null,[c,e("p",null,[i("Funded by the German Federal Ministry of Research and Education, 25 "),e("a",h,[i("sites"),r(t)]),i(" have installed the DSF to execute the "),e("a",d,[i("Feasibility"),r(t)]),i(" process. To perform feasibility queries, a researcher can register and query data on the "),e("a",f,[i("FDPG (Forschungsdaten Portal für Gesundheit - Research Data Portal)"),r(t)]),i(" website. Basic data of hospitalizations of over 8 million patients with over 40 million diagnoses and much more such as laboratory values or drug prescriptions are available. After a successful query, the data is made available in standardized FHIR format. Further information can be found in the "),e("a",m,[i("flyer"),r(t)]),i(".")]),u,p,e("p",null,[i("To enable researchers to leverage this integrated data for specific research projects, there is a critical need for the ability to query cohort sizes across institutions. The "),e("a",b,[i("feasibility"),r(t)]),i(" process allows researchers to conduct automated and distributed feasibility queries, i.e., cohort size estimates. This process is executed according to the open standard BPMN 2.0, the underlying process data model is based on HL7 FHIR R4 resources.")]),y,e("ul",null,[e("li",null,[e("a",_,[i("DSF Middleware Setup"),r(t)]),i(": The DSF middleware connects your site to the central platform. This allows it to receive feasibility query requests as well as reporting back any results of these queries.")]),e("li",null,[e("a",g,[i("Feasibility Process"),r(t)]),i(": Core Feasibility Process")]),e("li",null,[e("a",v,[i("Feasibility Triangle"),r(t)]),i(": The Feasibility Triangle part of this repository provides a site (data integration center) with all the necessary components to set up in order to allow feasibility queries from the central feasibility portal.")]),e("li",null,[e("a",w,[i("Data Transfer"),r(t)])]),e("li",null,[e("a",k,[i("Data extraction after successful feasibility query"),r(t)])])])])}const q=a(l,[["render",F],["__file","feasibility.html.vue"]]),P=JSON.parse('{"path":"/intro/use-cases/feasibility.html","title":"Feasibility","lang":"en-US","frontmatter":{"title":"Feasibility","icon":"diagram"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"The Feasibility Process","slug":"the-feasibility-process","link":"#the-feasibility-process","children":[]},{"level":2,"title":"Technical Information","slug":"technical-information","link":"#technical-information","children":[]}],"git":{"createdTime":1690473388000,"updatedTime":1698661553000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":3},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.23,"words":370},"filePathRelative":"intro/use-cases/feasibility.md","localizedDate":"July 27, 2023","excerpt":"

    Overview

    \\n

    Funded by the German Federal Ministry of Research and Education, 25 sites have installed the DSF to execute the Feasibility process. To perform feasibility queries, a researcher can register and query data on the FDPG (Forschungsdaten Portal für Gesundheit - Research Data Portal) website. Basic data of hospitalizations of over 8 million patients with over 40 million diagnoses and much more such as laboratory values or drug prescriptions are available. After a successful query, the data is made available in standardized FHIR format. Further information can be found in the flyer.

    "}');export{q as comp,P as data}; diff --git a/assets/fhir.html-CTifciWc.js b/assets/fhir.html-CTifciWc.js new file mode 100644 index 000000000..aede818b9 --- /dev/null +++ b/assets/fhir.html-CTifciWc.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as s,e as i}from"./app-kq9lCQfY.js";const t={},o=i('

    Parameters FHIR Server

    Please also check common parameters for additional configuration options.

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_server_trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: The base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: The page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    • Property: dev.dsf.fhir.server.roleConfig
    • Required: Yes
    • Description: Role config YAML

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    ',58),n=[o];function l(d,a){return r(),s("div",null,n)}const _=e(t,[["render",l],["__file","fhir.html.vue"]]),h=JSON.parse('{"path":"/v1.0.0/maintain/configuration/fhir.html","title":"Parameters FHIR Server","lang":"en-US","frontmatter":{},"headers":[{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE","slug":"dev-dsf-fhir-client-certificate","link":"#dev-dsf-fhir-client-certificate","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY","slug":"dev-dsf-fhir-client-certificate-private-key","link":"#dev-dsf-fhir-client-certificate-private-key","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE","slug":"dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","link":"#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT","slug":"dev-dsf-fhir-client-timeout-connect","link":"#dev-dsf-fhir-client-timeout-connect","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ","slug":"dev-dsf-fhir-client-timeout-read","link":"#dev-dsf-fhir-client-timeout-read","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS","slug":"dev-dsf-fhir-client-trust-server-certificate-cas","link":"#dev-dsf-fhir-client-trust-server-certificate-cas","children":[]},{"level":3,"title":"DEV_DSF_FHIR_CLIENT_VERBOSE","slug":"dev-dsf-fhir-client-verbose","link":"#dev-dsf-fhir-client-verbose","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK","slug":"dev-dsf-fhir-db-liquibase-forceunlock","link":"#dev-dsf-fhir-db-liquibase-forceunlock","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME","slug":"dev-dsf-fhir-db-liquibase-lockwaittime","link":"#dev-dsf-fhir-db-liquibase-lockwaittime","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","link":"#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME","slug":"dev-dsf-fhir-db-liquibase-username","link":"#dev-dsf-fhir-db-liquibase-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_URL","slug":"dev-dsf-fhir-db-url","link":"#dev-dsf-fhir-db-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_GROUP","slug":"dev-dsf-fhir-db-user-group","link":"#dev-dsf-fhir-db-user-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","link":"#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP","slug":"dev-dsf-fhir-db-user-permanent-delete-group","link":"#dev-dsf-fhir-db-user-permanent-delete-group","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE","slug":"dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","link":"#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME","slug":"dev-dsf-fhir-db-user-permanent-delete-username","link":"#dev-dsf-fhir-db-user-permanent-delete-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_DB_USER_USERNAME","slug":"dev-dsf-fhir-db-user-username","link":"#dev-dsf-fhir-db-user-username","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_BASE_URL","slug":"dev-dsf-fhir-server-base-url","link":"#dev-dsf-fhir-server-base-url","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_INIT_BUNDLE","slug":"dev-dsf-fhir-server-init-bundle","link":"#dev-dsf-fhir-server-init-bundle","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE","slug":"dev-dsf-fhir-server-organization-identifier-value","link":"#dev-dsf-fhir-server-organization-identifier-value","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_PAGE_COUNT","slug":"dev-dsf-fhir-server-page-count","link":"#dev-dsf-fhir-server-page-count","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_ROLECONFIG","slug":"dev-dsf-fhir-server-roleconfig","link":"#dev-dsf-fhir-server-roleconfig","children":[]},{"level":3,"title":"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE","slug":"dev-dsf-fhir-server-static-resource-cache","link":"#dev-dsf-fhir-server-static-resource-cache","children":[]},{"level":3,"title":"DEV_DSF_PROXY_NOPROXY","slug":"dev-dsf-proxy-noproxy","link":"#dev-dsf-proxy-noproxy","children":[]},{"level":3,"title":"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE","slug":"dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","link":"#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file","children":[]},{"level":3,"title":"DEV_DSF_PROXY_URL","slug":"dev-dsf-proxy-url","link":"#dev-dsf-proxy-url","children":[]},{"level":3,"title":"DEV_DSF_PROXY_USERNAME","slug":"dev-dsf-proxy-username","link":"#dev-dsf-proxy-username","children":[]}],"git":{"createdTime":1692708510000,"updatedTime":1692778861000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":2.77,"words":830},"filePathRelative":"v1.0.0/maintain/configuration/fhir.md","localizedDate":"August 22, 2023","excerpt":"\\n

    Please also check common parameters for additional configuration options.

    \\n

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    \\n
      \\n
    • Property: dev.dsf.fhir.client.certificate
    • \\n
    • Required: Yes
    • \\n
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • \\n
    • Recommendation: Use docker secret file to configure
    • \\n
    • Example: /run/secrets/app_client_certificate.pem
    • \\n
    "}');export{_ as comp,h as data}; diff --git a/assets/font/font.css b/assets/font/font.css new file mode 100644 index 000000000..b80d5ac8d --- /dev/null +++ b/assets/font/font.css @@ -0,0 +1,1043 @@ +@font-face { + font-family: "iconfont"; + src: url('/assets/font/font.woff2') format('woff2'), + url('/assets/font/font.woff') format('woff'), + url('/assets/font/font.ttf') format('truetype'); + } + + .iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + .icon-delete:before { + content: "\e6f2"; + } + + .icon-superscript:before { + content: "\f0e7"; + } + + .icon-subscript:before { + content: "\f0e3"; + } + + .icon-safari:before { + content: "\f229"; + } + + .icon-tab:before { + content: "\e66c"; + } + + .icon-strong:before { + content: "\e9fe"; + } + + .icon-free:before { + content: "\e669"; + } + + .icon-light:before { + content: "\e6f8"; + } + + .icon-waline:before { + content: "\e65e"; + } + + .icon-diagram:before { + content: "\e639"; + } + + .icon-customize:before { + content: "\e64f"; + } + + .icon-restrict:before { + content: "\e62d"; + } + + .icon-svg:before { + content: "\e629"; + } + + .icon-anonymous:before { + content: "\e622"; + } + + .icon-define:before { + content: "\e644"; + } + + .icon-IO:before { + content: "\e64b"; + } + + .icon-php:before { + content: "\e61f"; + } + + .icon-java:before { + content: "\e7f8"; + } + + .icon-enum:before { + content: "\e620"; + } + + .icon-generic:before { + content: "\e625"; + } + + .icon-alias:before { + content: "\e6c2"; + } + + .icon-script:before { + content: "\e7d0"; + } + + .icon-search:before { + content: "\e6c7"; + } + + .icon-edit:before { + content: "\e634"; + } + + .icon-type:before { + content: "\e719"; + } + + .icon-advance:before { + content: "\e77c"; + } + + .icon-stack:before { + content: "\e782"; + } + + .icon-call:before { + content: "\e787"; + } + + .icon-safe:before { + content: "\e78b"; + } + + .icon-ability:before { + content: "\e79f"; + } + + .icon-any:before { + content: "\e61e"; + } + + .icon-boolean:before { + content: "\e633"; + } + + .icon-engine:before { + content: "\e7ef"; + } + + .icon-filter:before { + content: "\e628"; + } + + .icon-sort:before { + content: "\e688"; + } + + .icon-yaml:before { + content: "\e636"; + } + + .icon-launch:before { + content: "\e677"; + } + + .icon-decorate:before { + content: "\e63c"; + } + + .icon-navigate:before { + content: "\e63e"; + } + + .icon-eye:before { + content: "\e63f"; + } + + .icon-interact:before { + content: "\e640"; + } + + .icon-input:before { + content: "\e65d"; + } + + .icon-box:before { + content: "\e650"; + } + + .icon-javascript:before { + content: "\e913"; + } + + .icon-nodeJS:before { + content: "\e641"; + } + + .icon-overflow:before { + content: "\e70b"; + } + + .icon-direction:before { + content: "\e6de"; + } + + .icon-table:before { + content: "\ec31"; + } + + .icon-resize:before { + content: "\e691"; + } + + .icon-float:before { + content: "\e642"; + } + + .icon-grid:before { + content: "\e90c"; + } + + .icon-flex:before { + content: "\eabe"; + } + + .icon-flow:before { + content: "\e6f7"; + } + + .icon-linter:before { + content: "\e645"; + } + + .icon-semantic:before { + content: "\e646"; + } + + .icon-cache:before { + content: "\e647"; + } + + .icon-update:before { + content: "\e6df"; + } + + .icon-speed:before { + content: "\e648"; + } + + .icon-ci:before { + content: "\e68f"; + } + + .icon-actions:before { + content: "\e69f"; + } + + .icon-token:before { + content: "\e649"; + } + + .icon-mysql:before { + content: "\e64a"; + } + + .icon-align:before { + content: "\e7ba"; + } + + .icon-api:before { + content: "\e76a"; + } + + .icon-markdown:before { + content: "\e7ea"; + } + + .icon-home:before { + content: "\e6bb"; + } + + .icon-creative:before { + content: "\e718"; + } + + .icon-navbar:before { + content: "\e6b5"; + } + + .icon-sidebar:before { + content: "\e638"; + } + + .icon-vue:before { + content: "\f25f"; + } + + .icon-navigation:before { + content: "\e6dc"; + } + + .icon-discover:before { + content: "\e6ba"; + } + + .icon-bitbucket:before { + content: "\e651"; + } + + .icon-valine:before { + content: "\e65b"; + } + + .icon-gitlab:before { + content: "\e692"; + } + + .icon-gitee:before { + content: "\e6f5"; + } + + .icon-vssue:before { + content: "\e663"; + } + + .icon-github:before { + content: "\e653"; + } + + .icon-info:before { + content: "\e6e4"; + } + + .icon-palette:before { + content: "\e7cc"; + } + + .icon-fullscreen:before { + content: "\e69d"; + } + + .icon-comment:before { + content: "\e666"; + } + + .icon-time:before { + content: "\e654"; + } + + .icon-ask:before { + content: "\e7c9"; + } + + .icon-emoji:before { + content: "\e6f3"; + } + + .icon-categoryselected:before { + content: "\e62c"; + } + + .icon-layout:before { + content: "\e6fd"; + } + + .icon-blog:before { + content: "\e655"; + } + + .icon-question:before { + content: "\e690"; + } + + .icon-write:before { + content: "\e760"; + } + + .icon-config:before { + content: "\e656"; + } + + .icon-slides:before { + content: "\e7a7"; + } + + .icon-setting:before { + content: "\e78e"; + } + + .icon-install:before { + content: "\e657"; + } + + .icon-folder:before { + content: "\eac9"; + } + + .icon-plugin:before { + content: "\eb48"; + } + + .icon-support:before { + content: "\e6e3"; + } + + .icon-page:before { + content: "\e6b9"; + } + + .icon-context:before { + content: "\e658"; + } + + .icon-tex:before { + content: "\e659"; + } + + .icon-shell:before { + content: "\e7a8"; + } + + .icon-rss:before { + content: "\e9ca"; + } + + .icon-enable:before { + content: "\e65a"; + } + + .icon-copyright:before { + content: "\e6b3"; + } + + .icon-contrast:before { + content: "\e6a7"; + } + + .icon-others:before { + content: "\e65c"; + } + + .icon-preview:before { + content: "\e716"; + } + + .icon-copy:before { + content: "\e7a0"; + } + + .icon-footer:before { + content: "\e65f"; + } + + .icon-sitemap:before { + content: "\e664"; + } + + .icon-warn:before { + content: "\e662"; + } + + .icon-like:before { + content: "\e668"; + } + + .icon-check:before { + content: "\e6d4"; + } + + .icon-add:before { + content: "\e6d8"; + } + + .icon-selection:before { + content: "\e6e1"; + } + + .icon-mobile:before { + content: "\e705"; + } + + .icon-notice:before { + content: "\e709"; + } + + .icon-rank:before { + content: "\e721"; + } + + .icon-pic:before { + content: "\e72c"; + } + + .icon-mark:before { + content: "\e730"; + } + + .icon-people:before { + content: "\e735"; + } + + .icon-community:before { + content: "\e740"; + } + + .icon-play:before { + content: "\e74f"; + } + + .icon-tag:before { + content: "\e751"; + } + + .icon-hot:before { + content: "\e757"; + } + + .icon-code:before { + content: "\e606"; + } + + .icon-compare:before { + content: "\ead8"; + } + + .icon-ajax:before { + content: "\e623"; + } + + .icon-animation:before { + content: "\e619"; + } + + .icon-Apache:before { + content: "\e626"; + } + + .icon-jQuery:before { + content: "\e612"; + } + + .icon-workingDirectory:before { + content: "\e75e"; + } + + .icon-es6:before { + content: "\e671"; + } + + .icon-git:before { + content: "\e61b"; + } + + .icon-css:before { + content: "\e630"; + } + + .icon-software:before { + content: "\e6a1"; + } + + .icon-underscore:before { + content: "\e637"; + } + + .icon-function:before { + content: "\e6bd"; + } + + .icon-mini-app:before { + content: "\e611"; + } + + .icon-html:before { + content: "\e660"; + } + + .icon-windows:before { + content: "\e75f"; + } + + .icon-note:before { + content: "\e711"; + } + + .icon-c:before { + content: "\e607"; + } + + .icon-nginx:before { + content: "\e601"; + } + + .icon-chrome:before { + content: "\e604"; + } + + .icon-branch:before { + content: "\e616"; + } + + .icon-change:before { + content: "\e609"; + } + + .icon-remote:before { + content: "\ea43"; + } + + .icon-wechat:before { + content: "\e63b"; + } + + .icon-debug:before { + content: "\e60a"; + } + + .icon-state:before { + content: "\e60d"; + } + + .icon-vscode:before { + content: "\e81d"; + } + + .icon-network:before { + content: "\e602"; + } + + .icon-frame:before { + content: "\e70d"; + } + + .icon-process:before { + content: "\e82e"; + } + + .icon-tool:before { + content: "\ed5f"; + } + + .icon-npm:before { + content: "\e6da"; + } + + .icon-linux:before { + content: "\e765"; + } + + .icon-ubuntu:before { + content: "\eb37"; + } + + .icon-language:before { + content: "\e631"; + } + + .icon-leaf:before { + content: "\e6be"; + } + + .icon-autumn:before { + content: "\ecc6"; + } + + .icon-android:before { + content: "\e63d"; + } + + .icon-angular:before { + content: "\e60c"; + } + + .icon-file:before { + content: "\e61a"; + } + + .icon-python:before { + content: "\e615"; + } + + .icon-react:before { + content: "\e743"; + } + + .icon-link:before { + content: "\e707"; + } + + .icon-snow:before { + content: "\e627"; + } + + .icon-mount:before { + content: "\e621"; + } + + .icon-license:before { + content: "\e61c"; + } + + .icon-repo:before { + content: "\e6e9"; + } + + .icon-keyboard:before { + content: "\e8fa"; + } + + .icon-computer:before { + content: "\e8dd"; + } + + .icon-window:before { + content: "\e60b"; + } + + .icon-read:before { + content: "\e861"; + } + + .icon-template:before { + content: "\ed95"; + } + + .icon-typescript:before { + content: "\e7ab"; + } + + .icon-module:before { + content: "\e6f0"; + } + + .icon-emmet:before { + content: "\e608"; + } + + .icon-format:before { + content: "\e6ee"; + } + + .icon-guide:before { + content: "\e62f"; + } + + .icon-heading:before { + content: "\e60e"; + } + + .icon-centos:before { + content: "\e676"; + } + + .icon-http:before { + content: "\ebb3"; + } + + .icon-storage:before { + content: "\ed39"; + } + + .icon-quote:before { + content: "\e91d"; + } + + .icon-expansion:before { + content: "\e6f1"; + } + + .icon-variable:before { + content: "\e6cd"; + } + + .icon-calculate:before { + content: "\e665"; + } + + .icon-string:before { + content: "\e809"; + } + + .icon-line:before { + content: "\e624"; + } + + .icon-condition:before { + content: "\e62a"; + } + + .icon-loop:before { + content: "\e6ca"; + } + + .icon-array:before { + content: "\e762"; + } + + .icon-set:before { + content: "\e66a"; + } + + .icon-refresh:before { + content: "\e6bf"; + } + + .icon-map:before { + content: "\e6b6"; + } + + .icon-object:before { + content: "\e632"; + } + + .icon-null:before { + content: "\e618"; + } + + .icon-number:before { + content: "\e643"; + } + + .icon-build:before { + content: "\e600"; + } + + .icon-create:before { + content: "\e610"; + } + + .icon-mesh:before { + content: "\e64d"; + } + + .icon-material:before { + content: "\e635"; + } + + .icon-relation:before { + content: "\e66b"; + } + + .icon-tree:before { + content: "\e62b"; + } + + .icon-geometry:before { + content: "\e613"; + } + + .icon-select:before { + content: "\e7fb"; + } + + .icon-view:before { + content: "\e614"; + } + + .icon-physics:before { + content: "\e6c1"; + } + + .icon-study:before { + content: "\e68c"; + } + + .icon-result:before { + content: "\e710"; + } + + .icon-exercise:before { + content: "\e652"; + } + + .icon-editor:before { + content: "\e68e"; + } + + .icon-return:before { + content: "\e728"; + } + + .icon-timer:before { + content: "\e708"; + } + + .icon-repair:before { + content: "\e73a"; + } + + .icon-command:before { + content: "\e73e"; + } + + .icon-activity:before { + content: "\e775"; + } + + .icon-profile:before { + content: "\e77a"; + } + + .icon-form:before { + content: "\e7ac"; + } + + .icon-news:before { + content: "\e7e6"; + } + + .icon-flower:before { + content: "\e7f0"; + } + + .icon-group:before { + content: "\e7f4"; + } + + .icon-card:before { + content: "\e81f"; + } + + .icon-share:before { + content: "\e6fe"; + } + + .icon-back-stage:before { + content: "\e661"; + } + + .icon-router:before { + content: "\e680"; + } + + .icon-app:before { + content: "\e60f"; + } + + .icon-dart:before { + content: "\e603"; + } + + .icon-OS:before { + content: "\e68d"; + } + + .icon-async:before { + content: "\e605"; + } + + .icon-extend:before { + content: "\e62e"; + } + + .icon-class:before { + content: "\ed66"; + } + + .icon-at:before { + content: "\e6c5"; + } + + .icon-structure:before { + content: "\e696"; + } + + .icon-asynchronous:before { + content: "\e64e"; + } + + .icon-cycle:before { + content: "\e92d"; + } + + .icon-merge:before { + content: "\e682"; + } + + .icon-load:before { + content: "\e6c6"; + } + + .icon-proposal:before { + content: "\e667"; + } + + .icon-article:before { + content: "\e64c"; + } + + .icon-proxy:before { + content: "\e834"; + } + + .icon-operate:before { + content: "\e86e"; + } + + .icon-regexp:before { + content: "\e86f"; + } + + .icon-style:before { + content: "\e617"; + } + + .icon-symbol:before { + content: "\e73f"; + } + + .icon-arrow:before { + content: "\e8cb"; + } + + .icon-lock:before { + content: "\e6ea"; + } + + .icon-list:before { + content: "\e818"; + } + + .icon-locate:before { + content: "\e685"; + } + + .icon-date:before { + content: "\e670"; + } + + .icon-json:before { + content: "\e61d"; + } + + .icon-wrap:before { + content: "\e63a"; + } + + .icon-bit:before { + content: "\e6ad"; + } + + .icon-more:before { + content: "\e96c"; + } + \ No newline at end of file diff --git a/assets/font/font.ttf b/assets/font/font.ttf new file mode 100644 index 000000000..58c5dfe7d Binary files /dev/null and b/assets/font/font.ttf differ diff --git a/assets/font/font.woff b/assets/font/font.woff new file mode 100644 index 000000000..d14efa179 Binary files /dev/null and b/assets/font/font.woff differ diff --git a/assets/font/font.woff2 b/assets/font/font.woff2 new file mode 100644 index 000000000..f13e6c441 Binary files /dev/null and b/assets/font/font.woff2 differ diff --git a/assets/highmedInstall.html-Bw-puBe4.js b/assets/highmedInstall.html-Bw-puBe4.js new file mode 100644 index 000000000..e8982de5c --- /dev/null +++ b/assets/highmedInstall.html-Bw-puBe4.js @@ -0,0 +1,39 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as l,c as a,a as e,b as t,d as i,e as s}from"./app-kq9lCQfY.js";const d={},c=s('

    This setup guide uses pre-build docker images for DSF Version 0.9.3. This guide is only suitable for HiGHmed organizations.
    If you are not a member of HiGHmed, see NUM-CODEX Install.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    ',5),h={href:"https://docs.docker.com/engine/install",target:"_blank",rel:"noopener noreferrer"},u={href:"https://docs.docker.com/compose/install",target:"_blank",rel:"noopener noreferrer"},p=s(`

    docker:

    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io
    +
    `,2),_={href:"https://github.com/docker/compose/releases/tag/v2.17.3",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/docker/compose/releases",target:"_blank",rel:"noopener noreferrer"},g=s(`
    sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    +sudo chmod +x /usr/local/bin/docker-compose
    +

    Client/Server Certificates

    Two Certificates from the DFN-PKI Global G2 (via DFN e.V.), GÉANT TCS (via DFN e.V.) or D-Trust (via TMF e.V.) are needed, more infos see Authentication

    • Certificate A: Server Certificate (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    Network setup / Network access

    For additional information on the network setup see Network-and-Architecture.

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.
    `,7),f={href:"http://simplifier.net",target:"_blank",rel:"noopener noreferrer"},b=s('
    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (GECCO Transfer Hub)443https
    DSF FHIR (local)DSF FHIR (GECCO Transfer Hub)443https (HTTP HEAD only)
    DSF BPE (GECCO Transfer Hub)DSF FHIR (local)443https
    DSF FHIR (GECCO Transfer Hub)DSF FHIR (local)443https (HTTP HEAD only)

    On-Boarding Excel Spreadsheet

    You are required to fill out the on-boarding Excel spreadsheet, provided with the NUM-CODEX hackathon invite, and send it to the GECCO Transfer Hub. If the GECCO Transfer Hub already received and validated your On-Boarding Excel spreadsheet and you do not have to change any information, you can skip this step.

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    ',7),v=s(`
  • Add Group/User
    Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

    sudo addgroup --gid 2101 fhir
    +sudo adduser --system --no-create-home --uid 2101 --gid 2101 fhir
    +
  • `,1),k=e("p",null,[t("Download and Extract Config Files"),e("br"),t(" Download prepared DSF FHIR server config files and folder structure from")],-1),F=e("strong",null,"Test HiGHmed",-1),S=e("br",null,null,-1),E={href:"https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_test_fhir_0_9_3.tar.gz",target:"_blank",rel:"noopener noreferrer"},D=s(`
    cd /opt
    +wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_test_fhir_0_9_3.tar.gz
    +sudo tar --same-owner -zxvf dsf_highmed_test_fhir_0_9_3.tar.gz
    +
    `,1),w=e("strong",null,"Production HiGHmed",-1),I=e("br",null,null,-1),y={href:"https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_prod_fhir_0_9_3.tar.gz",target:"_blank",rel:"noopener noreferrer"},R=s(`
    cd /opt
    +wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_prod_fhir_0_9_3.tar.gz
    +sudo tar --same-owner -zxvf dsf_highmed_prod_fhir_0_9_3.tar.gz
    +
    `,1),x=e("p",null,[e("em",null,[t("The "),e("code",null,"tar"),t(" command will unpack the config files at "),e("code",null,"/opt/fhir"),t(" assuming you changed into the "),e("code",null,"/opt"),t(" directory.")])],-1),H=s(`
  • Verify that the fhir system user or group can write into the following folder

    • /opt/fhir/log
  • Add certificates and keys

    • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
      • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
      • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
    • Add the client certificate (certificate B) and the corresponding private-key to /opt/fhir/secrets/
      • client_certificate.pem (chmod: 440, chown: fhir:docker)
      • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
    • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/
      • client_certificate_private_key.pem.password
    • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
      L39:      - app_client_certificate_private_key.pem.password
      +...
      +L56:      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
      +...
      +L136:  app_client_certificate_private_key.pem.password:
      +L137:    file: ./secrets/client_certificate_private_key.pem.password
      +
  • Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

    L101:  ssl_certificate_chain_file.pem:
    +L102:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
    +
  • Modify database passwords

    • /opt/fhir/secrets/db_liquibase.password
      • Generate a random password (min. 32 characters recommended) and replace the content of the file.
    • /opt/fhir/secrets/db_user.password
      • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    • /opt/fhir/secrets/db_user_permanent_delete.password
      • Generate a random password (min. 16 characters recommended) and replace the content of the file.
  • `,4),T=e("p",null,"Modify the docker-compose.yml file and set environment variables to the appropriate values",-1),C=s('
  • services -> proxy -> environment:
  • ',1),N=e("strong",null,"services -> app -> environment:",-1),P=e("li",null,[e("strong",null,"ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL"),t(": https://"),e("em",null,"TODO_DSF_FRIR_SERVER_EXTERNAL_FQDN"),t("/fhir"),e("br"),t(" Set your FHIR servers external FQDN, e.g. "),e("code",null,"foo.bar.de"),t(" -> "),e("code",null,"https://foo.bar.de/fhir")],-1),O=e("strong",null,"ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE",-1),A=e("em",null,"TODO_ORGANIZATION_IDENTIFIER",-1),G=e("br",null,null,-1),B={href:"http://hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},M=s('
  • ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_NAME: TODO_ORGANIZATION_NAME
    Set your Organizations official name, e.g. Hochschule Heilbronn
  • ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: TODO_CLIENT_CERTIFICATE_THUMBPRINT
    Set the SHA-512 Hash (lowercase hex) of your client certificate (certificate B)
    Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.
  • ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS: TODO_CLIENT_CERTIFICATE_THUMBPRINTS
    Set the SHA-512 Hash (lowercase hex) of your client certificate (certificate B)
    This parameter is a comma separated list e.g. ab12...37ff,f3a2...bb22. You can add additional client certificate thumbprints for example the thumbprint of your (the admins) personal DFN PKI S/MIME certificate, to access the DSF FHIR servers REST interface.
  • ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE: TODO_CLIENT_CERTIFICATE_THUMBPRINTS
    Set the SHA-512 Hash (lowercase hex) of your client certificate (certificate B)
    This parameter is a comma separated list e.g. ab12...37ff,f3a2...bb22. Usually it is not necessary to add additional thumbprints other than your client certificate (certificate B) here. When a client uses a certificate with a thumbprint listed here, the client is allowed to permanently delete FHIR resources.
  • For additional environment variables, see DSF 0.9.3 FHIR Server configuration parameters
  • ',5),V=e("li",null,[e("p",null,[t("Start the DSF FHIR Server"),e("br"),t(" Start using: "),e("code",null,"docker-compose up -d && docker-compose logs -f"),t(" (Ctrl-C will close log, but not stop container)")])],-1),L=e("h3",{id:"dsf-bpe-server",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#dsf-bpe-server"},[e("span",null,"DSF BPE Server")])],-1),U=s(`
  • Add Group/User
    Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

    sudo addgroup --gid 2202 bpe
    +sudo adduser --system --no-create-home --uid 2202 --gid 2202 bpe
    +
  • `,1),z=e("p",null,[t("Download and Extract Config Files"),e("br"),t(" Download prepared DSF BPE server config files and folder structure from")],-1),q=e("strong",null,"Test HiGHmed",-1),Q=e("br",null,null,-1),X={href:"https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_test_bpe_0_9_3.tar.gz",target:"_blank",rel:"noopener noreferrer"},Y=s(`
    cd /opt
    +wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_test_bpe_0_9_3.tar.gz
    +sudo tar --same-owner -zxvf dsf_highmed_test_bpe_0_9_3.tar.gz
    +
    `,1),Z=e("strong",null,"Production HiGHmed",-1),K=e("br",null,null,-1),W={href:"https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_prod_bpe_0_9_3.tar.gz",target:"_blank",rel:"noopener noreferrer"},$=s(`
    cd /opt
    +wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_prod_bpe_0_9_3.tar.gz
    +sudo tar --same-owner -zxvf dsf_highmed_prod_bpe_0_9_3.tar.gz
    +
    `,1),j=e("p",null,[e("em",null,[t("The "),e("code",null,"tar"),t(" command will unpack the config files at "),e("code",null,"/opt/bpe"),t(" assuming you changed into the "),e("code",null,"/opt"),t(" directory.")])],-1),J=e("li",null,[e("p",null,[t("Verify that the "),e("code",null,"bpe"),t(" system user or group can write into the following folders")]),e("ul",null,[e("li",null,[e("code",null,"/opt/bpe/log")]),e("li",null,[e("code",null,"/opt/bpe/psn")])])],-1),ee=e("p",null,"Add certificates and keys",-1),te=s(`
  • Add the client certificate (certificate B) and the corresponding private-key to /opt/bpe/secrets/
    • client_certificate.pem (chmod: 440 chown: bpe:docker)
    • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
  • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/
    • client_certificate_private_key.pem.password
  • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
    L13:      - app_client_certificate_private_key.pem.password
    +...
    +L41:      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
    +...
    +L99:  app_client_certificate_private_key.pem.password:
    +L100:    file: ./secrets/client_certificate_private_key.pem.password
    +
  • `,3),re=e("strong",null,"/opt/bpe/secrets/",-1),ie=e("li",null,"crr_public_key.pem (chmod: 440 chown: bpe:docker)",-1),se=e("strong",null,"Test",-1),oe=e("br",null,null,-1),ne={href:"https://keys.num-codex.de/crr_public-key-pre-prod.pem",target:"_blank",rel:"noopener noreferrer"},le=e("strong",null,"Production",-1),ae=e("br",null,null,-1),de={href:"https://keys.num-codex.de/crr_public-key-prod.pem",target:"_blank",rel:"noopener noreferrer"},ce=s("
  • Modify database passwords

    • /opt/bpe/secrets/db_liquibase.password
      • Generate a random password (min. 32 characters recommended) and replace the content of the file.
    • /opt/bpe/secrets/db_user.password
      • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    • /opt/bpe/secrets/db_user_camunda.password
      • Generate a random password (min. 16 characters recommended) and replace the content of the file.
  • ",1),he=e("p",null,"Modify the docker-compose.yml file and set environment variables to the appropriate values",-1),ue=e("strong",null,"services -> app -> environment:",-1),pe=e("strong",null,"ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE",-1),_e=e("em",null,"TODO_ORGANIZATION_IDENTIFIER",-1),me=e("br",null,null,-1),ge={href:"http://hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},fe=e("li",null,[e("strong",null,"ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL"),t(": https://"),e("strong",null,"TODO_DSF_FRIR_SERVER_FQDN"),t("/fhir"),e("br"),t(" Set your FHIR servers external FQDN, e.g. "),e("code",null,"foo.bar.de"),t(" -> "),e("code",null,"https://foo.bar.de/fhir")],-1),be=e("li",null,[t("For additional environment variables, see "),e("a",{href:"configBpe"},"DSF 0.9.3 BPE Server configuration parameters")],-1),ve=s("
  • Start the DSF BPE Server (without process plugins)
    Start using: docker-compose up -d && docker-compose logs -f (Ctrl-C will close log, but not stop container)

  • Verify DSF BPE Startup

    • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
    • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
    • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

    If you need to debug the TLS connection to your DSF FHIR server use for example:
    docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
    The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

  • Stop the DSF BPE Server

    • Hit Ctrl-C to close log
    • Stop using: docker-compose stop
  • ",3),ke=e("p",null,"Add the following DSF BPE process plugins, for instructions on how to configure the plugin, see release notes.",-1),Fe=e("strong",null,"num-codex / codex-processes-ap1",-1),Se=e("br",null,null,-1),Ee={href:"https://github.com/num-codex/codex-processes-ap1/releases/tag/v0.7.0",target:"_blank",rel:"noopener noreferrer"},De=e("br",null,null,-1),we={href:"https://github.com/num-codex/codex-processes-ap1/wiki/Process-Deployment-and-Configuration-v0.7.0",target:"_blank",rel:"noopener noreferrer"},Ie=e("strong",null,"highmed / highmed-processes / data-sharing",-1),ye=e("br",null,null,-1),Re={href:"https://github.com/highmed/highmed-processes/releases/tag/v0.7.0",target:"_blank",rel:"noopener noreferrer"},xe=e("strong",null,"highmed / highmed-processes / feasibility",-1),He=e("br",null,null,-1),Te={href:"https://github.com/highmed/highmed-processes/releases/tag/v0.7.0",target:"_blank",rel:"noopener noreferrer"},Ce=e("strong",null,"highmed / highmed-processes / feasibility-mpc",-1),Ne=e("br",null,null,-1),Pe={href:"https://github.com/highmed/highmed-processes/releases/tag/v0.7.0",target:"_blank",rel:"noopener noreferrer"},Oe=e("strong",null,"highmed / highmed-processes / local-services",-1),Ae=e("br",null,null,-1),Ge={href:"https://github.com/highmed/highmed-processes/releases/tag/v0.7.0",target:"_blank",rel:"noopener noreferrer"},Be=e("strong",null,"highmed / highmed-processes / ping",-1),Me=e("br",null,null,-1),Ve={href:"https://github.com/highmed/highmed-processes/releases/tag/v0.7.0",target:"_blank",rel:"noopener noreferrer"},Le=e("strong",null,"highmed / highmed-processes / update-allow-list",-1),Ue=e("br",null,null,-1),ze={href:"https://github.com/highmed/highmed-processes/releases/tag/v0.7.0",target:"_blank",rel:"noopener noreferrer"},qe=e("br",null,null,-1),Qe={href:"https://github.com/highmed/highmed-processes/wiki/Process-Ping-Deployment-v0.7.0",target:"_blank",rel:"noopener noreferrer"},Xe=e("p",null,[e("em",null,[t("Notice: Jar-files within the folders "),e("code",null,"/opt/bpe/process"),t(" and "),e("code",null,"/opt/bpe/plugin"),t(" need to be readable by the linxux "),e("code",null,"bpe"),t(" user -> "),e("code",null,"chown root:bpe"),t(", "),e("code",null,"chmod 440")])],-1),Ye=e("li",null,[e("p",null,[t("Start the DSF BPE Server (with process plugins)"),e("br"),t(" Start using: "),e("code",null,"docker-compose up -d && docker-compose logs -f"),t(" (Ctrl-C will close log, but not stop container)")])],-1),Ze=e("li",null,[e("p",null,[t("Request Allow-List upload from HiGHmed TTP"),e("br"),t(" The Allow-List upload is needed in order to execute HiGHmed and NUM-CODEX processes.")])],-1);function Ke(We,$e){const r=n("ExternalLinkIcon");return l(),a("div",null,[c,e("p",null,[t("Both VMs need latest docker and docker-compose. For the latest install guide see "),e("a",h,[t("https://docs.docker.com/engine/install"),i(r)]),t(" and "),e("a",u,[t("https://docs.docker.com/compose/install"),i(r)])]),p,e("p",null,[t("docker-compose (warning: "),e("a",_,[t("2.17.3"),i(r)]),t(" might not be "),e("a",m,[t("latest"),i(r)]),t("):")]),g,e("p",null,[t("Here is a quick overview of the expected network setup. Connections to the fTTP, the terminology server and "),e("a",f,[t("simplifier.net"),i(r)]),t(" for validating GECCO FHIR resources as well as the local GECCO FHIR server are not listed:")]),b,e("ol",null,[v,e("li",null,[k,e("ul",null,[e("li",null,[F,t(" instance:"),S,e("a",E,[t("https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_test_fhir_0_9_3.tar.gz"),i(r)]),D]),e("li",null,[w,t(" instance:"),I,e("a",y,[t("https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_prod_fhir_0_9_3.tar.gz"),i(r)]),R])]),x]),H,e("li",null,[T,e("ul",null,[C,e("li",null,[N,e("ul",null,[P,e("li",null,[O,t(": "),A,G,t(" Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. "),e("a",B,[t("hs-heilbronn.de"),i(r)])]),M])])])]),V]),L,e("ol",null,[U,e("li",null,[z,e("ul",null,[e("li",null,[q,t(" instance:"),Q,e("a",X,[t("https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_test_bpe_0_9_3.tar.gz"),i(r)]),Y]),e("li",null,[Z,t(" instance:"),K,e("a",W,[t("https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_prod_bpe_0_9_3.tar.gz"),i(r)]),$])]),j]),J,e("li",null,[ee,e("ul",null,[te,e("li",null,[t("Add the CRR public-key used for asymmetrically encrypting the GECCO FHIR Bundles to "),re,e("ul",null,[ie,e("li",null,[t("You can download the 4096 Bit RSA PEM encoded public-key for "),e("ul",null,[e("li",null,[t("a "),se,t(" instance from:"),oe,e("a",ne,[t("https://keys.num-codex.de/crr_public-key-pre-prod.pem"),i(r)])]),e("li",null,[t("a "),le,t(" instance from:"),ae,e("a",de,[t("https://keys.num-codex.de/crr_public-key-prod.pem"),i(r)])])])])])])])]),ce,e("li",null,[he,e("ul",null,[e("li",null,[ue,e("ul",null,[e("li",null,[pe,t(": "),_e,me,t(" Set your Organizations DSF identifier, aka the shortest FQDN that resolves the main homepage of the organization, e.g. "),e("a",ge,[t("hs-heilbronn.de"),i(r)])]),fe,be])])])]),ve,e("li",null,[ke,e("ul",null,[e("li",null,[Fe,t(" version 0.7.0 or later:"),Se,e("a",Ee,[t("https://github.com/num-codex/codex-processes-ap1/releases/tag/v0.7.0"),i(r)]),De,t(" See "),e("a",we,[t("NUM-CODEX: Process Deployment and Configuration"),i(r)]),t(" on how to configure the process plugin.")]),e("li",null,[Ie,t(" version 0.7.0 or later:"),ye,e("a",Re,[t("https://github.com/highmed/highmed-processes/releases/tag/v0.7.0"),i(r)])]),e("li",null,[xe,t(" version 0.7.0 or later:"),He,e("a",Te,[t("https://github.com/highmed/highmed-processes/releases/tag/v0.7.0"),i(r)])]),e("li",null,[Ce,t(" version 0.7.0 or later:"),Ne,e("a",Pe,[t("https://github.com/highmed/highmed-processes/releases/tag/v0.7.0"),i(r)])]),e("li",null,[Oe,t(" version 0.7.0 or later:"),Ae,e("a",Ge,[t("https://github.com/highmed/highmed-processes/releases/tag/v0.7.0"),i(r)])]),e("li",null,[Be,t(" version 0.7.0 or later:"),Me,e("a",Ve,[t("https://github.com/highmed/highmed-processes/releases/tag/v0.7.0"),i(r)])]),e("li",null,[Le,t(" version 0.7.0 or later:"),Ue,e("a",ze,[t("https://github.com/highmed/highmed-processes/releases/tag/v0.7.0"),i(r)]),qe,t(" See "),e("a",Qe,[t("HiGHmed: Process Ping Deployment"),i(r)]),t(" on how to deploy and configure the process plugin.")])]),Xe]),Ye,Ze])])}const et=o(d,[["render",Ke],["__file","highmedInstall.html.vue"]]),tt=JSON.parse('{"path":"/oldstable/releases/highmedInstall.html","title":"","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[{"level":3,"title":"Virtual Machines","slug":"virtual-machines","link":"#virtual-machines","children":[]},{"level":3,"title":"Docker / Docker-Compose","slug":"docker-docker-compose","link":"#docker-docker-compose","children":[]},{"level":3,"title":"Client/Server Certificates","slug":"client-server-certificates","link":"#client-server-certificates","children":[]},{"level":3,"title":"Network setup / Network access","slug":"network-setup-network-access","link":"#network-setup-network-access","children":[]},{"level":3,"title":"On-Boarding Excel Spreadsheet","slug":"on-boarding-excel-spreadsheet","link":"#on-boarding-excel-spreadsheet","children":[]}]},{"level":2,"title":"Setup","slug":"setup","link":"#setup","children":[{"level":3,"title":"Prepare Certificates","slug":"prepare-certificates","link":"#prepare-certificates","children":[]},{"level":3,"title":"DSF FHIR Server","slug":"dsf-fhir-server","link":"#dsf-fhir-server","children":[]},{"level":3,"title":"DSF BPE Server","slug":"dsf-bpe-server","link":"#dsf-bpe-server","children":[]}]}],"git":{"createdTime":1692783801000,"updatedTime":1696001091000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":6.39,"words":1918},"filePathRelative":"oldstable/releases/highmedInstall.md","localizedDate":"August 23, 2023","excerpt":"

    This setup guide uses pre-build docker images for DSF Version 0.9.3. This guide is only suitable for HiGHmed organizations.
    \\nIf you are not a member of HiGHmed, see NUM-CODEX Install.

    \\n

    Prerequisites

    \\n

    Virtual Machines

    "}');export{et as comp,tt as data}; diff --git a/assets/highmed_dsf_network_setup_ext_dmz-DyQZOoIs.js b/assets/highmed_dsf_network_setup_ext_dmz-DyQZOoIs.js new file mode 100644 index 000000000..176af872d --- /dev/null +++ b/assets/highmed_dsf_network_setup_ext_dmz-DyQZOoIs.js @@ -0,0 +1 @@ +const e="/photos/guideline/generalInformation/highmed_dsf_network_setup.svg",o="/photos/guideline/generalInformation/highmed_dsf_network_setup_ext_dmz.svg";export{e as _,o as a}; diff --git a/assets/icon/apple-icon-152.png b/assets/icon/apple-icon-152.png new file mode 100644 index 000000000..71c690527 Binary files /dev/null and b/assets/icon/apple-icon-152.png differ diff --git a/assets/icon/chrome-192.png b/assets/icon/chrome-192.png new file mode 100644 index 000000000..71c690527 Binary files /dev/null and b/assets/icon/chrome-192.png differ diff --git a/assets/icon/chrome-512.png b/assets/icon/chrome-512.png new file mode 100644 index 000000000..71c690527 Binary files /dev/null and b/assets/icon/chrome-512.png differ diff --git a/assets/icon/chrome-mask-192.png b/assets/icon/chrome-mask-192.png new file mode 100644 index 000000000..71c690527 Binary files /dev/null and b/assets/icon/chrome-mask-192.png differ diff --git a/assets/icon/chrome-mask-512.png b/assets/icon/chrome-mask-512.png new file mode 100644 index 000000000..71c690527 Binary files /dev/null and b/assets/icon/chrome-mask-512.png differ diff --git a/assets/icon/favicon.ico b/assets/icon/favicon.ico new file mode 100644 index 000000000..ed857d176 Binary files /dev/null and b/assets/icon/favicon.ico differ diff --git a/assets/icon/guide-maskable.png b/assets/icon/guide-maskable.png new file mode 100644 index 000000000..71c690527 Binary files /dev/null and b/assets/icon/guide-maskable.png differ diff --git a/assets/icon/ms-ico-144.png b/assets/icon/ms-ico-144.png new file mode 100644 index 000000000..71c690527 Binary files /dev/null and b/assets/icon/ms-ico-144.png differ diff --git a/assets/index.html--WxwSsgq.js b/assets/index.html--WxwSsgq.js new file mode 100644 index 000000000..fb5e28191 --- /dev/null +++ b/assets/index.html--WxwSsgq.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o,c as d,a as t,b as e,d as a,w as n,e as l}from"./app-kq9lCQfY.js";const c={},h=l('

    Summary

    • Use case agnostic middleware: DSF is adaptable to any distributed process, leveraging BPMN 2.0 and FHIR R4 for secure, efficient data sharing across various biomedical research scenarios.

    • Security: DSF prioritizes security through stringent authentication and authorization protocols, ensuring data is accessed and shared only by authorized organizations to maintain data confidentiality and integrity.

    • Proven in clinical research: Deployed in German university hospitals, DSF's effectiveness and reliability are validated in real-world settings.

    • Implementation guidance: DSF offers resources on how to implement new process plugins.

    Overview of DSF

    The Data Sharing Framework (DSF) is a secure middleware solution designed to facilitate data sharing across different organizations for biomedical research. It utilizes BPMN 2.0 and FHIR R4 standards to support processes such as data extraction, merging, pseudonymization, and provisioning. Funded by the German Federal Ministry of Education and Research as part of the Medical Informatics initiative, the DSF aims to improve data interoperability and security across institutional boundaries.

    Key features and benefits

    Distributed data sharing processes

    DSF enables distributed data sharing by providing each participating site with a FHIR endpoint and a business process engine. This setup ensures that data can be securely shared and processed across different sites, facilitating cross-site data sharing and feasibility analyses.

    Flexibility with data standards

    While DSF primarily uses the FHIR R4 standard to ensure high-quality data exchange, it is designed to be open and adaptable to other data formats. This flexibility allows for a wide range of data types to be incorporated into research projects.

    Security and access control

    Security is a critical component of DSF, which includes robust authentication and authorization protocols. These protocols ensure that data access and sharing are restricted to authorized organizations, maintaining the confidentiality and integrity of the data.

    Deployment in clinical environments

    DSF is already deployed and operational in Data Integration Centers at German university hospitals, demonstrating its applicability and reliability in real-world clinical research settings.

    Getting started with the DSF

    ',13),p=t("p",null,[e("Should you have any questions or need personalized assistance, don't hesitate to reach out to the DSF core team directly at "),t("strong",null,[t("a",{href:"mailto:dsf-gecko@hs-heilbronn.de"},"dsf-gecko@hs-heilbronn.de")]),e(".")],-1);function u(g,f){const i=r("RouteLink");return o(),d("div",null,[h,t("p",null,[e("If you're looking to leverage the DSF for your research or you're interested in exploring how it can enhance your data sharing needs, we're here to support you. Visit the "),t("strong",null,[a(i,{to:"/for-you/learn.html"},{default:n(()=>[e("Learn how to implement your use case")]),_:1})]),e(" page to start your journey towards integrating the DSF into your research project.")]),p,t("p",null,[e("Embark on your DSF journey today and "),a(i,{to:"/stable/contribute/"},{default:n(()=>[e("join a community")]),_:1}),e(" committed to advancing biomedical research through secure, interoperable data sharing.")])])}const b=s(c,[["render",u],["__file","index.html.vue"]]),v=JSON.parse(`{"path":"/for-you/","title":"DSF for your project","lang":"en-US","frontmatter":{"title":"DSF for your project","icon":"creative"},"headers":[{"level":2,"title":"Overview of DSF","slug":"overview-of-dsf","link":"#overview-of-dsf","children":[]},{"level":2,"title":"Key features and benefits","slug":"key-features-and-benefits","link":"#key-features-and-benefits","children":[{"level":3,"title":"Distributed data sharing processes","slug":"distributed-data-sharing-processes","link":"#distributed-data-sharing-processes","children":[]},{"level":3,"title":"Flexibility with data standards","slug":"flexibility-with-data-standards","link":"#flexibility-with-data-standards","children":[]},{"level":3,"title":"Security and access control","slug":"security-and-access-control","link":"#security-and-access-control","children":[]},{"level":3,"title":"Deployment in clinical environments","slug":"deployment-in-clinical-environments","link":"#deployment-in-clinical-environments","children":[]}]},{"level":2,"title":"Getting started with the DSF","slug":"getting-started-with-the-dsf","link":"#getting-started-with-the-dsf","children":[]}],"git":{"createdTime":1706902325000,"updatedTime":1712160983000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":3}]},"readingTime":{"minutes":1.45,"words":435},"filePathRelative":"for-you/index.md","localizedDate":"February 2, 2024","excerpt":"
    \\n

    Summary

    \\n
      \\n
    • \\n

      Use case agnostic middleware: DSF is adaptable to any distributed process, leveraging BPMN 2.0 and FHIR R4 for secure, efficient data sharing across various biomedical research scenarios.

      \\n
    • \\n
    • \\n

      Security: DSF prioritizes security through stringent authentication and authorization protocols, ensuring data is accessed and shared only by authorized organizations to maintain data confidentiality and integrity.

      \\n
    • \\n
    • \\n

      Proven in clinical research: Deployed in German university hospitals, DSF's effectiveness and reliability are validated in real-world settings.

      \\n
    • \\n
    • \\n

      Implementation guidance: DSF offers resources on how to implement new process plugins.

      \\n
    • \\n
    \\n
    "}`);export{b as comp,v as data}; diff --git a/assets/index.html-0F9WiFvk.js b/assets/index.html-0F9WiFvk.js new file mode 100644 index 000000000..142857224 --- /dev/null +++ b/assets/index.html-0F9WiFvk.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as r,e as n}from"./app-kq9lCQfY.js";const a={},t=n('

    Overview

    ',2),o=[t];function c(l,s){return i(),r("div",null,o)}const d=e(a,[["render",c],["__file","index.html.vue"]]),f=JSON.parse('{"path":"/v1.4.0/maintain/fhir/","title":"FHIR Server","lang":"en-US","frontmatter":{"title":"FHIR Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1702917645000,"updatedTime":1702917645000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.05,"words":16},"filePathRelative":"v1.4.0/maintain/fhir/README.md","localizedDate":"December 18, 2023","excerpt":"

    Overview

    \\n\\n"}');export{d as comp,f as data}; diff --git a/assets/index.html-1GNavLp5.js b/assets/index.html-1GNavLp5.js new file mode 100644 index 000000000..8f0d95270 --- /dev/null +++ b/assets/index.html-1GNavLp5.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as s,c as l,a as e,b as t,d as a,w as h,e as d}from"./app-kq9lCQfY.js";const c={},m={class:"hint-container tip"},p=e("p",{class:"hint-container-title"},"Important note",-1),u={href:"https://github.com/highmed/highmed-dsf",target:"_blank",rel:"noopener noreferrer"},f=d('

    System Administrators

    Developers

    New features

    ',5),_=e("li",null,"Improved versioning to support up- and downwards-compatibility",-1),g=e("li",null,"Enhanced web ui to start processes in the web browser",-1),w=e("li",null,"Allow local user authentication and authorization with OpenID Connect",-1),b=e("li",null,"New process plugin API",-1),v=e("li",null,"Removed mostly unused features to simplify instance configuration",-1),x=e("li",null,"Unified proxy setup",-1),S={href:"https://github.com/datasharingframework/dsf/releases",target:"_blank",rel:"noopener noreferrer"};function k(D,F){const i=r("RouteLink"),n=r("ExternalLinkIcon");return s(),l("div",null,[e("p",null,[t("Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click "),a(i,{to:"/intro/"},{default:h(()=>[t("here")]),_:1}),t(" to find more information about the DSF in general.")]),e("div",m,[p,e("p",null,[t("This is a major DSF release not compatible with 0.9.x and older version developed at "),e("a",u,[t("https://github.com/highmed/highmed-dsf"),a(n)]),t(".")])]),f,e("ul",null,[_,g,w,b,v,x,e("li",null,[t("Many more features, see "),e("a",S,[t("1.x release-notes"),a(n)])])])])}const N=o(c,[["render",k],["__file","index.html.vue"]]),C=JSON.parse('{"path":"/v1.5.1/","title":"DSF 1.5.1","lang":"en-US","frontmatter":{"title":"DSF 1.5.1","icon":"guide"},"headers":[{"level":2,"title":"New features","slug":"new-features","link":"#new-features","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.46,"words":139},"filePathRelative":"v1.5.1/index.md","localizedDate":"April 17, 2024","excerpt":"

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    \\n
    \\n

    Important note

    \\n

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.

    \\n
    "}');export{N as comp,C as data}; diff --git a/assets/index.html-3a35NisQ.js b/assets/index.html-3a35NisQ.js new file mode 100644 index 000000000..9514e802d --- /dev/null +++ b/assets/index.html-3a35NisQ.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as a,e as i}from"./app-kq9lCQfY.js";const t={},n=i('

    Overview

    ',2),o=[n];function s(l,m){return r(),a("div",null,o)}const v=e(t,[["render",s],["__file","index.html.vue"]]),f=JSON.parse('{"path":"/v1.0.0/maintain/configuration/","title":"Configuration Parameters","lang":"en-US","frontmatter":{"title":"Configuration Parameters","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1692708510000,"updatedTime":1692708510000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.07,"words":22},"filePathRelative":"v1.0.0/maintain/configuration/README.md","localizedDate":"August 22, 2023","excerpt":"

    Overview

    \\n\\n"}');export{v as comp,f as data}; diff --git a/assets/index.html-45LbeiHE.js b/assets/index.html-45LbeiHE.js new file mode 100644 index 000000000..bbcd0162a --- /dev/null +++ b/assets/index.html-45LbeiHE.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,a as e}from"./app-kq9lCQfY.js";const n={},a=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),o=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),l=[a,o];function s(c,d){return t(),i("div",null,l)}const m=r(n,[["render",s],["__file","index.html.vue"]]),h=JSON.parse('{"path":"/stable/maintain/bpe-reverse-proxy/","title":"BPE Reverse Proxy","lang":"en-US","frontmatter":{"title":"BPE Reverse Proxy","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":null,"updatedTime":null,"contributors":[]},"readingTime":{"minutes":0.03,"words":10},"filePathRelative":"stable/maintain/bpe-reverse-proxy/README.md","excerpt":"

    Overview

    \\n\\n"}');export{m as comp,h as data}; diff --git a/assets/index.html-4tMg7LJV.js b/assets/index.html-4tMg7LJV.js new file mode 100644 index 000000000..f6608b0e9 --- /dev/null +++ b/assets/index.html-4tMg7LJV.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as s,c as l,a as e,b as t,d as a,w as h,e as d}from"./app-kq9lCQfY.js";const c={},m={class:"hint-container tip"},p=e("p",{class:"hint-container-title"},"Important note",-1),u={href:"https://github.com/highmed/highmed-dsf",target:"_blank",rel:"noopener noreferrer"},f=d('

    System Administrators

    Developers

    New features

    ',5),_=e("li",null,"Improved versioning to support up- and downwards-compatibility",-1),g=e("li",null,"Enhanced web ui to start processes in the web browser",-1),w=e("li",null,"Allow local user authentication and authorization with OpenID Connect",-1),b=e("li",null,"New process plugin API",-1),v=e("li",null,"Removed mostly unused features to simplify instance configuration",-1),x=e("li",null,"Unified proxy setup",-1),S={href:"https://github.com/datasharingframework/dsf/releases",target:"_blank",rel:"noopener noreferrer"};function k(D,F){const i=r("RouteLink"),n=r("ExternalLinkIcon");return s(),l("div",null,[e("p",null,[t("Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click "),a(i,{to:"/intro/"},{default:h(()=>[t("here")]),_:1}),t(" to find more information about the DSF in general.")]),e("div",m,[p,e("p",null,[t("This is a major DSF release not compatible with 0.9.x and older version developed at "),e("a",u,[t("https://github.com/highmed/highmed-dsf"),a(n)]),t(".")])]),f,e("ul",null,[_,g,w,b,v,x,e("li",null,[t("Many more features, see "),e("a",S,[t("1.x release-notes"),a(n)])])])])}const N=o(c,[["render",k],["__file","index.html.vue"]]),C=JSON.parse('{"path":"/v1.3.2/","title":"DSF 1.3.2","lang":"en-US","frontmatter":{"title":"DSF 1.3.2","icon":"guide"},"headers":[{"level":2,"title":"New features","slug":"new-features","link":"#new-features","children":[]}],"git":{"createdTime":1701710218000,"updatedTime":1701710218000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.46,"words":139},"filePathRelative":"v1.3.2/index.md","localizedDate":"December 4, 2023","excerpt":"

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    \\n
    \\n

    Important note

    \\n

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.

    \\n
    "}');export{N as comp,C as data}; diff --git a/assets/index.html-59Lw0KGh.js b/assets/index.html-59Lw0KGh.js new file mode 100644 index 000000000..77a1c4e30 --- /dev/null +++ b/assets/index.html-59Lw0KGh.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as n,e as r}from"./app-kq9lCQfY.js";const a={},t=r('

    Overview

    ',2),o=[t];function l(c,s){return i(),n("div",null,o)}const f=e(a,[["render",l],["__file","index.html.vue"]]),m=JSON.parse('{"path":"/stable/maintain/fhir/","title":"FHIR Server","lang":"en-US","frontmatter":{"title":"FHIR Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":null,"updatedTime":null,"contributors":[]},"readingTime":{"minutes":0.05,"words":16},"filePathRelative":"stable/maintain/fhir/README.md","excerpt":"

    Overview

    \\n\\n"}');export{f as comp,m as data}; diff --git a/assets/index.html-6QqXTGgD.js b/assets/index.html-6QqXTGgD.js new file mode 100644 index 000000000..c72fe0773 --- /dev/null +++ b/assets/index.html-6QqXTGgD.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as r,e as a}from"./app-kq9lCQfY.js";const n={},l=a('

    Overview

    ',2),o=[l];function t(s,c){return i(),r("div",null,o)}const u=e(n,[["render",t],["__file","index.html.vue"]]),m=JSON.parse('{"path":"/v1.5.1/maintain/","title":"Maintain a DSF instance","lang":"en-US","frontmatter":{"title":"Maintain a DSF instance","icon":"tool"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.21,"words":64},"filePathRelative":"v1.5.1/maintain/README.md","localizedDate":"April 17, 2024","excerpt":"

    Overview

    \\n"}');export{u as comp,m as data}; diff --git a/assets/index.html-7wErRCxo.js b/assets/index.html-7wErRCxo.js new file mode 100644 index 000000000..40abc6281 --- /dev/null +++ b/assets/index.html-7wErRCxo.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as a,c as l,a as t,b as e,d as r,e as o}from"./app-kq9lCQfY.js";const c={},u=t("p",null,"We take security of the DSF, its process plugins, services and tools we operate very seriously.",-1),d={href:"https://dsf.dev/intro/info/architecture.html",target:"_blank",rel:"noopener noreferrer"},h={href:"https://dsf.dev/intro/info/security.html",target:"_blank",rel:"noopener noreferrer"},p={href:"https://dsf.dev/intro/info/allowList.html",target:"_blank",rel:"noopener noreferrer"},m={href:"https://dsf.dev/stable/maintain/install.html",target:"_blank",rel:"noopener noreferrer"},f={href:"https://dsf.dev/stable/maintain/upgrade-from-1.html",target:"_blank",rel:"noopener noreferrer"},y=o('

    It is also important that you ensure a secure operating environment in which you verify firewall configurations, keep the operating systems on which the DSF is running up to date and harden it according to the latest state of the art.

    Security vulnerability disclosure policy

    Our commitment to security

    We as the DSF development team take security of our software, services and data very seriously. We understand that despite our best efforts, vulnerabilities can exist. To address this, we encourage responsible reporting of any security vulnerabilities discovered in our software and systems.

    Responsible disclosure

    We kindly ask security researchers and the general public to follow the principles of Coordinated Vulnerability Disclosure (CVD) or Responsible Disclosure when reporting vulnerabilities to us. This approach helps us to mitigate potential risks and protect our users' data effectively.

    How to Report a Vulnerability

    ',7),g=t("strong",null,[t("a",{href:"mailto:dsf-security@hs-heilbronn.de"},"dsf-security@hs-heilbronn.de")],-1),b={href:"https://github.com/datasharingframework/dsf/blob/main/SECURITY_CERTIFICATE.pem",target:"_blank",rel:"noopener noreferrer"},v=t("ul",null,[t("li",null,"Provide a detailed description of the vulnerability, including if possible the potential impact and how it can be exploited."),t("li",null,"Include steps to reproduce the vulnerability or proof-of-concept code, if possible."),t("li",null,"Avoid accessing or modifying user data without permission, and do not exploit a security issue for any reason other than testing."),t("li",null,"Maintain confidentiality and do not publicly disclose the vulnerability, until we have had the opportunity to investigate and address it.")],-1),_={href:"https://github.com/datasharingframework/dsf/blob/main/SECURITY.md",target:"_blank",rel:"noopener noreferrer"},w=o('

    Our promise

    • Acknowledgement: We usually will acknowledge receipt of your vulnerability report within 48 hours.
    • Investigation: Our security team will investigate the issue and work diligently to verify and reproduce the vulnerability.
    • Communication: We will keep you informed of our progress as we work to resolve the issue.
    • Resolution: We will strive to resolve security issues in a timely manner and release updates, patches, or remediations as needed.
    • Recognition: We value your effort in making our systems more secure and will recognize your contribution, if desired, once the vulnerability is resolved.

    We promise not to initiate legal action against individuals who report vulnerabilities responsibly in accordance with this policy. This includes not suing for accidental access to data or reporting in good faith.

    Questions?

    ',5),k=t("strong",null,[t("a",{href:"mailto:dsf-security@hs-heilbronn.de"},"dsf-security@hs-heilbronn.de")],-1),S={href:"https://github.com/datasharingframework/dsf/blob/main/SECURITY_CERTIFICATE.pem",target:"_blank",rel:"noopener noreferrer"};function x(T,I){const i=n("ExternalLinkIcon");return a(),l("div",null,[u,t("p",null,[e("We describe the security mechanisms used by the DSF to implement secure communication on the pages "),t("a",d,[e("Architecture"),r(i)]),e(", "),t("a",h,[e("Security"),r(i)]),e(" and "),t("a",p,[e("Allow List"),r(i)]),e(".")]),t("p",null,[e("To ensure a high level of security, you should always install the latest DSF version and use the latest versions of the process plugins. Use the "),t("a",m,[e("instructions to install"),r(i)]),e(" the latest version of the DSF or "),t("a",f,[e("to upgrade"),r(i)]),e(" on the latest version. The instructions described there implement the security configuration recommended by us.")]),y,t("p",null,[e("If you believe you have found a security vulnerability in our system, please email us at "),g,e(". If you want to use end-to-end-encryption, you can send us mails using s-mime with the certificate chain provided "),t("a",b,[e("here"),r(i)]),e(". We kindly request the following:")]),v,t("p",null,[e("Please do not file an issue on a security-related topic and use the e-mail address provided. You can verify the address both in the "),t("a",_,[e("application repository"),r(i)]),e(" and at the homepage (this page).")]),w,t("p",null,[e("If you have any questions about this policy or security of the Data Sharing Framework, the services and tools we provide, please contact us at "),k,e(". You can send us encrypted e-mails using s-mime. You can find the certificate chain "),t("a",S,[e("here"),r(i)]),e(".")])])}const W=s(c,[["render",x],["__file","index.html.vue"]]),C=JSON.parse('{"path":"/security/","title":"Security","lang":"en-US","frontmatter":{"title":"Security","icon":"safe"},"headers":[{"level":2,"title":"Security vulnerability disclosure policy","slug":"security-vulnerability-disclosure-policy","link":"#security-vulnerability-disclosure-policy","children":[{"level":3,"title":"Our commitment to security","slug":"our-commitment-to-security","link":"#our-commitment-to-security","children":[]},{"level":3,"title":"Responsible disclosure","slug":"responsible-disclosure","link":"#responsible-disclosure","children":[]},{"level":3,"title":"How to Report a Vulnerability","slug":"how-to-report-a-vulnerability","link":"#how-to-report-a-vulnerability","children":[]},{"level":3,"title":"Our promise","slug":"our-promise","link":"#our-promise","children":[]},{"level":3,"title":"Legal Protection","slug":"legal-protection","link":"#legal-protection","children":[]},{"level":3,"title":"Questions?","slug":"questions","link":"#questions","children":[]}]}],"git":{"createdTime":1706191215000,"updatedTime":1706191215000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.97,"words":590},"filePathRelative":"security/readme.md","localizedDate":"January 25, 2024","excerpt":"

    We take security of the DSF, its process plugins, services and tools we operate very seriously.

    \\n

    We describe the security mechanisms used by the DSF to implement secure communication on the pages Architecture, Security and Allow List.

    "}');export{W as comp,C as data}; diff --git a/assets/index.html-B0FSLKVu.js b/assets/index.html-B0FSLKVu.js new file mode 100644 index 000000000..363fa9384 --- /dev/null +++ b/assets/index.html-B0FSLKVu.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as a,e as r}from"./app-kq9lCQfY.js";const n={},l=r('

    Overview

    ',2),o=[l];function t(s,c){return i(),a("div",null,o)}const u=e(n,[["render",t],["__file","index.html.vue"]]),m=JSON.parse('{"path":"/v1.1.0/maintain/","title":"Maintain a DSF instance","lang":"en-US","frontmatter":{"title":"Maintain a DSF instance","icon":"tool"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1692790324000,"updatedTime":1693415162000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":2},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.16,"words":49},"filePathRelative":"v1.1.0/maintain/README.md","localizedDate":"August 23, 2023","excerpt":"

    Overview

    \\n"}');export{u as comp,m as data}; diff --git a/assets/index.html-B7cuodVw.js b/assets/index.html-B7cuodVw.js new file mode 100644 index 000000000..78f09a766 --- /dev/null +++ b/assets/index.html-B7cuodVw.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as t,a as e}from"./app-kq9lCQfY.js";const n={},a=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),o=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),l=[a,o];function s(c,d){return i(),t("div",null,l)}const h=r(n,[["render",s],["__file","index.html.vue"]]),m=JSON.parse('{"path":"/stable/maintain/fhir-reverse-proxy/","title":"FHIR Reverse Proxy","lang":"en-US","frontmatter":{"title":"FHIR Reverse Proxy","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":null,"updatedTime":null,"contributors":[]},"readingTime":{"minutes":0.03,"words":10},"filePathRelative":"stable/maintain/fhir-reverse-proxy/README.md","excerpt":"

    Overview

    \\n\\n"}');export{h as comp,m as data}; diff --git a/assets/index.html-BA9Y-W0Q.js b/assets/index.html-BA9Y-W0Q.js new file mode 100644 index 000000000..2ac0ef316 --- /dev/null +++ b/assets/index.html-BA9Y-W0Q.js @@ -0,0 +1 @@ +import{_ as o}from"./dsf-concept-Dbcu0twt.js";import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as i,c as d,a as e,b as a,d as t,e as c}from"./app-kq9lCQfY.js";const l="/photos/learnmore/funding/bmbf-mii.png",h={},m=e("hr",null,null,-1),u=e("h1",{id:"data-sharing-framework",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#data-sharing-framework"},[e("span",null,"Data Sharing Framework")])],-1),p=e("strong",null,"Data Sharing Framework (DSF)",-1),f={href:"https://www.gesundheitsforschung-bmbf.de/de/dsf-medizininformatik-struktur-data-sharing-framework-community-16133.php",target:"_blank",rel:"noopener noreferrer"},g=e("figure",null,[e("img",{src:o,alt:"DSF concept",tabindex:"0",loading:"lazy"}),e("figcaption",null,"DSF concept")],-1),b={id:"rolf-hansen-memorial-award-2023-goes-to-hauke-hund",tabindex:"-1"},k={class:"header-anchor",href:"#rolf-hansen-memorial-award-2023-goes-to-hauke-hund"},w={href:"https://github.com/hhund",target:"_blank",rel:"noopener noreferrer"},_={href:"https://www.mie2023.org/",target:"_blank",rel:"noopener noreferrer"},y=e("em",null,"No Transfer Without Validation: A Data Sharing Framework Use Case",-1),F={href:"https://ebooks.iospress.nl/doi/10.3233/SHTI230066",target:"_blank",rel:"noopener noreferrer"},S=c('

    Feel free to contact us via dsf-gecko@hs-heilbronn.de and we will take care of your request as soon as possible.

    ',2);function v(x,M){const n=s("ExternalLinkIcon");return i(),d("div",null,[m,u,e("p",null,[a("The "),p,a(" is a concept for a secure middleware to distribute data sharing processes based on the BPMN 2.0 and FHIR R4 standards. The DSF is used to support biomedical research with routine data, aiming to extract, merge, pseudonymize and provide data stored in multiple distributed organizations. Every participating site runs a FHIR endpoint accessible by other sites and a business process engine in the local secured network. The process engines execute BPMN processes in order to coordinate local and remote steps necessary to enable cross-site data sharing or feasibility analyses. This includes access to local data repositories, use-and-access-committee decision support, consent filtering, and privacy preserving record-linkage and pseudonymization. The aim is to enable secure and syntactically-, semantically- and process-interoperable data exchange across organizational boundaries. The secure communication infrastructure is funded by the German Federal Ministry of Education and Research within the Medical Informatics structure as "),e("em",null,[e("a",f,[a("DSF Community"),t(n)])]),a(".")]),g,e("h2",b,[e("a",k,[e("span",null,[a("Rolf Hansen Memorial Award 2023 goes to "),e("a",w,[a("Hauke Hund"),t(n)])])])]),e("p",null,[a("We are very pleased to have won the Rolf Hansen Memorial Award at "),e("a",_,[a("EFMI MIE 2023"),t(n)]),a(" in Gothenburg. The Rolf Hansen Memorial Award is presented annually by the European Federation for Medical Informatics (EFMI) for an outstanding paper as well as for an excellent presentation. It is named after Rolf Hansen (1931-1993), a well-known Norwegian medical informatician and former president of EFMI. Hauke Hund presented his Paper: "),y,a(" in May at the EFMI MIE. "),e("a",F,[a("doi:10.3233/SHTI230066 "),t(n)])]),S])}const H=r(h,[["render",v],["__file","index.html.vue"]]),z=JSON.parse('{"path":"/","title":"Data Sharing Framework","lang":"en-US","frontmatter":{"home":true,"icon":"home","title":"Data Sharing Framework","heroImage":"/photos/home/logo.svg","heroText":"Data Sharing Framework","tagline":"A performant, secure, and innovative framework that enables biomedical researchers to extract value from routine data.","features":[{"title":"Introduction","icon":"info","details":"Introduction to the DSF and informations about Use-Cases/Projects.","link":"/intro/"},{"title":"Get Started","icon":"launch","details":"Get technical insights and install the DSF | Develop Process Plugins.","link":"/stable/"},{"title":"About Us","icon":"creative","details":"Contact, partners, the team behind the DSF and more... Join our community!","link":"/about/learnmore/"},{"title":"GitHub","icon":"github","details":"Take a look at the open-source reference implementation.","link":"https://github.com/datasharingframework/dsf"}]},"headers":[{"level":2,"title":"Rolf Hansen Memorial Award 2023 goes to Hauke Hund","slug":"rolf-hansen-memorial-award-2023-goes-to-hauke-hund","link":"#rolf-hansen-memorial-award-2023-goes-to-hauke-hund","children":[]}],"git":{"createdTime":1680254536000,"updatedTime":1715791698000,"contributors":[{"name":"simonmoedinger","email":"simonmoedi@web.de","commits":8},{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":5},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":5},{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":2},{"name":"Mohammad Amir Kannout","email":"mkannout@stud.hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.46,"words":439},"filePathRelative":"index.md","localizedDate":"March 31, 2023","excerpt":"
    \\n

    Data Sharing Framework

    \\n

    The Data Sharing Framework (DSF) is a concept for a secure middleware to distribute data sharing processes based on the BPMN 2.0 and FHIR R4 standards. The DSF is used to support biomedical research with routine data, aiming to extract, merge, pseudonymize and provide data stored in multiple distributed organizations. Every participating site runs a FHIR endpoint accessible by other sites and a business process engine in the local secured network. The process engines execute BPMN processes in order to coordinate local and remote steps necessary to enable cross-site data sharing or feasibility analyses. This includes access to local data repositories, use-and-access-committee decision support, consent filtering, and privacy preserving record-linkage and pseudonymization. The aim is to enable secure and syntactically-, semantically- and process-interoperable data exchange across organizational boundaries. The secure communication infrastructure is funded by the German Federal Ministry of Education and Research within the Medical Informatics structure as DSF Community.

    "}');export{H as comp,z as data}; diff --git a/assets/index.html-BALcS47z.js b/assets/index.html-BALcS47z.js new file mode 100644 index 000000000..a4d59f819 --- /dev/null +++ b/assets/index.html-BALcS47z.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as a,e as r}from"./app-kq9lCQfY.js";const n={},l=r('

    Overview

    ',2),o=[l];function t(s,c){return i(),a("div",null,o)}const m=e(n,[["render",t],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.4.0/maintain/","title":"Maintain a DSF instance","lang":"en-US","frontmatter":{"title":"Maintain a DSF instance","icon":"tool"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1702917645000,"updatedTime":1702917645000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.16,"words":49},"filePathRelative":"v1.4.0/maintain/README.md","localizedDate":"December 18, 2023","excerpt":"

    Overview

    \\n"}');export{m as comp,u as data}; diff --git a/assets/index.html-BCPmXfDv.js b/assets/index.html-BCPmXfDv.js new file mode 100644 index 000000000..80997b77d --- /dev/null +++ b/assets/index.html-BCPmXfDv.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as a,c as l,a as e}from"./app-kq9lCQfY.js";const i={},n=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),o=e("ul",null,[e("li",null,[e("a",{href:"create"},"Create a new process plugin")]),e("li",null,[e("a",{href:"upgrade-from-0"},"Upgrade processes from 0.9.x")])],-1),t=[n,o];function s(c,d){return a(),l("div",null,t)}const h=r(i,[["render",s],["__file","index.html.vue"]]),v=JSON.parse('{"path":"/v1.5.2/develop/","title":"Develop Process Plugins","lang":"en-US","frontmatter":{"title":"Develop Process Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.07,"words":20},"filePathRelative":"v1.5.2/develop/README.md","localizedDate":"July 8, 2024","excerpt":"

    Overview

    \\n\\n"}');export{h as comp,v as data}; diff --git a/assets/index.html-BGgrJkzc.js b/assets/index.html-BGgrJkzc.js new file mode 100644 index 000000000..bef8f5d8e --- /dev/null +++ b/assets/index.html-BGgrJkzc.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as n,a as e}from"./app-kq9lCQfY.js";const t={},a=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),o=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),l=[a,o];function s(c,d){return i(),n("div",null,l)}const m=r(t,[["render",s],["__file","index.html.vue"]]),v=JSON.parse('{"path":"/v1.1.0/maintain/fhir-reverse-proxy/","title":"FHIR Reverse Proxy","lang":"en-US","frontmatter":{"title":"FHIR Reverse Proxy","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1693251017000,"updatedTime":1693394432000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":0.03,"words":10},"filePathRelative":"v1.1.0/maintain/fhir-reverse-proxy/README.md","localizedDate":"August 28, 2023","excerpt":"

    Overview

    \\n\\n"}');export{m as comp,v as data}; diff --git a/assets/index.html-BL-TOoxL.js b/assets/index.html-BL-TOoxL.js new file mode 100644 index 000000000..a81255327 --- /dev/null +++ b/assets/index.html-BL-TOoxL.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as o,a as e}from"./app-kq9lCQfY.js";const a={},l=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),n=e("ul",null,[e("li",null,[e("a",{href:"create"},"Create a new process plugin")]),e("li",null,[e("a",{href:"upgrade-from-0"},"Upgrade processes from 0.9.x")])],-1),t=[l,n];function s(c,d){return i(),o("div",null,t)}const h=r(a,[["render",s],["__file","index.html.vue"]]),v=JSON.parse('{"path":"/v1.3.0/develop/","title":"Develop Process Plugins","lang":"en-US","frontmatter":{"title":"Develop Process Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1696944513000,"updatedTime":1696944513000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.07,"words":20},"filePathRelative":"v1.3.0/develop/README.md","localizedDate":"October 10, 2023","excerpt":"

    Overview

    \\n\\n"}');export{h as comp,v as data}; diff --git a/assets/index.html-BM8BVXez.js b/assets/index.html-BM8BVXez.js new file mode 100644 index 000000000..58afc4a3c --- /dev/null +++ b/assets/index.html-BM8BVXez.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as r,c as s,a as e,b as a,d as t,w as n}from"./app-kq9lCQfY.js";const d={},m=e("h2",{id:"overview-v-0-9-x",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview-v-0-9-x"},[e("span",null,"Overview (v 0.9.x)")])],-1);function u(h,c){const l=i("RouteLink");return r(),s("div",null,[e("p",null,[a("Data Sharing Framework 0.9.x is an old version of the Data Sharing Framework. Click "),t(l,{to:"/intro/"},{default:n(()=>[a("here")]),_:1}),a(" to find more information about the DSF in general.")]),m,e("ul",null,[e("li",null,[t(l,{to:"/oldstable/generalInformation/"},{default:n(()=>[a("General Information")]),_:1})]),e("li",null,[t(l,{to:"/oldstable/code/"},{default:n(()=>[a("Code")]),_:1})]),e("li",null,[t(l,{to:"/oldstable/build/"},{default:n(()=>[a("Build and Test")]),_:1})]),e("li",null,[t(l,{to:"/oldstable/releases/"},{default:n(()=>[a("Releases and Deployment")]),_:1})]),e("li",null,[t(l,{to:"/oldstable/tutorial/"},{default:n(()=>[a("DSF Process Plugin Tutorial")]),_:1})])])])}const v=o(d,[["render",u],["__file","index.html.vue"]]),_=JSON.parse('{"path":"/oldstable/","title":"Version 0.9.x","lang":"en-US","frontmatter":{"title":"Version 0.9.x","icon":"guide"},"headers":[{"level":2,"title":"Overview (v 0.9.x)","slug":"overview-v-0-9-x","link":"#overview-v-0-9-x","children":[]}],"git":{"createdTime":1688985700000,"updatedTime":1692783801000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":3},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":3},{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.17,"words":51},"filePathRelative":"oldstable/README.md","localizedDate":"July 10, 2023","excerpt":"

    Data Sharing Framework 0.9.x is an old version of the Data Sharing Framework. Click here to find more information about the DSF in general.

    \\n

    Overview (v 0.9.x)

    \\n"}');export{v as comp,_ as data}; diff --git a/assets/index.html-BN2y9VB2.js b/assets/index.html-BN2y9VB2.js new file mode 100644 index 000000000..0975411f7 --- /dev/null +++ b/assets/index.html-BN2y9VB2.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as n,a as e}from"./app-kq9lCQfY.js";const t={},a=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),o=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),l=[a,o];function s(c,d){return i(),n("div",null,l)}const u=r(t,[["render",s],["__file","index.html.vue"]]),v=JSON.parse('{"path":"/v1.5.2/maintain/fhir-reverse-proxy/","title":"FHIR Reverse Proxy","lang":"en-US","frontmatter":{"title":"FHIR Reverse Proxy","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.03,"words":10},"filePathRelative":"v1.5.2/maintain/fhir-reverse-proxy/README.md","localizedDate":"July 8, 2024","excerpt":"

    Overview

    \\n\\n"}');export{u as comp,v as data}; diff --git a/assets/index.html-BTL8SJ98.js b/assets/index.html-BTL8SJ98.js new file mode 100644 index 000000000..32a974680 --- /dev/null +++ b/assets/index.html-BTL8SJ98.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as n,a as e}from"./app-kq9lCQfY.js";const t={},o=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),a=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),s=[o,a];function l(c,m){return i(),n("div",null,s)}const v=r(t,[["render",l],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.5.0/maintain/fhir-reverse-proxy/","title":"FHIR Reverse Proxy","lang":"en-US","frontmatter":{"title":"FHIR Reverse Proxy","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1708419681000,"updatedTime":1708419681000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.03,"words":10},"filePathRelative":"v1.5.0/maintain/fhir-reverse-proxy/README.md","localizedDate":"February 20, 2024","excerpt":"

    Overview

    \\n\\n"}');export{v as comp,u as data}; diff --git a/assets/index.html-BUoh0Qls.js b/assets/index.html-BUoh0Qls.js new file mode 100644 index 000000000..753957b0d --- /dev/null +++ b/assets/index.html-BUoh0Qls.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as t,a as e}from"./app-kq9lCQfY.js";const n={},o=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),a=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),s=[o,a];function l(c,m){return r(),t("div",null,s)}const v=i(n,[["render",l],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.3.0/maintain/fhir-reverse-proxy/","title":"FHIR Reverse Proxy","lang":"en-US","frontmatter":{"title":"FHIR Reverse Proxy","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1696944513000,"updatedTime":1696944513000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.03,"words":10},"filePathRelative":"v1.3.0/maintain/fhir-reverse-proxy/README.md","localizedDate":"October 10, 2023","excerpt":"

    Overview

    \\n\\n"}');export{v as comp,u as data}; diff --git a/assets/index.html-Bc9IQ5FT.js b/assets/index.html-Bc9IQ5FT.js new file mode 100644 index 000000000..21333a0ab --- /dev/null +++ b/assets/index.html-Bc9IQ5FT.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as o,a as e}from"./app-kq9lCQfY.js";const a={},l=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),n=e("ul",null,[e("li",null,[e("a",{href:"create"},"Create a new process plugin")]),e("li",null,[e("a",{href:"upgrade-from-0"},"Upgrade processes from 0.9.x")])],-1),t=[l,n];function s(c,d){return i(),o("div",null,t)}const h=r(a,[["render",s],["__file","index.html.vue"]]),v=JSON.parse('{"path":"/v1.3.2/develop/","title":"Develop Process Plugins","lang":"en-US","frontmatter":{"title":"Develop Process Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1701710218000,"updatedTime":1701710218000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.07,"words":20},"filePathRelative":"v1.3.2/develop/README.md","localizedDate":"December 4, 2023","excerpt":"

    Overview

    \\n\\n"}');export{h as comp,v as data}; diff --git a/assets/index.html-Beuqigim.js b/assets/index.html-Beuqigim.js new file mode 100644 index 000000000..195f949b0 --- /dev/null +++ b/assets/index.html-Beuqigim.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as n,c as r,a as e}from"./app-kq9lCQfY.js";const t={},a=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),o=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),l=[a,o];function s(c,m){return n(),r("div",null,l)}const v=i(t,[["render",s],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.4.0/maintain/bpe/","title":"BPE Server","lang":"en-US","frontmatter":{"title":"BPE Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1702917645000,"updatedTime":1702917645000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.03,"words":9},"filePathRelative":"v1.4.0/maintain/bpe/README.md","localizedDate":"December 18, 2023","excerpt":"

    Overview

    \\n\\n"}');export{v as comp,u as data}; diff --git a/assets/index.html-BgN128oA.js b/assets/index.html-BgN128oA.js new file mode 100644 index 000000000..2fe4f6abd --- /dev/null +++ b/assets/index.html-BgN128oA.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as s,c as l,a as e,b as t,d as a,w as h,e as d}from"./app-kq9lCQfY.js";const c={},m={class:"hint-container tip"},p=e("p",{class:"hint-container-title"},"Important note",-1),u={href:"https://github.com/highmed/highmed-dsf",target:"_blank",rel:"noopener noreferrer"},f=d('

    System Administrators

    Developers

    New features

    ',5),_=e("li",null,"Improved versioning to support up- and downwards-compatibility",-1),g=e("li",null,"Enhanced web ui to start processes in the web browser",-1),w=e("li",null,"Allow local user authentication and authorization with OpenID Connect",-1),b=e("li",null,"New process plugin API",-1),v=e("li",null,"Removed mostly unused features to simplify instance configuration",-1),x=e("li",null,"Unified proxy setup",-1),S={href:"https://github.com/datasharingframework/dsf/releases",target:"_blank",rel:"noopener noreferrer"};function k(D,F){const i=r("RouteLink"),n=r("ExternalLinkIcon");return s(),l("div",null,[e("p",null,[t("Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click "),a(i,{to:"/intro/"},{default:h(()=>[t("here")]),_:1}),t(" to find more information about the DSF in general.")]),e("div",m,[p,e("p",null,[t("This is a major DSF release not compatible with 0.9.x and older version developed at "),e("a",u,[t("https://github.com/highmed/highmed-dsf"),a(n)]),t(".")])]),f,e("ul",null,[_,g,w,b,v,x,e("li",null,[t("Many more features, see "),e("a",S,[t("1.x release-notes"),a(n)])])])])}const N=o(c,[["render",k],["__file","index.html.vue"]]),C=JSON.parse('{"path":"/v1.4.0/","title":"DSF 1.4.0","lang":"en-US","frontmatter":{"title":"DSF 1.4.0","icon":"guide"},"headers":[{"level":2,"title":"New features","slug":"new-features","link":"#new-features","children":[]}],"git":{"createdTime":1702917645000,"updatedTime":1702917645000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.46,"words":139},"filePathRelative":"v1.4.0/index.md","localizedDate":"December 18, 2023","excerpt":"

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    \\n
    \\n

    Important note

    \\n

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.

    \\n
    "}');export{N as comp,C as data}; diff --git a/assets/index.html-BkHpX9Lh.js b/assets/index.html-BkHpX9Lh.js new file mode 100644 index 000000000..8f46f6511 --- /dev/null +++ b/assets/index.html-BkHpX9Lh.js @@ -0,0 +1 @@ +import{_ as l}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as r,c as s,a as t,d as i,w as o,b as a}from"./app-kq9lCQfY.js";const u={};function m(d,c){const e=n("RouteLink");return r(),s("div",null,[t("ul",null,[t("li",null,[i(e,{to:"/intro/tutorials/MIE2023.html"},{default:o(()=>[a("MIE 2023")]),_:1})]),t("li",null,[i(e,{to:"/intro/tutorials/GMDS2022-dev.html"},{default:o(()=>[a("GMDS 2022 - DSF Process Plugin Tutorial v 0.9.x")]),_:1})])])])}const f=l(u,[["render",m],["__file","index.html.vue"]]),p=JSON.parse('{"path":"/intro/tutorials/","title":"Tutorials","lang":"en-US","frontmatter":{"title":"Tutorials","icon":"edit"},"headers":[],"git":{"createdTime":1690461865000,"updatedTime":1697551355000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.06,"words":17},"filePathRelative":"intro/tutorials/README.md","localizedDate":"July 27, 2023","excerpt":"\\n"}');export{f as comp,p as data}; diff --git a/assets/index.html-Bmlmhagb.js b/assets/index.html-Bmlmhagb.js new file mode 100644 index 000000000..ca655d903 --- /dev/null +++ b/assets/index.html-Bmlmhagb.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as a,e as r}from"./app-kq9lCQfY.js";const n={},l=r('

    Overview

    ',2),o=[l];function t(s,c){return i(),a("div",null,o)}const m=e(n,[["render",t],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.3.1/maintain/","title":"Maintain a DSF instance","lang":"en-US","frontmatter":{"title":"Maintain a DSF instance","icon":"tool"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1698748420000,"updatedTime":1698748420000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.16,"words":49},"filePathRelative":"v1.3.1/maintain/README.md","localizedDate":"October 31, 2023","excerpt":"

    Overview

    \\n"}');export{m as comp,u as data}; diff --git a/assets/index.html-BsAx9IPS.js b/assets/index.html-BsAx9IPS.js new file mode 100644 index 000000000..89e1b1a9f --- /dev/null +++ b/assets/index.html-BsAx9IPS.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as r,e as n}from"./app-kq9lCQfY.js";const a={},t=n('

    Overview

    ',2),o=[t];function c(l,s){return i(),r("div",null,o)}const d=e(a,[["render",c],["__file","index.html.vue"]]),f=JSON.parse('{"path":"/v1.3.0/maintain/fhir/","title":"FHIR Server","lang":"en-US","frontmatter":{"title":"FHIR Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1696944513000,"updatedTime":1696944513000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.05,"words":16},"filePathRelative":"v1.3.0/maintain/fhir/README.md","localizedDate":"October 10, 2023","excerpt":"

    Overview

    \\n\\n"}');export{d as comp,f as data}; diff --git a/assets/index.html-Bt8TXjqJ.js b/assets/index.html-Bt8TXjqJ.js new file mode 100644 index 000000000..485396beb --- /dev/null +++ b/assets/index.html-Bt8TXjqJ.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as o,a as e}from"./app-kq9lCQfY.js";const a={},l=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),n=e("ul",null,[e("li",null,[e("a",{href:"create"},"Create a new process plugin")]),e("li",null,[e("a",{href:"upgrade-from-0"},"Upgrade processes from 0.9.x")])],-1),t=[l,n];function s(c,d){return i(),o("div",null,t)}const h=r(a,[["render",s],["__file","index.html.vue"]]),v=JSON.parse('{"path":"/v1.3.1/develop/","title":"Develop Process Plugins","lang":"en-US","frontmatter":{"title":"Develop Process Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1698748420000,"updatedTime":1698748420000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.07,"words":20},"filePathRelative":"v1.3.1/develop/README.md","localizedDate":"October 31, 2023","excerpt":"

    Overview

    \\n\\n"}');export{h as comp,v as data}; diff --git a/assets/index.html-BuS8pc67.js b/assets/index.html-BuS8pc67.js new file mode 100644 index 000000000..d72c1eece --- /dev/null +++ b/assets/index.html-BuS8pc67.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as t,a as e}from"./app-kq9lCQfY.js";const n={},o=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),a=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),s=[o,a];function l(c,m){return r(),t("div",null,s)}const v=i(n,[["render",l],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.3.1/maintain/fhir-reverse-proxy/","title":"FHIR Reverse Proxy","lang":"en-US","frontmatter":{"title":"FHIR Reverse Proxy","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1698748420000,"updatedTime":1698748420000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.03,"words":10},"filePathRelative":"v1.3.1/maintain/fhir-reverse-proxy/README.md","localizedDate":"October 31, 2023","excerpt":"

    Overview

    \\n\\n"}');export{v as comp,u as data}; diff --git a/assets/index.html-Bv1aj902.js b/assets/index.html-Bv1aj902.js new file mode 100644 index 000000000..c4842d2de --- /dev/null +++ b/assets/index.html-Bv1aj902.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as n,e as a}from"./app-kq9lCQfY.js";const r={},t=a('

    Overview

    ',2),o=[t];function c(l,s){return i(),n("div",null,o)}const d=e(r,[["render",c],["__file","index.html.vue"]]),v=JSON.parse('{"path":"/v1.5.1/maintain/bpe/","title":"BPE Server","lang":"en-US","frontmatter":{"title":"BPE Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.05,"words":16},"filePathRelative":"v1.5.1/maintain/bpe/README.md","localizedDate":"April 17, 2024","excerpt":"

    Overview

    \\n\\n"}');export{d as comp,v as data}; diff --git a/assets/index.html-BxKmwZz7.js b/assets/index.html-BxKmwZz7.js new file mode 100644 index 000000000..1b424e1fa --- /dev/null +++ b/assets/index.html-BxKmwZz7.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as a,e as r}from"./app-kq9lCQfY.js";const n={},l=r('

    Overview

    ',2),t=[l];function o(s,c){return i(),a("div",null,t)}const m=e(n,[["render",o],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.2.0/maintain/","title":"Maintain a DSF instance","lang":"en-US","frontmatter":{"title":"Maintain a DSF instance","icon":"tool"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1694544770000,"updatedTime":1694544770000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.16,"words":49},"filePathRelative":"v1.2.0/maintain/README.md","localizedDate":"September 12, 2023","excerpt":"

    Overview

    \\n"}');export{m as comp,u as data}; diff --git a/assets/index.html-C-fzjFRH.js b/assets/index.html-C-fzjFRH.js new file mode 100644 index 000000000..c323659dc --- /dev/null +++ b/assets/index.html-C-fzjFRH.js @@ -0,0 +1 @@ +import{_ as l}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as i,c,a as e,d as n,w as a,b as o}from"./app-kq9lCQfY.js";const m={};function s(u,d){const t=r("RouteLink");return i(),c("div",null,[e("ul",null,[e("li",null,[n(t,{to:"/oldstable/generalinformation/authentication.html"},{default:a(()=>[o("Authentication")]),_:1})]),e("li",null,[n(t,{to:"/oldstable/generalinformation/networkSetup.html"},{default:a(()=>[o("Network Setup and General Architecture")]),_:1})])])])}const _=l(m,[["render",s],["__file","index.html.vue"]]),p=JSON.parse('{"path":"/oldstable/generalinformation/","title":"General Information","lang":"en-US","frontmatter":{"title":"General Information","icon":"set"},"headers":[],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.04,"words":13},"filePathRelative":"oldstable/generalinformation/README.md","localizedDate":"August 23, 2023","excerpt":"\\n"}');export{_ as comp,p as data}; diff --git a/assets/index.html-C0hIsdj5.js b/assets/index.html-C0hIsdj5.js new file mode 100644 index 000000000..e54919189 --- /dev/null +++ b/assets/index.html-C0hIsdj5.js @@ -0,0 +1 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as a,c as n,d as r}from"./app-kq9lCQfY.js";const l={};function s(c,i){const e=o("Catalog");return a(),n("div",null,[r(e)])}const _=t(l,[["render",s],["__file","index.html.vue"]]),d=JSON.parse('{"path":"/intro/info/","title":"Info","lang":"en-US","frontmatter":{"title":"Info","article":false,"feed":false,"sitemap":false},"headers":[],"git":{},"readingTime":{"minutes":0,"words":1},"filePathRelative":null,"excerpt":""}');export{_ as comp,d as data}; diff --git a/assets/index.html-C6oGyzQN.js b/assets/index.html-C6oGyzQN.js new file mode 100644 index 000000000..e8d3b8219 --- /dev/null +++ b/assets/index.html-C6oGyzQN.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as a,c as o,a as e,b as n,d as t,e as l}from"./app-kq9lCQfY.js";const h={},d={class:"hint-container tip"},u=e("p",{class:"hint-container-title"},"Gemeinsame technische Sprechstunde der DSF-Community und des FDPG+",-1),c=e("li",null,"Montags, 13:00-14:00 Uhr",-1),m={href:"https://dsf.dev/sprechstunde",target:"_blank",rel:"noopener noreferrer"},g=e("h1",{id:"hackathon-vom-18-06-2024",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#hackathon-vom-18-06-2024"},[e("span",null,"Hackathon vom 18.06.2024")])],-1),p={class:"hint-container tip"},f=e("p",{class:"hint-container-title"},"Zusammenfassung",-1),b={href:"https://audimax.heiconf.uni-heidelberg.de/jxh4-jxx2-tm6c-d37q",target:"_blank",rel:"noopener noreferrer"},_=e("li",null,[e("a",{href:"#vorbereitung"},"Vorbereitung")],-1),k=e("li",null,[e("a",{href:"#installationshinweise"},"Installationshinweise")],-1),v=l('

    Wir laden Sie herzlich zu unserem kommenden Hackathon am 18.06. von 10:00 Uhr bis 15:30 Uhr ein. Diese Veranstaltung bietet die Gelegenheit, sich mit den neuesten Updates und Funktionen unserer Komponenten vertraut zu machen.

    Agenda:

    1. Einführung in Neuerungen (10:00 - 11:00 Uhr):
      • Begrüßung und Einführung in die neuen Funktionen und Verbesserungen des DSFs
      • Präsentation der Änderungen der MII DSF-Prozessplugins, sowie von Blaze und Flare
    2. Updates MII-Komponenten (ab 11:00 Uhr bis verlängerter Pause, um NUM-DIZ-Meeting besuchen zu können):
      • DSF
      • Feasibility
      • Data Sharing
      • Data Transfer
      • KDS Report
      • Blaze
      • Flare mit neuer KDS Ontologie
    3. Testen des Prozessplugins "Data Sharing" (ab 14:15 Uhr):
      • Praktische Anwendung des "Data Sharing"-Prozessplugins auf unserer Testinfrastruktur.

    Ziel der Veranstaltung ist es die Test- und Produktivsysteme möglichst aller Standorte auf den neusten Stand zu patchen.

    Vorbereitung

    In diesem Hackathon ist das Aktualisieren der Systeme ein aktiver Bestandteil und bedarf keiner speziellen Vorbereitung. Für das Testen der Data Sharing Prozesse sollten jedoch einige Voraussetzungen bereits vor dem Termin erfüllt sein.

    Netzwerkfreigaben

    ',7),w={href:"http://mii-test.gecko.hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},z={href:"http://allowlist-test.gecko.hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},S=e("p",null,"Wir empfehlen auch sicherzustellen, dass Sie Zugriff auf die Weboberfläche Ihres DSF-FHIR-Servers haben.",-1),D=e("h3",{id:"fhir-store",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#fhir-store"},[e("span",null,"FHIR-Store")])],-1),x=e("p",null,"Zur Datenausleitung im Kontext des Data Sharing Prozesses werden wir FHIR Bundles mit Testdaten zur Verfügung stellen, die in Form eines FHIR Bundles auf einem FHIR Store gespeichert werden müssen. Dabei kann ein beliebiger FHIR Server (z.B. HAPI FHIR oder Blaze) verwendet werden. Es kann auch der FHIR Server verwendet werden, der z.B. für Feasibility im Testsystem genutzt wird.",-1),F=e("p",null,"Weitere Details zum Data Sharing Prozess sind hier zu finden:",-1),I={href:"https://github.com/medizininformatik-initiative/mii-process-data-sharing/wiki",target:"_blank",rel:"noopener noreferrer"},P=e("p",null,"Eine Installation kann vor oder während des Hackathons durchgeführt werden.",-1),H=e("h2",{id:"installationshinweise",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#installationshinweise"},[e("span",null,"Installationshinweise")])],-1),T=e("h3",{id:"dsf",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#dsf"},[e("span",null,"DSF")])],-1),y={href:"https://dsf.dev/stable/maintain/install.html",target:"_blank",rel:"noopener noreferrer"},B={href:"https://dsf.dev/stable/maintain/upgrade-from-1.html",target:"_blank",rel:"noopener noreferrer"},M=e("h3",{id:"prozessplugins",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#prozessplugins"},[e("span",null,"Prozessplugins")])],-1),R={href:"https://github.com/datasharingframework/dsf-process-ping-pong/releases/tag/v1.0.1.0",target:"_blank",rel:"noopener noreferrer"},V={href:"https://github.com/datasharingframework/dsf-process-allow-list/releases/tag/v1.0.0.1",target:"_blank",rel:"noopener noreferrer"},N={href:"https://github.com/medizininformatik-initiative/feasibility-deploy/wiki/DSF-Middleware-Setup",target:"_blank",rel:"noopener noreferrer"},U={href:"https://github.com/medizininformatik-initiative/mii-process-report/wiki/Process-Report-Deployment-v1.1.x.x",target:"_blank",rel:"noopener noreferrer"},A={href:"https://github.com/medizininformatik-initiative/mii-process-report/wiki/Process-Report-Deployment-v1.0.x.x",target:"_blank",rel:"noopener noreferrer"},E={href:"https://github.com/medizininformatik-initiative/mii-process-data-transfer/wiki/Process-Data-Transfer-Deployment-v1.0.x.x",target:"_blank",rel:"noopener noreferrer"},j={href:"https://github.com/medizininformatik-initiative/mii-process-data-sharing/wiki/Process-Data-Sharing-Deployment-v1.0.x.x",target:"_blank",rel:"noopener noreferrer"},q=e("h3",{id:"weitere-anwendungen",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#weitere-anwendungen"},[e("span",null,"Weitere Anwendungen")])],-1),K={href:"https://github.com/medizininformatik-initiative/flare",target:"_blank",rel:"noopener noreferrer"},W={href:"https://github.com/samply/blaze/blob/master/docs/deployment/README.md",target:"_blank",rel:"noopener noreferrer"},Z=e("h2",{id:"data-sharing-demodaten",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#data-sharing-demodaten"},[e("span",null,"Data Sharing Demodaten")])],-1),G={href:"https://github.com/medizininformatik-initiative/mii-process-data-sharing/blob/develop/src/test/resources/fhir/Bundle/Dic1FhirStore_Demo_Bundle.xml",target:"_blank",rel:"noopener noreferrer"},C=e("p",null,[n("Falls Sie Fragen zum Hackathon oder der Installation des DSF haben, melden Sie sich gerne über den DSF-Community Zulip-Channel oder "),e("a",{href:"mailto:dsf-gecko@hs-heilbronn.de"},"dsf-gecko@hs-heilbronn.de"),n(".")],-1);function O(L,J){const i=s("ExternalLinkIcon");return a(),o("div",null,[e("div",d,[u,e("ul",null,[c,e("li",null,[n("Ort: "),e("a",m,[n("https://dsf.dev/sprechstunde"),t(i)])])])]),g,e("div",p,[f,e("ul",null,[e("li",null,[n("Konferenz: "),e("a",b,[n("https://audimax.heiconf.uni-heidelberg.de/jxh4-jxx2-tm6c-d37q"),t(i)])]),_,k])]),v,e("p",null,[n("Für den Hackathon werden wir primär die Test-DMS aus Heilbronn verwenden, dafür muss neben der Freigabe zur FDPG auch die Freigabe zum und vom MII-Test-System der HHN vorhanden sein ("),e("a",w,[n("mii-test.gecko.hs-heilbronn.de"),t(i)]),n(").")]),e("p",null,[n("In diesem Kontext bietet es sich an, auch die Freigaben für weitere Test-DMSen zu beantragen. Weitere Details dazu befinden sich in der Liste der Firewallregeln im Test-Allowlist-Management-Tool ("),e("a",z,[n("allowlist-test.gecko.hs-heilbronn.de"),t(i)]),n(") unter dem Punkt “Download Allowlist”. Wir planen während des Termins auch mit ausgewählten DIZen erste Funktionstests der Test-DMSen durchzuführen.")]),S,D,x,F,e("p",null,[e("a",I,[n("https://github.com/medizininformatik-initiative/mii-process-data-sharing/wiki"),t(i)])]),P,H,T,e("p",null,[e("a",y,[n("Installation"),t(i)]),n(" oder "),e("a",B,[n("Update"),t(i)])]),M,e("ul",null,[e("li",null,[n("DSF Ping Pong 1.0.1.0 "),e("a",R,[n("Release Notes"),t(i)])]),e("li",null,[n("DSF Allowlist Plugin 1.0.0.1 "),e("a",V,[n("Release Notes"),t(i)])]),e("li",null,[n("MII Feasibility 1.0.0.5 "),e("a",N,[n("Instructions"),t(i)])]),e("li",null,[n("MII Process Report 1.1.0.0 for Test Infrastructure "),e("a",U,[n("Instructions"),t(i)]),n(". Please use 1.0.x.x for Prod for now "),e("a",A,[n("Instructions"),t(i)])]),e("li",null,[n("MII Process Data Transfer 1.0.1.0 "),e("a",E,[n("Instructions"),t(i)])]),e("li",null,[n("MII Process Data Sharing 1.0.0.1 "),e("a",j,[n("Instructions"),t(i)])])]),q,e("ul",null,[e("li",null,[n("Flare "),e("a",K,[n("Instructions"),t(i)])]),e("li",null,[n("Blaze 0.27.1 "),e("a",W,[n("Instructions"),t(i)])])]),Z,e("ul",null,[e("li",null,[e("a",G,[n("https://github.com/medizininformatik-initiative/mii-process-data-sharing/blob/develop/src/test/resources/fhir/Bundle/Dic1FhirStore_Demo_Bundle.xml"),t(i)])])]),C])}const Y=r(h,[["render",O],["__file","index.html.vue"]]),$=JSON.parse('{"path":"/hackathon/","title":"Hackathon","lang":"en-US","frontmatter":{"title":"Hackathon","icon":"guide"},"headers":[{"level":2,"title":"Vorbereitung","slug":"vorbereitung","link":"#vorbereitung","children":[{"level":3,"title":"Netzwerkfreigaben","slug":"netzwerkfreigaben","link":"#netzwerkfreigaben","children":[]},{"level":3,"title":"FHIR-Store","slug":"fhir-store","link":"#fhir-store","children":[]}]},{"level":2,"title":"Installationshinweise","slug":"installationshinweise","link":"#installationshinweise","children":[{"level":3,"title":"DSF","slug":"dsf","link":"#dsf","children":[]},{"level":3,"title":"Prozessplugins","slug":"prozessplugins","link":"#prozessplugins","children":[]},{"level":3,"title":"Weitere Anwendungen","slug":"weitere-anwendungen","link":"#weitere-anwendungen","children":[]}]},{"level":2,"title":"Data Sharing Demodaten","slug":"data-sharing-demodaten","link":"#data-sharing-demodaten","children":[]}],"git":{"createdTime":1697030297000,"updatedTime":1719907123000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":16},{"name":"Maximilian Kurscheidt","email":"maximilian.kurscheidt@hs-heilbronn.de","commits":4},{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Jan Böhringer","email":"jan.boehringer@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon@Laptop-von-Simon.local","commits":1}]},"readingTime":{"minutes":1.91,"words":573},"filePathRelative":"hackathon/index.md","localizedDate":"October 11, 2023","excerpt":"\\n
    \\n

    Gemeinsame technische Sprechstunde der DSF-Community und des FDPG+

    \\n\\n
    "}');export{Y as comp,$ as data}; diff --git a/assets/index.html-C7I1gN0A.js b/assets/index.html-C7I1gN0A.js new file mode 100644 index 000000000..7aa2c9163 --- /dev/null +++ b/assets/index.html-C7I1gN0A.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as i,c as a,a as e,b as t,d as n,e as l}from"./app-kq9lCQfY.js";const u={},c=e("p",null,"We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.",-1),d=e("h3",{id:"ways-you-can-contribute",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#ways-you-can-contribute"},[e("span",null,[e("strong",null,"Ways you can contribute:")])])],-1),g=e("strong",null,"Helping other users",-1),h=e("strong",null,"MII Zulip",-1),p={href:"https://mii.zulipchat.com/#narrow/stream/392426-Data-Sharing-Framework-.28DSF.29",target:"_blank",rel:"noopener noreferrer"},f=e("strong",null,"GitHub Discussions",-1),m={href:"https://github.com/datasharingframework/dsf/discussions",target:"_blank",rel:"noopener noreferrer"},b=l("
  • Testing releases:
    • Stay ahead: Help us testing the latest releases. Your feedback on functionality, bugs, and user experience is invaluable.
    • Report findings: Share your testing results to help us refine and enhance our releases.
  • Reviewing changes:
    • Peer review: Contribute by reviewing pull requests. Your insights can help ensure the quality and integrity of code changes.
    • Constructive feedback: Offer constructive feedback and suggestions to help improve and refine proposed changes.
  • ",2),_=e("strong",null,"Documentation changes",-1),y=e("li",null,[e("strong",null,"Improve documentation"),t(": Help us improving and updating our documentation. Clear and accurate documentation is crucial for user understanding and success. Please checkout our "),e("a",{href:"./documentation"},"Getting started guide for documentation contributions"),t(" to DSF.")],-1),v=e("strong",null,"Suggest improvements",-1),w={href:"https://github.com/datasharingframework/datasharingframework.github.io",target:"_blank",rel:"noopener noreferrer"},k=e("strong",null,"Contributing bug reports",-1),I=e("strong",null,"Report bugs",-1),x={href:"https://github.com/datasharingframework/dsf/issues",target:"_blank",rel:"noopener noreferrer"},S=e("li",null,[e("strong",null,"Reproduction steps"),t(": Include steps to reproduce the bug and any relevant logs according to our bug report issue template.")],-1),C=e("li",null,[e("strong",null,"Contributing feature requests"),t(": "),e("ul",null,[e("li",null,[e("strong",null,"Suggest features"),t(": You have an idea for a new feature? We'd love to hear it! Open an issue to describe your proposed feature and its potential benefits according to our feature request template.")]),e("li",null,[e("strong",null,"Collaborate on implementation"),t(": If you're able to, contribute to the development of your proposed feature or bug fix. Collaboration can lead to more innovative and effective solutions. Please checkout our "),e("a",{href:"./code"},"Getting started guide for code contributions"),t(" to DSF.")])])],-1),D=e("strong",null,"Contributing process plugins",-1),G=e("strong",null,"Develop process plugins for the DSF",-1),T={href:"https://dsf.dev/stable/develop/",target:"_blank",rel:"noopener noreferrer"},W=e("li",null,[e("strong",null,"Share your work"),t(": Your plugins could be a valuable addition to the ecosystem and benefit other users.")],-1),Y=e("p",null,"Before you start contributing, we recommend reading our getting started guidelines for detailed information on our processes and standards. This ensures a smooth and productive experience for everyone involved.",-1),j=e("p",null,[e("strong",null,"Your contributions in any form, are what drives the continuous growth and improvement of this project. Thank you for being a part of our community and for your willingness to contribute!")],-1);function H(q,F){const o=s("ExternalLinkIcon");return i(),a("div",null,[c,d,e("ol",null,[e("li",null,[g,t(": "),e("ul",null,[e("li",null,[h,t(": If you are part of the German Medical Informatics Initiative, "),e("a",p,[t("join the MII Zulip community"),n(o)]),t(" to assist others, share your knowledge, and learn from fellow contributors.")]),e("li",null,[f,t(": Engage with our community in "),e("a",m,[t("GitHub Discussions"),n(o)]),t(" by answering questions, providing feedback, and sharing your insights.")])])]),b,e("li",null,[_,t(": "),e("ul",null,[y,e("li",null,[v,t(": If you notice gaps or areas for enhancement in our documentation, we welcome "),e("a",w,[t("your suggestions and contributions"),n(o)]),t(".")])])]),e("li",null,[k,t(": "),e("ul",null,[e("li",null,[I,t(": If you find a bug, please report it via "),e("a",x,[t("an issue on GitHub"),n(o)]),t(". Detailed bug reports are incredibly helpful.")]),S])]),C,e("li",null,[D,t(": "),e("ul",null,[e("li",null,[G,t(": If you have ideas for a process plugin, we encourage you to develop and contribute them. Our "),e("a",T,[t("Getting started guide for process plugin development"),n(o)]),t(" will be a useful reference.")]),W])])]),Y,j])}const B=r(u,[["render",H],["__file","index.html.vue"]]),E=JSON.parse(`{"path":"/stable/contribute/","title":"Contribute","lang":"en-US","frontmatter":{"title":"Contribute","icon":"info"},"headers":[{"level":3,"title":"Ways you can contribute:","slug":"ways-you-can-contribute","link":"#ways-you-can-contribute","children":[]}],"git":{"createdTime":null,"updatedTime":null,"contributors":[]},"readingTime":{"minutes":1.64,"words":491},"filePathRelative":"stable/contribute/readme.md","excerpt":"

    We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.

    "}`);export{B as comp,E as data}; diff --git a/assets/index.html-CBRQ-c2y.js b/assets/index.html-CBRQ-c2y.js new file mode 100644 index 000000000..44e3caf77 --- /dev/null +++ b/assets/index.html-CBRQ-c2y.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as i,c as a,a as e,b as t,d as n,e as l}from"./app-kq9lCQfY.js";const u={},c=e("p",null,"We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.",-1),d=e("h3",{id:"ways-you-can-contribute",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#ways-you-can-contribute"},[e("span",null,[e("strong",null,"Ways you can contribute:")])])],-1),g=e("strong",null,"Helping other users",-1),h=e("strong",null,"MII Zulip",-1),p={href:"https://mii.zulipchat.com/#narrow/stream/392426-Data-Sharing-Framework-.28DSF.29",target:"_blank",rel:"noopener noreferrer"},f=e("strong",null,"GitHub Discussions",-1),m={href:"https://github.com/datasharingframework/dsf/discussions",target:"_blank",rel:"noopener noreferrer"},b=l("
  • Testing releases:
    • Stay ahead: Help us testing the latest releases. Your feedback on functionality, bugs, and user experience is invaluable.
    • Report findings: Share your testing results to help us refine and enhance our releases.
  • Reviewing changes:
    • Peer review: Contribute by reviewing pull requests. Your insights can help ensure the quality and integrity of code changes.
    • Constructive feedback: Offer constructive feedback and suggestions to help improve and refine proposed changes.
  • ",2),_=e("strong",null,"Documentation changes",-1),y=e("li",null,[e("strong",null,"Improve documentation"),t(": Help us improving and updating our documentation. Clear and accurate documentation is crucial for user understanding and success. Please checkout our "),e("a",{href:"./documentation"},"Getting started guide for documentation contributions"),t(" to DSF.")],-1),v=e("strong",null,"Suggest improvements",-1),k={href:"https://github.com/datasharingframework/datasharingframework.github.io",target:"_blank",rel:"noopener noreferrer"},w=e("strong",null,"Contributing bug reports",-1),I=e("strong",null,"Report bugs",-1),x={href:"https://github.com/datasharingframework/dsf/issues",target:"_blank",rel:"noopener noreferrer"},S=e("li",null,[e("strong",null,"Reproduction steps"),t(": Include steps to reproduce the bug and any relevant logs according to our bug report issue template.")],-1),C=e("li",null,[e("strong",null,"Contributing feature requests"),t(": "),e("ul",null,[e("li",null,[e("strong",null,"Suggest features"),t(": You have an idea for a new feature? We'd love to hear it! Open an issue to describe your proposed feature and its potential benefits according to our feature request template.")]),e("li",null,[e("strong",null,"Collaborate on implementation"),t(": If you're able to, contribute to the development of your proposed feature or bug fix. Collaboration can lead to more innovative and effective solutions. Please checkout our "),e("a",{href:"./code"},"Getting started guide for code contributions"),t(" to DSF.")])])],-1),D=e("strong",null,"Contributing process plugins",-1),H=e("strong",null,"Develop process plugins for the DSF",-1),G={href:"https://dsf.dev/stable/develop/",target:"_blank",rel:"noopener noreferrer"},T=e("li",null,[e("strong",null,"Share your work"),t(": Your plugins could be a valuable addition to the ecosystem and benefit other users.")],-1),W=e("p",null,"Before you start contributing, we recommend reading our getting started guidelines for detailed information on our processes and standards. This ensures a smooth and productive experience for everyone involved.",-1),Y=e("p",null,[e("strong",null,"Your contributions in any form, are what drives the continuous growth and improvement of this project. Thank you for being a part of our community and for your willingness to contribute!")],-1);function j(q,F){const o=s("ExternalLinkIcon");return i(),a("div",null,[c,d,e("ol",null,[e("li",null,[g,t(": "),e("ul",null,[e("li",null,[h,t(": If you are part of the German Medical Informatics Initiative, "),e("a",p,[t("join the MII Zulip community"),n(o)]),t(" to assist others, share your knowledge, and learn from fellow contributors.")]),e("li",null,[f,t(": Engage with our community in "),e("a",m,[t("GitHub Discussions"),n(o)]),t(" by answering questions, providing feedback, and sharing your insights.")])])]),b,e("li",null,[_,t(": "),e("ul",null,[y,e("li",null,[v,t(": If you notice gaps or areas for enhancement in our documentation, we welcome "),e("a",k,[t("your suggestions and contributions"),n(o)]),t(".")])])]),e("li",null,[w,t(": "),e("ul",null,[e("li",null,[I,t(": If you find a bug, please report it via "),e("a",x,[t("an issue on GitHub"),n(o)]),t(". Detailed bug reports are incredibly helpful.")]),S])]),C,e("li",null,[D,t(": "),e("ul",null,[e("li",null,[H,t(": If you have ideas for a process plugin, we encourage you to develop and contribute them. Our "),e("a",G,[t("Getting started guide for process plugin development"),n(o)]),t(" will be a useful reference.")]),T])])]),W,Y])}const B=r(u,[["render",j],["__file","index.html.vue"]]),E=JSON.parse(`{"path":"/v1.5.2/contribute/","title":"Contribute","lang":"en-US","frontmatter":{"title":"Contribute","icon":"info"},"headers":[{"level":3,"title":"Ways you can contribute:","slug":"ways-you-can-contribute","link":"#ways-you-can-contribute","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.64,"words":491},"filePathRelative":"v1.5.2/contribute/readme.md","localizedDate":"July 8, 2024","excerpt":"

    We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.

    "}`);export{B as comp,E as data}; diff --git a/assets/index.html-CCBpJJly.js b/assets/index.html-CCBpJJly.js new file mode 100644 index 000000000..5d852d23e --- /dev/null +++ b/assets/index.html-CCBpJJly.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as s,c as l,a as e,b as t,d as a,w as h,e as d}from"./app-kq9lCQfY.js";const c={},m={class:"hint-container tip"},p=e("p",{class:"hint-container-title"},"Important note",-1),u={href:"https://github.com/highmed/highmed-dsf",target:"_blank",rel:"noopener noreferrer"},f=d('

    System Administrators

    Developers

    New features

    ',5),_=e("li",null,"Improved versioning to support up- and downwards-compatibility",-1),g=e("li",null,"Enhanced web ui to start processes in the web browser",-1),w=e("li",null,"Allow local user authentication and authorization with OpenID Connect",-1),b=e("li",null,"New process plugin API",-1),v=e("li",null,"Removed mostly unused features to simplify instance configuration",-1),x=e("li",null,"Unified proxy setup",-1),S={href:"https://github.com/datasharingframework/dsf/releases",target:"_blank",rel:"noopener noreferrer"};function k(D,F){const i=r("RouteLink"),n=r("ExternalLinkIcon");return s(),l("div",null,[e("p",null,[t("Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click "),a(i,{to:"/intro/"},{default:h(()=>[t("here")]),_:1}),t(" to find more information about the DSF in general.")]),e("div",m,[p,e("p",null,[t("This is a major DSF release not compatible with 0.9.x and older version developed at "),e("a",u,[t("https://github.com/highmed/highmed-dsf"),a(n)]),t(".")])]),f,e("ul",null,[_,g,w,b,v,x,e("li",null,[t("Many more features, see "),e("a",S,[t("1.x release-notes"),a(n)])])])])}const N=o(c,[["render",k],["__file","index.html.vue"]]),C=JSON.parse('{"path":"/v1.5.0/","title":"DSF 1.5.0","lang":"en-US","frontmatter":{"title":"DSF 1.5.0","icon":"guide"},"headers":[{"level":2,"title":"New features","slug":"new-features","link":"#new-features","children":[]}],"git":{"createdTime":1708419681000,"updatedTime":1708419681000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.46,"words":139},"filePathRelative":"v1.5.0/index.md","localizedDate":"February 20, 2024","excerpt":"

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    \\n
    \\n

    Important note

    \\n

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.

    \\n
    "}');export{N as comp,C as data}; diff --git a/assets/index.html-CEEtxclz.js b/assets/index.html-CEEtxclz.js new file mode 100644 index 000000000..4210e47b7 --- /dev/null +++ b/assets/index.html-CEEtxclz.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as s,c as l,a as e,b as t,d as a,w as h,e as d}from"./app-kq9lCQfY.js";const c={},m={class:"hint-container tip"},p=e("p",{class:"hint-container-title"},"Important note",-1),u={href:"https://github.com/highmed/highmed-dsf",target:"_blank",rel:"noopener noreferrer"},f=d('

    System Administrators

    Developers

    New features

    ',5),_=e("li",null,"Improved versioning to support up- and downwards-compatibility",-1),g=e("li",null,"Enhanced web ui to start processes in the web browser",-1),w=e("li",null,"Allow local user authentication and authorization with OpenID Connect",-1),b=e("li",null,"New process plugin API",-1),v=e("li",null,"Removed mostly unused features to simplify instance configuration",-1),x=e("li",null,"Unified proxy setup",-1),S={href:"https://github.com/datasharingframework/dsf/releases",target:"_blank",rel:"noopener noreferrer"};function k(D,F){const i=r("RouteLink"),n=r("ExternalLinkIcon");return s(),l("div",null,[e("p",null,[t("Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click "),a(i,{to:"/intro/"},{default:h(()=>[t("here")]),_:1}),t(" to find more information about the DSF in general.")]),e("div",m,[p,e("p",null,[t("This is a major DSF release not compatible with 0.9.x and older version developed at "),e("a",u,[t("https://github.com/highmed/highmed-dsf"),a(n)]),t(".")])]),f,e("ul",null,[_,g,w,b,v,x,e("li",null,[t("Many more features, see "),e("a",S,[t("1.x release-notes"),a(n)])])])])}const N=o(c,[["render",k],["__file","index.html.vue"]]),C=JSON.parse('{"path":"/v1.3.1/","title":"DSF 1.3.1","lang":"en-US","frontmatter":{"title":"DSF 1.3.1","icon":"guide"},"headers":[{"level":2,"title":"New features","slug":"new-features","link":"#new-features","children":[]}],"git":{"createdTime":1698748420000,"updatedTime":1698748420000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.46,"words":139},"filePathRelative":"v1.3.1/index.md","localizedDate":"October 31, 2023","excerpt":"

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    \\n
    \\n

    Important note

    \\n

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.

    \\n
    "}');export{N as comp,C as data}; diff --git a/assets/index.html-CJo6ER2h.js b/assets/index.html-CJo6ER2h.js new file mode 100644 index 000000000..87f9078cc --- /dev/null +++ b/assets/index.html-CJo6ER2h.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as n,a as e}from"./app-kq9lCQfY.js";const t={},o=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),a=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),l=[o,a];function s(c,m){return r(),n("div",null,l)}const h=i(t,[["render",s],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.5.1/maintain/bpe-reverse-proxy/","title":"BPE Reverse Proxy","lang":"en-US","frontmatter":{"title":"BPE Reverse Proxy","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.03,"words":10},"filePathRelative":"v1.5.1/maintain/bpe-reverse-proxy/README.md","localizedDate":"April 17, 2024","excerpt":"

    Overview

    \\n\\n"}');export{h as comp,u as data}; diff --git a/assets/index.html-CLQDCC8z.js b/assets/index.html-CLQDCC8z.js new file mode 100644 index 000000000..eabe58f86 --- /dev/null +++ b/assets/index.html-CLQDCC8z.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as s,c as d,a as e,d as t,w as a,b as o}from"./app-kq9lCQfY.js";const r={};function u(c,m){const l=n("RouteLink");return s(),d("div",null,[e("ul",null,[e("li",null,[t(l,{to:"/oldstable/build/build.html"},{default:a(()=>[o("Build & Test Project")]),_:1})]),e("li",null,[t(l,{to:"/oldstable/build/proxyTestTool.html"},{default:a(()=>[o("Proxy Test Tool")]),_:1})]),e("li",null,[t(l,{to:"/oldstable/build/releaseANewVersion.html"},{default:a(()=>[o("Release a new version")]),_:1})])])])}const _=i(r,[["render",u],["__file","index.html.vue"]]),T=JSON.parse('{"path":"/oldstable/build/","title":"Build and Test","lang":"en-US","frontmatter":{"title":"Build and Test","icon":"back-stage"},"headers":[],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.07,"words":20},"filePathRelative":"oldstable/build/README.md","localizedDate":"August 23, 2023","excerpt":"\\n"}');export{_ as comp,T as data}; diff --git a/assets/index.html-CL_NobEX.js b/assets/index.html-CL_NobEX.js new file mode 100644 index 000000000..be04c6c99 --- /dev/null +++ b/assets/index.html-CL_NobEX.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as r,e as a}from"./app-kq9lCQfY.js";const n={},l=a('

    Overview

    ',2),o=[l];function t(s,c){return i(),r("div",null,o)}const u=e(n,[["render",t],["__file","index.html.vue"]]),m=JSON.parse('{"path":"/stable/maintain/","title":"Maintain a DSF instance","lang":"en-US","frontmatter":{"title":"Maintain a DSF instance","icon":"tool"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1690875424000,"updatedTime":1692790324000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":2},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.21,"words":64},"filePathRelative":"stable/maintain/README.md","localizedDate":"August 1, 2023","excerpt":"

    Overview

    \\n"}');export{u as comp,m as data}; diff --git a/assets/index.html-COO8K8yZ.js b/assets/index.html-COO8K8yZ.js new file mode 100644 index 000000000..56307ea3e --- /dev/null +++ b/assets/index.html-COO8K8yZ.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as n,c as t,a as e}from"./app-kq9lCQfY.js";const a={},r=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),o=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),l=[r,o];function s(c,d){return n(),t("div",null,l)}const h=i(a,[["render",s],["__file","index.html.vue"]]),v=JSON.parse('{"path":"/v1.1.0/maintain/bpe/","title":"BPE Server","lang":"en-US","frontmatter":{"title":"BPE Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1693251017000,"updatedTime":1693394432000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":0.03,"words":9},"filePathRelative":"v1.1.0/maintain/bpe/README.md","localizedDate":"August 28, 2023","excerpt":"

    Overview

    \\n\\n"}');export{h as comp,v as data}; diff --git a/assets/index.html-COrpehOa.js b/assets/index.html-COrpehOa.js new file mode 100644 index 000000000..b7dff07a7 --- /dev/null +++ b/assets/index.html-COrpehOa.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as n,a as e}from"./app-kq9lCQfY.js";const r={},a=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),o=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),l=[a,o];function s(c,m){return t(),n("div",null,l)}const v=i(r,[["render",s],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.3.0/maintain/bpe/","title":"BPE Server","lang":"en-US","frontmatter":{"title":"BPE Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1696944513000,"updatedTime":1696944513000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.03,"words":9},"filePathRelative":"v1.3.0/maintain/bpe/README.md","localizedDate":"October 10, 2023","excerpt":"

    Overview

    \\n\\n"}');export{v as comp,u as data}; diff --git a/assets/index.html-CP8c3pUz.js b/assets/index.html-CP8c3pUz.js new file mode 100644 index 000000000..416dc8d34 --- /dev/null +++ b/assets/index.html-CP8c3pUz.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as n,a as e}from"./app-kq9lCQfY.js";const t={},o=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),a=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),l=[o,a];function s(c,m){return r(),n("div",null,l)}const v=i(t,[["render",s],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.5.1/maintain/fhir-reverse-proxy/","title":"FHIR Reverse Proxy","lang":"en-US","frontmatter":{"title":"FHIR Reverse Proxy","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.03,"words":10},"filePathRelative":"v1.5.1/maintain/fhir-reverse-proxy/README.md","localizedDate":"April 17, 2024","excerpt":"

    Overview

    \\n\\n"}');export{v as comp,u as data}; diff --git a/assets/index.html-CQqVJHUS.js b/assets/index.html-CQqVJHUS.js new file mode 100644 index 000000000..b9efd431d --- /dev/null +++ b/assets/index.html-CQqVJHUS.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as r,e as n}from"./app-kq9lCQfY.js";const a={},t=n('

    Overview

    ',2),o=[t];function c(l,s){return i(),r("div",null,o)}const d=e(a,[["render",c],["__file","index.html.vue"]]),f=JSON.parse('{"path":"/v1.3.1/maintain/fhir/","title":"FHIR Server","lang":"en-US","frontmatter":{"title":"FHIR Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1698748420000,"updatedTime":1698748420000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.05,"words":16},"filePathRelative":"v1.3.1/maintain/fhir/README.md","localizedDate":"October 31, 2023","excerpt":"

    Overview

    \\n\\n"}');export{d as comp,f as data}; diff --git a/assets/index.html-Cgi8v7QL.js b/assets/index.html-Cgi8v7QL.js new file mode 100644 index 000000000..e47c81b41 --- /dev/null +++ b/assets/index.html-Cgi8v7QL.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as n,e as a}from"./app-kq9lCQfY.js";const t={},r=a('

    Overview

    ',2),o=[r];function l(c,s){return i(),n("div",null,o)}const f=e(t,[["render",l],["__file","index.html.vue"]]),m=JSON.parse('{"path":"/stable/maintain/bpe/","title":"BPE Server","lang":"en-US","frontmatter":{"title":"BPE Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":null,"updatedTime":null,"contributors":[]},"readingTime":{"minutes":0.05,"words":16},"filePathRelative":"stable/maintain/bpe/README.md","excerpt":"

    Overview

    \\n\\n"}');export{f as comp,m as data}; diff --git a/assets/index.html-CrhbZRDu.js b/assets/index.html-CrhbZRDu.js new file mode 100644 index 000000000..644f1309d --- /dev/null +++ b/assets/index.html-CrhbZRDu.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as r,e as a}from"./app-kq9lCQfY.js";const n={},l=a('

    Overview

    ',2),o=[l];function t(s,c){return i(),r("div",null,o)}const u=e(n,[["render",t],["__file","index.html.vue"]]),m=JSON.parse('{"path":"/v1.5.0/maintain/","title":"Maintain a DSF instance","lang":"en-US","frontmatter":{"title":"Maintain a DSF instance","icon":"tool"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1708419681000,"updatedTime":1708517817000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.21,"words":64},"filePathRelative":"v1.5.0/maintain/README.md","localizedDate":"February 20, 2024","excerpt":"

    Overview

    \\n"}');export{u as comp,m as data}; diff --git a/assets/index.html-CsDDghLt.js b/assets/index.html-CsDDghLt.js new file mode 100644 index 000000000..28c6542ba --- /dev/null +++ b/assets/index.html-CsDDghLt.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as o,a as e}from"./app-kq9lCQfY.js";const l={},a=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),n=e("ul",null,[e("li",null,[e("a",{href:"create"},"Create a new process plugin")]),e("li",null,[e("a",{href:"upgrade-from-0"},"Upgrade processes from 0.9.x")])],-1),t=[a,n];function s(c,d){return i(),o("div",null,t)}const h=r(l,[["render",s],["__file","index.html.vue"]]),v=JSON.parse('{"path":"/v1.5.1/develop/","title":"Develop Process Plugins","lang":"en-US","frontmatter":{"title":"Develop Process Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.07,"words":20},"filePathRelative":"v1.5.1/develop/README.md","localizedDate":"April 17, 2024","excerpt":"

    Overview

    \\n\\n"}');export{h as comp,v as data}; diff --git a/assets/index.html-CsrqLo4K.js b/assets/index.html-CsrqLo4K.js new file mode 100644 index 000000000..826bee503 --- /dev/null +++ b/assets/index.html-CsrqLo4K.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as i,c as a,a as e,b as t,d as n,e as l}from"./app-kq9lCQfY.js";const u={},c=e("p",null,"We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.",-1),d=e("h3",{id:"ways-you-can-contribute",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#ways-you-can-contribute"},[e("span",null,[e("strong",null,"Ways you can contribute:")])])],-1),g=e("strong",null,"Helping other users",-1),h=e("strong",null,"MII Zulip",-1),p={href:"https://mii.zulipchat.com/#narrow/stream/392426-Data-Sharing-Framework-.28DSF.29",target:"_blank",rel:"noopener noreferrer"},f=e("strong",null,"GitHub Discussions",-1),m={href:"https://github.com/datasharingframework/dsf/discussions",target:"_blank",rel:"noopener noreferrer"},b=l("
  • Testing releases:
    • Stay ahead: Help us testing the latest releases. Your feedback on functionality, bugs, and user experience is invaluable.
    • Report findings: Share your testing results to help us refine and enhance our releases.
  • Reviewing changes:
    • Peer review: Contribute by reviewing pull requests. Your insights can help ensure the quality and integrity of code changes.
    • Constructive feedback: Offer constructive feedback and suggestions to help improve and refine proposed changes.
  • ",2),_=e("strong",null,"Documentation changes",-1),y=e("li",null,[e("strong",null,"Improve documentation"),t(": Help us improving and updating our documentation. Clear and accurate documentation is crucial for user understanding and success. Please checkout our "),e("a",{href:"./documentation"},"Getting started guide for documentation contributions"),t(" to DSF.")],-1),v=e("strong",null,"Suggest improvements",-1),w={href:"https://github.com/datasharingframework/datasharingframework.github.io",target:"_blank",rel:"noopener noreferrer"},k=e("strong",null,"Contributing bug reports",-1),I=e("strong",null,"Report bugs",-1),S={href:"https://github.com/datasharingframework/dsf/issues",target:"_blank",rel:"noopener noreferrer"},x=e("li",null,[e("strong",null,"Reproduction steps"),t(": Include steps to reproduce the bug and any relevant logs according to our bug report issue template.")],-1),C=e("li",null,[e("strong",null,"Contributing feature requests"),t(": "),e("ul",null,[e("li",null,[e("strong",null,"Suggest features"),t(": You have an idea for a new feature? We'd love to hear it! Open an issue to describe your proposed feature and its potential benefits according to our feature request template.")]),e("li",null,[e("strong",null,"Collaborate on implementation"),t(": If you're able to, contribute to the development of your proposed feature or bug fix. Collaboration can lead to more innovative and effective solutions. Please checkout our "),e("a",{href:"./code"},"Getting started guide for code contributions"),t(" to DSF.")])])],-1),D=e("strong",null,"Contributing process plugins",-1),G=e("strong",null,"Develop process plugins for the DSF",-1),T={href:"https://dsf.dev/stable/develop/",target:"_blank",rel:"noopener noreferrer"},W=e("li",null,[e("strong",null,"Share your work"),t(": Your plugins could be a valuable addition to the ecosystem and benefit other users.")],-1),Y=e("p",null,"Before you start contributing, we recommend reading our getting started guidelines for detailed information on our processes and standards. This ensures a smooth and productive experience for everyone involved.",-1),j=e("p",null,[e("strong",null,"Your contributions in any form, are what drives the continuous growth and improvement of this project. Thank you for being a part of our community and for your willingness to contribute!")],-1);function F(H,q){const o=s("ExternalLinkIcon");return i(),a("div",null,[c,d,e("ol",null,[e("li",null,[g,t(": "),e("ul",null,[e("li",null,[h,t(": If you are part of the German Medical Informatics Initiative, "),e("a",p,[t("join the MII Zulip community"),n(o)]),t(" to assist others, share your knowledge, and learn from fellow contributors.")]),e("li",null,[f,t(": Engage with our community in "),e("a",m,[t("GitHub Discussions"),n(o)]),t(" by answering questions, providing feedback, and sharing your insights.")])])]),b,e("li",null,[_,t(": "),e("ul",null,[y,e("li",null,[v,t(": If you notice gaps or areas for enhancement in our documentation, we welcome "),e("a",w,[t("your suggestions and contributions"),n(o)]),t(".")])])]),e("li",null,[k,t(": "),e("ul",null,[e("li",null,[I,t(": If you find a bug, please report it via "),e("a",S,[t("an issue on GitHub"),n(o)]),t(". Detailed bug reports are incredibly helpful.")]),x])]),C,e("li",null,[D,t(": "),e("ul",null,[e("li",null,[G,t(": If you have ideas for a process plugin, we encourage you to develop and contribute them. Our "),e("a",T,[t("Getting started guide for process plugin development"),n(o)]),t(" will be a useful reference.")]),W])])]),Y,j])}const z=r(u,[["render",F],["__file","index.html.vue"]]),B=JSON.parse(`{"path":"/v1.5.0/contribute/","title":"Contribute","lang":"en-US","frontmatter":{"title":"Contribute","icon":"info"},"headers":[{"level":3,"title":"Ways you can contribute:","slug":"ways-you-can-contribute","link":"#ways-you-can-contribute","children":[]}],"git":{"createdTime":1708419681000,"updatedTime":1708419681000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.64,"words":491},"filePathRelative":"v1.5.0/contribute/readme.md","localizedDate":"February 20, 2024","excerpt":"

    We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.

    "}`);export{z as comp,B as data}; diff --git a/assets/index.html-CuwFjDT4.js b/assets/index.html-CuwFjDT4.js new file mode 100644 index 000000000..0957331dc --- /dev/null +++ b/assets/index.html-CuwFjDT4.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as s,c as l,a as e,b as t,d as a,w as h,e as d}from"./app-kq9lCQfY.js";const c={},m={class:"hint-container tip"},p=e("p",{class:"hint-container-title"},"Important note",-1),u={href:"https://github.com/highmed/highmed-dsf",target:"_blank",rel:"noopener noreferrer"},f=d('

    System Administrators

    Developers

    New features

    ',5),_=e("li",null,"Improved versioning to support up- and downwards-compatibility",-1),g=e("li",null,"Enhanced web ui to start processes in the web browser",-1),w=e("li",null,"Allow local user authentication and authorization with OpenID Connect",-1),b=e("li",null,"New process plugin API",-1),v=e("li",null,"Removed mostly unused features to simplify instance configuration",-1),x=e("li",null,"Unified proxy setup",-1),k={href:"https://github.com/datasharingframework/dsf/releases",target:"_blank",rel:"noopener noreferrer"};function S(D,F){const i=r("RouteLink"),n=r("ExternalLinkIcon");return s(),l("div",null,[e("p",null,[t("Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click "),a(i,{to:"/intro/"},{default:h(()=>[t("here")]),_:1}),t(" to find more information about the DSF in general.")]),e("div",m,[p,e("p",null,[t("This is a major DSF release not compatible with 0.9.x and older version developed at "),e("a",u,[t("https://github.com/highmed/highmed-dsf"),a(n)]),t(".")])]),f,e("ul",null,[_,g,w,b,v,x,e("li",null,[t("Many more features, see "),e("a",k,[t("1.x release-notes"),a(n)])])])])}const N=o(c,[["render",S],["__file","index.html.vue"]]),C=JSON.parse('{"path":"/v1.5.2/","title":"DSF 1.5.2","lang":"en-US","frontmatter":{"title":"DSF 1.5.2","icon":"guide"},"headers":[{"level":2,"title":"New features","slug":"new-features","link":"#new-features","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.46,"words":139},"filePathRelative":"v1.5.2/index.md","localizedDate":"July 8, 2024","excerpt":"

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    \\n
    \\n

    Important note

    \\n

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.

    \\n
    "}');export{N as comp,C as data}; diff --git a/assets/index.html-CwMc33-B.js b/assets/index.html-CwMc33-B.js new file mode 100644 index 000000000..529f9f9c4 --- /dev/null +++ b/assets/index.html-CwMc33-B.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as a,e as n}from"./app-kq9lCQfY.js";const r={},t=n('

    Overview

    ',2),o=[t];function l(c,s){return i(),a("div",null,o)}const m=e(r,[["render",l],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.1.0/maintain/fhir/","title":"FHIR Server","lang":"en-US","frontmatter":{"title":"FHIR Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1693251017000,"updatedTime":1693394432000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":0.05,"words":16},"filePathRelative":"v1.1.0/maintain/fhir/README.md","localizedDate":"August 28, 2023","excerpt":"

    Overview

    \\n\\n"}');export{m as comp,u as data}; diff --git a/assets/index.html-Czmcnse8.js b/assets/index.html-Czmcnse8.js new file mode 100644 index 000000000..354b63456 --- /dev/null +++ b/assets/index.html-Czmcnse8.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o,c,a as e,b as t,d as r}from"./app-kq9lCQfY.js";const a={},l={class:"hint-container tip"},d=e("p",{class:"hint-container-title"},"Gemeinsame technische Sprechstunde der DSF-Community und des FDPG+",-1),h=e("li",null,"Montags, 13:00-14:00 Uhr",-1),m={href:"https://dsf.dev/sprechstunde",target:"_blank",rel:"noopener noreferrer"},p={href:"https://lecture.senfcall.de/sim-ock-1vk-l8o",target:"_blank",rel:"noopener noreferrer"};function u(_,f){const n=i("ExternalLinkIcon");return o(),c("div",null,[e("div",l,[d,e("ul",null,[h,e("li",null,[t("Ort: "),e("a",m,[t("https://dsf.dev/sprechstunde"),r(n)])])])]),e("p",null,[t("Klicken Sie "),e("a",p,[t("hier"),r(n)]),t(", um der Sprechstunde beizutreten.")])])}const k=s(a,[["render",u],["__file","index.html.vue"]]),x=JSON.parse('{"path":"/sprechstunde/","title":"Sprechstunde","lang":"en-US","frontmatter":{"title":"Sprechstunde","icon":"guide"},"headers":[],"git":{"createdTime":1706533809000,"updatedTime":1722590602000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":4},{"name":"Simon Schweizer","email":"simon@Laptop-von-Simon.local","commits":1}]},"readingTime":{"minutes":0.12,"words":35},"filePathRelative":"sprechstunde/index.md","localizedDate":"January 29, 2024","excerpt":"
    \\n

    Gemeinsame technische Sprechstunde der DSF-Community und des FDPG+

    \\n\\n
    "}');export{k as comp,x as data}; diff --git a/assets/index.html-D0FWjIyg.js b/assets/index.html-D0FWjIyg.js new file mode 100644 index 000000000..cc6401df8 --- /dev/null +++ b/assets/index.html-D0FWjIyg.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as s,c as l,a as e,b as t,d as a,w as h,e as d}from"./app-kq9lCQfY.js";const c={},m={class:"hint-container tip"},p=e("p",{class:"hint-container-title"},"Important note",-1),u={href:"https://github.com/highmed/highmed-dsf",target:"_blank",rel:"noopener noreferrer"},f=d('

    System Administrators

    Developers

    New features

    ',5),_=e("li",null,"Improved versioning to support up- and downwards-compatibility",-1),g=e("li",null,"Enhanced web ui to start processes in the web browser",-1),w=e("li",null,"Allow local user authentication and authorization with OpenID Connect",-1),b=e("li",null,"New process plugin API",-1),x=e("li",null,"Removed mostly unused features to simplify instance configuration",-1),v=e("li",null,"Unified proxy setup",-1),k={href:"https://github.com/datasharingframework/dsf/releases",target:"_blank",rel:"noopener noreferrer"};function S(D,F){const r=i("RouteLink"),n=i("ExternalLinkIcon");return s(),l("div",null,[e("p",null,[t("Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click "),a(r,{to:"/intro/"},{default:h(()=>[t("here")]),_:1}),t(" to find more information about the DSF in general.")]),e("div",m,[p,e("p",null,[t("This is a major DSF release not compatible with 0.9.x and older version developed at "),e("a",u,[t("https://github.com/highmed/highmed-dsf"),a(n)]),t(".")])]),f,e("ul",null,[_,g,w,b,x,v,e("li",null,[t("Many more features, see "),e("a",k,[t("1.x release-notes"),a(n)])])])])}const N=o(c,[["render",S],["__file","index.html.vue"]]),C=JSON.parse('{"path":"/v1.1.0/","title":"DSF 1.1.0","lang":"en-US","frontmatter":{"title":"DSF 1.1.0","icon":"guide"},"headers":[{"level":2,"title":"New features","slug":"new-features","link":"#new-features","children":[]}],"git":{"createdTime":1692790324000,"updatedTime":1693250965000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2},{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.46,"words":139},"filePathRelative":"v1.1.0/index.md","localizedDate":"August 23, 2023","excerpt":"

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    \\n
    \\n

    Important note

    \\n

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.

    \\n
    "}');export{N as comp,C as data}; diff --git a/assets/index.html-D0XaREn8.js b/assets/index.html-D0XaREn8.js new file mode 100644 index 000000000..debc6f0b1 --- /dev/null +++ b/assets/index.html-D0XaREn8.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as n,a as e}from"./app-kq9lCQfY.js";const t={},o=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),a=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),s=[o,a];function l(c,m){return r(),n("div",null,s)}const v=i(t,[["render",l],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.3.2/maintain/fhir-reverse-proxy/","title":"FHIR Reverse Proxy","lang":"en-US","frontmatter":{"title":"FHIR Reverse Proxy","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1701710218000,"updatedTime":1701710218000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.03,"words":10},"filePathRelative":"v1.3.2/maintain/fhir-reverse-proxy/README.md","localizedDate":"December 4, 2023","excerpt":"

    Overview

    \\n\\n"}');export{v as comp,u as data}; diff --git a/assets/index.html-D1odJbGw.js b/assets/index.html-D1odJbGw.js new file mode 100644 index 000000000..86853c0db --- /dev/null +++ b/assets/index.html-D1odJbGw.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as s,c as l,a as e,b as t,d as a,w as h,e as d}from"./app-kq9lCQfY.js";const c={},m={class:"hint-container tip"},p=e("p",{class:"hint-container-title"},"Important note",-1),u={href:"https://github.com/highmed/highmed-dsf",target:"_blank",rel:"noopener noreferrer"},f=d('

    System Administrators

    Developers

    New features

    ',5),_=e("li",null,"Improved versioning to support up- and downwards-compatibility",-1),g=e("li",null,"Enhanced web ui to start processes in the web browser",-1),w=e("li",null,"Allow local user authentication and authorization with OpenID Connect",-1),b=e("li",null,"New process plugin API",-1),x=e("li",null,"Removed mostly unused features to simplify instance configuration",-1),v=e("li",null,"Unified proxy setup",-1),S={href:"https://github.com/datasharingframework/dsf/releases",target:"_blank",rel:"noopener noreferrer"};function k(D,F){const i=r("RouteLink"),n=r("ExternalLinkIcon");return s(),l("div",null,[e("p",null,[t("Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click "),a(i,{to:"/intro/"},{default:h(()=>[t("here")]),_:1}),t(" to find more information about the DSF in general.")]),e("div",m,[p,e("p",null,[t("This is a major DSF release not compatible with 0.9.x and older version developed at "),e("a",u,[t("https://github.com/highmed/highmed-dsf"),a(n)]),t(".")])]),f,e("ul",null,[_,g,w,b,x,v,e("li",null,[t("Many more features, see "),e("a",S,[t("1.x release-notes"),a(n)])])])])}const N=o(c,[["render",k],["__file","index.html.vue"]]),C=JSON.parse('{"path":"/v1.3.0/","title":"DSF 1.3.0","lang":"en-US","frontmatter":{"title":"DSF 1.3.0","icon":"guide"},"headers":[{"level":2,"title":"New features","slug":"new-features","link":"#new-features","children":[]}],"git":{"createdTime":1696944513000,"updatedTime":1696944513000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.46,"words":139},"filePathRelative":"v1.3.0/index.md","localizedDate":"October 10, 2023","excerpt":"

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    \\n
    \\n

    Important note

    \\n

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.

    \\n
    "}');export{N as comp,C as data}; diff --git a/assets/index.html-D4_ALXNF.js b/assets/index.html-D4_ALXNF.js new file mode 100644 index 000000000..6fed2b1e1 --- /dev/null +++ b/assets/index.html-D4_ALXNF.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as a,c as s,a as t,b as e,d as n,w as l}from"./app-kq9lCQfY.js";const c={},u=t("h2",{id:"overview",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#overview"},[t("span",null,"Overview")])],-1);function d(m,h){const i=r("RouteLink");return a(),s("div",null,[u,t("ul",null,[t("li",null,[e("Documentation "),t("ul",null,[t("li",null,[n(i,{to:"/intro/info/introduction.html"},{default:l(()=>[e("Introduction")]),_:1})]),t("li",null,[n(i,{to:"/intro/info/basics.html"},{default:l(()=>[e("Basics & Standards")]),_:1})]),t("li",null,[n(i,{to:"/intro/info/architecture.html"},{default:l(()=>[e("Architecture")]),_:1})]),t("li",null,[n(i,{to:"/intro/info/security.html"},{default:l(()=>[e("Security")]),_:1})]),t("li",null,[n(i,{to:"/intro/info/allowList.html"},{default:l(()=>[e("Allow Lists")]),_:1})]),t("li",null,[n(i,{to:"/intro/info/process-plugins.html"},{default:l(()=>[e("Process Plugins")]),_:1})])])])])])}const v=o(c,[["render",d],["__file","index.html.vue"]]),p=JSON.parse('{"path":"/intro/","title":"Documentation","lang":"en-US","frontmatter":{"title":"Documentation","icon":"info"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1690461865000,"updatedTime":1690903993000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":4}]},"readingTime":{"minutes":0.07,"words":22},"filePathRelative":"intro/README.md","localizedDate":"July 27, 2023","excerpt":"

    Overview

    \\n"}');export{v as comp,p as data}; diff --git a/assets/index.html-D6_187T3.js b/assets/index.html-D6_187T3.js new file mode 100644 index 000000000..b49a20b6c --- /dev/null +++ b/assets/index.html-D6_187T3.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as o,a as e}from"./app-kq9lCQfY.js";const a={},l=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),n=e("ul",null,[e("li",null,[e("a",{href:"create"},"Create a new process plugin")]),e("li",null,[e("a",{href:"upgrade-from-0"},"Upgrade processes from 0.9.x")])],-1),t=[l,n];function s(c,d){return i(),o("div",null,t)}const h=r(a,[["render",s],["__file","index.html.vue"]]),v=JSON.parse('{"path":"/v1.5.0/develop/","title":"Develop Process Plugins","lang":"en-US","frontmatter":{"title":"Develop Process Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1708419681000,"updatedTime":1708419681000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.07,"words":20},"filePathRelative":"v1.5.0/develop/README.md","localizedDate":"February 20, 2024","excerpt":"

    Overview

    \\n\\n"}');export{h as comp,v as data}; diff --git a/assets/index.html-DAA5Q191.js b/assets/index.html-DAA5Q191.js new file mode 100644 index 000000000..36191c461 --- /dev/null +++ b/assets/index.html-DAA5Q191.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as n,a as e}from"./app-kq9lCQfY.js";const r={},a=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),o=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),l=[a,o];function s(c,m){return t(),n("div",null,l)}const v=i(r,[["render",s],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.3.1/maintain/bpe/","title":"BPE Server","lang":"en-US","frontmatter":{"title":"BPE Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1698748420000,"updatedTime":1698748420000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.03,"words":9},"filePathRelative":"v1.3.1/maintain/bpe/README.md","localizedDate":"October 31, 2023","excerpt":"

    Overview

    \\n\\n"}');export{v as comp,u as data}; diff --git a/assets/index.html-DEarre1O.js b/assets/index.html-DEarre1O.js new file mode 100644 index 000000000..d6a4d7753 --- /dev/null +++ b/assets/index.html-DEarre1O.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as o,a as e}from"./app-kq9lCQfY.js";const a={},l=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),n=e("ul",null,[e("li",null,[e("a",{href:"create"},"Create a new process plugin")]),e("li",null,[e("a",{href:"upgrade-from-0"},"Upgrade processes from 0.9.x")])],-1),t=[l,n];function s(c,d){return i(),o("div",null,t)}const h=r(a,[["render",s],["__file","index.html.vue"]]),v=JSON.parse('{"path":"/v1.2.0/develop/","title":"Develop Process Plugins","lang":"en-US","frontmatter":{"title":"Develop Process Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1694544770000,"updatedTime":1694544770000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.07,"words":20},"filePathRelative":"v1.2.0/develop/README.md","localizedDate":"September 12, 2023","excerpt":"

    Overview

    \\n\\n"}');export{h as comp,v as data}; diff --git a/assets/index.html-DH7l0GC4.js b/assets/index.html-DH7l0GC4.js new file mode 100644 index 000000000..e78602c5e --- /dev/null +++ b/assets/index.html-DH7l0GC4.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as t,c as l,a as e,d as o,w as r,b as s}from"./app-kq9lCQfY.js";const c={},m=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),d=e("li",null,[e("a",{href:"install"},"Install DSF 1.0.0")],-1),h=e("li",null,[e("a",{href:"upgrade-from-0"},"Upgrade from DSF 0.9.x")],-1),u=e("li",null,[e("a",{href:"allowList-mgm"},"Allow List Management")],-1);function f(_,v){const a=n("RouteLink");return t(),l("div",null,[m,e("ul",null,[d,h,u,e("li",null,[o(a,{to:"/v1.0.0/maintain/configuration/"},{default:r(()=>[s("Configuration Paramters")]),_:1})])])])}const w=i(c,[["render",f],["__file","index.html.vue"]]),x=JSON.parse('{"path":"/v1.0.0/maintain/","title":"Maintain a DSF instance","lang":"en-US","frontmatter":{"title":"Maintain a DSF instance","icon":"tool"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1692708510000,"updatedTime":1692708510000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.09,"words":27},"filePathRelative":"v1.0.0/maintain/README.md","localizedDate":"August 22, 2023","excerpt":"

    Overview

    \\n\\n"}');export{w as comp,x as data}; diff --git a/assets/index.html-DLtnb5Tv.js b/assets/index.html-DLtnb5Tv.js new file mode 100644 index 000000000..42dd87241 --- /dev/null +++ b/assets/index.html-DLtnb5Tv.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as l,o as i,c as m,a as e,d as a,w as n,b as r}from"./app-kq9lCQfY.js";const u={},s=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1);function c(d,h){const t=l("RouteLink");return i(),m("div",null,[s,e("ul",null,[e("li",null,[a(t,{to:"/about/learnmore/contact.html"},{default:n(()=>[r("Contact & Community Guide")]),_:1})]),e("li",null,[a(t,{to:"/about/learnmore/team.html"},{default:n(()=>[r("Contributors")]),_:1})]),e("li",null,[a(t,{to:"/about/learnmore/partners.html"},{default:n(()=>[r("Partners")]),_:1})]),e("li",null,[a(t,{to:"/about/learnmore/public.html"},{default:n(()=>[r("Public Funding")]),_:1})])])])}const v=o(u,[["render",c],["__file","index.html.vue"]]),f=JSON.parse('{"path":"/about/learnmore/","title":"Learn more","lang":"en-US","frontmatter":{"title":"Learn more","icon":"creative"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1677250569000,"updatedTime":1715791698000,"contributors":[{"name":"simon","email":"smoeding@stu.hs-heilbronn.de","commits":4},{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":3},{"name":"Mohammad Amir Kannout","email":"mkannout@stud.hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.06,"words":17},"filePathRelative":"about/learnmore/README.md","localizedDate":"February 24, 2023","excerpt":"

    Overview

    \\n"}');export{v as comp,f as data}; diff --git a/assets/index.html-DNh52AH1.js b/assets/index.html-DNh52AH1.js new file mode 100644 index 000000000..e4b473066 --- /dev/null +++ b/assets/index.html-DNh52AH1.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as n,e as a}from"./app-kq9lCQfY.js";const r={},t=a('

    Overview

    ',2),o=[t];function c(l,s){return i(),n("div",null,o)}const d=e(r,[["render",c],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.5.0/maintain/bpe/","title":"BPE Server","lang":"en-US","frontmatter":{"title":"BPE Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1708419681000,"updatedTime":1708517817000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.05,"words":16},"filePathRelative":"v1.5.0/maintain/bpe/README.md","localizedDate":"February 20, 2024","excerpt":"

    Overview

    \\n\\n"}');export{d as comp,u as data}; diff --git a/assets/index.html-DPXv6obM.js b/assets/index.html-DPXv6obM.js new file mode 100644 index 000000000..952753a0f --- /dev/null +++ b/assets/index.html-DPXv6obM.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as a,e as n}from"./app-kq9lCQfY.js";const r={},t=n('

    Overview

    ',2),o=[t];function l(c,s){return i(),a("div",null,o)}const m=e(r,[["render",l],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.5.2/maintain/bpe/","title":"BPE Server","lang":"en-US","frontmatter":{"title":"BPE Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.05,"words":16},"filePathRelative":"v1.5.2/maintain/bpe/README.md","localizedDate":"July 8, 2024","excerpt":"

    Overview

    \\n\\n"}');export{m as comp,u as data}; diff --git a/assets/index.html-DTXLO3BP.js b/assets/index.html-DTXLO3BP.js new file mode 100644 index 000000000..92c0488c1 --- /dev/null +++ b/assets/index.html-DTXLO3BP.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as o,a as e}from"./app-kq9lCQfY.js";const a={},l=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),n=e("ul",null,[e("li",null,[e("a",{href:"create"},"Create a new process plugin")]),e("li",null,[e("a",{href:"upgrade-from-0"},"Upgrade processes from 0.9.x")])],-1),t=[l,n];function s(c,d){return i(),o("div",null,t)}const h=r(a,[["render",s],["__file","index.html.vue"]]),v=JSON.parse('{"path":"/v1.4.0/develop/","title":"Develop Process Plugins","lang":"en-US","frontmatter":{"title":"Develop Process Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1702917645000,"updatedTime":1702917645000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.07,"words":20},"filePathRelative":"v1.4.0/develop/README.md","localizedDate":"December 18, 2023","excerpt":"

    Overview

    \\n\\n"}');export{h as comp,v as data}; diff --git a/assets/index.html-DgILuDyN.js b/assets/index.html-DgILuDyN.js new file mode 100644 index 000000000..51a039006 --- /dev/null +++ b/assets/index.html-DgILuDyN.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as n,a as e}from"./app-kq9lCQfY.js";const t={},o=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),a=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),s=[o,a];function l(c,m){return r(),n("div",null,s)}const v=i(t,[["render",l],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.4.0/maintain/fhir-reverse-proxy/","title":"FHIR Reverse Proxy","lang":"en-US","frontmatter":{"title":"FHIR Reverse Proxy","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1702917645000,"updatedTime":1702917645000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.03,"words":10},"filePathRelative":"v1.4.0/maintain/fhir-reverse-proxy/README.md","localizedDate":"December 18, 2023","excerpt":"

    Overview

    \\n\\n"}');export{v as comp,u as data}; diff --git a/assets/index.html-DiajQsgt.js b/assets/index.html-DiajQsgt.js new file mode 100644 index 000000000..b305bc5e6 --- /dev/null +++ b/assets/index.html-DiajQsgt.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as r,e as n}from"./app-kq9lCQfY.js";const a={},t=n('

    Overview

    ',2),o=[t];function c(l,s){return i(),r("div",null,o)}const d=e(a,[["render",c],["__file","index.html.vue"]]),f=JSON.parse('{"path":"/v1.3.2/maintain/fhir/","title":"FHIR Server","lang":"en-US","frontmatter":{"title":"FHIR Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1701710218000,"updatedTime":1701710218000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.05,"words":16},"filePathRelative":"v1.3.2/maintain/fhir/README.md","localizedDate":"December 4, 2023","excerpt":"

    Overview

    \\n\\n"}');export{d as comp,f as data}; diff --git a/assets/index.html-DjKgBgX-.js b/assets/index.html-DjKgBgX-.js new file mode 100644 index 000000000..58b6eca6d --- /dev/null +++ b/assets/index.html-DjKgBgX-.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as d,o,c as r,a as e,d as t,w as a,b as n}from"./app-kq9lCQfY.js";const s={};function c(h,g){const l=d("RouteLink");return o(),r("div",null,[e("ul",null,[e("li",null,[t(l,{to:"/oldstable/code/code.html"},{default:a(()=>[n("Writing Code")]),_:1})]),e("li",null,[t(l,{to:"/oldstable/code/usingTheGitHubMaven.html"},{default:a(()=>[n("Using the GitHub Maven Package Registry")]),_:1})]),e("li",null,[t(l,{to:"/oldstable/code/addingANewFhirR.html"},{default:a(()=>[n("Adding a new FHIR Resource")]),_:1})]),e("li",null,[t(l,{to:"/oldstable/code/changingBpmnProcesses.html"},{default:a(()=>[n("Changing BPMN Processes by Service Task Overwrites")]),_:1})]),e("li",null,[t(l,{to:"/oldstable/code/addingANewMpiClient.html"},{default:a(()=>[n("Adding a new MPI Client")]),_:1})]),e("li",null,[t(l,{to:"/oldstable/code/addingANewOpenEhrClient.html"},{default:a(()=>[n("Adding a new openEHR Client")]),_:1})]),e("li",null,[t(l,{to:"/oldstable/code/libraries.html"},{default:a(()=>[n("Libraries")]),_:1})])])])}const b=i(s,[["render",c],["__file","index.html.vue"]]),_=JSON.parse('{"path":"/oldstable/code/","title":"Code","lang":"en-US","frontmatter":{"title":"Code","icon":"code"},"headers":[],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.14,"words":42},"filePathRelative":"oldstable/code/README.md","localizedDate":"August 23, 2023","excerpt":""}');export{b as comp,_ as data}; diff --git a/assets/index.html-DjU5vY4A.js b/assets/index.html-DjU5vY4A.js new file mode 100644 index 000000000..6eaca907e --- /dev/null +++ b/assets/index.html-DjU5vY4A.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as a,e as r}from"./app-kq9lCQfY.js";const n={},l=r('

    Overview

    ',2),o=[l];function t(s,c){return i(),a("div",null,o)}const h=e(n,[["render",t],["__file","index.html.vue"]]),m=JSON.parse('{"path":"/v1.5.2/maintain/","title":"Maintain a DSF instance","lang":"en-US","frontmatter":{"title":"Maintain a DSF instance","icon":"tool"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.21,"words":64},"filePathRelative":"v1.5.2/maintain/README.md","localizedDate":"July 8, 2024","excerpt":"

    Overview

    \\n"}');export{h as comp,m as data}; diff --git a/assets/index.html-Djr1tYSO.js b/assets/index.html-Djr1tYSO.js new file mode 100644 index 000000000..ae29f5444 --- /dev/null +++ b/assets/index.html-Djr1tYSO.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as a,e as n}from"./app-kq9lCQfY.js";const r={},t=n('

    Overview

    ',2),o=[t];function l(c,s){return i(),a("div",null,o)}const m=e(r,[["render",l],["__file","index.html.vue"]]),f=JSON.parse('{"path":"/v1.5.2/maintain/fhir/","title":"FHIR Server","lang":"en-US","frontmatter":{"title":"FHIR Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.05,"words":16},"filePathRelative":"v1.5.2/maintain/fhir/README.md","localizedDate":"July 8, 2024","excerpt":"

    Overview

    \\n\\n"}');export{m as comp,f as data}; diff --git a/assets/index.html-Dm-P1F5T.js b/assets/index.html-Dm-P1F5T.js new file mode 100644 index 000000000..d5c3c9e2a --- /dev/null +++ b/assets/index.html-Dm-P1F5T.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as o,a as e}from"./app-kq9lCQfY.js";const a={},l=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),n=e("ul",null,[e("li",null,[e("a",{href:"create"},"Create a new process plugin")]),e("li",null,[e("a",{href:"upgrade-from-0"},"Upgrade processes from 0.9.x")])],-1),t=[l,n];function s(c,d){return i(),o("div",null,t)}const h=r(a,[["render",s],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.1.0/develop/","title":"Develop Process Plugins","lang":"en-US","frontmatter":{"title":"Develop Process Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1692790324000,"updatedTime":1692790324000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.07,"words":20},"filePathRelative":"v1.1.0/develop/README.md","localizedDate":"August 23, 2023","excerpt":"

    Overview

    \\n\\n"}');export{h as comp,u as data}; diff --git a/assets/index.html-DnEeG4Ei.js b/assets/index.html-DnEeG4Ei.js new file mode 100644 index 000000000..c204387c4 --- /dev/null +++ b/assets/index.html-DnEeG4Ei.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as l,c,a as e,b as s,d as t,w as i}from"./app-kq9lCQfY.js";const d={},h=e("h2",{id:"implementing-bpmn-processes-as-dsf-process-plugins",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#implementing-bpmn-processes-as-dsf-process-plugins"},[e("span",null,"Implementing BPMN Processes as DSF Process-Plugins")])],-1),u={href:"https://github.com/highmed/dsf-process-tutorial",target:"_blank",rel:"noopener noreferrer"},p={href:"https://github.com/highmed/highmed-dsf",target:"_blank",rel:"noopener noreferrer"},m=e("br",null,null,-1),g={href:"https://gmds-tmf-2022.de/",target:"_blank",rel:"noopener noreferrer"},x={href:"https://gmds-tmf-2022.de/",target:"_blank",rel:"noopener noreferrer"},f={href:"https://raw.githubusercontent.com/highmed/dsf-process-tutorial/main/exercises/figures/2022-08-21_GMDS_2022_DSF_Process_Tutorial.pdf",target:"_blank",rel:"noopener noreferrer"},_=e("h3",{id:"prerequisites",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#prerequisites"},[e("span",null,"Prerequisites")])],-1),b=e("hr",null,null,-1),v=e("h3",{id:"exercise-1-simple-process",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#exercise-1-simple-process"},[e("span",null,"Exercise 1 - Simple Process")])],-1),w=e("hr",null,null,-1),k=e("h4",{id:"exercise-1-1-process-debugging",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#exercise-1-1-process-debugging"},[e("span",null,"Exercise 1.1 - Process Debugging")])],-1),E=e("hr",null,null,-1),P=e("h3",{id:"exercise-2-input-parameters",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#exercise-2-input-parameters"},[e("span",null,"Exercise 2 - Input Parameters")])],-1),D=e("hr",null,null,-1),F=e("h3",{id:"exercise-3-message-events",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#exercise-3-message-events"},[e("span",null,"Exercise 3 - Message Events")])],-1),y=e("hr",null,null,-1),T=e("h3",{id:"exercise-4-exclusive-gateways",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#exercise-4-exclusive-gateways"},[e("span",null,"Exercise 4 - Exclusive Gateways")])],-1),S=e("hr",null,null,-1),M=e("h3",{id:"exercise-5-event-based-gateways-and-intermediate-events",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#exercise-5-event-based-gateways-and-intermediate-events"},[e("span",null,"Exercise 5 - Event Based Gateways and Intermediate Events")])],-1),I=e("hr",null,null,-1),B=e("hr",null,null,-1);function G(q,N){const a=o("ExternalLinkIcon"),r=o("RouteLink");return l(),c("div",null,[h,e("p",null,[s("This "),e("a",u,[s("repository"),t(a)]),s(" contains exercises to learn how to implement process plugins for the "),e("a",p,[s("Data Sharing Framework (DSF)"),t(a)]),s(". The tutorial is divided into several exercises that build on each other. For each exercise, a sample solution is provided in a separate branch."),m,s(" This tutorial was first executed at the "),e("a",g,[s("GMDS / TMF 2022"),t(a)]),s(" conference. A recording of the opening remarks by H. Hund and R. Wettstein can be found on "),e("a",x,[s("YouTube"),t(a)]),s(". The slides of the opening remarks are available as a "),e("a",f,[s("PDF download"),t(a)]),s(".")]),_,b,e("p",null,[s("In order to be able to solve the exercises described in this tutorial a software development environment with git, Java 11, Maven 3.8, Docker, docker-compose, a Java IDE like Eclipse or IntelliJ, a BPMN Editor like the Camunda Modeler and a minimum 16GB of RAM is needed. For more details see the "),t(r,{to:"/oldstable/tutorial/prerequisites.html"},{default:i(()=>[s("detailed prerequisites document")]),_:1}),s(".")]),v,w,e("p",null,[s("The first exercise focuses on setting up the testing environment used in this tutorial and shows how to implement and execute a simple BPMN process. For more details see the "),t(r,{to:"/oldstable/tutorial/exercise1-simpleProcess.html"},{default:i(()=>[s("exercise 1 description")]),_:1}),s(".")]),k,E,e("p",null,[s("Exercise 1.1 looks at how to use the Java debugger of your IDE to remote debug the execution of a process plugin. For more details see the "),t(r,{to:"/oldstable/tutorial/exercise11-processDebugging.html"},{default:i(()=>[s("exercise 1.1 description")]),_:1}),s(".")]),P,D,e("p",null,[s("In order to configure processes that are packaged as process plugins, we will take a look at two possibilities on how to pass parameters to a process. For more details see the "),t(r,{to:"/oldstable/tutorial/exercise2-inputParameters.html"},{default:i(()=>[s("exercise 2 description")]),_:1}),s(".")]),F,y,e("p",null,[s("Communication between organizations is modeled using message flow in BPMN processes. The third exercise shows how a process at one organization can trigger a process at another organization. For more details see the "),t(r,{to:"/oldstable/tutorial/exercise3-messageEvents.html"},{default:i(()=>[s("exercise 3 description")]),_:1}),s(".")]),T,S,e("p",null,[s("Different execution paths in a process based on the state of process variables can be achieved using Exclusive Gateways. In Exercise 4 we will examine how this can be implemented. For more details see the "),t(r,{to:"/oldstable/tutorial/exercise4-exclusiveGateways.html"},{default:i(()=>[s("exercise 4 description")]),_:1}),s(".")]),M,I,e("p",null,[s("In the final exercise we will look at message flow between three organizations as well as how to continue a waiting process if no return message arrives. For more details see the "),t(r,{to:"/oldstable/tutorial/exercise5-eventBasedGateways.html"},{default:i(()=>[s("exercise 5 description")]),_:1}),s(".")]),B,e("p",null,[t(r,{to:"/oldstable/tutorial/prerequisites.html"},{default:i(()=>[s("Prerequisites")]),_:1}),s(" | "),t(r,{to:"/oldstable/tutorial/exercise1-simpleProcess.html"},{default:i(()=>[s("Exercise 1")]),_:1}),s(" | "),t(r,{to:"/oldstable/tutorial/exercise11-processDebugging.html"},{default:i(()=>[s("Exercise 1.1")]),_:1}),s(" | "),t(r,{to:"/oldstable/tutorial/exercise2-inputParameters.html"},{default:i(()=>[s("Exercise 2")]),_:1}),s(" | "),t(r,{to:"/oldstable/tutorial/exercise3-messageEvents.html"},{default:i(()=>[s("Exercise 3")]),_:1}),s(" | "),t(r,{to:"/oldstable/tutorial/exercise4-exclusiveGateways.html"},{default:i(()=>[s("Exercise 4")]),_:1}),s(" | "),t(r,{to:"/oldstable/tutorial/exercise5-eventBasedGateways.html"},{default:i(()=>[s("Exercise 5")]),_:1})])])}const H=n(d,[["render",G],["__file","index.html.vue"]]),A=JSON.parse('{"path":"/oldstable/tutorial/","title":"DSF Process Plugin Tutorial","lang":"en-US","frontmatter":{"title":"DSF Process Plugin Tutorial","icon":"slides"},"headers":[{"level":2,"title":"Implementing BPMN Processes as DSF Process-Plugins","slug":"implementing-bpmn-processes-as-dsf-process-plugins","link":"#implementing-bpmn-processes-as-dsf-process-plugins","children":[{"level":3,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[]},{"level":3,"title":"Exercise 1 - Simple Process","slug":"exercise-1-simple-process","link":"#exercise-1-simple-process","children":[]},{"level":3,"title":"Exercise 2 - Input Parameters","slug":"exercise-2-input-parameters","link":"#exercise-2-input-parameters","children":[]},{"level":3,"title":"Exercise 3 - Message Events","slug":"exercise-3-message-events","link":"#exercise-3-message-events","children":[]},{"level":3,"title":"Exercise 4 - Exclusive Gateways","slug":"exercise-4-exclusive-gateways","link":"#exercise-4-exclusive-gateways","children":[]},{"level":3,"title":"Exercise 5 - Event Based Gateways and Intermediate Events","slug":"exercise-5-event-based-gateways-and-intermediate-events","link":"#exercise-5-event-based-gateways-and-intermediate-events","children":[]}]}],"git":{"createdTime":1692783801000,"updatedTime":1692786258000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.53,"words":458},"filePathRelative":"oldstable/tutorial/README.md","localizedDate":"August 23, 2023","excerpt":"

    Implementing BPMN Processes as DSF Process-Plugins

    \\n

    This repository contains exercises to learn how to implement process plugins for the Data Sharing Framework (DSF). The tutorial is divided into several exercises that build on each other. For each exercise, a sample solution is provided in a separate branch.
    \\nThis tutorial was first executed at the GMDS / TMF 2022 conference. A recording of the opening remarks by H. Hund and R. Wettstein can be found on YouTube. The slides of the opening remarks are available as a PDF download.

    "}');export{H as comp,A as data}; diff --git a/assets/index.html-DoJu9D4T.js b/assets/index.html-DoJu9D4T.js new file mode 100644 index 000000000..06d19e7fe --- /dev/null +++ b/assets/index.html-DoJu9D4T.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as s,c as l,a as e,b as t,d as a,w as h,e as d}from"./app-kq9lCQfY.js";const c={},m={class:"hint-container tip"},p=e("p",{class:"hint-container-title"},"Important note",-1),u={href:"https://github.com/highmed/highmed-dsf",target:"_blank",rel:"noopener noreferrer"},f=d('

    System Administrators

    Developers

    New features

    ',5),_=e("li",null,"Improved versioning to support up- and downwards-compatibility",-1),g=e("li",null,"Enhanced web ui to start processes in the web browser",-1),w=e("li",null,"Allow user authenitication and authorization with OpenID Connect",-1),b=e("li",null,"New process plugin API",-1),v=e("li",null,"Removed mostly unused features to simplify instance configuration",-1),x=e("li",null,"Unified proxy setup",-1),S={href:"https://github.com/datasharingframework/dsf/releases/tag/v1.0.0",target:"_blank",rel:"noopener noreferrer"};function k(D,F){const r=i("RouteLink"),n=i("ExternalLinkIcon");return s(),l("div",null,[e("p",null,[t("Data Sharing Framework 1.0.0 is the new major release of the Data Sharing Framework. Click "),a(r,{to:"/intro/"},{default:h(()=>[t("here")]),_:1}),t(" to find more information about the DSF in general.")]),e("div",m,[p,e("p",null,[t("This is a major DSF release not compatible with 0.9.x and older version developed at "),e("a",u,[t("https://github.com/highmed/highmed-dsf"),a(n)]),t(".")])]),f,e("ul",null,[_,g,w,b,v,x,e("li",null,[t("Many more "),e("a",S,[t("features"),a(n)])])])])}const N=o(c,[["render",k],["__file","index.html.vue"]]),C=JSON.parse('{"path":"/v1.0.0/","title":"DSF 1.0.0","lang":"en-US","frontmatter":{"title":"DSF 1.0.0","icon":"guide"},"headers":[{"level":2,"title":"New features","slug":"new-features","link":"#new-features","children":[]}],"git":{"createdTime":1683795464000,"updatedTime":1692708510000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":3}]},"readingTime":{"minutes":0.42,"words":127},"filePathRelative":"v1.0.0/index.md","localizedDate":"May 11, 2023","excerpt":"

    Data Sharing Framework 1.0.0 is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    \\n
    \\n

    Important note

    \\n

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.

    \\n
    "}');export{N as comp,C as data}; diff --git a/assets/index.html-DpTEcA7O.js b/assets/index.html-DpTEcA7O.js new file mode 100644 index 000000000..c7ac500ba --- /dev/null +++ b/assets/index.html-DpTEcA7O.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as a,e as r}from"./app-kq9lCQfY.js";const n={},l=r('

    Overview

    ',2),o=[l];function t(s,c){return i(),a("div",null,o)}const m=e(n,[["render",t],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.3.0/maintain/","title":"Maintain a DSF instance","lang":"en-US","frontmatter":{"title":"Maintain a DSF instance","icon":"tool"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1696944513000,"updatedTime":1696944513000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.16,"words":49},"filePathRelative":"v1.3.0/maintain/README.md","localizedDate":"October 10, 2023","excerpt":"

    Overview

    \\n"}');export{m as comp,u as data}; diff --git a/assets/index.html-Dsh9Qj5c.js b/assets/index.html-Dsh9Qj5c.js new file mode 100644 index 000000000..467002612 --- /dev/null +++ b/assets/index.html-Dsh9Qj5c.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as a,e as r}from"./app-kq9lCQfY.js";const n={},t=r('

    Overview

    ',2),o=[t];function l(m,s){return i(),a("div",null,o)}const h=e(n,[["render",l],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/about/","title":"About","lang":"en-US","frontmatter":{"title":"About","icon":"creative"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1677250569000,"updatedTime":1691492658000,"contributors":[{"name":"simon","email":"smoeding@stu.hs-heilbronn.de","commits":4},{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":3},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1},{"name":"simonmoedinger","email":"simonmoedi@web.de","commits":1}]},"readingTime":{"minutes":0.05,"words":16},"filePathRelative":"about/README.md","localizedDate":"February 24, 2023","excerpt":"

    Overview

    \\n\\n"}');export{h as comp,u as data}; diff --git a/assets/index.html-DszwQS_b.js b/assets/index.html-DszwQS_b.js new file mode 100644 index 000000000..e2c2eeb9f --- /dev/null +++ b/assets/index.html-DszwQS_b.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as s,c as l,a as e,b as t,d as a,w as h,e as d}from"./app-kq9lCQfY.js";const m={},c={class:"hint-container tip"},p=e("p",{class:"hint-container-title"},"Important note",-1),u={href:"https://github.com/highmed/highmed-dsf",target:"_blank",rel:"noopener noreferrer"},f=d('

    System Administrators

    Developers

    New features

    ',5),_=e("li",null,"Improved versioning to support up- and downwards-compatibility",-1),g=e("li",null,"Enhanced web ui to start processes in the web browser",-1),w=e("li",null,"Allow local user authentication and authorization with OpenID Connect",-1),b=e("li",null,"New process plugin API",-1),x=e("li",null,"Removed mostly unused features to simplify instance configuration",-1),S=e("li",null,"Unified proxy setup",-1),k={href:"https://github.com/datasharingframework/dsf/releases",target:"_blank",rel:"noopener noreferrer"};function v(D,F){const o=i("RouteLink"),n=i("ExternalLinkIcon");return s(),l("div",null,[e("p",null,[t("Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click "),a(o,{to:"/intro/"},{default:h(()=>[t("here")]),_:1}),t(" to find more information about the DSF in general.")]),e("div",c,[p,e("p",null,[t("This is a major DSF release not compatible with 0.9.x and older version developed at "),e("a",u,[t("https://github.com/highmed/highmed-dsf"),a(n)]),t(".")])]),f,e("ul",null,[_,g,w,b,x,S,e("li",null,[t("Many more features, see "),e("a",k,[t("1.x release-notes"),a(n)])])])])}const N=r(m,[["render",v],["__file","index.html.vue"]]),C=JSON.parse('{"path":"/stable/","title":"DSF 1.5.2","lang":"en-US","frontmatter":{"title":"DSF 1.5.2","icon":"guide"},"headers":[{"level":2,"title":"New features","slug":"new-features","link":"#new-features","children":[]}],"git":{"createdTime":1688985700000,"updatedTime":1692790324000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":4},{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.46,"words":139},"filePathRelative":"stable/index.md","localizedDate":"July 10, 2023","excerpt":"

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    \\n
    \\n

    Important note

    \\n

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.

    \\n
    "}');export{N as comp,C as data}; diff --git a/assets/index.html-DxxlE-F7.js b/assets/index.html-DxxlE-F7.js new file mode 100644 index 000000000..f489237e8 --- /dev/null +++ b/assets/index.html-DxxlE-F7.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as r,e as n}from"./app-kq9lCQfY.js";const a={},t=n('

    Overview

    ',2),o=[t];function c(l,s){return i(),r("div",null,o)}const d=e(a,[["render",c],["__file","index.html.vue"]]),f=JSON.parse('{"path":"/v1.2.0/maintain/fhir/","title":"FHIR Server","lang":"en-US","frontmatter":{"title":"FHIR Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1694544770000,"updatedTime":1694544770000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.05,"words":16},"filePathRelative":"v1.2.0/maintain/fhir/README.md","localizedDate":"September 12, 2023","excerpt":"

    Overview

    \\n\\n"}');export{d as comp,f as data}; diff --git a/assets/index.html-DyvczhN7.js b/assets/index.html-DyvczhN7.js new file mode 100644 index 000000000..c92854931 --- /dev/null +++ b/assets/index.html-DyvczhN7.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as i,c as a,a as e,b as t,d as n,e as l}from"./app-kq9lCQfY.js";const u={},c=e("p",null,"We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.",-1),d=e("h3",{id:"ways-you-can-contribute",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#ways-you-can-contribute"},[e("span",null,[e("strong",null,"Ways you can contribute:")])])],-1),g=e("strong",null,"Helping other users",-1),h=e("strong",null,"MII Zulip",-1),p={href:"https://mii.zulipchat.com/#narrow/stream/392426-Data-Sharing-Framework-.28DSF.29",target:"_blank",rel:"noopener noreferrer"},f=e("strong",null,"GitHub Discussions",-1),m={href:"https://github.com/datasharingframework/dsf/discussions",target:"_blank",rel:"noopener noreferrer"},b=l("
  • Testing releases:
    • Stay ahead: Help us testing the latest releases. Your feedback on functionality, bugs, and user experience is invaluable.
    • Report findings: Share your testing results to help us refine and enhance our releases.
  • Reviewing changes:
    • Peer review: Contribute by reviewing pull requests. Your insights can help ensure the quality and integrity of code changes.
    • Constructive feedback: Offer constructive feedback and suggestions to help improve and refine proposed changes.
  • ",2),_=e("strong",null,"Documentation changes",-1),y=e("li",null,[e("strong",null,"Improve documentation"),t(": Help us improving and updating our documentation. Clear and accurate documentation is crucial for user understanding and success. Please checkout our "),e("a",{href:"./documentation"},"Getting started guide for documentation contributions"),t(" to DSF.")],-1),v=e("strong",null,"Suggest improvements",-1),w={href:"https://github.com/datasharingframework/datasharingframework.github.io",target:"_blank",rel:"noopener noreferrer"},k=e("strong",null,"Contributing bug reports",-1),I=e("strong",null,"Report bugs",-1),S={href:"https://github.com/datasharingframework/dsf/issues",target:"_blank",rel:"noopener noreferrer"},x=e("li",null,[e("strong",null,"Reproduction steps"),t(": Include steps to reproduce the bug and any relevant logs according to our bug report issue template.")],-1),C=e("li",null,[e("strong",null,"Contributing feature requests"),t(": "),e("ul",null,[e("li",null,[e("strong",null,"Suggest features"),t(": You have an idea for a new feature? We'd love to hear it! Open an issue to describe your proposed feature and its potential benefits according to our feature request template.")]),e("li",null,[e("strong",null,"Collaborate on implementation"),t(": If you're able to, contribute to the development of your proposed feature or bug fix. Collaboration can lead to more innovative and effective solutions. Please checkout our "),e("a",{href:"./code"},"Getting started guide for code contributions"),t(" to DSF.")])])],-1),D=e("strong",null,"Contributing process plugins",-1),G=e("strong",null,"Develop process plugins for the DSF",-1),T={href:"https://dsf.dev/stable/develop/",target:"_blank",rel:"noopener noreferrer"},W=e("li",null,[e("strong",null,"Share your work"),t(": Your plugins could be a valuable addition to the ecosystem and benefit other users.")],-1),Y=e("p",null,"Before you start contributing, we recommend reading our getting started guidelines for detailed information on our processes and standards. This ensures a smooth and productive experience for everyone involved.",-1),j=e("p",null,[e("strong",null,"Your contributions in any form, are what drives the continuous growth and improvement of this project. Thank you for being a part of our community and for your willingness to contribute!")],-1);function H(q,F){const o=s("ExternalLinkIcon");return i(),a("div",null,[c,d,e("ol",null,[e("li",null,[g,t(": "),e("ul",null,[e("li",null,[h,t(": If you are part of the German Medical Informatics Initiative, "),e("a",p,[t("join the MII Zulip community"),n(o)]),t(" to assist others, share your knowledge, and learn from fellow contributors.")]),e("li",null,[f,t(": Engage with our community in "),e("a",m,[t("GitHub Discussions"),n(o)]),t(" by answering questions, providing feedback, and sharing your insights.")])])]),b,e("li",null,[_,t(": "),e("ul",null,[y,e("li",null,[v,t(": If you notice gaps or areas for enhancement in our documentation, we welcome "),e("a",w,[t("your suggestions and contributions"),n(o)]),t(".")])])]),e("li",null,[k,t(": "),e("ul",null,[e("li",null,[I,t(": If you find a bug, please report it via "),e("a",S,[t("an issue on GitHub"),n(o)]),t(". Detailed bug reports are incredibly helpful.")]),x])]),C,e("li",null,[D,t(": "),e("ul",null,[e("li",null,[G,t(": If you have ideas for a process plugin, we encourage you to develop and contribute them. Our "),e("a",T,[t("Getting started guide for process plugin development"),n(o)]),t(" will be a useful reference.")]),W])])]),Y,j])}const z=r(u,[["render",H],["__file","index.html.vue"]]),B=JSON.parse(`{"path":"/v1.4.0/contribute/","title":"Contribute","lang":"en-US","frontmatter":{"title":"Contribute","icon":"info"},"headers":[{"level":3,"title":"Ways you can contribute:","slug":"ways-you-can-contribute","link":"#ways-you-can-contribute","children":[]}],"git":{"createdTime":1706191215000,"updatedTime":1706191215000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.64,"words":491},"filePathRelative":"v1.4.0/contribute/readme.md","localizedDate":"January 25, 2024","excerpt":"

    We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.

    "}`);export{z as comp,B as data}; diff --git a/assets/index.html-DzF4QZJU.js b/assets/index.html-DzF4QZJU.js new file mode 100644 index 000000000..460552fd1 --- /dev/null +++ b/assets/index.html-DzF4QZJU.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as n,a as e}from"./app-kq9lCQfY.js";const r={},a=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),o=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),l=[a,o];function s(c,m){return t(),n("div",null,l)}const v=i(r,[["render",s],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.2.0/maintain/bpe/","title":"BPE Server","lang":"en-US","frontmatter":{"title":"BPE Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1694544770000,"updatedTime":1694544770000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.03,"words":9},"filePathRelative":"v1.2.0/maintain/bpe/README.md","localizedDate":"September 12, 2023","excerpt":"

    Overview

    \\n\\n"}');export{v as comp,u as data}; diff --git a/assets/index.html-FYN7o675.js b/assets/index.html-FYN7o675.js new file mode 100644 index 000000000..93b6a0eae --- /dev/null +++ b/assets/index.html-FYN7o675.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as n,a as e}from"./app-kq9lCQfY.js";const t={},a=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),o=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),l=[a,o];function s(c,d){return i(),n("div",null,l)}const v=r(t,[["render",s],["__file","index.html.vue"]]),h=JSON.parse('{"path":"/v1.5.2/maintain/bpe-reverse-proxy/","title":"BPE Reverse Proxy","lang":"en-US","frontmatter":{"title":"BPE Reverse Proxy","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.03,"words":10},"filePathRelative":"v1.5.2/maintain/bpe-reverse-proxy/README.md","localizedDate":"July 8, 2024","excerpt":"

    Overview

    \\n\\n"}');export{v as comp,h as data}; diff --git a/assets/index.html-GWKEUDpV.js b/assets/index.html-GWKEUDpV.js new file mode 100644 index 000000000..c737c17a2 --- /dev/null +++ b/assets/index.html-GWKEUDpV.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as n,a as e}from"./app-kq9lCQfY.js";const s={},a=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),r=e("ul",null,[e("li",null,[e("a",{href:"feasibility"},"Feasibility")]),e("li",null,[e("a",{href:"num"},"Network University Medicine")])],-1),l=[a,r];function o(c,d){return t(),n("div",null,l)}const u=i(s,[["render",o],["__file","index.html.vue"]]),v=JSON.parse('{"path":"/intro/use-cases/","title":"Use-Cases","lang":"en-US","frontmatter":{"title":"Use-Cases","icon":"view"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1690473388000,"updatedTime":1691142763000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":3}]},"readingTime":{"minutes":0.04,"words":12},"filePathRelative":"intro/use-cases/README.md","localizedDate":"July 27, 2023","excerpt":"

    Overview

    \\n\\n"}');export{u as comp,v as data}; diff --git a/assets/index.html-HEmADpRs.js b/assets/index.html-HEmADpRs.js new file mode 100644 index 000000000..972873203 --- /dev/null +++ b/assets/index.html-HEmADpRs.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as r,e as a}from"./app-kq9lCQfY.js";const n={},t=a('

    Overview

    ',2),o=[t];function c(l,s){return i(),r("div",null,o)}const d=e(n,[["render",c],["__file","index.html.vue"]]),f=JSON.parse('{"path":"/v1.5.0/maintain/fhir/","title":"FHIR Server","lang":"en-US","frontmatter":{"title":"FHIR Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1708419681000,"updatedTime":1708419681000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.05,"words":16},"filePathRelative":"v1.5.0/maintain/fhir/README.md","localizedDate":"February 20, 2024","excerpt":"

    Overview

    \\n\\n"}');export{d as comp,f as data}; diff --git a/assets/index.html-IZP11Pen.js b/assets/index.html-IZP11Pen.js new file mode 100644 index 000000000..f0880ed1b --- /dev/null +++ b/assets/index.html-IZP11Pen.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as n,a as e}from"./app-kq9lCQfY.js";const o={},s=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),a=e("ul",null,[e("li",null,[e("a",{href:"create"},"Create a new process plugin")]),e("li",null,[e("a",{href:"upgrade-from-0"},"Upgrade processes from 0.9.x")])],-1),l=[s,a];function t(c,d){return i(),n("div",null,l)}const p=r(o,[["render",t],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/stable/develop/","title":"Develop Process Plugins","lang":"en-US","frontmatter":{"title":"Develop Process Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1690875424000,"updatedTime":1692790324000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.07,"words":20},"filePathRelative":"stable/develop/README.md","localizedDate":"August 1, 2023","excerpt":"

    Overview

    \\n\\n"}');export{p as comp,u as data}; diff --git a/assets/index.html-KCeNgCsq.js b/assets/index.html-KCeNgCsq.js new file mode 100644 index 000000000..436d20d39 --- /dev/null +++ b/assets/index.html-KCeNgCsq.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as t,a as e}from"./app-kq9lCQfY.js";const n={},o=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),a=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),s=[o,a];function l(c,m){return r(),t("div",null,s)}const v=i(n,[["render",l],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.2.0/maintain/fhir-reverse-proxy/","title":"FHIR Reverse Proxy","lang":"en-US","frontmatter":{"title":"FHIR Reverse Proxy","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1694544770000,"updatedTime":1694544770000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.03,"words":10},"filePathRelative":"v1.2.0/maintain/fhir-reverse-proxy/README.md","localizedDate":"September 12, 2023","excerpt":"

    Overview

    \\n\\n"}');export{v as comp,u as data}; diff --git a/assets/index.html-NndMGsGt.js b/assets/index.html-NndMGsGt.js new file mode 100644 index 000000000..80b25f0f5 --- /dev/null +++ b/assets/index.html-NndMGsGt.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as n,a as e}from"./app-kq9lCQfY.js";const t={},a=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),o=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),l=[a,o];function s(c,d){return i(),n("div",null,l)}const v=r(t,[["render",s],["__file","index.html.vue"]]),h=JSON.parse('{"path":"/v1.5.0/maintain/bpe-reverse-proxy/","title":"BPE Reverse Proxy","lang":"en-US","frontmatter":{"title":"BPE Reverse Proxy","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1708517817000,"updatedTime":1708517817000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.03,"words":10},"filePathRelative":"v1.5.0/maintain/bpe-reverse-proxy/README.md","localizedDate":"February 21, 2024","excerpt":"

    Overview

    \\n\\n"}');export{v as comp,h as data}; diff --git a/assets/index.html-Oq1aOvOs.js b/assets/index.html-Oq1aOvOs.js new file mode 100644 index 000000000..5be022e0b --- /dev/null +++ b/assets/index.html-Oq1aOvOs.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as r,e as n}from"./app-kq9lCQfY.js";const a={},t=n('

    Overview

    ',2),o=[t];function c(l,s){return i(),r("div",null,o)}const d=e(a,[["render",c],["__file","index.html.vue"]]),f=JSON.parse('{"path":"/v1.5.1/maintain/fhir/","title":"FHIR Server","lang":"en-US","frontmatter":{"title":"FHIR Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.05,"words":16},"filePathRelative":"v1.5.1/maintain/fhir/README.md","localizedDate":"April 17, 2024","excerpt":"

    Overview

    \\n\\n"}');export{d as comp,f as data}; diff --git a/assets/index.html-PHxnGzin.js b/assets/index.html-PHxnGzin.js new file mode 100644 index 000000000..51bdaf879 --- /dev/null +++ b/assets/index.html-PHxnGzin.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as n,c as r,a as e}from"./app-kq9lCQfY.js";const t={},a=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),o=e("ul",null,[e("li",null,[e("a",{href:"configuration"},"Configuration Parameters")])],-1),l=[a,o];function s(c,m){return n(),r("div",null,l)}const v=i(t,[["render",s],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.3.2/maintain/bpe/","title":"BPE Server","lang":"en-US","frontmatter":{"title":"BPE Server","icon":"module"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1701710218000,"updatedTime":1701710218000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.03,"words":9},"filePathRelative":"v1.3.2/maintain/bpe/README.md","localizedDate":"December 4, 2023","excerpt":"

    Overview

    \\n\\n"}');export{v as comp,u as data}; diff --git a/assets/index.html-V7hpoftb.js b/assets/index.html-V7hpoftb.js new file mode 100644 index 000000000..9b307559e --- /dev/null +++ b/assets/index.html-V7hpoftb.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as i,c as a,a as e,b as t,d as n,e as l}from"./app-kq9lCQfY.js";const u={},c=e("p",null,"We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.",-1),d=e("h3",{id:"ways-you-can-contribute",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#ways-you-can-contribute"},[e("span",null,[e("strong",null,"Ways you can contribute:")])])],-1),g=e("strong",null,"Helping other users",-1),h=e("strong",null,"MII Zulip",-1),p={href:"https://mii.zulipchat.com/#narrow/stream/392426-Data-Sharing-Framework-.28DSF.29",target:"_blank",rel:"noopener noreferrer"},f=e("strong",null,"GitHub Discussions",-1),m={href:"https://github.com/datasharingframework/dsf/discussions",target:"_blank",rel:"noopener noreferrer"},b=l("
  • Testing releases:
    • Stay ahead: Help us testing the latest releases. Your feedback on functionality, bugs, and user experience is invaluable.
    • Report findings: Share your testing results to help us refine and enhance our releases.
  • Reviewing changes:
    • Peer review: Contribute by reviewing pull requests. Your insights can help ensure the quality and integrity of code changes.
    • Constructive feedback: Offer constructive feedback and suggestions to help improve and refine proposed changes.
  • ",2),_=e("strong",null,"Documentation changes",-1),y=e("li",null,[e("strong",null,"Improve documentation"),t(": Help us improving and updating our documentation. Clear and accurate documentation is crucial for user understanding and success. Please checkout our "),e("a",{href:"./documentation"},"Getting started guide for documentation contributions"),t(" to DSF.")],-1),v=e("strong",null,"Suggest improvements",-1),w={href:"https://github.com/datasharingframework/datasharingframework.github.io",target:"_blank",rel:"noopener noreferrer"},k=e("strong",null,"Contributing bug reports",-1),I=e("strong",null,"Report bugs",-1),S={href:"https://github.com/datasharingframework/dsf/issues",target:"_blank",rel:"noopener noreferrer"},x=e("li",null,[e("strong",null,"Reproduction steps"),t(": Include steps to reproduce the bug and any relevant logs according to our bug report issue template.")],-1),C=e("li",null,[e("strong",null,"Contributing feature requests"),t(": "),e("ul",null,[e("li",null,[e("strong",null,"Suggest features"),t(": You have an idea for a new feature? We'd love to hear it! Open an issue to describe your proposed feature and its potential benefits according to our feature request template.")]),e("li",null,[e("strong",null,"Collaborate on implementation"),t(": If you're able to, contribute to the development of your proposed feature or bug fix. Collaboration can lead to more innovative and effective solutions. Please checkout our "),e("a",{href:"./code"},"Getting started guide for code contributions"),t(" to DSF.")])])],-1),D=e("strong",null,"Contributing process plugins",-1),G=e("strong",null,"Develop process plugins for the DSF",-1),T={href:"https://dsf.dev/stable/develop/",target:"_blank",rel:"noopener noreferrer"},W=e("li",null,[e("strong",null,"Share your work"),t(": Your plugins could be a valuable addition to the ecosystem and benefit other users.")],-1),Y=e("p",null,"Before you start contributing, we recommend reading our getting started guidelines for detailed information on our processes and standards. This ensures a smooth and productive experience for everyone involved.",-1),j=e("p",null,[e("strong",null,"Your contributions in any form, are what drives the continuous growth and improvement of this project. Thank you for being a part of our community and for your willingness to contribute!")],-1);function H(q,F){const o=s("ExternalLinkIcon");return i(),a("div",null,[c,d,e("ol",null,[e("li",null,[g,t(": "),e("ul",null,[e("li",null,[h,t(": If you are part of the German Medical Informatics Initiative, "),e("a",p,[t("join the MII Zulip community"),n(o)]),t(" to assist others, share your knowledge, and learn from fellow contributors.")]),e("li",null,[f,t(": Engage with our community in "),e("a",m,[t("GitHub Discussions"),n(o)]),t(" by answering questions, providing feedback, and sharing your insights.")])])]),b,e("li",null,[_,t(": "),e("ul",null,[y,e("li",null,[v,t(": If you notice gaps or areas for enhancement in our documentation, we welcome "),e("a",w,[t("your suggestions and contributions"),n(o)]),t(".")])])]),e("li",null,[k,t(": "),e("ul",null,[e("li",null,[I,t(": If you find a bug, please report it via "),e("a",S,[t("an issue on GitHub"),n(o)]),t(". Detailed bug reports are incredibly helpful.")]),x])]),C,e("li",null,[D,t(": "),e("ul",null,[e("li",null,[G,t(": If you have ideas for a process plugin, we encourage you to develop and contribute them. Our "),e("a",T,[t("Getting started guide for process plugin development"),n(o)]),t(" will be a useful reference.")]),W])])]),Y,j])}const z=r(u,[["render",H],["__file","index.html.vue"]]),B=JSON.parse(`{"path":"/v1.5.1/contribute/","title":"Contribute","lang":"en-US","frontmatter":{"title":"Contribute","icon":"info"},"headers":[{"level":3,"title":"Ways you can contribute:","slug":"ways-you-can-contribute","link":"#ways-you-can-contribute","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.64,"words":491},"filePathRelative":"v1.5.1/contribute/readme.md","localizedDate":"April 17, 2024","excerpt":"

    We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.

    "}`);export{z as comp,B as data}; diff --git a/assets/index.html-a6s0XPGA.js b/assets/index.html-a6s0XPGA.js new file mode 100644 index 000000000..de7521db2 --- /dev/null +++ b/assets/index.html-a6s0XPGA.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as s,c as l,a as e,b as t,d as a,w as h,e as d}from"./app-kq9lCQfY.js";const c={},m={class:"hint-container tip"},p=e("p",{class:"hint-container-title"},"Important note",-1),u={href:"https://github.com/highmed/highmed-dsf",target:"_blank",rel:"noopener noreferrer"},f=d('

    System Administrators

    Developers

    New features

    ',5),_=e("li",null,"Improved versioning to support up- and downwards-compatibility",-1),g=e("li",null,"Enhanced web ui to start processes in the web browser",-1),w=e("li",null,"Allow local user authentication and authorization with OpenID Connect",-1),b=e("li",null,"New process plugin API",-1),x=e("li",null,"Removed mostly unused features to simplify instance configuration",-1),v=e("li",null,"Unified proxy setup",-1),S={href:"https://github.com/datasharingframework/dsf/releases",target:"_blank",rel:"noopener noreferrer"};function k(D,F){const i=r("RouteLink"),n=r("ExternalLinkIcon");return s(),l("div",null,[e("p",null,[t("Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click "),a(i,{to:"/intro/"},{default:h(()=>[t("here")]),_:1}),t(" to find more information about the DSF in general.")]),e("div",m,[p,e("p",null,[t("This is a major DSF release not compatible with 0.9.x and older version developed at "),e("a",u,[t("https://github.com/highmed/highmed-dsf"),a(n)]),t(".")])]),f,e("ul",null,[_,g,w,b,x,v,e("li",null,[t("Many more features, see "),e("a",S,[t("1.x release-notes"),a(n)])])])])}const N=o(c,[["render",k],["__file","index.html.vue"]]),C=JSON.parse('{"path":"/v1.2.0/","title":"DSF 1.2.0","lang":"en-US","frontmatter":{"title":"DSF 1.2.0","icon":"guide"},"headers":[{"level":2,"title":"New features","slug":"new-features","link":"#new-features","children":[]}],"git":{"createdTime":1694544770000,"updatedTime":1694544770000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.46,"words":139},"filePathRelative":"v1.2.0/index.md","localizedDate":"September 12, 2023","excerpt":"

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    \\n
    \\n

    Important note

    \\n

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.

    \\n
    "}');export{N as comp,C as data}; diff --git a/assets/index.html-qJV9JEXu.js b/assets/index.html-qJV9JEXu.js new file mode 100644 index 000000000..040104113 --- /dev/null +++ b/assets/index.html-qJV9JEXu.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as a,e as r}from"./app-kq9lCQfY.js";const n={},l=r('

    Overview

    ',2),o=[l];function t(s,c){return i(),a("div",null,o)}const m=e(n,[["render",t],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.3.2/maintain/","title":"Maintain a DSF instance","lang":"en-US","frontmatter":{"title":"Maintain a DSF instance","icon":"tool"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1701710218000,"updatedTime":1701710218000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.16,"words":49},"filePathRelative":"v1.3.2/maintain/README.md","localizedDate":"December 4, 2023","excerpt":"

    Overview

    \\n"}');export{m as comp,u as data}; diff --git a/assets/index.html-qeoKr5lU.js b/assets/index.html-qeoKr5lU.js new file mode 100644 index 000000000..34572f2db --- /dev/null +++ b/assets/index.html-qeoKr5lU.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as i,c as d,a as e,d as l,w as r,b as a}from"./app-kq9lCQfY.js";const m={},h={href:"https://github.com/highmed/highmed-dsf/wiki/Deployment-Archive",target:"_blank",rel:"noopener noreferrer"};function u(f,c){const t=n("RouteLink"),o=n("ExternalLinkIcon");return i(),d("div",null,[e("ul",null,[e("li",null,[l(t,{to:"/oldstable/releases/configFhirReverseProxy.html"},{default:r(()=>[a("Configuration Parameters FHIR Reverse Proxy")]),_:1})]),e("li",null,[l(t,{to:"/oldstable/releases/configFhir.html"},{default:r(()=>[a("Configuration Parameters FHIR")]),_:1})]),e("li",null,[l(t,{to:"/oldstable/releases/configBpe.html"},{default:r(()=>[a("Configuration Parameters BPE")]),_:1})]),e("li",null,[l(t,{to:"/oldstable/releases/upgradeFrom91.html"},{default:r(()=>[a("Upgrade from 0.9.1")]),_:1})]),e("li",null,[l(t,{to:"/oldstable/releases/upgradeFrom92.html"},{default:r(()=>[a("Upgrade from 0.9.2")]),_:1})]),e("li",null,[e("a",h,[a("Older Versions"),l(o)])]),e("li",null,[l(t,{to:"/oldstable/releases/num-codexInstall.html"},{default:r(()=>[a("NUM-CODEX Install")]),_:1})]),e("li",null,[l(t,{to:"/oldstable/releases/highmedInstall.html"},{default:r(()=>[a("HiGHmed Install")]),_:1})])])])}const p=s(m,[["render",u],["__file","index.html.vue"]]),b=JSON.parse('{"path":"/oldstable/releases/","title":"Releases and Deployment","lang":"en-US","frontmatter":{"title":"Releases and Deployment","icon":"install"},"headers":[],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.14,"words":42},"filePathRelative":"oldstable/releases/README.md","localizedDate":"August 23, 2023","excerpt":""}');export{p as comp,b as data}; diff --git a/assets/index.html-wY8EFJdx.js b/assets/index.html-wY8EFJdx.js new file mode 100644 index 000000000..66bd8adc8 --- /dev/null +++ b/assets/index.html-wY8EFJdx.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as o,a as e}from"./app-kq9lCQfY.js";const a={},l=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),n=e("ul",null,[e("li",null,[e("a",{href:"create"},"Create a new process plugin")]),e("li",null,[e("a",{href:"upgrade-from-0"},"Upgrade processes from 0.9.x")])],-1),t=[l,n];function s(c,d){return i(),o("div",null,t)}const h=r(a,[["render",s],["__file","index.html.vue"]]),u=JSON.parse('{"path":"/v1.0.0/develop/","title":"Develop Process Plugins","lang":"en-US","frontmatter":{"title":"Develop Process Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]}],"git":{"createdTime":1692708510000,"updatedTime":1692708510000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.07,"words":20},"filePathRelative":"v1.0.0/develop/README.md","localizedDate":"August 22, 2023","excerpt":"

    Overview

    \\n\\n"}');export{h as comp,u as data}; diff --git a/assets/install-plugins.html-B1EGf8eh.js b/assets/install-plugins.html-B1EGf8eh.js new file mode 100644 index 000000000..64f9a7d3b --- /dev/null +++ b/assets/install-plugins.html-B1EGf8eh.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as t,c as a,a as e,b as s,d as r}from"./app-kq9lCQfY.js";const l={},c=e("p",null,"You can find an overview of compatible process plugins below.",-1),m=e("h2",{id:"common-processes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#common-processes"},[e("span",null,"Common processes")])],-1),p={href:"https://github.com/datasharingframework/dsf-process-ping-pong/releases",target:"_blank",rel:"noopener noreferrer"},h={href:"https://github.com/datasharingframework/dsf-process-allow-list/releases",target:"_blank",rel:"noopener noreferrer"},d=e("h2",{id:"mii-processes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#mii-processes"},[e("span",null,"MII processes")])],-1),u={href:"https://github.com/medizininformatik-initiative/mii-process-feasibility/releases",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/medizininformatik-initiative/mii-process-report/releases",target:"_blank",rel:"noopener noreferrer"},f={href:"https://github.com/medizininformatik-initiative/mii-process-data-sharing/releases",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/medizininformatik-initiative/mii-process-data-transfer/releases",target:"_blank",rel:"noopener noreferrer"},b=e("h2",{id:"num-processes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#num-processes"},[e("span",null,"NUM processes")])],-1),k={href:"https://github.com/num-codex/codex-processes-ap1/releases",target:"_blank",rel:"noopener noreferrer"};function w(v,x){const i=o("ExternalLinkIcon");return t(),a("div",null,[c,m,e("ul",null,[e("li",null,[s("Ping-Pong: "),e("a",p,[s("https://github.com/datasharingframework/dsf-process-ping-pong/releases"),r(i)])]),e("li",null,[s("AllowList Download: "),e("a",h,[s("https://github.com/datasharingframework/dsf-process-allow-list/releases"),r(i)])])]),d,e("ul",null,[e("li",null,[s("Feasibility: "),e("a",u,[s("https://github.com/medizininformatik-initiative/mii-process-feasibility/releases"),r(i)])]),e("li",null,[s("KDS-Report: "),e("a",g,[s("https://github.com/medizininformatik-initiative/mii-process-report/releases"),r(i)])]),e("li",null,[s("MII-Data-Sharing: "),e("a",f,[s("https://github.com/medizininformatik-initiative/mii-process-data-sharing/releases"),r(i)])]),e("li",null,[s("MII-Data-Transfer: "),e("a",_,[s("https://github.com/medizininformatik-initiative/mii-process-data-transfer/releases"),r(i)])])]),b,e("ul",null,[e("li",null,[s("NUM-RDP: "),e("a",k,[s("https://github.com/num-codex/codex-processes-ap1/releases"),r(i)])])])])}const P=n(l,[["render",w],["__file","install-plugins.html.vue"]]),D=JSON.parse('{"path":"/v1.5.1/maintain/install-plugins.html","title":"Install Plugins","lang":"en-US","frontmatter":{"title":"Install Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Common processes","slug":"common-processes","link":"#common-processes","children":[]},{"level":2,"title":"MII processes","slug":"mii-processes","link":"#mii-processes","children":[]},{"level":2,"title":"NUM processes","slug":"num-processes","link":"#num-processes","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1718711284000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.24,"words":73},"filePathRelative":"v1.5.1/maintain/install-plugins.md","localizedDate":"April 17, 2024","excerpt":"

    You can find an overview of compatible process plugins below.

    \\n

    Common processes

    \\n"}');export{P as comp,D as data}; diff --git a/assets/install-plugins.html-BKaaUPRu.js b/assets/install-plugins.html-BKaaUPRu.js new file mode 100644 index 000000000..c7d957023 --- /dev/null +++ b/assets/install-plugins.html-BKaaUPRu.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as t,c as a,a as e,b as s,d as i}from"./app-kq9lCQfY.js";const l={},c=e("p",null,"You can find an overview of compatable process plugins below.",-1),p=e("h2",{id:"common-processes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#common-processes"},[e("span",null,"Common processes")])],-1),m={href:"https://github.com/datasharingframework/dsf-process-ping-pong/releases",target:"_blank",rel:"noopener noreferrer"},h={href:"https://github.com/datasharingframework/dsf-process-allow-list/releases",target:"_blank",rel:"noopener noreferrer"},d=e("h2",{id:"mii-processes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#mii-processes"},[e("span",null,"MII processes")])],-1),u={href:"https://github.com/medizininformatik-initiative/mii-process-feasibility/releases",target:"_blank",rel:"noopener noreferrer"},f={href:"https://github.com/medizininformatik-initiative/mii-process-report/releases",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/medizininformatik-initiative/mii-process-data-transfer/releases",target:"_blank",rel:"noopener noreferrer"},_=e("h2",{id:"num-processes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#num-processes"},[e("span",null,"NUM processes")])],-1),b={href:"https://github.com/num-codex/codex-processes-ap1/releases",target:"_blank",rel:"noopener noreferrer"};function k(w,v){const r=n("ExternalLinkIcon");return t(),a("div",null,[c,p,e("ul",null,[e("li",null,[s("Ping-Pong: "),e("a",m,[s("https://github.com/datasharingframework/dsf-process-ping-pong/releases"),i(r)])]),e("li",null,[s("AllowList Download: "),e("a",h,[s("https://github.com/datasharingframework/dsf-process-allow-list/releases"),i(r)])])]),d,e("ul",null,[e("li",null,[s("Feasibility: "),e("a",u,[s("https://github.com/medizininformatik-initiative/mii-process-feasibility/releases"),i(r)])]),e("li",null,[s("KDS-Report: "),e("a",f,[s("https://github.com/medizininformatik-initiative/mii-process-report/releases"),i(r)])])]),e("ul",null,[e("li",null,[s("MII-Data-Transfer: "),e("a",g,[s("https://github.com/medizininformatik-initiative/mii-process-data-transfer/releases"),i(r)])])]),_,e("ul",null,[e("li",null,[s("NUM-RDP: "),e("a",b,[s("https://github.com/num-codex/codex-processes-ap1/releases"),i(r)])])])])}const z=o(l,[["render",k],["__file","install-plugins.html.vue"]]),P=JSON.parse('{"path":"/v1.5.0/maintain/install-plugins.html","title":"Install Plugins","lang":"en-US","frontmatter":{"title":"Install Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Common processes","slug":"common-processes","link":"#common-processes","children":[]},{"level":2,"title":"MII processes","slug":"mii-processes","link":"#mii-processes","children":[]},{"level":2,"title":"NUM processes","slug":"num-processes","link":"#num-processes","children":[]}],"git":{"createdTime":1708419681000,"updatedTime":1708419681000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.24,"words":73},"filePathRelative":"v1.5.0/maintain/install-plugins.md","localizedDate":"February 20, 2024","excerpt":"

    You can find an overview of compatable process plugins below.

    \\n

    Common processes

    \\n"}');export{z as comp,P as data}; diff --git a/assets/install-plugins.html-BPtVjAQJ.js b/assets/install-plugins.html-BPtVjAQJ.js new file mode 100644 index 000000000..1bed0f79a --- /dev/null +++ b/assets/install-plugins.html-BPtVjAQJ.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as t,c as a,a as e,b as s,d as i}from"./app-kq9lCQfY.js";const l={},c=e("p",null,"You can find an overview of compatable process plugins below.",-1),m=e("h2",{id:"common-processes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#common-processes"},[e("span",null,"Common processes")])],-1),p={href:"https://github.com/datasharingframework/dsf-process-ping-pong/releases",target:"_blank",rel:"noopener noreferrer"},h={href:"https://github.com/datasharingframework/dsf-process-allow-list/releases",target:"_blank",rel:"noopener noreferrer"},d=e("h2",{id:"mii-processes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#mii-processes"},[e("span",null,"MII processes")])],-1),u={href:"https://github.com/medizininformatik-initiative/feasibility-dsf-process/releases",target:"_blank",rel:"noopener noreferrer"},f={href:"https://github.com/medizininformatik-initiative/mii-process-report/releases",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/medizininformatik-initiative/mii-process-data-transfer/releases",target:"_blank",rel:"noopener noreferrer"},_=e("h2",{id:"num-processes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#num-processes"},[e("span",null,"NUM processes")])],-1),b={href:"https://github.com/num-codex/codex-processes-ap1/releases",target:"_blank",rel:"noopener noreferrer"};function k(w,v){const r=n("ExternalLinkIcon");return t(),a("div",null,[c,m,e("ul",null,[e("li",null,[s("Ping-Pong: "),e("a",p,[s("https://github.com/datasharingframework/dsf-process-ping-pong/releases"),i(r)])]),e("li",null,[s("AllowList Download: "),e("a",h,[s("https://github.com/datasharingframework/dsf-process-allow-list/releases"),i(r)])])]),d,e("ul",null,[e("li",null,[s("Feasibility: "),e("a",u,[s("https://github.com/medizininformatik-initiative/feasibility-dsf-process/releases"),i(r)])]),e("li",null,[s("KDS-Report: "),e("a",f,[s("https://github.com/medizininformatik-initiative/mii-process-report/releases"),i(r)])])]),e("ul",null,[e("li",null,[s("MII-Data-Transfer: "),e("a",g,[s("https://github.com/medizininformatik-initiative/mii-process-data-transfer/releases"),i(r)])])]),_,e("ul",null,[e("li",null,[s("NUM-RDP: "),e("a",b,[s("https://github.com/num-codex/codex-processes-ap1/releases"),i(r)])])])])}const z=o(l,[["render",k],["__file","install-plugins.html.vue"]]),P=JSON.parse('{"path":"/v1.3.2/maintain/install-plugins.html","title":"Install Plugins","lang":"en-US","frontmatter":{"title":"Install Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Common processes","slug":"common-processes","link":"#common-processes","children":[]},{"level":2,"title":"MII processes","slug":"mii-processes","link":"#mii-processes","children":[]},{"level":2,"title":"NUM processes","slug":"num-processes","link":"#num-processes","children":[]}],"git":{"createdTime":1701710218000,"updatedTime":1702048090000,"contributors":[{"name":"Maximilian Kurscheidt","email":"maximilian.kurscheidt@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.24,"words":73},"filePathRelative":"v1.3.2/maintain/install-plugins.md","localizedDate":"December 4, 2023","excerpt":"

    You can find an overview of compatable process plugins below.

    \\n

    Common processes

    \\n"}');export{z as comp,P as data}; diff --git a/assets/install-plugins.html-CZL_USfs.js b/assets/install-plugins.html-CZL_USfs.js new file mode 100644 index 000000000..f48eb4266 --- /dev/null +++ b/assets/install-plugins.html-CZL_USfs.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as t,o as i,c as a,a as e,b as s,d as r}from"./app-kq9lCQfY.js";const l={},c=e("p",null,"You can find an overview of compatable process plugins below.",-1),p=e("h2",{id:"common-processes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#common-processes"},[e("span",null,"Common processes")])],-1),m={href:"https://github.com/datasharingframework/dsf-process-ping-pong/releases",target:"_blank",rel:"noopener noreferrer"},h={href:"https://github.com/datasharingframework/dsf-process-allow-list/releases",target:"_blank",rel:"noopener noreferrer"},d=e("h2",{id:"mii-processes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#mii-processes"},[e("span",null,"MII processes")])],-1),u={href:"https://github.com/medizininformatik-initiative/feasibility-dsf-process/releases",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/medizininformatik-initiative/mii-process-report/releases",target:"_blank",rel:"noopener noreferrer"},f=e("h2",{id:"num-processes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#num-processes"},[e("span",null,"NUM processes")])],-1),_={href:"https://github.com/num-codex/codex-processes-ap1/releases",target:"_blank",rel:"noopener noreferrer"};function b(k,w){const o=t("ExternalLinkIcon");return i(),a("div",null,[c,p,e("ul",null,[e("li",null,[s("Ping-Pong: "),e("a",m,[s("https://github.com/datasharingframework/dsf-process-ping-pong/releases"),r(o)])]),e("li",null,[s("AllowList Download: "),e("a",h,[s("https://github.com/datasharingframework/dsf-process-allow-list/releases"),r(o)])])]),d,e("ul",null,[e("li",null,[s("Feasibility: "),e("a",u,[s("https://github.com/medizininformatik-initiative/feasibility-dsf-process/releases"),r(o)])]),e("li",null,[s("KDS-Report: "),e("a",g,[s("https://github.com/medizininformatik-initiative/mii-process-report/releases"),r(o)])])]),f,e("ul",null,[e("li",null,[s("NUM-RDP: "),e("a",_,[s("https://github.com/num-codex/codex-processes-ap1/releases"),r(o)])])])])}const P=n(l,[["render",b],["__file","install-plugins.html.vue"]]),I=JSON.parse('{"path":"/v1.3.1/maintain/install-plugins.html","title":"Install Plugins","lang":"en-US","frontmatter":{"title":"Install Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Common processes","slug":"common-processes","link":"#common-processes","children":[]},{"level":2,"title":"MII processes","slug":"mii-processes","link":"#mii-processes","children":[]},{"level":2,"title":"NUM processes","slug":"num-processes","link":"#num-processes","children":[]}],"git":{"createdTime":1698748420000,"updatedTime":1698748420000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.24,"words":73},"filePathRelative":"v1.3.1/maintain/install-plugins.md","localizedDate":"October 31, 2023","excerpt":"

    You can find an overview of compatable process plugins below.

    \\n

    Common processes

    \\n"}');export{P as comp,I as data}; diff --git a/assets/install-plugins.html-C_QOcnfk.js b/assets/install-plugins.html-C_QOcnfk.js new file mode 100644 index 000000000..dd72b7168 --- /dev/null +++ b/assets/install-plugins.html-C_QOcnfk.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as t,o as i,c as a,a as e,b as s,d as r}from"./app-kq9lCQfY.js";const l={},c=e("p",null,"You can find an overview of compatable process plugins below.",-1),p=e("h2",{id:"common-processes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#common-processes"},[e("span",null,"Common processes")])],-1),m={href:"https://github.com/datasharingframework/dsf-process-ping-pong/releases",target:"_blank",rel:"noopener noreferrer"},h={href:"https://github.com/datasharingframework/dsf-process-allow-list/releases",target:"_blank",rel:"noopener noreferrer"},d=e("h2",{id:"mii-processes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#mii-processes"},[e("span",null,"MII processes")])],-1),u={href:"https://github.com/medizininformatik-initiative/feasibility-dsf-process/releases",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/medizininformatik-initiative/mii-process-report/releases",target:"_blank",rel:"noopener noreferrer"},f=e("h2",{id:"num-processes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#num-processes"},[e("span",null,"NUM processes")])],-1),_={href:"https://github.com/num-codex/codex-processes-ap1/releases",target:"_blank",rel:"noopener noreferrer"};function b(k,w){const o=t("ExternalLinkIcon");return i(),a("div",null,[c,p,e("ul",null,[e("li",null,[s("Ping-Pong: "),e("a",m,[s("https://github.com/datasharingframework/dsf-process-ping-pong/releases"),r(o)])]),e("li",null,[s("AllowList Download: "),e("a",h,[s("https://github.com/datasharingframework/dsf-process-allow-list/releases"),r(o)])])]),d,e("ul",null,[e("li",null,[s("Feasibility: "),e("a",u,[s("https://github.com/medizininformatik-initiative/feasibility-dsf-process/releases"),r(o)])]),e("li",null,[s("KDS-Report: "),e("a",g,[s("https://github.com/medizininformatik-initiative/mii-process-report/releases"),r(o)])])]),f,e("ul",null,[e("li",null,[s("NUM-RDP: "),e("a",_,[s("https://github.com/num-codex/codex-processes-ap1/releases"),r(o)])])])])}const P=n(l,[["render",b],["__file","install-plugins.html.vue"]]),I=JSON.parse('{"path":"/v1.3.0/maintain/install-plugins.html","title":"Install Plugins","lang":"en-US","frontmatter":{"title":"Install Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Common processes","slug":"common-processes","link":"#common-processes","children":[]},{"level":2,"title":"MII processes","slug":"mii-processes","link":"#mii-processes","children":[]},{"level":2,"title":"NUM processes","slug":"num-processes","link":"#num-processes","children":[]}],"git":{"createdTime":1698658900000,"updatedTime":1698744428000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":0.24,"words":73},"filePathRelative":"v1.3.0/maintain/install-plugins.md","localizedDate":"October 30, 2023","excerpt":"

    You can find an overview of compatable process plugins below.

    \\n

    Common processes

    \\n"}');export{P as comp,I as data}; diff --git a/assets/install-plugins.html-D05-EGzR.js b/assets/install-plugins.html-D05-EGzR.js new file mode 100644 index 000000000..25285c1e4 --- /dev/null +++ b/assets/install-plugins.html-D05-EGzR.js @@ -0,0 +1,7 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as s,c as o,a as e,b as t,d as n,e as l}from"./app-kq9lCQfY.js";const d={},c={class:"hint-container tip"},h=e("p",{class:"hint-container-title"},"Marketplace for process plugins",-1),p={href:"https://hub.dsf.dev/",target:"_blank",rel:"noopener noreferrer"},u=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,[e("strong",null,"Overview")])])],-1),m=e("ul",null,[e("li",null,"You can find an overview of compatable process plugins below (last updated 25/07/2024).")],-1),g=e("thead",null,[e("tr",null,[e("th",null,"Process Plugin"),e("th",null,"released for test"),e("th",null,"released for production")])],-1),f={href:"https://github.com/datasharingframework/dsf-process-ping-pong/releases",target:"_blank",rel:"noopener noreferrer"},v={href:"https://github.com/datasharingframework/dsf-process-ping-pong/releases/tag/v1.0.1.0",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/datasharingframework/dsf-process-ping-pong/releases/tag/v1.0.1.0",target:"_blank",rel:"noopener noreferrer"},b={href:"https://github.com/datasharingframework/dsf-process-allow-list/releases",target:"_blank",rel:"noopener noreferrer"},k={href:"https://github.com/datasharingframework/dsf-process-allow-list/releases/tag/v1.0.0.1",target:"_blank",rel:"noopener noreferrer"},x={href:"https://github.com/datasharingframework/dsf-process-allow-list/releases/tag/v1.0.0.1",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/medizininformatik-initiative/mii-process-feasibility/releases",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/medizininformatik-initiative/mii-process-feasibility/releases/tag/v1.0.0.5",target:"_blank",rel:"noopener noreferrer"},P={href:"https://github.com/medizininformatik-initiative/mii-process-feasibility/releases/tag/v1.0.0.5",target:"_blank",rel:"noopener noreferrer"},z={href:"https://github.com/medizininformatik-initiative/mii-process-report/releases",target:"_blank",rel:"noopener noreferrer"},M={href:"https://github.com/medizininformatik-initiative/mii-process-report/releases/tag/v1.1.0.1",target:"_blank",rel:"noopener noreferrer"},I={href:"https://github.com/medizininformatik-initiative/mii-process-report/releases/tag/v1.0.0.0",target:"_blank",rel:"noopener noreferrer"},D={href:"https://github.com/medizininformatik-initiative/mii-process-data-transfer/releases",target:"_blank",rel:"noopener noreferrer"},j={href:"https://github.com/medizininformatik-initiative/mii-process-data-sharing/releases/tag/v1.0.0.1",target:"_blank",rel:"noopener noreferrer"},S={href:"https://github.com/medizininformatik-initiative/mii-process-data-sharing/releases/tag/v1.0.0.1",target:"_blank",rel:"noopener noreferrer"},q={href:"https://github.com/medizininformatik-initiative/mii-process-data-sharing/releases",target:"_blank",rel:"noopener noreferrer"},T={href:"https://github.com/medizininformatik-initiative/mii-process-data-transfer/releases/tag/v1.0.1.0",target:"_blank",rel:"noopener noreferrer"},E={href:"https://github.com/medizininformatik-initiative/mii-process-data-transfer/releases/tag/v1.0.1.0",target:"_blank",rel:"noopener noreferrer"},F={href:"https://github.com/num-codex/codex-processes-ap1/releases",target:"_blank",rel:"noopener noreferrer"},N={href:"https://github.com/num-codex/codex-processes-ap1/releases/tag/v1.1.0.0",target:"_blank",rel:"noopener noreferrer"},A={href:"https://github.com/num-codex/codex-processes-ap1/releases/tag/v1.1.0.0",target:"_blank",rel:"noopener noreferrer"},B={href:"https://hub.dsf.dev/",target:"_blank",rel:"noopener noreferrer"},O=e("li",null,"Deploying the process plugin to the DSF involves copy the process jar-file and configuring environment variable for the business process engine (BPE).",-1),R=e("h3",{id:"prerequisites",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#prerequisites"},[e("span",null,"Prerequisites")])],-1),V={href:"https://dsf.dev/stable/maintain/install.html",target:"_blank",rel:"noopener noreferrer"},L=l(`

    Deployment

    • Add the process jar-file to the DSF BPE folder /opt/bpe/process:
    wget (your jar-file download link)
    +

    For example:

     wget https://github.com/medizininformatik-initiative/mii-process-data-sharing/releases/download/v1.0.0.1/mii-process-data-sharing-1.0.0.1.jar
    +
    • Make sure the process is readable by the bpe user or group, for example by executing:
    sudo chmod 440 (your jar-file name.jar)
    +sudo chown root:bpe (your jar-file name.jar)
    +

    For example:

    sudo chmod 440 mii-process-data-sharing-1.0.0.1.jar
    +sudo chown root:bpe mii-process-data-sharing-1.0.0.1.jar
    +
    • Modify the process exclude config in /opt/bpe/docker-compose.yml
    • Reminder: Update/verify required configurations in docker-compose.yml
    `,10);function U(H,J){const r=a("ExternalLinkIcon");return s(),o("div",null,[e("div",c,[h,e("p",null,[t("To install and learn more about each Process Plugin, you can visit the Marketplace "),e("a",p,[t("here"),n(r)]),t(".")])]),u,m,e("table",null,[g,e("tbody",null,[e("tr",null,[e("td",null,[e("a",f,[t("Ping-Pong"),n(r)])]),e("td",null,[e("a",v,[t("v1.0.1.0"),n(r)])]),e("td",null,[e("a",_,[t("v1.0.1.0"),n(r)])])]),e("tr",null,[e("td",null,[e("a",b,[t("Allow-List"),n(r)])]),e("td",null,[e("a",k,[t("v1.0.0.1"),n(r)])]),e("td",null,[e("a",x,[t("v1.0.0.1"),n(r)])])]),e("tr",null,[e("td",null,[e("a",w,[t("MII Process Feasibility"),n(r)])]),e("td",null,[e("a",y,[t("v1.0.0.5"),n(r)])]),e("td",null,[e("a",P,[t("v1.0.0.5"),n(r)])])]),e("tr",null,[e("td",null,[e("a",z,[t("MII Process Report"),n(r)])]),e("td",null,[e("a",M,[t("v1.1.0.1"),n(r)])]),e("td",null,[e("a",I,[t("v1.0.0.0"),n(r)])])]),e("tr",null,[e("td",null,[e("a",D,[t("MII Process Data Transfer"),n(r)])]),e("td",null,[e("a",j,[t("v1.0.0.1"),n(r)])]),e("td",null,[e("a",S,[t("v1.0.0.1"),n(r)])])]),e("tr",null,[e("td",null,[e("a",q,[t("MII Process Data Sharing"),n(r)])]),e("td",null,[e("a",T,[t("v1.0.1.0"),n(r)])]),e("td",null,[e("a",E,[t("v1.0.1.0"),n(r)])])]),e("tr",null,[e("td",null,[e("a",F,[t("NUM-RDP"),n(r)])]),e("td",null,[e("a",N,[t("v1.1.0.0"),n(r)])]),e("td",null,[e("a",A,[t("v1.1.0.0"),n(r)])])])])]),e("ul",null,[e("li",null,[t("Explore and install Process Plugins in the Marketplace. Details on each plugin are available "),e("a",B,[t("here"),n(r)]),t(".")]),O]),R,e("ul",null,[e("li",null,[t("A DSF installation of version 1.3.x or higher. An installation guide can be found "),e("a",V,[t("here"),n(r)]),t(".")])]),L])}const Y=i(d,[["render",U],["__file","install-plugins.html.vue"]]),G=JSON.parse('{"path":"/v1.5.2/maintain/install-plugins.html","title":"Install Plugins","lang":"en-US","frontmatter":{"title":"Install Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[{"level":3,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[]},{"level":3,"title":"Deployment","slug":"deployment","link":"#deployment","children":[]}]}],"git":{"createdTime":1720449876000,"updatedTime":1722427768000,"contributors":[{"name":"Mohammad Amir Kannout","email":"mkannout@stud.hs-heilbronn.de","commits":2},{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.18,"words":353},"filePathRelative":"v1.5.2/maintain/install-plugins.md","localizedDate":"July 8, 2024","excerpt":"
    \\n

    Marketplace for process plugins

    \\n

    To install and learn more about each Process Plugin, you can visit the Marketplace here.

    \\n
    \\n

    Overview

    "}');export{Y as comp,G as data}; diff --git a/assets/install-plugins.html-DiPcZpIN.js b/assets/install-plugins.html-DiPcZpIN.js new file mode 100644 index 000000000..22cfd4352 --- /dev/null +++ b/assets/install-plugins.html-DiPcZpIN.js @@ -0,0 +1,7 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as s,c as o,a as e,b as t,d as n,e as l}from"./app-kq9lCQfY.js";const d={},c={class:"hint-container tip"},h=e("p",{class:"hint-container-title"},"Marketplace for process plugins",-1),p={href:"https://hub.dsf.dev/",target:"_blank",rel:"noopener noreferrer"},u=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,[e("strong",null,"Overview")])])],-1),g=e("ul",null,[e("li",null,"You can find an overview of compatable process plugins below (last updated 25/07/2024).")],-1),m=e("thead",null,[e("tr",null,[e("th",null,"Process Plugin"),e("th",null,"released for test"),e("th",null,"released for production")])],-1),f={href:"https://github.com/datasharingframework/dsf-process-ping-pong/releases",target:"_blank",rel:"noopener noreferrer"},v={href:"https://github.com/datasharingframework/dsf-process-ping-pong/releases/tag/v1.0.1.0",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/datasharingframework/dsf-process-ping-pong/releases/tag/v1.0.1.0",target:"_blank",rel:"noopener noreferrer"},b={href:"https://github.com/datasharingframework/dsf-process-allow-list/releases",target:"_blank",rel:"noopener noreferrer"},k={href:"https://github.com/datasharingframework/dsf-process-allow-list/releases/tag/v1.0.0.1",target:"_blank",rel:"noopener noreferrer"},x={href:"https://github.com/datasharingframework/dsf-process-allow-list/releases/tag/v1.0.0.1",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/medizininformatik-initiative/mii-process-feasibility/releases",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/medizininformatik-initiative/mii-process-feasibility/releases/tag/v1.0.0.5",target:"_blank",rel:"noopener noreferrer"},P={href:"https://github.com/medizininformatik-initiative/mii-process-feasibility/releases/tag/v1.0.0.5",target:"_blank",rel:"noopener noreferrer"},z={href:"https://github.com/medizininformatik-initiative/mii-process-report/releases",target:"_blank",rel:"noopener noreferrer"},I={href:"https://github.com/medizininformatik-initiative/mii-process-report/releases/tag/v1.1.0.1",target:"_blank",rel:"noopener noreferrer"},M={href:"https://github.com/medizininformatik-initiative/mii-process-report/releases/tag/v1.0.0.0",target:"_blank",rel:"noopener noreferrer"},j={href:"https://github.com/medizininformatik-initiative/mii-process-data-transfer/releases",target:"_blank",rel:"noopener noreferrer"},D={href:"https://github.com/medizininformatik-initiative/mii-process-data-sharing/releases/tag/v1.0.0.1",target:"_blank",rel:"noopener noreferrer"},q={href:"https://github.com/medizininformatik-initiative/mii-process-data-sharing/releases/tag/v1.0.0.1",target:"_blank",rel:"noopener noreferrer"},S={href:"https://github.com/medizininformatik-initiative/mii-process-data-sharing/releases",target:"_blank",rel:"noopener noreferrer"},T={href:"https://github.com/medizininformatik-initiative/mii-process-data-transfer/releases/tag/v1.0.1.0",target:"_blank",rel:"noopener noreferrer"},E={href:"https://github.com/medizininformatik-initiative/mii-process-data-transfer/releases/tag/v1.0.1.0",target:"_blank",rel:"noopener noreferrer"},F={href:"https://github.com/num-codex/codex-processes-ap1/releases",target:"_blank",rel:"noopener noreferrer"},N={href:"https://github.com/num-codex/codex-processes-ap1/releases/tag/v1.1.0.0",target:"_blank",rel:"noopener noreferrer"},B={href:"https://github.com/num-codex/codex-processes-ap1/releases/tag/v1.1.0.0",target:"_blank",rel:"noopener noreferrer"},A={href:"https://hub.dsf.dev/",target:"_blank",rel:"noopener noreferrer"},O=e("li",null,"Deploying the process plugin to the DSF involves copy the process jar-file and configuring environment variable for the business process engine (BPE).",-1),R=e("h3",{id:"prerequisites",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#prerequisites"},[e("span",null,"Prerequisites")])],-1),V={href:"https://dsf.dev/stable/maintain/install.html",target:"_blank",rel:"noopener noreferrer"},L=l(`

    Deployment

    • Add the process jar-file to the DSF BPE folder /opt/bpe/process:
    wget (your jar-file download link)
    +

    For example:

     wget https://github.com/medizininformatik-initiative/mii-process-data-sharing/releases/download/v1.0.0.1/mii-process-data-sharing-1.0.0.1.jar
    +
    • Make sure the process is readable by the bpe user or group, for example by executing:
    sudo chmod 440 (your jar-file name.jar)
    +sudo chown root:bpe (your jar-file name.jar)
    +

    For example:

    sudo chmod 440 mii-process-data-sharing-1.0.0.1.jar
    +sudo chown root:bpe mii-process-data-sharing-1.0.0.1.jar
    +
    • Modify the process exclude config in /opt/bpe/docker-compose.yml
    • Reminder: Update/verify required configurations in docker-compose.yml
    `,10);function U(C,J){const r=a("ExternalLinkIcon");return s(),o("div",null,[e("div",c,[h,e("p",null,[t("To install and learn more about each Process Plugin, you can visit the Marketplace "),e("a",p,[t("here"),n(r)]),t(".")])]),u,g,e("table",null,[m,e("tbody",null,[e("tr",null,[e("td",null,[e("a",f,[t("Ping-Pong"),n(r)])]),e("td",null,[e("a",v,[t("v1.0.1.0"),n(r)])]),e("td",null,[e("a",_,[t("v1.0.1.0"),n(r)])])]),e("tr",null,[e("td",null,[e("a",b,[t("Allow-List"),n(r)])]),e("td",null,[e("a",k,[t("v1.0.0.1"),n(r)])]),e("td",null,[e("a",x,[t("v1.0.0.1"),n(r)])])]),e("tr",null,[e("td",null,[e("a",w,[t("MII Process Feasibility"),n(r)])]),e("td",null,[e("a",y,[t("v1.0.0.5"),n(r)])]),e("td",null,[e("a",P,[t("v1.0.0.5"),n(r)])])]),e("tr",null,[e("td",null,[e("a",z,[t("MII Process Report"),n(r)])]),e("td",null,[e("a",I,[t("v1.1.0.1"),n(r)])]),e("td",null,[e("a",M,[t("v1.0.0.0"),n(r)])])]),e("tr",null,[e("td",null,[e("a",j,[t("MII Process Data Transfer"),n(r)])]),e("td",null,[e("a",D,[t("v1.0.0.1"),n(r)])]),e("td",null,[e("a",q,[t("v1.0.0.1"),n(r)])])]),e("tr",null,[e("td",null,[e("a",S,[t("MII Process Data Sharing"),n(r)])]),e("td",null,[e("a",T,[t("v1.0.1.0"),n(r)])]),e("td",null,[e("a",E,[t("v1.0.1.0"),n(r)])])]),e("tr",null,[e("td",null,[e("a",F,[t("NUM-RDP"),n(r)])]),e("td",null,[e("a",N,[t("v1.1.0.0"),n(r)])]),e("td",null,[e("a",B,[t("v1.1.0.0"),n(r)])])])])]),e("ul",null,[e("li",null,[t("Explore and install Process Plugins in the Marketplace. Details on each plugin are available "),e("a",A,[t("here"),n(r)]),t(".")]),O]),R,e("ul",null,[e("li",null,[t("A DSF installation of version 1.3.x or higher. An installation guide can be found "),e("a",V,[t("here"),n(r)]),t(".")])]),L])}const H=i(d,[["render",U],["__file","install-plugins.html.vue"]]),K=JSON.parse('{"path":"/stable/maintain/install-plugins.html","title":"Install Plugins","lang":"en-US","frontmatter":{"title":"Install Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[{"level":3,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[]},{"level":3,"title":"Deployment","slug":"deployment","link":"#deployment","children":[]}]}],"git":{"createdTime":null,"updatedTime":null,"contributors":[]},"readingTime":{"minutes":1.18,"words":353},"filePathRelative":"stable/maintain/install-plugins.md","excerpt":"
    \\n

    Marketplace for process plugins

    \\n

    To install and learn more about each Process Plugin, you can visit the Marketplace here.

    \\n
    \\n

    Overview

    "}');export{H as comp,K as data}; diff --git a/assets/install-plugins.html-OqBmbFsQ.js b/assets/install-plugins.html-OqBmbFsQ.js new file mode 100644 index 000000000..0f3c9a028 --- /dev/null +++ b/assets/install-plugins.html-OqBmbFsQ.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as t,c as a,a as e,b as s,d as i}from"./app-kq9lCQfY.js";const l={},c=e("p",null,"You can find an overview of compatable process plugins below.",-1),p=e("h2",{id:"common-processes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#common-processes"},[e("span",null,"Common processes")])],-1),m={href:"https://github.com/datasharingframework/dsf-process-ping-pong/releases",target:"_blank",rel:"noopener noreferrer"},h={href:"https://github.com/datasharingframework/dsf-process-allow-list/releases",target:"_blank",rel:"noopener noreferrer"},d=e("h2",{id:"mii-processes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#mii-processes"},[e("span",null,"MII processes")])],-1),u={href:"https://github.com/medizininformatik-initiative/mii-process-feasibility/releases",target:"_blank",rel:"noopener noreferrer"},f={href:"https://github.com/medizininformatik-initiative/mii-process-report/releases",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/medizininformatik-initiative/mii-process-data-transfer/releases",target:"_blank",rel:"noopener noreferrer"},_=e("h2",{id:"num-processes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#num-processes"},[e("span",null,"NUM processes")])],-1),b={href:"https://github.com/num-codex/codex-processes-ap1/releases",target:"_blank",rel:"noopener noreferrer"};function k(w,v){const r=n("ExternalLinkIcon");return t(),a("div",null,[c,p,e("ul",null,[e("li",null,[s("Ping-Pong: "),e("a",m,[s("https://github.com/datasharingframework/dsf-process-ping-pong/releases"),i(r)])]),e("li",null,[s("AllowList Download: "),e("a",h,[s("https://github.com/datasharingframework/dsf-process-allow-list/releases"),i(r)])])]),d,e("ul",null,[e("li",null,[s("Feasibility: "),e("a",u,[s("https://github.com/medizininformatik-initiative/mii-process-feasibility/releases"),i(r)])]),e("li",null,[s("KDS-Report: "),e("a",f,[s("https://github.com/medizininformatik-initiative/mii-process-report/releases"),i(r)])])]),e("ul",null,[e("li",null,[s("MII-Data-Transfer: "),e("a",g,[s("https://github.com/medizininformatik-initiative/mii-process-data-transfer/releases"),i(r)])])]),_,e("ul",null,[e("li",null,[s("NUM-RDP: "),e("a",b,[s("https://github.com/num-codex/codex-processes-ap1/releases"),i(r)])])])])}const z=o(l,[["render",k],["__file","install-plugins.html.vue"]]),P=JSON.parse('{"path":"/v1.4.0/maintain/install-plugins.html","title":"Install Plugins","lang":"en-US","frontmatter":{"title":"Install Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Common processes","slug":"common-processes","link":"#common-processes","children":[]},{"level":2,"title":"MII processes","slug":"mii-processes","link":"#mii-processes","children":[]},{"level":2,"title":"NUM processes","slug":"num-processes","link":"#num-processes","children":[]}],"git":{"createdTime":1702917645000,"updatedTime":1708339179000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":0.24,"words":73},"filePathRelative":"v1.4.0/maintain/install-plugins.md","localizedDate":"December 18, 2023","excerpt":"

    You can find an overview of compatable process plugins below.

    \\n

    Common processes

    \\n"}');export{z as comp,P as data}; diff --git a/assets/install.html-BKqC2SR0.js b/assets/install.html-BKqC2SR0.js new file mode 100644 index 000000000..ebcbed704 --- /dev/null +++ b/assets/install.html-BKqC2SR0.js @@ -0,0 +1,35 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as s,c as l,a as t,b as e,d as o,e as i}from"./app-kq9lCQfY.js";const c={},d=i('

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    ',6),p={href:"https://docs.docker.com/engine/install",target:"_blank",rel:"noopener noreferrer"},h=i(`
    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)
    `,10),u={href:"http://simplifier.net",target:"_blank",rel:"noopener noreferrer"},f=i(`

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2101 fhir
      +sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_5_1.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_5_1.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L39:      - app_client_certificate_private_key.pem.password
        +...
        +L54:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L141:  app_client_certificate_private_key.pem.password:
        +L142:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2202 bpe
      +sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_5_1.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_5_1.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L13:      - app_client_certificate_private_key.pem.password
        +...
        +L35:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L89:  app_client_certificate_private_key.pem.password:
        +L90:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) -  INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket open, session SOME_RANDOM_UUID1
    +INFO Grizzly(1) -  INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket open, session SOME_RANDOM_UUID2
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    `,14);function m(v,g){const r=n("ExternalLinkIcon");return s(),l("div",null,[d,t("p",null,[e("Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see "),t("a",p,[e("https://docs.docker.com/engine/install"),o(r)]),e(".")]),h,t("p",null,[e("Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, "),t("a",u,[e("simplifier.net"),o(r)]),e(" or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.")]),f])}const y=a(c,[["render",m],["__file","install.html.vue"]]),k=JSON.parse('{"path":"/v1.5.1/maintain/install.html","title":"Install DSF 1.5.1","lang":"en-US","frontmatter":{"title":"Install DSF 1.5.1","icon":"install"},"headers":[{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[{"level":3,"title":"Virtual Machines","slug":"virtual-machines","link":"#virtual-machines","children":[]},{"level":3,"title":"Docker / Docker-Compose","slug":"docker-docker-compose","link":"#docker-docker-compose","children":[]},{"level":3,"title":"Client/Server Certificates","slug":"client-server-certificates","link":"#client-server-certificates","children":[]},{"level":3,"title":"Network setup / Network access","slug":"network-setup-network-access","link":"#network-setup-network-access","children":[]}]},{"level":2,"title":"Setup","slug":"setup","link":"#setup","children":[{"level":3,"title":"Prepare Certificates","slug":"prepare-certificates","link":"#prepare-certificates","children":[]},{"level":3,"title":"DSF FHIR Server","slug":"dsf-fhir-server","link":"#dsf-fhir-server","children":[]},{"level":3,"title":"DSF BPE Server","slug":"dsf-bpe-server","link":"#dsf-bpe-server","children":[]},{"level":3,"title":"Logs","slug":"logs","link":"#logs","children":[]},{"level":3,"title":"On-Boarding","slug":"on-boarding","link":"#on-boarding","children":[]}]}],"git":{"createdTime":1713374283000,"updatedTime":1718629884000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":5.76,"words":1729},"filePathRelative":"v1.5.1/maintain/install.md","localizedDate":"April 17, 2024","excerpt":"

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    \\n
    \\n

    Unified installation manual

    \\n

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    \\n
    "}');export{y as comp,k as data}; diff --git a/assets/install.html-BaXMdr7u.js b/assets/install.html-BaXMdr7u.js new file mode 100644 index 000000000..045f2ead4 --- /dev/null +++ b/assets/install.html-BaXMdr7u.js @@ -0,0 +1,35 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as s,c as l,a as t,b as e,d as o,e as i}from"./app-kq9lCQfY.js";const c={},d=i('

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    ',6),p={href:"https://docs.docker.com/engine/install",target:"_blank",rel:"noopener noreferrer"},h=i(`
    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)
    `,10),u={href:"http://simplifier.net",target:"_blank",rel:"noopener noreferrer"},f=i(`

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2101 fhir
      +sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_3_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_3_0.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L44:      - app_client_certificate_private_key.pem.password
        +...
        +L59:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L146:  app_client_certificate_private_key.pem.password:
        +L147:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2202 bpe
      +sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_3_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_3_0.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L18:      - app_client_certificate_private_key.pem.password
        +...
        +L40:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L97:  app_client_certificate_private_key.pem.password:
        +L98:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1}
    +INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2}
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    `,14);function m(v,g){const r=n("ExternalLinkIcon");return s(),l("div",null,[d,t("p",null,[e("Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see "),t("a",p,[e("https://docs.docker.com/engine/install"),o(r)]),e(".")]),h,t("p",null,[e("Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, "),t("a",u,[e("simplifier.net"),o(r)]),e(" or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.")]),f])}const F=a(c,[["render",m],["__file","install.html.vue"]]),w=JSON.parse('{"path":"/v1.3.0/maintain/install.html","title":"Install DSF 1.3.0","lang":"en-US","frontmatter":{"title":"Install DSF 1.3.0","icon":"install"},"headers":[{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[{"level":3,"title":"Virtual Machines","slug":"virtual-machines","link":"#virtual-machines","children":[]},{"level":3,"title":"Docker / Docker-Compose","slug":"docker-docker-compose","link":"#docker-docker-compose","children":[]},{"level":3,"title":"Client/Server Certificates","slug":"client-server-certificates","link":"#client-server-certificates","children":[]},{"level":3,"title":"Network setup / Network access","slug":"network-setup-network-access","link":"#network-setup-network-access","children":[]}]},{"level":2,"title":"Setup","slug":"setup","link":"#setup","children":[{"level":3,"title":"Prepare Certificates","slug":"prepare-certificates","link":"#prepare-certificates","children":[]},{"level":3,"title":"DSF FHIR Server","slug":"dsf-fhir-server","link":"#dsf-fhir-server","children":[]},{"level":3,"title":"DSF BPE Server","slug":"dsf-bpe-server","link":"#dsf-bpe-server","children":[]},{"level":3,"title":"Logs","slug":"logs","link":"#logs","children":[]},{"level":3,"title":"On-Boarding","slug":"on-boarding","link":"#on-boarding","children":[]}]}],"git":{"createdTime":1696944513000,"updatedTime":1698658900000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":5.84,"words":1753},"filePathRelative":"v1.3.0/maintain/install.md","localizedDate":"October 10, 2023","excerpt":"

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    \\n
    \\n

    Unified installation manual

    \\n

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    \\n
    "}');export{F as comp,w as data}; diff --git a/assets/install.html-BrMS_Ond.js b/assets/install.html-BrMS_Ond.js new file mode 100644 index 000000000..7c17fba25 --- /dev/null +++ b/assets/install.html-BrMS_Ond.js @@ -0,0 +1,35 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as s,c as l,a as t,b as e,d as o,e as i}from"./app-kq9lCQfY.js";const c={},d=i('

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    ',6),p={href:"https://docs.docker.com/engine/install",target:"_blank",rel:"noopener noreferrer"},h=i(`
    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)
    `,10),u={href:"http://simplifier.net",target:"_blank",rel:"noopener noreferrer"},f=i(`

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2101 fhir
      +sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_5_2.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_5_2.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L39:      - app_client_certificate_private_key.pem.password
        +...
        +L54:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L141:  app_client_certificate_private_key.pem.password:
        +L142:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2202 bpe
      +sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_5_2.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_5_2.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L13:      - app_client_certificate_private_key.pem.password
        +...
        +L35:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L89:  app_client_certificate_private_key.pem.password:
        +L90:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) -  INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket open, session SOME_RANDOM_UUID1
    +INFO Grizzly(1) -  INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket open, session SOME_RANDOM_UUID2
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    `,14);function m(v,g){const r=n("ExternalLinkIcon");return s(),l("div",null,[d,t("p",null,[e("Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see "),t("a",p,[e("https://docs.docker.com/engine/install"),o(r)]),e(".")]),h,t("p",null,[e("Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, "),t("a",u,[e("simplifier.net"),o(r)]),e(" or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.")]),f])}const y=a(c,[["render",m],["__file","install.html.vue"]]),k=JSON.parse('{"path":"/stable/maintain/install.html","title":"Install DSF 1.5.2","lang":"en-US","frontmatter":{"title":"Install DSF 1.5.2","icon":"install"},"headers":[{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[{"level":3,"title":"Virtual Machines","slug":"virtual-machines","link":"#virtual-machines","children":[]},{"level":3,"title":"Docker / Docker-Compose","slug":"docker-docker-compose","link":"#docker-docker-compose","children":[]},{"level":3,"title":"Client/Server Certificates","slug":"client-server-certificates","link":"#client-server-certificates","children":[]},{"level":3,"title":"Network setup / Network access","slug":"network-setup-network-access","link":"#network-setup-network-access","children":[]}]},{"level":2,"title":"Setup","slug":"setup","link":"#setup","children":[{"level":3,"title":"Prepare Certificates","slug":"prepare-certificates","link":"#prepare-certificates","children":[]},{"level":3,"title":"DSF FHIR Server","slug":"dsf-fhir-server","link":"#dsf-fhir-server","children":[]},{"level":3,"title":"DSF BPE Server","slug":"dsf-bpe-server","link":"#dsf-bpe-server","children":[]},{"level":3,"title":"Logs","slug":"logs","link":"#logs","children":[]},{"level":3,"title":"On-Boarding","slug":"on-boarding","link":"#on-boarding","children":[]}]}],"git":{"createdTime":1688985700000,"updatedTime":1692790324000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":12},{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":5.76,"words":1729},"filePathRelative":"stable/maintain/install.md","localizedDate":"July 10, 2023","excerpt":"

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    \\n
    \\n

    Unified installation manual

    \\n

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    \\n
    "}');export{y as comp,k as data}; diff --git a/assets/install.html-CJf5u1D5.js b/assets/install.html-CJf5u1D5.js new file mode 100644 index 000000000..fe2cf29e5 --- /dev/null +++ b/assets/install.html-CJf5u1D5.js @@ -0,0 +1,35 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as s,c as l,a as t,b as e,d as o,e as i}from"./app-kq9lCQfY.js";const c={},d=i('

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    ',6),p={href:"https://docs.docker.com/engine/install",target:"_blank",rel:"noopener noreferrer"},h=i(`
    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)
    `,10),u={href:"http://simplifier.net",target:"_blank",rel:"noopener noreferrer"},f=i(`

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2101 fhir
      +sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_5_2.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_5_2.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L39:      - app_client_certificate_private_key.pem.password
        +...
        +L54:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L141:  app_client_certificate_private_key.pem.password:
        +L142:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2202 bpe
      +sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_5_2.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_5_2.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L13:      - app_client_certificate_private_key.pem.password
        +...
        +L35:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L89:  app_client_certificate_private_key.pem.password:
        +L90:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) -  INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket open, session SOME_RANDOM_UUID1
    +INFO Grizzly(1) -  INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket open, session SOME_RANDOM_UUID2
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    `,14);function m(v,g){const r=n("ExternalLinkIcon");return s(),l("div",null,[d,t("p",null,[e("Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see "),t("a",p,[e("https://docs.docker.com/engine/install"),o(r)]),e(".")]),h,t("p",null,[e("Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, "),t("a",u,[e("simplifier.net"),o(r)]),e(" or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.")]),f])}const k=a(c,[["render",m],["__file","install.html.vue"]]),y=JSON.parse('{"path":"/v1.5.2/maintain/install.html","title":"Install DSF 1.5.2","lang":"en-US","frontmatter":{"title":"Install DSF 1.5.2","icon":"install"},"headers":[{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[{"level":3,"title":"Virtual Machines","slug":"virtual-machines","link":"#virtual-machines","children":[]},{"level":3,"title":"Docker / Docker-Compose","slug":"docker-docker-compose","link":"#docker-docker-compose","children":[]},{"level":3,"title":"Client/Server Certificates","slug":"client-server-certificates","link":"#client-server-certificates","children":[]},{"level":3,"title":"Network setup / Network access","slug":"network-setup-network-access","link":"#network-setup-network-access","children":[]}]},{"level":2,"title":"Setup","slug":"setup","link":"#setup","children":[{"level":3,"title":"Prepare Certificates","slug":"prepare-certificates","link":"#prepare-certificates","children":[]},{"level":3,"title":"DSF FHIR Server","slug":"dsf-fhir-server","link":"#dsf-fhir-server","children":[]},{"level":3,"title":"DSF BPE Server","slug":"dsf-bpe-server","link":"#dsf-bpe-server","children":[]},{"level":3,"title":"Logs","slug":"logs","link":"#logs","children":[]},{"level":3,"title":"On-Boarding","slug":"on-boarding","link":"#on-boarding","children":[]}]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":5.76,"words":1729},"filePathRelative":"v1.5.2/maintain/install.md","localizedDate":"July 8, 2024","excerpt":"

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    \\n
    \\n

    Unified installation manual

    \\n

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    \\n
    "}');export{k as comp,y as data}; diff --git a/assets/install.html-CPYdjQIY.js b/assets/install.html-CPYdjQIY.js new file mode 100644 index 000000000..a1903a72b --- /dev/null +++ b/assets/install.html-CPYdjQIY.js @@ -0,0 +1,35 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as s,c as l,a as t,b as e,d as o,e as i}from"./app-kq9lCQfY.js";const c={},d=i('

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    ',6),p={href:"https://docs.docker.com/engine/install",target:"_blank",rel:"noopener noreferrer"},h=i(`
    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)
    `,10),u={href:"http://simplifier.net",target:"_blank",rel:"noopener noreferrer"},f=i(`

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2101 fhir
      +sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_3_2.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_3_2.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L39:      - app_client_certificate_private_key.pem.password
        +...
        +L54:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L141:  app_client_certificate_private_key.pem.password:
        +L142:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2202 bpe
      +sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_3_2.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_3_2.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L13:      - app_client_certificate_private_key.pem.password
        +...
        +L35:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L89:  app_client_certificate_private_key.pem.password:
        +L90:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1}
    +INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2}
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    `,14);function m(v,g){const r=n("ExternalLinkIcon");return s(),l("div",null,[d,t("p",null,[e("Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see "),t("a",p,[e("https://docs.docker.com/engine/install"),o(r)]),e(".")]),h,t("p",null,[e("Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, "),t("a",u,[e("simplifier.net"),o(r)]),e(" or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.")]),f])}const w=a(c,[["render",m],["__file","install.html.vue"]]),F=JSON.parse('{"path":"/v1.3.2/maintain/install.html","title":"Install DSF 1.3.2","lang":"en-US","frontmatter":{"title":"Install DSF 1.3.2","icon":"install"},"headers":[{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[{"level":3,"title":"Virtual Machines","slug":"virtual-machines","link":"#virtual-machines","children":[]},{"level":3,"title":"Docker / Docker-Compose","slug":"docker-docker-compose","link":"#docker-docker-compose","children":[]},{"level":3,"title":"Client/Server Certificates","slug":"client-server-certificates","link":"#client-server-certificates","children":[]},{"level":3,"title":"Network setup / Network access","slug":"network-setup-network-access","link":"#network-setup-network-access","children":[]}]},{"level":2,"title":"Setup","slug":"setup","link":"#setup","children":[{"level":3,"title":"Prepare Certificates","slug":"prepare-certificates","link":"#prepare-certificates","children":[]},{"level":3,"title":"DSF FHIR Server","slug":"dsf-fhir-server","link":"#dsf-fhir-server","children":[]},{"level":3,"title":"DSF BPE Server","slug":"dsf-bpe-server","link":"#dsf-bpe-server","children":[]},{"level":3,"title":"Logs","slug":"logs","link":"#logs","children":[]},{"level":3,"title":"On-Boarding","slug":"on-boarding","link":"#on-boarding","children":[]}]}],"git":{"createdTime":1701710218000,"updatedTime":1701710218000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":5.77,"words":1731},"filePathRelative":"v1.3.2/maintain/install.md","localizedDate":"December 4, 2023","excerpt":"

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    \\n
    \\n

    Unified installation manual

    \\n

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    \\n
    "}');export{w as comp,F as data}; diff --git a/assets/install.html-CRFtEX6d.js b/assets/install.html-CRFtEX6d.js new file mode 100644 index 000000000..4fed856cd --- /dev/null +++ b/assets/install.html-CRFtEX6d.js @@ -0,0 +1,35 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as s,c as l,a as t,b as e,d as o,e as i}from"./app-kq9lCQfY.js";const c={},d=i('

    Member of existing networks

    If you are part of an existing network (e.g. the German MII), please install the appropriate DSF version. For the production environment of MII and NUM this is currently DSF 0.9.x.

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    ',7),p={href:"https://docs.docker.com/engine/install",target:"_blank",rel:"noopener noreferrer"},h=i(`
    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)
    `,10),u={href:"http://simplifier.net",target:"_blank",rel:"noopener noreferrer"},m=i(`

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo addgroup --gid 2101 fhir
      +sudo adduser --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_0_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_0_0.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L44:      - app_client_certificate_private_key.pem.password
        +...
        +L59:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L149:  app_client_certificate_private_key.pem.password:
        +L150:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_BASE_URL: https://TODO_DSF_FHIR_SERVER_EXTERNAL_FQDN/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: TODO_CLIENT_CERTIFICATE_THUMBPRINT
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.
        • DEV_DSF_FHIR_SERVER_ROLECONFIG: You can add other client certificates (e.g. personal DFN PKI S/MIME certificates, e.g. from admins) to your DSF instance.
          Set the SHA-512 Hash (lowercase hex) of your additional client certificates. The parameter TODO_WEBUSER_CLIENT_CERTIFICATE_THUMBPRINT can be a single thumbprint or can be expanded to a list (like dsf-role). If you don't have additional thumbprints you want to add, simply remove the DEV_DSF_FHIR_SERVER_ROLECONFIG variable from your docker-compose file.
        • For additional environment variables, see DSF configuration parameters - FHIR Server
    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo addgroup --gid 2202 bpe
      +sudo adduser --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_0_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_0_0.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L18:      - app_client_certificate_private_key.pem.password
        +...
        +L40:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L89:  app_client_certificate_private_key.pem.password:
        +L90:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves the main homepage of the organization, e.g. hs-heilbronn.de
        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://TODO_DSF_FHIR_SERVER_FQDN/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir
        • For additional environment variables, see DSF configuration parameters - BPE Server
    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1}
    +INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2}
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    `,14);function f(v,g){const r=n("ExternalLinkIcon");return s(),l("div",null,[d,t("p",null,[e("Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see "),t("a",p,[e("https://docs.docker.com/engine/install"),o(r)]),e(".")]),h,t("p",null,[e("Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, "),t("a",u,[e("simplifier.net"),o(r)]),e(" or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.")]),m])}const F=a(c,[["render",f],["__file","install.html.vue"]]),S=JSON.parse('{"path":"/v1.0.0/maintain/install.html","title":"Install DSF 1.0.0","lang":"en-US","frontmatter":{"title":"Install DSF 1.0.0","icon":"install"},"headers":[{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[{"level":3,"title":"Virtual Machines","slug":"virtual-machines","link":"#virtual-machines","children":[]},{"level":3,"title":"Docker / Docker-Compose","slug":"docker-docker-compose","link":"#docker-docker-compose","children":[]},{"level":3,"title":"Client/Server Certificates","slug":"client-server-certificates","link":"#client-server-certificates","children":[]},{"level":3,"title":"Network setup / Network access","slug":"network-setup-network-access","link":"#network-setup-network-access","children":[]}]},{"level":2,"title":"Setup","slug":"setup","link":"#setup","children":[{"level":3,"title":"Prepare Certificates","slug":"prepare-certificates","link":"#prepare-certificates","children":[]},{"level":3,"title":"DSF FHIR Server","slug":"dsf-fhir-server","link":"#dsf-fhir-server","children":[]},{"level":3,"title":"DSF BPE Server","slug":"dsf-bpe-server","link":"#dsf-bpe-server","children":[]},{"level":3,"title":"Logs","slug":"logs","link":"#logs","children":[]},{"level":3,"title":"On-Boarding","slug":"on-boarding","link":"#on-boarding","children":[]}]}],"git":{"createdTime":1692708510000,"updatedTime":1692708510000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":6.1,"words":1831},"filePathRelative":"v1.0.0/maintain/install.md","localizedDate":"August 22, 2023","excerpt":"
    \\n

    Member of existing networks

    \\n

    If you are part of an existing network (e.g. the German MII), please install the appropriate DSF version. For the production environment of MII and NUM this is currently DSF 0.9.x.

    \\n
    "}');export{F as comp,S as data}; diff --git a/assets/install.html-CaUAgN_g.js b/assets/install.html-CaUAgN_g.js new file mode 100644 index 000000000..3589ab78b --- /dev/null +++ b/assets/install.html-CaUAgN_g.js @@ -0,0 +1,35 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as s,c as l,a as t,b as e,d as o,e as i}from"./app-kq9lCQfY.js";const c={},d=i('

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    ',6),p={href:"https://docs.docker.com/engine/install",target:"_blank",rel:"noopener noreferrer"},h=i(`
    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)
    `,10),u={href:"http://simplifier.net",target:"_blank",rel:"noopener noreferrer"},f=i(`

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2101 fhir
      +sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_3_1.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_3_1.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L39:      - app_client_certificate_private_key.pem.password
        +...
        +L54:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L141:  app_client_certificate_private_key.pem.password:
        +L142:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2202 bpe
      +sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_3_1.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_3_1.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L13:      - app_client_certificate_private_key.pem.password
        +...
        +L35:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L89:  app_client_certificate_private_key.pem.password:
        +L90:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1}
    +INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2}
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    `,14);function m(v,g){const r=n("ExternalLinkIcon");return s(),l("div",null,[d,t("p",null,[e("Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see "),t("a",p,[e("https://docs.docker.com/engine/install"),o(r)]),e(".")]),h,t("p",null,[e("Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, "),t("a",u,[e("simplifier.net"),o(r)]),e(" or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.")]),f])}const w=a(c,[["render",m],["__file","install.html.vue"]]),F=JSON.parse('{"path":"/v1.3.1/maintain/install.html","title":"Install DSF 1.3.1","lang":"en-US","frontmatter":{"title":"Install DSF 1.3.1","icon":"install"},"headers":[{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[{"level":3,"title":"Virtual Machines","slug":"virtual-machines","link":"#virtual-machines","children":[]},{"level":3,"title":"Docker / Docker-Compose","slug":"docker-docker-compose","link":"#docker-docker-compose","children":[]},{"level":3,"title":"Client/Server Certificates","slug":"client-server-certificates","link":"#client-server-certificates","children":[]},{"level":3,"title":"Network setup / Network access","slug":"network-setup-network-access","link":"#network-setup-network-access","children":[]}]},{"level":2,"title":"Setup","slug":"setup","link":"#setup","children":[{"level":3,"title":"Prepare Certificates","slug":"prepare-certificates","link":"#prepare-certificates","children":[]},{"level":3,"title":"DSF FHIR Server","slug":"dsf-fhir-server","link":"#dsf-fhir-server","children":[]},{"level":3,"title":"DSF BPE Server","slug":"dsf-bpe-server","link":"#dsf-bpe-server","children":[]},{"level":3,"title":"Logs","slug":"logs","link":"#logs","children":[]},{"level":3,"title":"On-Boarding","slug":"on-boarding","link":"#on-boarding","children":[]}]}],"git":{"createdTime":1698748420000,"updatedTime":1699391889000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":5.77,"words":1731},"filePathRelative":"v1.3.1/maintain/install.md","localizedDate":"October 31, 2023","excerpt":"

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    \\n
    \\n

    Unified installation manual

    \\n

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    \\n
    "}');export{w as comp,F as data}; diff --git a/assets/install.html-Ci01uV9w.js b/assets/install.html-Ci01uV9w.js new file mode 100644 index 000000000..67665fea3 --- /dev/null +++ b/assets/install.html-Ci01uV9w.js @@ -0,0 +1,35 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as s,c as l,a as t,b as e,d as o,e as i}from"./app-kq9lCQfY.js";const c={},d=i('

    Member of existing networks

    If you are part of an existing network (e.g. the German MII), please install the appropriate DSF version. For the production environment of MII and NUM this is currently DSF 0.9.x.

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    ',7),p={href:"https://docs.docker.com/engine/install",target:"_blank",rel:"noopener noreferrer"},h=i(`
    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)
    `,10),u={href:"http://simplifier.net",target:"_blank",rel:"noopener noreferrer"},f=i(`

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2101 fhir
      +sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_2_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_2_0.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L44:      - app_client_certificate_private_key.pem.password
        +...
        +L59:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L146:  app_client_certificate_private_key.pem.password:
        +L147:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2202 bpe
      +sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_2_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_2_0.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L18:      - app_client_certificate_private_key.pem.password
        +...
        +L40:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L97:  app_client_certificate_private_key.pem.password:
        +L98:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1}
    +INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2}
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    `,14);function m(v,g){const r=n("ExternalLinkIcon");return s(),l("div",null,[d,t("p",null,[e("Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see "),t("a",p,[e("https://docs.docker.com/engine/install"),o(r)]),e(".")]),h,t("p",null,[e("Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, "),t("a",u,[e("simplifier.net"),o(r)]),e(" or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.")]),f])}const F=a(c,[["render",m],["__file","install.html.vue"]]),k=JSON.parse('{"path":"/v1.2.0/maintain/install.html","title":"Install DSF 1.2.0","lang":"en-US","frontmatter":{"title":"Install DSF 1.2.0","icon":"install"},"headers":[{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[{"level":3,"title":"Virtual Machines","slug":"virtual-machines","link":"#virtual-machines","children":[]},{"level":3,"title":"Docker / Docker-Compose","slug":"docker-docker-compose","link":"#docker-docker-compose","children":[]},{"level":3,"title":"Client/Server Certificates","slug":"client-server-certificates","link":"#client-server-certificates","children":[]},{"level":3,"title":"Network setup / Network access","slug":"network-setup-network-access","link":"#network-setup-network-access","children":[]}]},{"level":2,"title":"Setup","slug":"setup","link":"#setup","children":[{"level":3,"title":"Prepare Certificates","slug":"prepare-certificates","link":"#prepare-certificates","children":[]},{"level":3,"title":"DSF FHIR Server","slug":"dsf-fhir-server","link":"#dsf-fhir-server","children":[]},{"level":3,"title":"DSF BPE Server","slug":"dsf-bpe-server","link":"#dsf-bpe-server","children":[]},{"level":3,"title":"Logs","slug":"logs","link":"#logs","children":[]},{"level":3,"title":"On-Boarding","slug":"on-boarding","link":"#on-boarding","children":[]}]}],"git":{"createdTime":1694544770000,"updatedTime":1694547223000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":4}]},"readingTime":{"minutes":5.97,"words":1791},"filePathRelative":"v1.2.0/maintain/install.md","localizedDate":"September 12, 2023","excerpt":"
    \\n

    Member of existing networks

    \\n

    If you are part of an existing network (e.g. the German MII), please install the appropriate DSF version. For the production environment of MII and NUM this is currently DSF 0.9.x.

    \\n
    "}');export{F as comp,k as data}; diff --git a/assets/install.html-DPutC4Ur.js b/assets/install.html-DPutC4Ur.js new file mode 100644 index 000000000..0bf583297 --- /dev/null +++ b/assets/install.html-DPutC4Ur.js @@ -0,0 +1,35 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as s,c as l,a as t,b as e,d as o,e as i}from"./app-kq9lCQfY.js";const c={},d=i('

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    ',6),p={href:"https://docs.docker.com/engine/install",target:"_blank",rel:"noopener noreferrer"},h=i(`
    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)
    `,10),u={href:"http://simplifier.net",target:"_blank",rel:"noopener noreferrer"},f=i(`

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2101 fhir
      +sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_5_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_5_0.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L39:      - app_client_certificate_private_key.pem.password
        +...
        +L54:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L141:  app_client_certificate_private_key.pem.password:
        +L142:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2202 bpe
      +sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_5_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_5_0.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L13:      - app_client_certificate_private_key.pem.password
        +...
        +L35:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L89:  app_client_certificate_private_key.pem.password:
        +L90:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1}
    +INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2}
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    `,14);function m(v,g){const r=n("ExternalLinkIcon");return s(),l("div",null,[d,t("p",null,[e("Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see "),t("a",p,[e("https://docs.docker.com/engine/install"),o(r)]),e(".")]),h,t("p",null,[e("Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, "),t("a",u,[e("simplifier.net"),o(r)]),e(" or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.")]),f])}const w=a(c,[["render",m],["__file","install.html.vue"]]),F=JSON.parse('{"path":"/v1.5.0/maintain/install.html","title":"Install DSF 1.5.0","lang":"en-US","frontmatter":{"title":"Install DSF 1.5.0","icon":"install"},"headers":[{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[{"level":3,"title":"Virtual Machines","slug":"virtual-machines","link":"#virtual-machines","children":[]},{"level":3,"title":"Docker / Docker-Compose","slug":"docker-docker-compose","link":"#docker-docker-compose","children":[]},{"level":3,"title":"Client/Server Certificates","slug":"client-server-certificates","link":"#client-server-certificates","children":[]},{"level":3,"title":"Network setup / Network access","slug":"network-setup-network-access","link":"#network-setup-network-access","children":[]}]},{"level":2,"title":"Setup","slug":"setup","link":"#setup","children":[{"level":3,"title":"Prepare Certificates","slug":"prepare-certificates","link":"#prepare-certificates","children":[]},{"level":3,"title":"DSF FHIR Server","slug":"dsf-fhir-server","link":"#dsf-fhir-server","children":[]},{"level":3,"title":"DSF BPE Server","slug":"dsf-bpe-server","link":"#dsf-bpe-server","children":[]},{"level":3,"title":"Logs","slug":"logs","link":"#logs","children":[]},{"level":3,"title":"On-Boarding","slug":"on-boarding","link":"#on-boarding","children":[]}]}],"git":{"createdTime":1708419681000,"updatedTime":1708419681000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":5.77,"words":1731},"filePathRelative":"v1.5.0/maintain/install.md","localizedDate":"February 20, 2024","excerpt":"

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    \\n
    \\n

    Unified installation manual

    \\n

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    \\n
    "}');export{w as comp,F as data}; diff --git a/assets/install.html-tuyuTpsb.js b/assets/install.html-tuyuTpsb.js new file mode 100644 index 000000000..b2d985dcd --- /dev/null +++ b/assets/install.html-tuyuTpsb.js @@ -0,0 +1,35 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as s,c as l,a as t,b as e,d as o,e as i}from"./app-kq9lCQfY.js";const c={},d=i('

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    ',6),p={href:"https://docs.docker.com/engine/install",target:"_blank",rel:"noopener noreferrer"},h=i(`
    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)
    `,10),u={href:"http://simplifier.net",target:"_blank",rel:"noopener noreferrer"},f=i(`

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2101 fhir
      +sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_4_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_4_0.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L39:      - app_client_certificate_private_key.pem.password
        +...
        +L54:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L141:  app_client_certificate_private_key.pem.password:
        +L142:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2202 bpe
      +sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_4_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_4_0.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L13:      - app_client_certificate_private_key.pem.password
        +...
        +L35:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L89:  app_client_certificate_private_key.pem.password:
        +L90:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1}
    +INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2}
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    `,14);function m(v,g){const r=n("ExternalLinkIcon");return s(),l("div",null,[d,t("p",null,[e("Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see "),t("a",p,[e("https://docs.docker.com/engine/install"),o(r)]),e(".")]),h,t("p",null,[e("Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, "),t("a",u,[e("simplifier.net"),o(r)]),e(" or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.")]),f])}const w=a(c,[["render",m],["__file","install.html.vue"]]),F=JSON.parse('{"path":"/v1.4.0/maintain/install.html","title":"Install DSF 1.4.0","lang":"en-US","frontmatter":{"title":"Install DSF 1.4.0","icon":"install"},"headers":[{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[{"level":3,"title":"Virtual Machines","slug":"virtual-machines","link":"#virtual-machines","children":[]},{"level":3,"title":"Docker / Docker-Compose","slug":"docker-docker-compose","link":"#docker-docker-compose","children":[]},{"level":3,"title":"Client/Server Certificates","slug":"client-server-certificates","link":"#client-server-certificates","children":[]},{"level":3,"title":"Network setup / Network access","slug":"network-setup-network-access","link":"#network-setup-network-access","children":[]}]},{"level":2,"title":"Setup","slug":"setup","link":"#setup","children":[{"level":3,"title":"Prepare Certificates","slug":"prepare-certificates","link":"#prepare-certificates","children":[]},{"level":3,"title":"DSF FHIR Server","slug":"dsf-fhir-server","link":"#dsf-fhir-server","children":[]},{"level":3,"title":"DSF BPE Server","slug":"dsf-bpe-server","link":"#dsf-bpe-server","children":[]},{"level":3,"title":"Logs","slug":"logs","link":"#logs","children":[]},{"level":3,"title":"On-Boarding","slug":"on-boarding","link":"#on-boarding","children":[]}]}],"git":{"createdTime":1702917645000,"updatedTime":1702917645000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":5.77,"words":1731},"filePathRelative":"v1.4.0/maintain/install.md","localizedDate":"December 18, 2023","excerpt":"

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    \\n
    \\n

    Unified installation manual

    \\n

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    \\n
    "}');export{w as comp,F as data}; diff --git a/assets/install.html-v-wtBUsw.js b/assets/install.html-v-wtBUsw.js new file mode 100644 index 000000000..a29f3e534 --- /dev/null +++ b/assets/install.html-v-wtBUsw.js @@ -0,0 +1,35 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as s,c as l,a as t,b as e,d as o,e as i}from"./app-kq9lCQfY.js";const c={},d=i('

    Member of existing networks

    If you are part of an existing network (e.g. the German MII), please install the appropriate DSF version. For the production environment of MII and NUM this is currently DSF 0.9.x.

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    ',7),p={href:"https://docs.docker.com/engine/install",target:"_blank",rel:"noopener noreferrer"},h=i(`
    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)
    `,10),u={href:"http://simplifier.net",target:"_blank",rel:"noopener noreferrer"},f=i(`

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo addgroup --gid 2101 fhir
      +sudo adduser --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_1_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_1_0.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L44:      - app_client_certificate_private_key.pem.password
        +...
        +L59:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L146:  app_client_certificate_private_key.pem.password:
        +L147:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo addgroup --gid 2202 bpe
      +sudo adduser --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_1_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_1_0.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L18:      - app_client_certificate_private_key.pem.password
        +...
        +L40:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L97:  app_client_certificate_private_key.pem.password:
        +L98:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1}
    +INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2}
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    `,14);function m(v,g){const r=n("ExternalLinkIcon");return s(),l("div",null,[d,t("p",null,[e("Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see "),t("a",p,[e("https://docs.docker.com/engine/install"),o(r)]),e(".")]),h,t("p",null,[e("Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, "),t("a",u,[e("simplifier.net"),o(r)]),e(" or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.")]),f])}const F=a(c,[["render",m],["__file","install.html.vue"]]),k=JSON.parse('{"path":"/v1.1.0/maintain/install.html","title":"Install DSF 1.1.0","lang":"en-US","frontmatter":{"title":"Install DSF 1.1.0","icon":"install"},"headers":[{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[{"level":3,"title":"Virtual Machines","slug":"virtual-machines","link":"#virtual-machines","children":[]},{"level":3,"title":"Docker / Docker-Compose","slug":"docker-docker-compose","link":"#docker-docker-compose","children":[]},{"level":3,"title":"Client/Server Certificates","slug":"client-server-certificates","link":"#client-server-certificates","children":[]},{"level":3,"title":"Network setup / Network access","slug":"network-setup-network-access","link":"#network-setup-network-access","children":[]}]},{"level":2,"title":"Setup","slug":"setup","link":"#setup","children":[{"level":3,"title":"Prepare Certificates","slug":"prepare-certificates","link":"#prepare-certificates","children":[]},{"level":3,"title":"DSF FHIR Server","slug":"dsf-fhir-server","link":"#dsf-fhir-server","children":[]},{"level":3,"title":"DSF BPE Server","slug":"dsf-bpe-server","link":"#dsf-bpe-server","children":[]},{"level":3,"title":"Logs","slug":"logs","link":"#logs","children":[]},{"level":3,"title":"On-Boarding","slug":"on-boarding","link":"#on-boarding","children":[]}]}],"git":{"createdTime":1692790324000,"updatedTime":1693252510000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Maximilian Kurscheidt","email":"maximilian.kurscheidt@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":5.97,"words":1790},"filePathRelative":"v1.1.0/maintain/install.md","localizedDate":"August 23, 2023","excerpt":"
    \\n

    Member of existing networks

    \\n

    If you are part of an existing network (e.g. the German MII), please install the appropriate DSF version. For the production environment of MII and NUM this is currently DSF 0.9.x.

    \\n
    "}');export{F as comp,k as data}; diff --git a/assets/intelliJContent.html-yFdXbKGw.js b/assets/intelliJContent.html-yFdXbKGw.js new file mode 100644 index 000000000..2810fa7a1 --- /dev/null +++ b/assets/intelliJContent.html-yFdXbKGw.js @@ -0,0 +1,68 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as e,o as c,c as u,a as n,d as s,w as t,e as l,b as p}from"./app-kq9lCQfY.js";const k={},i=l(`
    <code_scheme name="highmed_dsf" version="173">
    +  <option name="FORMATTER_TAGS_ENABLED" value="true" />
    +  <JavaCodeStyleSettings>
    +    <option name="ANNOTATION_PARAMETER_WRAP" value="1" />
    +    <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
    +    <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
    +    <option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
    +      <value />
    +    </option>
    +    <option name="IMPORT_LAYOUT_TABLE">
    +      <value>
    +        <package name="" withSubpackages="true" static="true" />
    +        <emptyLine />
    +        <package name="java" withSubpackages="true" static="false" />
    +        <emptyLine />
    +        <package name="javax" withSubpackages="true" static="false" />
    +        <emptyLine />
    +        <package name="org" withSubpackages="true" static="false" />
    +        <emptyLine />
    +        <package name="com" withSubpackages="true" static="false" />
    +        <emptyLine />
    +        <package name="ca" withSubpackages="true" static="false" />
    +        <emptyLine />
    +        <package name="de" withSubpackages="true" static="false" />
    +        <emptyLine />
    +        <package name="" withSubpackages="true" static="false" />
    +        <emptyLine />
    +      </value>
    +    </option>
    +  </JavaCodeStyleSettings>
    +  <codeStyleSettings language="JAVA">
    +    <option name="KEEP_LINE_BREAKS" value="false" />
    +    <option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
    +    <option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
    +    <option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" />
    +    <option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
    +    <option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" />
    +    <option name="BRACE_STYLE" value="2" />
    +    <option name="CLASS_BRACE_STYLE" value="2" />
    +    <option name="METHOD_BRACE_STYLE" value="2" />
    +    <option name="ELSE_ON_NEW_LINE" value="true" />
    +    <option name="WHILE_ON_NEW_LINE" value="true" />
    +    <option name="CATCH_ON_NEW_LINE" value="true" />
    +    <option name="FINALLY_ON_NEW_LINE" value="true" />
    +    <option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
    +    <option name="ALIGN_MULTILINE_RESOURCES" value="false" />
    +    <option name="SPACE_WITHIN_ARRAY_INITIALIZER_BRACES" value="true" />
    +    <option name="SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE" value="true" />
    +    <option name="CALL_PARAMETERS_WRAP" value="1" />
    +    <option name="METHOD_PARAMETERS_WRAP" value="1" />
    +    <option name="RESOURCE_LIST_WRAP" value="5" />
    +    <option name="EXTENDS_LIST_WRAP" value="1" />
    +    <option name="THROWS_LIST_WRAP" value="1" />
    +    <option name="EXTENDS_KEYWORD_WRAP" value="1" />
    +    <option name="THROWS_KEYWORD_WRAP" value="1" />
    +    <option name="METHOD_CALL_CHAIN_WRAP" value="1" />
    +    <option name="BINARY_OPERATION_WRAP" value="1" />
    +    <option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
    +    <option name="TERNARY_OPERATION_WRAP" value="5" />
    +    <option name="ARRAY_INITIALIZER_WRAP" value="1" />
    +    <option name="PARAMETER_ANNOTATION_WRAP" value="2" />
    +    <option name="VARIABLE_ANNOTATION_WRAP" value="2" />
    +    <indentOptions>
    +      <option name="USE_TAB_CHARACTER" value="true" />
    +    </indentOptions>
    +  </codeStyleSettings>
    +</code_scheme>
    +
    `,1);function r(g,v){const a=e("RouteLink");return c(),u("div",null,[n("p",null,[s(a,{to:"/oldstable/code/code.html"},{default:t(()=>[p("Back")]),_:1})]),i,n("p",null,[s(a,{to:"/oldstable/code/code.html"},{default:t(()=>[p("Back")]),_:1})])])}const _=o(k,[["render",r],["__file","intelliJContent.html.vue"]]),d=JSON.parse('{"path":"/oldstable/code/intelliJContent.html","title":"IntelliJ code-style configurations","lang":"en-US","frontmatter":{"title":"IntelliJ code-style configurations","icon":"code"},"headers":[],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.11,"words":332},"filePathRelative":"oldstable/code/intelliJContent.md","localizedDate":"August 23, 2023","excerpt":"

    Back

    \\n
    <code_scheme name=\\"highmed_dsf\\" version=\\"173\\">\\n  <option name=\\"FORMATTER_TAGS_ENABLED\\" value=\\"true\\" />\\n  <JavaCodeStyleSettings>\\n    <option name=\\"ANNOTATION_PARAMETER_WRAP\\" value=\\"1\\" />\\n    <option name=\\"CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND\\" value=\\"99\\" />\\n    <option name=\\"NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND\\" value=\\"99\\" />\\n    <option name=\\"PACKAGES_TO_USE_IMPORT_ON_DEMAND\\">\\n      <value />\\n    </option>\\n    <option name=\\"IMPORT_LAYOUT_TABLE\\">\\n      <value>\\n        <package name=\\"\\" withSubpackages=\\"true\\" static=\\"true\\" />\\n        <emptyLine />\\n        <package name=\\"java\\" withSubpackages=\\"true\\" static=\\"false\\" />\\n        <emptyLine />\\n        <package name=\\"javax\\" withSubpackages=\\"true\\" static=\\"false\\" />\\n        <emptyLine />\\n        <package name=\\"org\\" withSubpackages=\\"true\\" static=\\"false\\" />\\n        <emptyLine />\\n        <package name=\\"com\\" withSubpackages=\\"true\\" static=\\"false\\" />\\n        <emptyLine />\\n        <package name=\\"ca\\" withSubpackages=\\"true\\" static=\\"false\\" />\\n        <emptyLine />\\n        <package name=\\"de\\" withSubpackages=\\"true\\" static=\\"false\\" />\\n        <emptyLine />\\n        <package name=\\"\\" withSubpackages=\\"true\\" static=\\"false\\" />\\n        <emptyLine />\\n      </value>\\n    </option>\\n  </JavaCodeStyleSettings>\\n  <codeStyleSettings language=\\"JAVA\\">\\n    <option name=\\"KEEP_LINE_BREAKS\\" value=\\"false\\" />\\n    <option name=\\"KEEP_FIRST_COLUMN_COMMENT\\" value=\\"false\\" />\\n    <option name=\\"KEEP_CONTROL_STATEMENT_IN_ONE_LINE\\" value=\\"false\\" />\\n    <option name=\\"KEEP_BLANK_LINES_IN_DECLARATIONS\\" value=\\"1\\" />\\n    <option name=\\"KEEP_BLANK_LINES_IN_CODE\\" value=\\"1\\" />\\n    <option name=\\"KEEP_BLANK_LINES_BEFORE_RBRACE\\" value=\\"1\\" />\\n    <option name=\\"BRACE_STYLE\\" value=\\"2\\" />\\n    <option name=\\"CLASS_BRACE_STYLE\\" value=\\"2\\" />\\n    <option name=\\"METHOD_BRACE_STYLE\\" value=\\"2\\" />\\n    <option name=\\"ELSE_ON_NEW_LINE\\" value=\\"true\\" />\\n    <option name=\\"WHILE_ON_NEW_LINE\\" value=\\"true\\" />\\n    <option name=\\"CATCH_ON_NEW_LINE\\" value=\\"true\\" />\\n    <option name=\\"FINALLY_ON_NEW_LINE\\" value=\\"true\\" />\\n    <option name=\\"ALIGN_MULTILINE_PARAMETERS\\" value=\\"false\\" />\\n    <option name=\\"ALIGN_MULTILINE_RESOURCES\\" value=\\"false\\" />\\n    <option name=\\"SPACE_WITHIN_ARRAY_INITIALIZER_BRACES\\" value=\\"true\\" />\\n    <option name=\\"SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE\\" value=\\"true\\" />\\n    <option name=\\"CALL_PARAMETERS_WRAP\\" value=\\"1\\" />\\n    <option name=\\"METHOD_PARAMETERS_WRAP\\" value=\\"1\\" />\\n    <option name=\\"RESOURCE_LIST_WRAP\\" value=\\"5\\" />\\n    <option name=\\"EXTENDS_LIST_WRAP\\" value=\\"1\\" />\\n    <option name=\\"THROWS_LIST_WRAP\\" value=\\"1\\" />\\n    <option name=\\"EXTENDS_KEYWORD_WRAP\\" value=\\"1\\" />\\n    <option name=\\"THROWS_KEYWORD_WRAP\\" value=\\"1\\" />\\n    <option name=\\"METHOD_CALL_CHAIN_WRAP\\" value=\\"1\\" />\\n    <option name=\\"BINARY_OPERATION_WRAP\\" value=\\"1\\" />\\n    <option name=\\"BINARY_OPERATION_SIGN_ON_NEXT_LINE\\" value=\\"true\\" />\\n    <option name=\\"TERNARY_OPERATION_WRAP\\" value=\\"5\\" />\\n    <option name=\\"ARRAY_INITIALIZER_WRAP\\" value=\\"1\\" />\\n    <option name=\\"PARAMETER_ANNOTATION_WRAP\\" value=\\"2\\" />\\n    <option name=\\"VARIABLE_ANNOTATION_WRAP\\" value=\\"2\\" />\\n    <indentOptions>\\n      <option name=\\"USE_TAB_CHARACTER\\" value=\\"true\\" />\\n    </indentOptions>\\n  </codeStyleSettings>\\n</code_scheme>\\n
    "}');export{_ as comp,d as data}; diff --git a/assets/introduction.html-B5k_PK4x.js b/assets/introduction.html-B5k_PK4x.js new file mode 100644 index 000000000..093b9330b --- /dev/null +++ b/assets/introduction.html-B5k_PK4x.js @@ -0,0 +1 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as s,c as i,a as e}from"./app-kq9lCQfY.js";const n="/photos/guideline/introduction/dsf_architecture.svg",a={},o=e("p",null,"The Data Sharing Framework implements a distributed process engine based on the BPMN 2.0 and FHIR R4 standards. The DSF is used to support biomedical research with routine data. Every participating site runs a FHIR endpoint (dsf-fhir) accessible by other sites and a business process engine (dsf-bpe) in the local secured network. Authentication between sites is handled using X.509 client/server certificates. The process engines execute BPMN processes in order to coordinate local and remote steps necessary to enable cross-site data sharing and feasibility analyses. This includes access to local data repositories, use-and-access-committee decision support, consent filtering, and privacy preserving record-linkage and pseudonymization.",-1),r=e("figure",null,[e("img",{src:n,alt:"DSF Architecture",tabindex:"0",loading:"lazy"}),e("figcaption",null,"DSF Architecture")],-1),c=[o,r];function d(l,u){return s(),i("div",null,c)}const m=t(a,[["render",d],["__file","introduction.html.vue"]]),g=JSON.parse('{"path":"/oldstable/introduction.html","title":"Introduction","lang":"en-US","frontmatter":{"title":"Introduction","icon":"info"},"headers":[],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.39,"words":116},"filePathRelative":"oldstable/introduction.md","localizedDate":"August 23, 2023","excerpt":"

    The Data Sharing Framework implements a distributed process engine based on the BPMN 2.0 and FHIR R4 standards. The DSF is used to support biomedical research with routine data. Every participating site runs a FHIR endpoint (dsf-fhir) accessible by other sites and a business process engine (dsf-bpe) in the local secured network. Authentication between sites is handled using X.509 client/server certificates. The process engines execute BPMN processes in order to coordinate local and remote steps necessary to enable cross-site data sharing and feasibility analyses. This includes access to local data repositories, use-and-access-committee decision support, consent filtering, and privacy preserving record-linkage and pseudonymization.

    "}');export{m as comp,g as data}; diff --git a/assets/introduction.html-BctNGTS-.js b/assets/introduction.html-BctNGTS-.js new file mode 100644 index 000000000..9c2cd4d68 --- /dev/null +++ b/assets/introduction.html-BctNGTS-.js @@ -0,0 +1 @@ +import{_ as i}from"./mii-bWzWhniO.js";import{_ as r}from"./dsf-concept-Dbcu0twt.js";import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as c,c as d,a as e,b as t,d as n}from"./app-kq9lCQfY.js";const l="/photos/info/introduction/dic-structure.png",h={},m={href:"https://www.bmbf.de/bmbf/en/home/home_node.html",target:"_blank",rel:"noopener noreferrer"},u={href:"https://www.medizininformatik-initiative.de/en/start",target:"_blank",rel:"noopener noreferrer"},p=e("figure",null,[e("img",{src:i,alt:"",width:"300",height:"150",tabindex:"0",loading:"lazy"}),e("figcaption")],-1),f=e("strong",null,"Data Sharing Framework (DSF)",-1),g={href:"https://www.gesundheitsforschung-bmbf.de/de/dsf-medizininformatik-struktur-data-sharing-framework-community-16133.php",target:"_blank",rel:"noopener noreferrer"},b=e("p",null,"The DSF is a concept for a secure middleware to distribute data sharing processes, aiming to extract, merge, pseudonymize and provide data stored in multiple distributed DICs. A researcher can use the DSF for example to submit feasibility queries to several DICs and thus has the opportunity to obtain sufficient data from different locations for his or her research. By using international standards such as FHIR and BPMN 2.0, the problem of heterogeneous data models, primary systems, architectures and federated legislation between DICs can be solved. The aim is to enable secure and syntactically-, semantically- and process-interoperable data exchange across organisational boundaries.",-1),_=e("figure",null,[e("img",{src:r,alt:"DSF concept",tabindex:"0",loading:"lazy"}),e("figcaption",null,"DSF concept")],-1),w=e("p",null,"The DSF is a secure communication infrastructure, that (1) scales with communication relationships, (2) orchestrates processes and instances, (3) separates execution logic from program code, (4) enables automated and user-centeric process steps ​(5) and can be used for heterogeny structures.",-1),y=e("figure",null,[e("img",{src:l,alt:"Federated data exchange between distributed DICs (CRP=Central Research Portal, DMU=Data Management Unit)",width:"500",height:"320",tabindex:"0",loading:"lazy"}),e("figcaption",null,"Federated data exchange between distributed DICs (CRP=Central Research Portal, DMU=Data Management Unit)")],-1);function v(D,I){const a=s("ExternalLinkIcon");return c(),d("div",null,[e("p",null,[t("The "),e("a",m,[t("German Federal Ministry of Education and Research"),n(a)]),t(" is funding the "),e("a",u,[t("Medical Informatics Initiative"),n(a)]),t(" with the aim of making routine data available digitally, reliably and quickly for medical research. University hospitals have founded consortia with partners such as research institutions and other companies to create the conditions for research and patient care to share their data across sites. Data Integration Centers (DIC) have been established at the university hospitals and partner institutions to create the technical and organizational conditions for data exchange between patient care and medical research.")]),p,e("p",null,[t("The "),f,t(" was developed within the HiGHmed consortium of the Medical Informatics Initiative and is now funded as an independent project by the German Federal Ministry of Education and Research within the Medical Informatics structure as "),e("em",null,[e("a",g,[t("DSF Community"),n(a)])]),t(".")]),b,_,w,y])}const M=o(h,[["render",v],["__file","introduction.html.vue"]]),z=JSON.parse('{"path":"/intro/info/introduction.html","title":"Introduction","lang":"en-US","frontmatter":{"title":"Introduction","icon":"customize"},"headers":[],"git":{"createdTime":1690473388000,"updatedTime":1691142763000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":4}]},"readingTime":{"minutes":1.05,"words":316},"filePathRelative":"intro/info/introduction.md","localizedDate":"July 27, 2023","excerpt":"

    The German Federal Ministry of Education and Research is funding the Medical Informatics Initiative with the aim of making routine data available digitally, reliably and quickly for medical research. University hospitals have founded consortia with partners such as research institutions and other companies to create the conditions for research and patient care to share their data across sites. Data Integration Centers (DIC) have been established at the university hospitals and partner institutions to create the technical and organizational conditions for data exchange between patient care and medical research.

    "}');export{M as comp,z as data}; diff --git a/assets/learn.html-BCytgQB3.js b/assets/learn.html-BCytgQB3.js new file mode 100644 index 000000000..1c69aba8d --- /dev/null +++ b/assets/learn.html-BCytgQB3.js @@ -0,0 +1 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o as s,c as l,a as e,d as n,w as a,b as o}from"./app-kq9lCQfY.js";const c={},m={class:"hint-container warning"},u=e("p",{class:"hint-container-title"},"Work in progress",-1),h=e("p",null,"This site is work in progress, please come back later.",-1),p=e("p",null,"If you want further information about the DSF and how to implement use cases, please visit:",-1);function d(_,f){const t=r("RouteLink");return s(),l("div",null,[e("div",m,[u,h,p,e("ul",null,[e("li",null,[n(t,{to:"/intro/"},{default:a(()=>[o("Documentation Overview")]),_:1})]),e("li",null,[n(t,{to:"/stable/"},{default:a(()=>[o("Getting started")]),_:1})]),e("li",null,[n(t,{to:"/about/learnmore/contact.html"},{default:a(()=>[o("Contact us")]),_:1})])])])])}const g=i(c,[["render",d],["__file","learn.html.vue"]]),v=JSON.parse('{"path":"/for-you/learn.html","title":"How to implement your use-case","lang":"en-US","frontmatter":{"title":"How to implement your use-case","icon":"creative"},"headers":[],"git":{"createdTime":1706902325000,"updatedTime":1706902325000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.16,"words":48},"filePathRelative":"for-you/learn.md","localizedDate":"February 2, 2024","excerpt":"
    \\n

    Work in progress

    \\n

    This site is work in progress, please come back later.

    \\n

    If you want further information about the DSF and how to implement use cases, please visit:

    \\n\\n
    "}');export{g as comp,v as data}; diff --git a/assets/libraries.html-DXRhGNT1.js b/assets/libraries.html-DXRhGNT1.js new file mode 100644 index 000000000..da01e64e5 --- /dev/null +++ b/assets/libraries.html-DXRhGNT1.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as r}from"./app-kq9lCQfY.js";const i={};function a(o,s){return t(),r("div")}const n=e(i,[["render",a],["__file","libraries.html.vue"]]),d=JSON.parse('{"path":"/oldstable/code/libraries.html","title":"Libraries","lang":"en-US","frontmatter":{"title":"Libraries","icon":"folder"},"headers":[],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.01,"words":4},"filePathRelative":"oldstable/code/libraries.md","localizedDate":"August 23, 2023","excerpt":""}');export{n as comp,d as data}; diff --git a/assets/mii-bWzWhniO.js b/assets/mii-bWzWhniO.js new file mode 100644 index 000000000..eca642bae --- /dev/null +++ b/assets/mii-bWzWhniO.js @@ -0,0 +1 @@ +const o="/photos/learnmore/funding/mii.png";export{o as _}; diff --git a/assets/networkSetup.html-BRividmW.js b/assets/networkSetup.html-BRividmW.js new file mode 100644 index 000000000..1b24e2f49 --- /dev/null +++ b/assets/networkSetup.html-BRividmW.js @@ -0,0 +1,37 @@ +import{_ as e,a as i}from"./highmed_dsf_network_setup_ext_dmz-DyQZOoIs.js";import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as t,e as s}from"./app-kq9lCQfY.js";const a={},o=s('

    The Data Sharing Framework consists of two components: A FHIR Endpoint Server used to except Task resources and provide resources for download by other organizations and a Business Process Engine Server run internal and not accessible by other organization to execute and coordinate processes.

    Network Setup Diagramm
    Network Setup Diagramm
    • FHIR Reverse Proxy: The FHIR Reverse Proxy is used to terminate incoming https connections to the FHIR App Server. The Reverse Proxy needs to be accessible on port 443 from the internet. Incoming https connection will be delegate as http on a docker internal network to the FHIR App Server.
    • FHIR App Server: The FHIR App Server is used as a FHIR Endpoint for incoming Task resources and providing resources for download by other organizations. In order to validate incoming FHIR resources the server will communicate with FHIR Servers at other organizations. Access to resources and authorization for creating or updating resources is granted based on the content of the resource and/or based on the client (identified by its client certificate) being part of an allow list. JDBC connections to the FHIR DB Server
    • FHIR DB Server: PostgreSQL database for the FHIR App Server.
    • BPE App Server: The BPE App Server is executing BPMN 2.0 business processes with the included business process engine. Automatic BPMN service tasks are used for example to check resource, access the PDP- and MPI-servers as well as the MDAT repository. The calculation of record linkage bit vectors (Record Bloom Filters) is also performed using an automatic service task. As of version 0.3.0 the BPE server does not provide any webservices for modifying an server resources.
    • BPE DB Server: PostgreSQL database for the BPE App Server.
    • PDP: IHE Policy Decision Point for deciding on patient consent.
    • MDAT Repo: Repository (e.g. openEHR) for storing medical data (MDAT).
    • MPI: IHE Master Patient Index for storing identifying patient date (IDAT) e.g. first name, last name, date of birth.
    • Cohort Browser: Example for a system to trigger patient cohort size estimations across multiple organizations.

    More information on Client- and Server-Certificates are available on the dedicated wiki page: Authentication: Client/Server Certificates

    Additional Reverse Proxy in external DMZ

    In some organizations an additional reverse proxy in an external DMZ is needed. This can be accomplished by using for example nginx or haproxy as a TCP-Proxy. Example configurations routing traffic using SNI can be found below. Configuring an additional reverse proxy to terminate the incoming TLS connection early is not recommended.

    Network Setup Diagramm
    Network Setup Diagramm

    nginx

    http {
    +	# ...
    +}
    +
    +stream {
    +	map $ssl_preread_server_name $name {
    +		fhir.example.com fhir;
    +	}
    +
    +	upstream fhir {
    +		server 192.168.0.1:443;
    +	}
    +
    +	server {
    +		listen 443;
    +		proxy_pass $name;
    +		ssl_preread on;
    +	}
    +}
    +

    haproxy

    defaults
    +	timeout connect 5s
    +	timeout client 30s
    +	timeout server 30s
    +
    +frontend ingress
    +	bind :443
    +	mode tcp
    +
    +	tcp-request inspect-delay 5s
    +	tcp-request content accept if { req_ssl_hello_type 1 }
    +	use_backend fhir if { req.ssl_sni fhir.example.com }
    +
    +backend fhir
    +	mode tcp
    +
    +	server fhir 192.168.0.1:443
    +
    `,11),d=[o];function l(c,v){return r(),t("div",null,d)}const g=n(a,[["render",l],["__file","networkSetup.html.vue"]]),h=JSON.parse('{"path":"/oldstable/generalinformation/networkSetup.html","title":"Network Setup and General Architecture","lang":"en-US","frontmatter":{"title":"Network Setup and General Architecture","icon":"customize"},"headers":[{"level":2,"title":"Additional Reverse Proxy in external DMZ","slug":"additional-reverse-proxy-in-external-dmz","link":"#additional-reverse-proxy-in-external-dmz","children":[]}],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.62,"words":486},"filePathRelative":"oldstable/generalinformation/networkSetup.md","localizedDate":"August 23, 2023","excerpt":"

    The Data Sharing Framework consists of two components: A FHIR Endpoint Server used to except Task resources and provide resources for download by other organizations and a Business Process Engine Server run internal and not accessible by other organization to execute and coordinate processes.

    "}');export{g as comp,h as data}; diff --git a/assets/networkSetup.html-DO8WTfe0.js b/assets/networkSetup.html-DO8WTfe0.js new file mode 100644 index 000000000..b859db54f --- /dev/null +++ b/assets/networkSetup.html-DO8WTfe0.js @@ -0,0 +1 @@ +import{_ as e,a as r}from"./highmed_dsf_network_setup_ext_dmz-DyQZOoIs.js";import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o,c as i,e as n}from"./app-kq9lCQfY.js";const a={},s=n('

    The Data Sharing Framework consists of two components: A FHIR Endpoint Server used to except Task resources and provide resources for download by other organizations and a Business Process Engine Server run internal and not accessible by other organization to execute and coordinate processes.

    Network Setup Diagramm
    Network Setup Diagramm
    • FHIR Reverse Proxy: The FHIR Reverse Proxy is used to terminate incoming https connections to the FHIR App Server. The Reverse Proxy needs to be accessible on port 443 from the internet. Incoming https connection will be delegate as http on a docker internal network to the FHIR App Server.
    • FHIR App Server: The FHIR App Server is used as a FHIR Endpoint for incoming Task resources and providing resources for download by other organizations. In order to validate incoming FHIR resources the server will communicate with FHIR Servers at other organizations. Access to resources and authorization for creating or updating resources is granted based on the content of the resource and/or based on the client (identified by its client certificate) being part of an allow list. JDBC connections to the FHIR DB Server
    • FHIR DB Server: PostgreSQL database for the FHIR App Server.
    • BPE App Server: The BPE App Server is executing BPMN 2.0 business processes with the included business process engine. Automatic BPMN service tasks are used for example to check resource, access the PDP- and MPI-servers as well as the MDAT repository. The calculation of record linkage bit vectors (Record Bloom Filters) is also performed using an automatic service task. As of version 0.3.0 the BPE server does not provide any webservices for modifying an server resources.
    • BPE DB Server: PostgreSQL database for the BPE App Server.
    • PDP: IHE Policy Decision Point for deciding on patient consent.
    • MDAT Repo: Repository (e.g. openEHR) for storing medical data (MDAT).
    • MPI: IHE Master Patient Index for storing identifying patient date (IDAT) e.g. first name, last name, date of birth.
    • Cohort Browser: Example for a system to trigger patient cohort size estimations across multiple organizations.

    More information on Client- and Server-Certificates are available on the dedicated wiki page: Authentication: Client/Server Certificates

    Additional Reverse Proxy in external DMZ

    In some organizations an additional reverse proxy in an external DMZ is needed. This can be accomplished by using for example nginx or haproxy as a TCP-Proxy. Example configurations routing traffic using SNI can be found below. Configuring an additional reverse proxy to terminate the incoming TLS connection early is not recommended.

    Network Setup Diagramm
    Network Setup Diagramm
    ',7),c=[s];function d(l,p){return o(),i("div",null,c)}const h=t(a,[["render",d],["__file","networkSetup.html.vue"]]),f=JSON.parse('{"path":"/intro/info/networkSetup.html","title":"Network Setup and General Architecture","lang":"en-US","frontmatter":{"title":"Network Setup and General Architecture","icon":"customize"},"headers":[{"level":2,"title":"Additional Reverse Proxy in external DMZ","slug":"additional-reverse-proxy-in-external-dmz","link":"#additional-reverse-proxy-in-external-dmz","children":[]}],"git":{"createdTime":1690817425000,"updatedTime":1690903993000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":1.62,"words":486},"filePathRelative":"intro/info/networkSetup.md","localizedDate":"July 31, 2023","excerpt":"

    The Data Sharing Framework consists of two components: A FHIR Endpoint Server used to except Task resources and provide resources for download by other organizations and a Business Process Engine Server run internal and not accessible by other organization to execute and coordinate processes.

    "}');export{h as comp,f as data}; diff --git a/assets/num-codexInstall.html-Bw_nn2le.js b/assets/num-codexInstall.html-Bw_nn2le.js new file mode 100644 index 000000000..05b93a834 --- /dev/null +++ b/assets/num-codexInstall.html-Bw_nn2le.js @@ -0,0 +1,39 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as l,c as a,a as e,b as t,d as i,e as s}from"./app-kq9lCQfY.js";const d={},c=s('

    This setup guide uses pre-build docker images for DSF Version 0.9.3. This guide is not suitable for HiGHmed organizations.
    If you are a member of HiGHmed, see HiGHmed Install.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    ',5),h={href:"https://docs.docker.com/engine/install",target:"_blank",rel:"noopener noreferrer"},u={href:"https://docs.docker.com/compose/install",target:"_blank",rel:"noopener noreferrer"},p=s(`

    docker:

    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io
    +
    `,2),_={href:"https://github.com/docker/compose/releases/tag/v2.17.3",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/docker/compose/releases",target:"_blank",rel:"noopener noreferrer"},f=s(`
    sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    +sudo chmod +x /usr/local/bin/docker-compose
    +

    Client/Server Certificates

    Two Certificates from the DFN-PKI Global G2 (via DFN e.V.), GÉANT TCS (via DFN e.V.) or D-Trust (via TMF e.V.) are needed, more infos see Authentication

    • Certificate A: Server Certificate (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    Network setup / Network access

    For additional information on the network setup see Network-and-Architecture.

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.
    `,7),g={href:"http://simplifier.net",target:"_blank",rel:"noopener noreferrer"},b=s('
    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (GECCO Transfer Hub)443https
    DSF FHIR (local)DSF FHIR (GECCO Transfer Hub)443https (HTTP HEAD only)
    DSF BPE (GECCO Transfer Hub)DSF FHIR (local)443https
    DSF FHIR (GECCO Transfer Hub)DSF FHIR (local)443https (HTTP HEAD only)

    On-Boarding Excel Spreadsheet

    You are required to fill out the on-boarding Excel spreadsheet, provided with the NUM-CODEX hackathon invite, and send it to the GECCO Transfer Hub. If the GECCO Transfer Hub already received and validated your On-Boarding Excel spreadsheet and you do not have to change any information, you can skip this step.

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    ',7),v=s(`
  • Add Group/User
    Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

    sudo addgroup --gid 2101 fhir
    +sudo adduser --system --no-create-home --uid 2101 --gid 2101 fhir
    +
  • `,1),k=e("p",null,[t("Download and Extract Config Files"),e("br"),t(" Download prepared DSF FHIR server config files and folder structure from")],-1),F=e("strong",null,"Test NUM-CODEX",-1),S=e("br",null,null,-1),D={href:"https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_test_fhir_0_9_3.tar.gz",target:"_blank",rel:"noopener noreferrer"},E=s(`
    cd /opt
    +wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_test_fhir_0_9_3.tar.gz
    +sudo tar --same-owner -zxvf dsf_codex_test_fhir_0_9_3.tar.gz
    +
    `,1),R=e("strong",null,"Production NUM-CODEX",-1),x=e("br",null,null,-1),I={href:"https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_prod_fhir_0_9_3.tar.gz",target:"_blank",rel:"noopener noreferrer"},w=s(`
    cd /opt
    +wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_prod_fhir_0_9_3.tar.gz
    +sudo tar --same-owner -zxvf dsf_codex_prod_fhir_0_9_3.tar.gz
    +
    `,1),y=e("p",null,[e("em",null,[t("The "),e("code",null,"tar"),t(" command will unpack the config files at "),e("code",null,"/opt/fhir"),t(" assuming you changed into the "),e("code",null,"/opt"),t(" directory.")])],-1),H=s(`
  • Verify that the fhir system user or group can write into the following folder

    • /opt/fhir/log
  • Add certificates and keys

    • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
      • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
      • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
    • Add the client certificate (certificate B) and the corresponding private-key to /opt/fhir/secrets/
      • client_certificate.pem (chmod: 440, chown: fhir:docker)
      • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
    • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/
      • client_certificate_private_key.pem.password
    • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
      L39:      - app_client_certificate_private_key.pem.password
      +...
      +L56:      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
      +...
      +L137:  app_client_certificate_private_key.pem.password:
      +L138:    file: ./secrets/client_certificate_private_key.pem.password
      +
  • Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

    L102:  ssl_certificate_chain_file.pem:
    +L103:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
    +
  • Modify database passwords

    • /opt/fhir/secrets/db_liquibase.password
      • Generate a random password (min. 32 characters recommended) and replace the content of the file.
    • /opt/fhir/secrets/db_user.password
      • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    • /opt/fhir/secrets/db_user_permanent_delete.password
      • Generate a random password (min. 16 characters recommended) and replace the content of the file.
  • `,4),T=e("p",null,"Modify the docker-compose.yml file and set environment variables to the appropriate values",-1),C=s('
  • services -> proxy -> environment:
  • ',1),N=e("strong",null,"services -> app -> environment:",-1),P=s("
  • ORG_HIGHMED_DSF_FHIR_SERVER_FQDN: TODO_DSF_FRIR_SERVER_EXTERNAL_FQDN
    Set your FHIR servers external FQDN, e.g. foo.bar.de
  • ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL: https://TODO_DSF_FRIR_SERVER_EXTERNAL_FQDN/fhir
    Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir
  • ",2),O=e("strong",null,"ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE",-1),G=e("em",null,"TODO_ORGANIZATION_IDENTIFIER",-1),A=e("br",null,null,-1),B={href:"http://hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},M=s('
  • ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_NAME: TODO_ORGANIZATION_NAME
    Set your Organizations official name, e.g. Hochschule Heilbronn
  • ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: TODO_CLIENT_CERTIFICATE_THUMBPRINT
    Set the SHA-512 Hash (lowercase hex) of your client certificate (certificate B)
    Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.
  • ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS: TODO_CLIENT_CERTIFICATE_THUMBPRINTS
    Set the SHA-512 Hash (lowercase hex) of your client certificate (certificate B)
    This parameter is a comma separated list e.g. ab12...37ff,f3a2...bb22. You can add additional client certificate thumbprints for example the thumbprint of your (the admins) personal DFN PKI S/MIME certificate, to access the DSF FHIR servers REST interface.
  • ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE: TODO_CLIENT_CERTIFICATE_THUMBPRINTS
    Set the SHA-512 Hash (lowercase hex) of your client certificate (certificate B)
    This parameter is a comma separated list e.g. ab12...37ff,f3a2...bb22. Usually it is not necessary to add additional thumbprints other than your client certificate (certificate B) here. When a client uses a certificate with a thumbprint listed here, the client is allowed to permanently delete FHIR resources.
  • For additional environment variables, see DSF 0.9.3 FHIR Server configuration parameters
  • ',5),V=e("li",null,[e("p",null,[t("Start the DSF FHIR Server"),e("br"),t(" Start using: "),e("code",null,"docker-compose up -d && docker-compose logs -f"),t(" (Ctrl-C will close log, but not stop container)")])],-1),L=e("h3",{id:"dsf-bpe-server",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#dsf-bpe-server"},[e("span",null,"DSF BPE Server")])],-1),U=s(`
  • Add Group/User
    Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

    sudo addgroup --gid 2202 bpe
    +sudo adduser --system --no-create-home --uid 2202 --gid 2202 bpe
    +
  • `,1),z=e("p",null,[t("Download and Extract Config Files"),e("br"),t(" Download prepared DSF BPE server config files and folder structure from")],-1),q=e("strong",null,"Test NUM-CODEX",-1),Q=e("br",null,null,-1),X={href:"https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_test_bpe_0_9_3.tar.gz",target:"_blank",rel:"noopener noreferrer"},Y=s(`
    cd /opt
    +wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_test_bpe_0_9_3.tar.gz
    +sudo tar --same-owner -zxvf dsf_codex_test_bpe_0_9_3.tar.gz
    +
    `,1),Z=e("strong",null,"Production NUM-CODEX",-1),K=e("br",null,null,-1),W={href:"https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_prod_bpe_0_9_3.tar.gz",target:"_blank",rel:"noopener noreferrer"},$=s(`
    cd /opt
    +wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_prod_bpe_0_9_3.tar.gz
    +sudo tar --same-owner -zxvf dsf_codex_prod_bpe_0_9_3.tar.gz
    +
    `,1),j=e("p",null,[e("em",null,[t("The "),e("code",null,"tar"),t(" command will unpack the config files at "),e("code",null,"/opt/bpe"),t(" assuming you changed into the "),e("code",null,"/opt"),t(" directory.")])],-1),J=e("li",null,[e("p",null,[t("Verify that the "),e("code",null,"bpe"),t(" system user or group can write into the following folders")]),e("ul",null,[e("li",null,[e("code",null,"/opt/bpe/log")])])],-1),ee=e("p",null,"Add certificates and keys",-1),te=s(`
  • Add the client certificate (certificate B) and the corresponding private-key to /opt/bpe/secrets/
    • client_certificate.pem (chmod: 440 chown: bpe:docker)
    • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
  • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/
    • client_certificate_private_key.pem.password
  • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
    L13:      - app_client_certificate_private_key.pem.password
    +...
    +L38:      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
    +...
    +L92:  app_client_certificate_private_key.pem.password:
    +L93:    file: ./secrets/client_certificate_private_key.pem.password
    +
  • `,3),re=e("strong",null,"/opt/bpe/secrets/",-1),ie=e("li",null,"crr_public_key.pem (chmod: 440 chown: bpe:docker)",-1),se=e("strong",null,"Test",-1),oe=e("br",null,null,-1),ne={href:"https://keys.num-codex.de/crr_public-key-pre-prod.pem",target:"_blank",rel:"noopener noreferrer"},le=e("strong",null,"Production",-1),ae=e("br",null,null,-1),de={href:"https://keys.num-codex.de/crr_public-key-prod.pem",target:"_blank",rel:"noopener noreferrer"},ce=s("
  • Modify database passwords

    • /opt/bpe/secrets/db_liquibase.password
      • Generate a random password (min. 32 characters recommended) and replace the content of the file.
    • /opt/bpe/secrets/db_user.password
      • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    • /opt/bpe/secrets/db_user_camunda.password
      • Generate a random password (min. 16 characters recommended) and replace the content of the file.
  • ",1),he=e("p",null,"Modify the docker-compose.yml file and set environment variables to the appropriate values",-1),ue=e("strong",null,"services -> app -> environment:",-1),pe=e("strong",null,"ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE",-1),_e=e("em",null,"TODO_ORGANIZATION_IDENTIFIER",-1),me=e("br",null,null,-1),fe={href:"http://hs-heilbronn.de",target:"_blank",rel:"noopener noreferrer"},ge=e("li",null,[e("strong",null,"ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL"),t(": https://"),e("strong",null,"TODO_DSF_FRIR_SERVER_FQDN"),t("/fhir"),e("br"),t(" Set your FHIR servers external FQDN, e.g. "),e("code",null,"foo.bar.de"),t(" -> "),e("code",null,"https://foo.bar.de/fhir")],-1),be=e("li",null,[t("For additional environment variables, see "),e("a",{href:"configBpe"},"DSF 0.9.3 BPE Server configuration parameters")],-1),ve=s("
  • Start the DSF BPE Server (without process plugins)
    Start using: docker-compose up -d && docker-compose logs -f (Ctrl-C will close log, but not stop container)

  • Verify DSF BPE Startup

    • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
    • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
    • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

    If you need to debug the TLS connection to your DSF FHIR server use for example:
    docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
    The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

  • Stop the DSF BPE Server

    • Hit Ctrl-C to close log
    • Stop using: docker-compose stop
  • ",3),ke=e("p",null,"Add the following DSF BPE process plugins, for instructions on how to configure the plugin, see release notes.",-1),Fe=e("strong",null,"num-codex / codex-processes-ap1",-1),Se=e("br",null,null,-1),De={href:"https://github.com/num-codex/codex-processes-ap1/releases/tag/v0.7.0",target:"_blank",rel:"noopener noreferrer"},Ee=e("br",null,null,-1),Re={href:"https://github.com/num-codex/codex-processes-ap1/wiki/Process-Deployment-and-Configuration-v0.7.0",target:"_blank",rel:"noopener noreferrer"},xe=e("strong",null,"highmed / highmed-processes / ping",-1),Ie=e("br",null,null,-1),we={href:"https://github.com/highmed/highmed-processes/releases/tag/v0.7.0",target:"_blank",rel:"noopener noreferrer"},ye=e("br",null,null,-1),He={href:"https://github.com/highmed/highmed-processes/wiki/Process-Ping-Deployment-v0.7.0",target:"_blank",rel:"noopener noreferrer"},Te=e("p",null,[e("em",null,[t("Notice: Jar-files within the folders "),e("code",null,"/opt/bpe/process"),t(" and "),e("code",null,"/opt/bpe/plugin"),t(" need to be readable by the linxux "),e("code",null,"bpe"),t(" user -> "),e("code",null,"chown root:bpe"),t(", "),e("code",null,"chmod 440")])],-1),Ce=e("li",null,[e("p",null,[t("Start the DSF BPE Server (with process plugins)"),e("br"),t(" Start using: "),e("code",null,"docker-compose up -d && docker-compose logs -f"),t(" (Ctrl-C will close log, but not stop container)")])],-1);function Ne(Pe,Oe){const r=n("ExternalLinkIcon");return l(),a("div",null,[c,e("p",null,[t("Both VMs need latest docker and docker-compose. For the latest install guide see "),e("a",h,[t("https://docs.docker.com/engine/install"),i(r)]),t(" and "),e("a",u,[t("https://docs.docker.com/compose/install"),i(r)])]),p,e("p",null,[t("docker-compose (warning: "),e("a",_,[t("2.17.3"),i(r)]),t(" might not be "),e("a",m,[t("latest"),i(r)]),t("):")]),f,e("p",null,[t("Here is a quick overview of the expected network setup. Connections to the fTTP, the terminology server and "),e("a",g,[t("simplifier.net"),i(r)]),t(" for validating GECCO FHIR resources as well as the local GECCO FHIR server are not listed:")]),b,e("ol",null,[v,e("li",null,[k,e("ul",null,[e("li",null,[F,t(" instance:"),S,e("a",D,[t("https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_test_fhir_0_9_3.tar.gz"),i(r)]),E]),e("li",null,[R,t(" instance:"),x,e("a",I,[t("https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_prod_fhir_0_9_3.tar.gz"),i(r)]),w])]),y]),H,e("li",null,[T,e("ul",null,[C,e("li",null,[N,e("ul",null,[P,e("li",null,[O,t(": "),G,A,t(" Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. "),e("a",B,[t("hs-heilbronn.de"),i(r)])]),M])])])]),V]),L,e("ol",null,[U,e("li",null,[z,e("ul",null,[e("li",null,[q,t(" instance:"),Q,e("a",X,[t("https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_test_bpe_0_9_3.tar.gz"),i(r)]),Y]),e("li",null,[Z,t(" instance:"),K,e("a",W,[t("https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_prod_bpe_0_9_3.tar.gz"),i(r)]),$])]),j]),J,e("li",null,[ee,e("ul",null,[te,e("li",null,[t("Add the CRR public-key used for asymmetrically encrypting the GECCO FHIR Bundles to "),re,e("ul",null,[ie,e("li",null,[t("You can download the 4096 Bit RSA PEM encoded public-key for "),e("ul",null,[e("li",null,[t("a "),se,t(" instance from:"),oe,e("a",ne,[t("https://keys.num-codex.de/crr_public-key-pre-prod.pem"),i(r)])]),e("li",null,[t("a "),le,t(" instance from:"),ae,e("a",de,[t("https://keys.num-codex.de/crr_public-key-prod.pem"),i(r)])])])])])])])]),ce,e("li",null,[he,e("ul",null,[e("li",null,[ue,e("ul",null,[e("li",null,[pe,t(": "),_e,me,t(" Set your Organizations DSF identifier, aka the shortest FQDN that resolves the main homepage of the organization, e.g. "),e("a",fe,[t("hs-heilbronn.de"),i(r)])]),ge,be])])])]),ve,e("li",null,[ke,e("ul",null,[e("li",null,[Fe,t(" version 0.7.0 or later:"),Se,e("a",De,[t("https://github.com/num-codex/codex-processes-ap1/releases/tag/v0.7.0"),i(r)]),Ee,t(" See "),e("a",Re,[t("NUM-CODEX: Process Deployment and Configuration"),i(r)]),t(" on how to deploy and configure the process plugin.")]),e("li",null,[xe,t(" version 0.7.0 or later:"),Ie,e("a",we,[t("https://github.com/highmed/highmed-processes/releases/tag/v0.7.0"),i(r)]),ye,t(" See "),e("a",He,[t("HiGHmed: Process Ping Deployment"),i(r)]),t(" on how to deploy and configure the process plugin.")])]),Te]),Ce])])}const Be=o(d,[["render",Ne],["__file","num-codexInstall.html.vue"]]),Me=JSON.parse('{"path":"/oldstable/releases/num-codexInstall.html","title":"","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Prerequisites","slug":"prerequisites","link":"#prerequisites","children":[{"level":3,"title":"Virtual Machines","slug":"virtual-machines","link":"#virtual-machines","children":[]},{"level":3,"title":"Docker / Docker-Compose","slug":"docker-docker-compose","link":"#docker-docker-compose","children":[]},{"level":3,"title":"Client/Server Certificates","slug":"client-server-certificates","link":"#client-server-certificates","children":[]},{"level":3,"title":"Network setup / Network access","slug":"network-setup-network-access","link":"#network-setup-network-access","children":[]},{"level":3,"title":"On-Boarding Excel Spreadsheet","slug":"on-boarding-excel-spreadsheet","link":"#on-boarding-excel-spreadsheet","children":[]}]},{"level":2,"title":"Setup","slug":"setup","link":"#setup","children":[{"level":3,"title":"Prepare Certificates","slug":"prepare-certificates","link":"#prepare-certificates","children":[]},{"level":3,"title":"DSF FHIR Server","slug":"dsf-fhir-server","link":"#dsf-fhir-server","children":[]},{"level":3,"title":"DSF BPE Server","slug":"dsf-bpe-server","link":"#dsf-bpe-server","children":[]}]}],"git":{"createdTime":1692783801000,"updatedTime":1696001091000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":6.12,"words":1837},"filePathRelative":"oldstable/releases/num-codexInstall.md","localizedDate":"August 23, 2023","excerpt":"

    This setup guide uses pre-build docker images for DSF Version 0.9.3. This guide is not suitable for HiGHmed organizations.
    \\nIf you are a member of HiGHmed, see HiGHmed Install.

    \\n

    Prerequisites

    \\n

    Virtual Machines

    \\n
      \\n
    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • \\n
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • \\n
    "}');export{Be as comp,Me as data}; diff --git a/assets/num.html-BDSaH26q.js b/assets/num.html-BDSaH26q.js new file mode 100644 index 000000000..102e29588 --- /dev/null +++ b/assets/num.html-BDSaH26q.js @@ -0,0 +1 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as i,c as o,a as e,b as t,d as n}from"./app-kq9lCQfY.js";const c="/photos/learnmore/projects/num.png",l="/photos/learnmore/projects/ap1.png",h={},d={href:"https://www.netzwerk-universitaetsmedizin.de/",target:"_blank",rel:"noopener noreferrer"},p=e("div",{style:{"text-align":"center"}},[e("figure",null,[e("img",{src:c,alt:"",width:"370",height:"220",tabindex:"0",loading:"lazy"}),e("figcaption")])],-1),m={href:"https://www.netzwerk-universitaetsmedizin.de/projekte/codex#c599",target:"_blank",rel:"noopener noreferrer"},u={href:"https://www.netzwerk-universitaetsmedizin.de/projekte/num-rdp",target:"_blank",rel:"noopener noreferrer"},f=e("h3",{id:"the-data-transfer-process",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#the-data-transfer-process"},[e("span",null,"The Data Transfer Process")])],-1),_={href:"https://github.com/num-codex/codex-processes-ap1",target:"_blank",rel:"noopener noreferrer"},g=e("figure",null,[e("img",{src:l,alt:"",tabindex:"0",loading:"lazy"}),e("figcaption")],-1),w={href:"https://github.com/num-codex/codex-processes-ap1/wiki/Process-Description-v1.0.0.0",target:"_blank",rel:"noopener noreferrer"};function b(k,v){const r=s("ExternalLinkIcon");return i(),o("div",null,[e("p",null,[t("The "),e("a",d,[t("Network University Medicine"),n(r)]),t(" was established in April 2020 as part of the COVID-19 pandemic crisis management. The aim of the NUM is to better coordinate COVID-19 research at all 36 university hospitals in Germany.'")]),p,e("p",null,[t("As part of the "),e("em",null,[e("a",m,[t("CODEX | COVID-19 Data Exchange Platform"),n(r)])]),t(" project, a nationwide, uniform, privacy-compliant infrastructure for storing and providing COVID-19 research datasets was established. Since 2022, the work continues within the project "),e("a",u,[t("NUM RDP"),n(r)]),t(". All 36 university hospitals have installed the DSF to share Covid-19 research data.")]),f,e("p",null,[t("The "),e("a",_,[t("Data Transfer Process"),n(r)]),t(" is used in NUM CODEX to send data from a Data Integration Center (DIC), via the Gecco Transfer Hub (GTH), to the Central Research Repository (CRR). The infrastructure and communincation messages on which the process is based can be seen in the following figure. All organizations use the Data Sharing Framework (DSF) for deployment and execution of the process.")]),g,e("p",null,[t("More technical information can be found on "),e("a",w,[t("GitHub"),n(r)]),t(".")])])}const T=a(h,[["render",b],["__file","num.html.vue"]]),y=JSON.parse(`{"path":"/intro/use-cases/num.html","title":"Network University Medicine","lang":"en-US","frontmatter":{"title":"Network University Medicine","icon":"map"},"headers":[{"level":3,"title":"The Data Transfer Process","slug":"the-data-transfer-process","link":"#the-data-transfer-process","children":[]}],"git":{"createdTime":1691142763000,"updatedTime":1698661553000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.66,"words":199},"filePathRelative":"intro/use-cases/num.md","localizedDate":"August 4, 2023","excerpt":"

    The Network University Medicine was established in April 2020 as part of the COVID-19 pandemic crisis management. The aim of the NUM is to better coordinate COVID-19 research at all 36 university hospitals in Germany.'

    "}`);export{T as comp,y as data}; diff --git a/assets/oidc.html-7KqJffk_.js b/assets/oidc.html-7KqJffk_.js new file mode 100644 index 000000000..7be47b542 --- /dev/null +++ b/assets/oidc.html-7KqJffk_.js @@ -0,0 +1,21 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as r,c,a as n,b as e,d as a,w as l,e as d}from"./app-kq9lCQfY.js";const u={},p=n("h2",{id:"overview",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#overview"},[n("span",null,"Overview")])],-1),_=n("p",null,[e("Access to the DSF FHIR server REST API and user interface can be configured via "),n("a",{href:"access-control"},"access control roles"),e(". By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.")],-1),h={href:"https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth",target:"_blank",rel:"noopener noreferrer"},f={href:"https://datatracker.ietf.org/doc/html/rfc6750",target:"_blank",rel:"noopener noreferrer"},v={href:"https://openid.net/specs/openid-connect-backchannel-1_0.html",target:"_blank",rel:"noopener noreferrer"},E={class:"hint-container tip"},m=n("p",{class:"hint-container-title"},"FHIR Reverse Proxy",-1),k=n("code",null,"optional",-1),R=d(`

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.3.0
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    `,12);function D(b,g){const t=s("ExternalLinkIcon"),o=s("RouteLink");return r(),c("div",null,[p,_,n("p",null,[e("The DSF FHIR server supports "),n("a",h,[e("Authorization Code Flow"),a(t)]),e(" for the user interface as well as "),n("a",f,[e("Bearer Token Authentication"),a(t)]),e(" for the REST API. "),n("a",v,[e("Back-Channel Logout"),a(t)]),e(" is also supported.")]),n("div",E,[m,n("p",null,[e("The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter "),a(o,{to:"/v1.3.0/maintain/fhir/configuration/reverseproxy.html#ssl-verify-client"},{default:l(()=>[e("SSL_VERIFY_CLIENT")]),_:1}),e(" needs to be set to "),k,e(".")])]),R])}const T=i(u,[["render",D],["__file","oidc.html.vue"]]),C=JSON.parse('{"path":"/v1.3.0/maintain/fhir/oidc.html","title":"OpenID Connect","lang":"en-US","frontmatter":{"title":"OpenID Connect","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Authorization Code Flow","slug":"authorization-code-flow","link":"#authorization-code-flow","children":[]},{"level":2,"title":"Bearer Token Authentication","slug":"bearer-token-authentication","link":"#bearer-token-authentication","children":[]},{"level":2,"title":"Additional ODIC Configuration Parameter","slug":"additional-odic-configuration-parameter","link":"#additional-odic-configuration-parameter","children":[]},{"level":2,"title":"Example","slug":"example","link":"#example","children":[]}],"git":{"createdTime":1696944513000,"updatedTime":1708517817000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.33,"words":400},"filePathRelative":"v1.3.0/maintain/fhir/oidc.md","localizedDate":"October 10, 2023","excerpt":"

    Overview

    \\n

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    "}');export{T as comp,C as data}; diff --git a/assets/oidc.html-9DP6k1sI.js b/assets/oidc.html-9DP6k1sI.js new file mode 100644 index 000000000..f54c0e44f --- /dev/null +++ b/assets/oidc.html-9DP6k1sI.js @@ -0,0 +1,21 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as r,c,a as n,b as e,d as a,w as l,e as d}from"./app-kq9lCQfY.js";const u={},p=n("h2",{id:"overview",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#overview"},[n("span",null,"Overview")])],-1),_=n("p",null,[e("Access to the DSF FHIR server REST API and user interface can be configured via "),n("a",{href:"access-control"},"access control roles"),e(". By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.")],-1),h={href:"https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth",target:"_blank",rel:"noopener noreferrer"},f={href:"https://datatracker.ietf.org/doc/html/rfc6750",target:"_blank",rel:"noopener noreferrer"},v={href:"https://openid.net/specs/openid-connect-backchannel-1_0.html",target:"_blank",rel:"noopener noreferrer"},E={class:"hint-container tip"},k=n("p",{class:"hint-container-title"},"FHIR Reverse Proxy",-1),m=n("code",null,"optional",-1),R=d(`

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.5.2
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    `,12);function D(b,g){const t=s("ExternalLinkIcon"),o=s("RouteLink");return r(),c("div",null,[p,_,n("p",null,[e("The DSF FHIR server supports "),n("a",h,[e("Authorization Code Flow"),a(t)]),e(" for the user interface as well as "),n("a",f,[e("Bearer Token Authentication"),a(t)]),e(" for the REST API. "),n("a",v,[e("Back-Channel Logout"),a(t)]),e(" is also supported.")]),n("div",E,[k,n("p",null,[e("The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter "),a(o,{to:"/v1.5.2/maintain/fhir/configuration/reverseproxy.html#ssl-verify-client"},{default:l(()=>[e("SSL_VERIFY_CLIENT")]),_:1}),e(" needs to be set to "),m,e(".")])]),R])}const T=i(u,[["render",D],["__file","oidc.html.vue"]]),C=JSON.parse('{"path":"/v1.5.2/maintain/fhir/oidc.html","title":"OpenID Connect","lang":"en-US","frontmatter":{"title":"OpenID Connect","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Authorization Code Flow","slug":"authorization-code-flow","link":"#authorization-code-flow","children":[]},{"level":2,"title":"Bearer Token Authentication","slug":"bearer-token-authentication","link":"#bearer-token-authentication","children":[]},{"level":2,"title":"Additional ODIC Configuration Parameter","slug":"additional-odic-configuration-parameter","link":"#additional-odic-configuration-parameter","children":[]},{"level":2,"title":"Example","slug":"example","link":"#example","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.34,"words":401},"filePathRelative":"v1.5.2/maintain/fhir/oidc.md","localizedDate":"July 8, 2024","excerpt":"

    Overview

    \\n

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    "}');export{T as comp,C as data}; diff --git a/assets/oidc.html-BCFFNQSE.js b/assets/oidc.html-BCFFNQSE.js new file mode 100644 index 000000000..066645ce9 --- /dev/null +++ b/assets/oidc.html-BCFFNQSE.js @@ -0,0 +1,21 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as r,c,a as n,b as e,d as a,w as l,e as d}from"./app-kq9lCQfY.js";const u={},p=n("h2",{id:"overview",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#overview"},[n("span",null,"Overview")])],-1),_=n("p",null,[e("Access to the DSF FHIR server REST API and user interface can be configured via "),n("a",{href:"access-control"},"access control roles"),e(". By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.")],-1),h={href:"https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth",target:"_blank",rel:"noopener noreferrer"},f={href:"https://datatracker.ietf.org/doc/html/rfc6750",target:"_blank",rel:"noopener noreferrer"},v={href:"https://openid.net/specs/openid-connect-backchannel-1_0.html",target:"_blank",rel:"noopener noreferrer"},E={class:"hint-container tip"},m=n("p",{class:"hint-container-title"},"FHIR Reverse Proxy",-1),k=n("code",null,"optional",-1),R=d(`

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.5.0
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    `,12);function D(b,g){const t=s("ExternalLinkIcon"),o=s("RouteLink");return r(),c("div",null,[p,_,n("p",null,[e("The DSF FHIR server supports "),n("a",h,[e("Authorization Code Flow"),a(t)]),e(" for the user interface as well as "),n("a",f,[e("Bearer Token Authentication"),a(t)]),e(" for the REST API. "),n("a",v,[e("Back-Channel Logout"),a(t)]),e(" is also supported.")]),n("div",E,[m,n("p",null,[e("The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter "),a(o,{to:"/v1.5.0/maintain/fhir/configuration/reverseproxy.html#ssl-verify-client"},{default:l(()=>[e("SSL_VERIFY_CLIENT")]),_:1}),e(" needs to be set to "),k,e(".")])]),R])}const T=i(u,[["render",D],["__file","oidc.html.vue"]]),C=JSON.parse('{"path":"/v1.5.0/maintain/fhir/oidc.html","title":"OpenID Connect","lang":"en-US","frontmatter":{"title":"OpenID Connect","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Authorization Code Flow","slug":"authorization-code-flow","link":"#authorization-code-flow","children":[]},{"level":2,"title":"Bearer Token Authentication","slug":"bearer-token-authentication","link":"#bearer-token-authentication","children":[]},{"level":2,"title":"Additional ODIC Configuration Parameter","slug":"additional-odic-configuration-parameter","link":"#additional-odic-configuration-parameter","children":[]},{"level":2,"title":"Example","slug":"example","link":"#example","children":[]}],"git":{"createdTime":1708419681000,"updatedTime":1708517817000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.34,"words":401},"filePathRelative":"v1.5.0/maintain/fhir/oidc.md","localizedDate":"February 20, 2024","excerpt":"

    Overview

    \\n

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    "}');export{T as comp,C as data}; diff --git a/assets/oidc.html-BW3uDMyZ.js b/assets/oidc.html-BW3uDMyZ.js new file mode 100644 index 000000000..5a5b24b86 --- /dev/null +++ b/assets/oidc.html-BW3uDMyZ.js @@ -0,0 +1,21 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as r,c,a as n,b as e,d as a,w as l,e as d}from"./app-kq9lCQfY.js";const p={},u=n("h2",{id:"overview",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#overview"},[n("span",null,"Overview")])],-1),_=n("p",null,[e("Access to the DSF FHIR server REST API and user interface can be configured via "),n("a",{href:"access-control"},"access control roles"),e(". By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.")],-1),h={href:"https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth",target:"_blank",rel:"noopener noreferrer"},f={href:"https://datatracker.ietf.org/doc/html/rfc6750",target:"_blank",rel:"noopener noreferrer"},v={href:"https://openid.net/specs/openid-connect-backchannel-1_0.html",target:"_blank",rel:"noopener noreferrer"},E={class:"hint-container tip"},m=n("p",{class:"hint-container-title"},"FHIR Reverse Proxy",-1),k=n("code",null,"optional",-1),R=d(`

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.5.1
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    `,12);function D(b,g){const t=s("ExternalLinkIcon"),o=s("RouteLink");return r(),c("div",null,[u,_,n("p",null,[e("The DSF FHIR server supports "),n("a",h,[e("Authorization Code Flow"),a(t)]),e(" for the user interface as well as "),n("a",f,[e("Bearer Token Authentication"),a(t)]),e(" for the REST API. "),n("a",v,[e("Back-Channel Logout"),a(t)]),e(" is also supported.")]),n("div",E,[m,n("p",null,[e("The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter "),a(o,{to:"/v1.5.1/maintain/fhir/configuration/reverseproxy.html#ssl-verify-client"},{default:l(()=>[e("SSL_VERIFY_CLIENT")]),_:1}),e(" needs to be set to "),k,e(".")])]),R])}const T=i(p,[["render",D],["__file","oidc.html.vue"]]),A=JSON.parse('{"path":"/v1.5.1/maintain/fhir/oidc.html","title":"OpenID Connect","lang":"en-US","frontmatter":{"title":"OpenID Connect","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Authorization Code Flow","slug":"authorization-code-flow","link":"#authorization-code-flow","children":[]},{"level":2,"title":"Bearer Token Authentication","slug":"bearer-token-authentication","link":"#bearer-token-authentication","children":[]},{"level":2,"title":"Additional ODIC Configuration Parameter","slug":"additional-odic-configuration-parameter","link":"#additional-odic-configuration-parameter","children":[]},{"level":2,"title":"Example","slug":"example","link":"#example","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.34,"words":401},"filePathRelative":"v1.5.1/maintain/fhir/oidc.md","localizedDate":"April 17, 2024","excerpt":"

    Overview

    \\n

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    "}');export{T as comp,A as data}; diff --git a/assets/oidc.html-BYqZILbt.js b/assets/oidc.html-BYqZILbt.js new file mode 100644 index 000000000..938c89d46 --- /dev/null +++ b/assets/oidc.html-BYqZILbt.js @@ -0,0 +1,21 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as r,c,a as n,b as e,d as a,w as l,e as d}from"./app-kq9lCQfY.js";const p={},u=n("h2",{id:"overview",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#overview"},[n("span",null,"Overview")])],-1),_=n("p",null,[e("Access to the DSF FHIR server REST API and user interface can be configured via "),n("a",{href:"access-control"},"access control roles"),e(". By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.")],-1),h={href:"https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth",target:"_blank",rel:"noopener noreferrer"},f={href:"https://datatracker.ietf.org/doc/html/rfc6750",target:"_blank",rel:"noopener noreferrer"},v={href:"https://openid.net/specs/openid-connect-backchannel-1_0.html",target:"_blank",rel:"noopener noreferrer"},E={class:"hint-container tip"},k=n("p",{class:"hint-container-title"},"FHIR Reverse Proxy",-1),m=n("code",null,"optional",-1),R=d(`

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.5.2
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    `,12);function D(b,g){const t=s("ExternalLinkIcon"),o=s("RouteLink");return r(),c("div",null,[u,_,n("p",null,[e("The DSF FHIR server supports "),n("a",h,[e("Authorization Code Flow"),a(t)]),e(" for the user interface as well as "),n("a",f,[e("Bearer Token Authentication"),a(t)]),e(" for the REST API. "),n("a",v,[e("Back-Channel Logout"),a(t)]),e(" is also supported.")]),n("div",E,[k,n("p",null,[e("The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter "),a(o,{to:"/stable/maintain/fhir/configuration/reverseproxy.html#ssl-verify-client"},{default:l(()=>[e("SSL_VERIFY_CLIENT")]),_:1}),e(" needs to be set to "),m,e(".")])]),R])}const T=i(p,[["render",D],["__file","oidc.html.vue"]]),C=JSON.parse('{"path":"/stable/maintain/fhir/oidc.html","title":"OpenID Connect","lang":"en-US","frontmatter":{"title":"OpenID Connect","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Authorization Code Flow","slug":"authorization-code-flow","link":"#authorization-code-flow","children":[]},{"level":2,"title":"Bearer Token Authentication","slug":"bearer-token-authentication","link":"#bearer-token-authentication","children":[]},{"level":2,"title":"Additional ODIC Configuration Parameter","slug":"additional-odic-configuration-parameter","link":"#additional-odic-configuration-parameter","children":[]},{"level":2,"title":"Example","slug":"example","link":"#example","children":[]}],"git":{"createdTime":null,"updatedTime":null,"contributors":[]},"readingTime":{"minutes":1.34,"words":401},"filePathRelative":"stable/maintain/fhir/oidc.md","excerpt":"

    Overview

    \\n

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    "}');export{T as comp,C as data}; diff --git a/assets/oidc.html-CXM5MBWF.js b/assets/oidc.html-CXM5MBWF.js new file mode 100644 index 000000000..39d2514f9 --- /dev/null +++ b/assets/oidc.html-CXM5MBWF.js @@ -0,0 +1,21 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as r,c,a as n,b as e,d as a,w as l,e as d}from"./app-kq9lCQfY.js";const u={},p=n("h2",{id:"overview",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#overview"},[n("span",null,"Overview")])],-1),_=n("p",null,[e("Access to the DSF FHIR server REST API and user interface can be configured via "),n("a",{href:"access-control"},"access control roles"),e(". By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.")],-1),h={href:"https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth",target:"_blank",rel:"noopener noreferrer"},f={href:"https://datatracker.ietf.org/doc/html/rfc6750",target:"_blank",rel:"noopener noreferrer"},v={href:"https://openid.net/specs/openid-connect-backchannel-1_0.html",target:"_blank",rel:"noopener noreferrer"},E={class:"hint-container tip"},m=n("p",{class:"hint-container-title"},"FHIR Reverse Proxy",-1),k=n("code",null,"optional",-1),R=d(`

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.4.0
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    `,12);function D(b,g){const t=s("ExternalLinkIcon"),o=s("RouteLink");return r(),c("div",null,[p,_,n("p",null,[e("The DSF FHIR server supports "),n("a",h,[e("Authorization Code Flow"),a(t)]),e(" for the user interface as well as "),n("a",f,[e("Bearer Token Authentication"),a(t)]),e(" for the REST API. "),n("a",v,[e("Back-Channel Logout"),a(t)]),e(" is also supported.")]),n("div",E,[m,n("p",null,[e("The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter "),a(o,{to:"/v1.4.0/maintain/fhir/configuration/reverseproxy.html#ssl-verify-client"},{default:l(()=>[e("SSL_VERIFY_CLIENT")]),_:1}),e(" needs to be set to "),k,e(".")])]),R])}const T=i(u,[["render",D],["__file","oidc.html.vue"]]),C=JSON.parse('{"path":"/v1.4.0/maintain/fhir/oidc.html","title":"OpenID Connect","lang":"en-US","frontmatter":{"title":"OpenID Connect","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Authorization Code Flow","slug":"authorization-code-flow","link":"#authorization-code-flow","children":[]},{"level":2,"title":"Bearer Token Authentication","slug":"bearer-token-authentication","link":"#bearer-token-authentication","children":[]},{"level":2,"title":"Additional ODIC Configuration Parameter","slug":"additional-odic-configuration-parameter","link":"#additional-odic-configuration-parameter","children":[]},{"level":2,"title":"Example","slug":"example","link":"#example","children":[]}],"git":{"createdTime":1702917645000,"updatedTime":1708517817000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.33,"words":400},"filePathRelative":"v1.4.0/maintain/fhir/oidc.md","localizedDate":"December 18, 2023","excerpt":"

    Overview

    \\n

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    "}');export{T as comp,C as data}; diff --git a/assets/oidc.html-CZf70zLH.js b/assets/oidc.html-CZf70zLH.js new file mode 100644 index 000000000..dd5a5feb2 --- /dev/null +++ b/assets/oidc.html-CZf70zLH.js @@ -0,0 +1,21 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as r,c,a as n,b as e,d as a,w as l,e as d}from"./app-kq9lCQfY.js";const u={},p=n("h2",{id:"overview",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#overview"},[n("span",null,"Overview")])],-1),_=n("p",null,[e("Access to the DSF FHIR server REST API and user interface can be configured via "),n("a",{href:"access-control"},"access control roles"),e(". By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.")],-1),h={href:"https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth",target:"_blank",rel:"noopener noreferrer"},f={href:"https://datatracker.ietf.org/doc/html/rfc6750",target:"_blank",rel:"noopener noreferrer"},v={href:"https://openid.net/specs/openid-connect-backchannel-1_0.html",target:"_blank",rel:"noopener noreferrer"},E={class:"hint-container tip"},m=n("p",{class:"hint-container-title"},"FHIR Reverse Proxy",-1),k=n("code",null,"optional",-1),R=d(`

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.2.0
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    `,12);function D(b,S){const t=s("ExternalLinkIcon"),o=s("RouteLink");return r(),c("div",null,[p,_,n("p",null,[e("The DSF FHIR server supports "),n("a",h,[e("Authorization Code Flow"),a(t)]),e(" for the user interface as well as "),n("a",f,[e("Bearer Token Authentication"),a(t)]),e(" for the REST API. "),n("a",v,[e("Back-Channel Logout"),a(t)]),e(" is also supported.")]),n("div",E,[m,n("p",null,[e("The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter "),a(o,{to:"/v1.2.0/maintain/fhir/configuration/reverseproxy.html#ssl-verify-client"},{default:l(()=>[e("SSL_VERIFY_CLIENT")]),_:1}),e(" needs to be set to "),k,e(".")])]),R])}const T=i(u,[["render",D],["__file","oidc.html.vue"]]),C=JSON.parse('{"path":"/v1.2.0/maintain/fhir/oidc.html","title":"OpenID Connect","lang":"en-US","frontmatter":{"title":"OpenID Connect","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Authorization Code Flow","slug":"authorization-code-flow","link":"#authorization-code-flow","children":[]},{"level":2,"title":"Bearer Token Authentication","slug":"bearer-token-authentication","link":"#bearer-token-authentication","children":[]},{"level":2,"title":"Additional ODIC Configuration Parameter","slug":"additional-odic-configuration-parameter","link":"#additional-odic-configuration-parameter","children":[]},{"level":2,"title":"Example","slug":"example","link":"#example","children":[]}],"git":{"createdTime":1694544770000,"updatedTime":1708517817000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.33,"words":400},"filePathRelative":"v1.2.0/maintain/fhir/oidc.md","localizedDate":"September 12, 2023","excerpt":"

    Overview

    \\n

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    "}');export{T as comp,C as data}; diff --git a/assets/oidc.html-CpxbdObG.js b/assets/oidc.html-CpxbdObG.js new file mode 100644 index 000000000..abcbf441e --- /dev/null +++ b/assets/oidc.html-CpxbdObG.js @@ -0,0 +1,21 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as c,c as r,a as e,b as n,d as a,w as l,e as p}from"./app-kq9lCQfY.js";const d={},u=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),_=e("p",null,[n("Access to the DSF BPE server user interface can be configured via "),e("a",{href:"access-control"},"access control roles"),n(". By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.")],-1),h={href:"https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth",target:"_blank",rel:"noopener noreferrer"},v={href:"https://openid.net/specs/openid-connect-backchannel-1_0.html",target:"_blank",rel:"noopener noreferrer"},E={class:"hint-container tip"},f=e("p",{class:"hint-container-title"},"BPE Reverse Proxy",-1),m=e("code",null,"optional",-1),k=p(`

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF BPE server accepts logout tokens at DEV_DSF_BPE_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF BPE server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/bpe:1.5.1
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-bpe
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    `,9);function D(R,b){const t=s("ExternalLinkIcon"),o=s("RouteLink");return c(),r("div",null,[u,_,e("p",null,[n("The DSF BPE server supports "),e("a",h,[n("Authorization Code Flow"),a(t)]),n(" for the user interface. "),e("a",v,[n("Back-Channel Logout"),a(t)]),n(" is also supported.")]),e("div",E,[f,e("p",null,[n("The DSF BPE reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter "),a(o,{to:"/v1.5.1/maintain/bpe/configuration/reverseproxy.html#ssl-verify-client"},{default:l(()=>[n("SSL_VERIFY_CLIENT")]),_:1}),n(" needs to be set to "),m,n(".")])]),k])}const S=i(d,[["render",D],["__file","oidc.html.vue"]]),T=JSON.parse('{"path":"/v1.5.1/maintain/bpe/oidc.html","title":"OpenID Connect","lang":"en-US","frontmatter":{"title":"OpenID Connect","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Authorization Code Flow","slug":"authorization-code-flow","link":"#authorization-code-flow","children":[]},{"level":2,"title":"Additional ODIC Configuration Parameter","slug":"additional-odic-configuration-parameter","link":"#additional-odic-configuration-parameter","children":[]},{"level":2,"title":"Example","slug":"example","link":"#example","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.16,"words":347},"filePathRelative":"v1.5.1/maintain/bpe/oidc.md","localizedDate":"April 17, 2024","excerpt":"

    Overview

    \\n

    Access to the DSF BPE server user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    \\n"}');export{S as comp,T as data}; diff --git a/assets/oidc.html-DDgGRVZ0.js b/assets/oidc.html-DDgGRVZ0.js new file mode 100644 index 000000000..642dd8df9 --- /dev/null +++ b/assets/oidc.html-DDgGRVZ0.js @@ -0,0 +1,21 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as r,c,a as n,b as e,d as a,w as l,e as d}from"./app-kq9lCQfY.js";const u={},p=n("h2",{id:"overview",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#overview"},[n("span",null,"Overview")])],-1),_=n("p",null,[e("Access to the DSF FHIR server REST API and user interface can be configured via "),n("a",{href:"access-control"},"access control roles"),e(". By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.")],-1),h={href:"https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth",target:"_blank",rel:"noopener noreferrer"},f={href:"https://datatracker.ietf.org/doc/html/rfc6750",target:"_blank",rel:"noopener noreferrer"},v={href:"https://openid.net/specs/openid-connect-backchannel-1_0.html",target:"_blank",rel:"noopener noreferrer"},E={class:"hint-container tip"},m=n("p",{class:"hint-container-title"},"FHIR Reverse Proxy",-1),k=n("code",null,"optional",-1),R=d(`

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.3.2
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    `,12);function D(b,g){const t=s("ExternalLinkIcon"),o=s("RouteLink");return r(),c("div",null,[p,_,n("p",null,[e("The DSF FHIR server supports "),n("a",h,[e("Authorization Code Flow"),a(t)]),e(" for the user interface as well as "),n("a",f,[e("Bearer Token Authentication"),a(t)]),e(" for the REST API. "),n("a",v,[e("Back-Channel Logout"),a(t)]),e(" is also supported.")]),n("div",E,[m,n("p",null,[e("The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter "),a(o,{to:"/v1.3.2/maintain/fhir/configuration/reverseproxy.html#ssl-verify-client"},{default:l(()=>[e("SSL_VERIFY_CLIENT")]),_:1}),e(" needs to be set to "),k,e(".")])]),R])}const T=i(u,[["render",D],["__file","oidc.html.vue"]]),C=JSON.parse('{"path":"/v1.3.2/maintain/fhir/oidc.html","title":"OpenID Connect","lang":"en-US","frontmatter":{"title":"OpenID Connect","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Authorization Code Flow","slug":"authorization-code-flow","link":"#authorization-code-flow","children":[]},{"level":2,"title":"Bearer Token Authentication","slug":"bearer-token-authentication","link":"#bearer-token-authentication","children":[]},{"level":2,"title":"Additional ODIC Configuration Parameter","slug":"additional-odic-configuration-parameter","link":"#additional-odic-configuration-parameter","children":[]},{"level":2,"title":"Example","slug":"example","link":"#example","children":[]}],"git":{"createdTime":1701710218000,"updatedTime":1708517817000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.33,"words":400},"filePathRelative":"v1.3.2/maintain/fhir/oidc.md","localizedDate":"December 4, 2023","excerpt":"

    Overview

    \\n

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    "}');export{T as comp,C as data}; diff --git a/assets/oidc.html-DEex2PUu.js b/assets/oidc.html-DEex2PUu.js new file mode 100644 index 000000000..fdc00c3c2 --- /dev/null +++ b/assets/oidc.html-DEex2PUu.js @@ -0,0 +1,21 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as c,c as r,a as e,b as n,d as a,w as l,e as p}from"./app-kq9lCQfY.js";const d={},u=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),_=e("p",null,[n("Access to the DSF BPE server user interface can be configured via "),e("a",{href:"access-control"},"access control roles"),n(". By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.")],-1),h={href:"https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth",target:"_blank",rel:"noopener noreferrer"},v={href:"https://openid.net/specs/openid-connect-backchannel-1_0.html",target:"_blank",rel:"noopener noreferrer"},E={class:"hint-container tip"},f=e("p",{class:"hint-container-title"},"BPE Reverse Proxy",-1),m=e("code",null,"optional",-1),k=p(`

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF BPE server accepts logout tokens at DEV_DSF_BPE_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF BPE server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/bpe:1.5.2
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-bpe
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    `,9);function D(R,b){const t=s("ExternalLinkIcon"),o=s("RouteLink");return c(),r("div",null,[u,_,e("p",null,[n("The DSF BPE server supports "),e("a",h,[n("Authorization Code Flow"),a(t)]),n(" for the user interface. "),e("a",v,[n("Back-Channel Logout"),a(t)]),n(" is also supported.")]),e("div",E,[f,e("p",null,[n("The DSF BPE reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter "),a(o,{to:"/v1.5.2/maintain/bpe/configuration/reverseproxy.html#ssl-verify-client"},{default:l(()=>[n("SSL_VERIFY_CLIENT")]),_:1}),n(" needs to be set to "),m,n(".")])]),k])}const S=i(d,[["render",D],["__file","oidc.html.vue"]]),T=JSON.parse('{"path":"/v1.5.2/maintain/bpe/oidc.html","title":"OpenID Connect","lang":"en-US","frontmatter":{"title":"OpenID Connect","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Authorization Code Flow","slug":"authorization-code-flow","link":"#authorization-code-flow","children":[]},{"level":2,"title":"Additional ODIC Configuration Parameter","slug":"additional-odic-configuration-parameter","link":"#additional-odic-configuration-parameter","children":[]},{"level":2,"title":"Example","slug":"example","link":"#example","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.16,"words":347},"filePathRelative":"v1.5.2/maintain/bpe/oidc.md","localizedDate":"July 8, 2024","excerpt":"

    Overview

    \\n

    Access to the DSF BPE server user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    \\n"}');export{S as comp,T as data}; diff --git a/assets/oidc.html-DPFGyyJT.js b/assets/oidc.html-DPFGyyJT.js new file mode 100644 index 000000000..f8645d672 --- /dev/null +++ b/assets/oidc.html-DPFGyyJT.js @@ -0,0 +1,21 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as r,c,a as n,b as e,d as a,w as l,e as d}from"./app-kq9lCQfY.js";const u={},p=n("h2",{id:"overview",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#overview"},[n("span",null,"Overview")])],-1),_=n("p",null,[e("Access to the DSF FHIR server REST API and user interface can be configured via "),n("a",{href:"access-control"},"access control roles"),e(". By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.")],-1),h={href:"https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth",target:"_blank",rel:"noopener noreferrer"},f={href:"https://datatracker.ietf.org/doc/html/rfc6750",target:"_blank",rel:"noopener noreferrer"},v={href:"https://openid.net/specs/openid-connect-backchannel-1_0.html",target:"_blank",rel:"noopener noreferrer"},E={class:"hint-container tip"},m=n("p",{class:"hint-container-title"},"FHIR Reverse Proxy",-1),k=n("code",null,"optional",-1),R=d(`

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.3.1
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    `,12);function D(b,g){const t=s("ExternalLinkIcon"),o=s("RouteLink");return r(),c("div",null,[p,_,n("p",null,[e("The DSF FHIR server supports "),n("a",h,[e("Authorization Code Flow"),a(t)]),e(" for the user interface as well as "),n("a",f,[e("Bearer Token Authentication"),a(t)]),e(" for the REST API. "),n("a",v,[e("Back-Channel Logout"),a(t)]),e(" is also supported.")]),n("div",E,[m,n("p",null,[e("The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter "),a(o,{to:"/v1.3.1/maintain/fhir/configuration/reverseproxy.html#ssl-verify-client"},{default:l(()=>[e("SSL_VERIFY_CLIENT")]),_:1}),e(" needs to be set to "),k,e(".")])]),R])}const T=i(u,[["render",D],["__file","oidc.html.vue"]]),C=JSON.parse('{"path":"/v1.3.1/maintain/fhir/oidc.html","title":"OpenID Connect","lang":"en-US","frontmatter":{"title":"OpenID Connect","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Authorization Code Flow","slug":"authorization-code-flow","link":"#authorization-code-flow","children":[]},{"level":2,"title":"Bearer Token Authentication","slug":"bearer-token-authentication","link":"#bearer-token-authentication","children":[]},{"level":2,"title":"Additional ODIC Configuration Parameter","slug":"additional-odic-configuration-parameter","link":"#additional-odic-configuration-parameter","children":[]},{"level":2,"title":"Example","slug":"example","link":"#example","children":[]}],"git":{"createdTime":1698748420000,"updatedTime":1708517817000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.33,"words":400},"filePathRelative":"v1.3.1/maintain/fhir/oidc.md","localizedDate":"October 31, 2023","excerpt":"

    Overview

    \\n

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    "}');export{T as comp,C as data}; diff --git a/assets/oidc.html-DVMEndoa.js b/assets/oidc.html-DVMEndoa.js new file mode 100644 index 000000000..846fea425 --- /dev/null +++ b/assets/oidc.html-DVMEndoa.js @@ -0,0 +1,21 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as c,c as r,a as e,b as n,d as a,w as l,e as p}from"./app-kq9lCQfY.js";const d={},u=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),_=e("p",null,[n("Access to the DSF BPE server user interface can be configured via "),e("a",{href:"access-control"},"access control roles"),n(". By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.")],-1),h={href:"https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth",target:"_blank",rel:"noopener noreferrer"},v={href:"https://openid.net/specs/openid-connect-backchannel-1_0.html",target:"_blank",rel:"noopener noreferrer"},E={class:"hint-container tip"},f=e("p",{class:"hint-container-title"},"BPE Reverse Proxy",-1),m=e("code",null,"optional",-1),k=p(`

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF BPE server accepts logout tokens at DEV_DSF_BPE_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF BPE server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/bpe:1.5.2
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-bpe
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    `,9);function D(b,R){const t=s("ExternalLinkIcon"),o=s("RouteLink");return c(),r("div",null,[u,_,e("p",null,[n("The DSF BPE server supports "),e("a",h,[n("Authorization Code Flow"),a(t)]),n(" for the user interface. "),e("a",v,[n("Back-Channel Logout"),a(t)]),n(" is also supported.")]),e("div",E,[f,e("p",null,[n("The DSF BPE reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter "),a(o,{to:"/stable/maintain/bpe/configuration/reverseproxy.html#ssl-verify-client"},{default:l(()=>[n("SSL_VERIFY_CLIENT")]),_:1}),n(" needs to be set to "),m,n(".")])]),k])}const S=i(d,[["render",D],["__file","oidc.html.vue"]]),T=JSON.parse('{"path":"/stable/maintain/bpe/oidc.html","title":"OpenID Connect","lang":"en-US","frontmatter":{"title":"OpenID Connect","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Authorization Code Flow","slug":"authorization-code-flow","link":"#authorization-code-flow","children":[]},{"level":2,"title":"Additional ODIC Configuration Parameter","slug":"additional-odic-configuration-parameter","link":"#additional-odic-configuration-parameter","children":[]},{"level":2,"title":"Example","slug":"example","link":"#example","children":[]}],"git":{"createdTime":null,"updatedTime":null,"contributors":[]},"readingTime":{"minutes":1.16,"words":347},"filePathRelative":"stable/maintain/bpe/oidc.md","excerpt":"

    Overview

    \\n

    Access to the DSF BPE server user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    \\n"}');export{S as comp,T as data}; diff --git a/assets/oidc.html-DdP4mKTW.js b/assets/oidc.html-DdP4mKTW.js new file mode 100644 index 000000000..e9f14f489 --- /dev/null +++ b/assets/oidc.html-DdP4mKTW.js @@ -0,0 +1,21 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as r,c,a as n,b as e,d as a,w as l,e as d}from"./app-kq9lCQfY.js";const u={},p=n("h2",{id:"overview",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#overview"},[n("span",null,"Overview")])],-1),_=n("p",null,[e("Access to the DSF FHIR server REST API and user interface can be configured via "),n("a",{href:"access-control"},"access control roles"),e(". By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.")],-1),h={href:"https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth",target:"_blank",rel:"noopener noreferrer"},f={href:"https://datatracker.ietf.org/doc/html/rfc6750",target:"_blank",rel:"noopener noreferrer"},v={href:"https://openid.net/specs/openid-connect-backchannel-1_0.html",target:"_blank",rel:"noopener noreferrer"},E={class:"hint-container tip"},k=n("p",{class:"hint-container-title"},"FHIR Reverse Proxy",-1),m=n("code",null,"optional",-1),R=d(`

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.1.0
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    `,12);function D(b,g){const t=s("ExternalLinkIcon"),o=s("RouteLink");return r(),c("div",null,[p,_,n("p",null,[e("The DSF FHIR server supports "),n("a",h,[e("Authorization Code Flow"),a(t)]),e(" for the user interface as well as "),n("a",f,[e("Bearer Token Authentication"),a(t)]),e(" for the REST API. "),n("a",v,[e("Back-Channel Logout"),a(t)]),e(" is also supported.")]),n("div",E,[k,n("p",null,[e("The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter "),a(o,{to:"/v1.1.0/maintain/fhir/configuration/reverseproxy.html#ssl-verify-client"},{default:l(()=>[e("SSL_VERIFY_CLIENT")]),_:1}),e(" needs to be set to "),m,e(".")])]),R])}const T=i(u,[["render",D],["__file","oidc.html.vue"]]),A=JSON.parse('{"path":"/v1.1.0/maintain/fhir/oidc.html","title":"OpenID Connect","lang":"en-US","frontmatter":{"title":"OpenID Connect","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Authorization Code Flow","slug":"authorization-code-flow","link":"#authorization-code-flow","children":[]},{"level":2,"title":"Bearer Token Authentication","slug":"bearer-token-authentication","link":"#bearer-token-authentication","children":[]},{"level":2,"title":"Additional ODIC Configuration Parameter","slug":"additional-odic-configuration-parameter","link":"#additional-odic-configuration-parameter","children":[]},{"level":2,"title":"Example","slug":"example","link":"#example","children":[]}],"git":{"createdTime":1693251017000,"updatedTime":1693415162000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":1.33,"words":400},"filePathRelative":"v1.1.0/maintain/fhir/oidc.md","localizedDate":"August 28, 2023","excerpt":"

    Overview

    \\n

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    "}');export{T as comp,A as data}; diff --git a/assets/oidc.html-DxM6kWsg.js b/assets/oidc.html-DxM6kWsg.js new file mode 100644 index 000000000..cc3ee5697 --- /dev/null +++ b/assets/oidc.html-DxM6kWsg.js @@ -0,0 +1,21 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as c,c as r,a as e,b as n,d as a,w as l,e as p}from"./app-kq9lCQfY.js";const d={},u=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview"},[e("span",null,"Overview")])],-1),_=e("p",null,[n("Access to the DSF BPE server user interface can be configured via "),e("a",{href:"access-control"},"access control roles"),n(". By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.")],-1),h={href:"https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth",target:"_blank",rel:"noopener noreferrer"},v={href:"https://openid.net/specs/openid-connect-backchannel-1_0.html",target:"_blank",rel:"noopener noreferrer"},E={class:"hint-container tip"},f=e("p",{class:"hint-container-title"},"BPE Reverse Proxy",-1),m=e("code",null,"optional",-1),k=p(`

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF BPE server accepts logout tokens at DEV_DSF_BPE_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF BPE server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/bpe:1.5.0
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-bpe
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    `,9);function D(R,b){const t=s("ExternalLinkIcon"),o=s("RouteLink");return c(),r("div",null,[u,_,e("p",null,[n("The DSF BPE server supports "),e("a",h,[n("Authorization Code Flow"),a(t)]),n(" for the user interface. "),e("a",v,[n("Back-Channel Logout"),a(t)]),n(" is also supported.")]),e("div",E,[f,e("p",null,[n("The DSF BPE reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter "),a(o,{to:"/v1.5.0/maintain/bpe/configuration/reverseproxy.html#ssl-verify-client"},{default:l(()=>[n("SSL_VERIFY_CLIENT")]),_:1}),n(" needs to be set to "),m,n(".")])]),k])}const S=i(d,[["render",D],["__file","oidc.html.vue"]]),T=JSON.parse('{"path":"/v1.5.0/maintain/bpe/oidc.html","title":"OpenID Connect","lang":"en-US","frontmatter":{"title":"OpenID Connect","icon":"config"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Authorization Code Flow","slug":"authorization-code-flow","link":"#authorization-code-flow","children":[]},{"level":2,"title":"Additional ODIC Configuration Parameter","slug":"additional-odic-configuration-parameter","link":"#additional-odic-configuration-parameter","children":[]},{"level":2,"title":"Example","slug":"example","link":"#example","children":[]}],"git":{"createdTime":1708517817000,"updatedTime":1708517817000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.16,"words":347},"filePathRelative":"v1.5.0/maintain/bpe/oidc.md","localizedDate":"February 21, 2024","excerpt":"

    Overview

    \\n

    Access to the DSF BPE server user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    \\n"}');export{S as comp,T as data}; diff --git a/assets/partners.html-B-l0TZk2.js b/assets/partners.html-B-l0TZk2.js new file mode 100644 index 000000000..029efdd73 --- /dev/null +++ b/assets/partners.html-B-l0TZk2.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as s,c as a,a as e,b as i,d as n}from"./app-kq9lCQfY.js";const l={},c=e("p",null,"Funded for further development of the Data Sharing Framework are:",-1),d=e("h2",{id:"heilbronn-university-of-applied-sciences-gecko-institute",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#heilbronn-university-of-applied-sciences-gecko-institute"},[e("span",null,"Heilbronn University of Applied Sciences | Gecko Institute")])],-1),h={href:"https://www.hs-heilbronn.de/de/gecko",target:"_blank",rel:"noopener noreferrer"},f={href:"https://www.hs-heilbronn.de/de",target:"_blank",rel:"noopener noreferrer"},u=e("h2",{id:"university-of-heidelberg-institute-of-medical-informatics",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#university-of-heidelberg-institute-of-medical-informatics"},[e("span",null,"University of Heidelberg | Institute of Medical Informatics")])],-1),m={href:"https://www.klinikum.uni-heidelberg.de/kliniken-institute/institute/institut-fuer-medizinische-informatik",target:"_blank",rel:"noopener noreferrer"},p=e("ul",null,[e("li",null,"in the Medical Data Integration Center (MeDIC),"),e("li",null,"structured acquisition and transformation of biomedical data,"),e("li",null,"medical information systems and data models"),e("li",null,"and much more.")],-1),g=e("h2",{id:"university-of-leipzig-life-institute",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#university-of-leipzig-life-institute"},[e("span",null,"University of Leipzig | LIFE Institute")])],-1),b={href:"https://www.uniklinikum-leipzig.de/einrichtungen/life/",target:"_blank",rel:"noopener noreferrer"};function _(v,k){const t=o("ExternalLinkIcon");return s(),a("div",null,[c,d,e("p",null,[i("The "),e("a",h,[i("GECKO Institute"),n(t)]),i(" is a research institution of "),e("a",f,[i("Heilbronn University of Applied Sciences"),n(t)]),i(" and conducts research and development at the interfaces between medicine, economics and computer science. The DSF is part of Prof. Fegeler's research area: Interoperability and Digital Processes in Medicine. Other areas of research include educational technologies, health economics, and consumer health informatics.")]),u,e("p",null,[i("The "),e("a",m,[i("Institute of Medical Informatics"),n(t)]),i(" belongs to the University of Heidelberg. The scientific focus of the institute is on structured patient data, e.g.")]),p,g,e("p",null,[i("The "),e("a",b,[i("LIFE Institute"),n(t)]),i(" of the University of Leipzig manages collaborative and follow-on projects in the fields of medicine, public health, medical informatics, and biobanking.")])])}const I=r(l,[["render",_],["__file","partners.html.vue"]]),S=JSON.parse(`{"path":"/about/learnmore/partners.html","title":"Partners","lang":"en-US","frontmatter":{"title":"Partners","icon":"proxy"},"headers":[{"level":2,"title":"Heilbronn University of Applied Sciences | Gecko Institute","slug":"heilbronn-university-of-applied-sciences-gecko-institute","link":"#heilbronn-university-of-applied-sciences-gecko-institute","children":[]},{"level":2,"title":"University of Heidelberg | Institute of Medical Informatics","slug":"university-of-heidelberg-institute-of-medical-informatics","link":"#university-of-heidelberg-institute-of-medical-informatics","children":[]},{"level":2,"title":"University of Leipzig | LIFE Institute","slug":"university-of-leipzig-life-institute","link":"#university-of-leipzig-life-institute","children":[]}],"git":{"createdTime":1678951140000,"updatedTime":1683802770000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2},{"name":"simon","email":"smoeding@stu.hs-heilbronn.de","commits":2},{"name":"simonmoedinger","email":"simonmoedi@web.de","commits":2}]},"readingTime":{"minutes":0.59,"words":176},"filePathRelative":"about/learnmore/partners.md","localizedDate":"March 16, 2023","excerpt":"

    Funded for further development of the Data Sharing Framework are:

    \\n

    Heilbronn University of Applied Sciences | Gecko Institute

    \\n

    The GECKO Institute is a research institution of Heilbronn University of Applied Sciences and conducts research and development at the interfaces between medicine, economics and computer science. The DSF is part of Prof. Fegeler's research area: Interoperability and Digital Processes in Medicine. Other areas of research include educational technologies, health economics, and consumer health informatics.

    "}`);export{I as comp,S as data}; diff --git a/assets/plugin-vue_export-helper-DlAUqK2U.js b/assets/plugin-vue_export-helper-DlAUqK2U.js new file mode 100644 index 000000000..718edd339 --- /dev/null +++ b/assets/plugin-vue_export-helper-DlAUqK2U.js @@ -0,0 +1 @@ +const s=(t,r)=>{const o=t.__vccOpts||t;for(const[c,e]of r)o[c]=e;return o};export{s as _}; diff --git a/assets/prerequisites.html-BOHWoSg0.js b/assets/prerequisites.html-BOHWoSg0.js new file mode 100644 index 000000000..2e93daaa7 --- /dev/null +++ b/assets/prerequisites.html-BOHWoSg0.js @@ -0,0 +1,19 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as c,c as d,a as e,b as n,d as a,w as o,e as l}from"./app-kq9lCQfY.js";const p={},u=e("p",null,"In order to be able to solve the exercises described in this tutorial a software development environment with git, Java 11, Maven 3.8, Docker, docker-compose, a Java IDE like Eclipse or IntelliJ, a BPMN Editor like the Camunda Modeler a and minimum 16GB of RAM is needed.",-1),h=e("h3",{id:"git",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#git"},[e("span",null,"git")])],-1),m=e("hr",null,null,-1),g={href:"https://git-scm.com/",target:"_blank",rel:"noopener noreferrer"},k={href:"https://git-scm.com/book/en/v2/Getting-Started-Installing-Git",target:"_blank",rel:"noopener noreferrer"},v={href:"https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository",target:"_blank",rel:"noopener noreferrer"},b=e("h3",{id:"java-11",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#java-11"},[e("span",null,"Java 11")])],-1),f=e("hr",null,null,-1),_={href:"https://www.java.com/de/",target:"_blank",rel:"noopener noreferrer"},w=e("h3",{id:"maven-3-8",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#maven-3-8"},[e("span",null,"Maven 3.8")])],-1),x=e("hr",null,null,-1),E=e("p",null,"When implementing DSF processes, we use Maven 3.8 to manage the software project's build, reporting and documentation workflow.",-1),y={href:"https://maven.apache.org/install.html",target:"_blank",rel:"noopener noreferrer"},M={href:"https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html",target:"_blank",rel:"noopener noreferrer"},D=e("h3",{id:"github-packages",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#github-packages"},[e("span",null,"GitHub Packages")])],-1),I=e("code",{class:"read:packages"},"read:packages",-1),T={href:"https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token",target:"_blank",rel:"noopener noreferrer"},q=l(`

    After that, add the following server configuration to your local .m2/settings.xml. Replace USERNAME with your GitHub username and TOKEN with the previously generated personal GitHub access token. The token needs at least the read:packages scope.

    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    +  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
    +                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
    +
    +  ...
    +
    +  <servers>
    +    <server>
    +      <id>github</id>
    +      <username>USERNAME</username>
    +      <password>TOKEN</password>
    +    </server>
    +  </servers>
    +</settings>
    +

    Docker and docker-compose


    To be able to test the implemented processes, we use a test-setup based on Docker and docker-compose. This allows us to simulate multiple organizations with different roles and run the processes across "organizational boundaries".

    `,5),G={href:"https://docs.docker.com/get-docker/",target:"_blank",rel:"noopener noreferrer"},N={href:"https://docs.docker.com/engine/reference/run/",target:"_blank",rel:"noopener noreferrer"},S={href:"https://docs.docker.com/compose/reference/",target:"_blank",rel:"noopener noreferrer"},J=l(`

    Host entries for test-setup

    The following entries are required in the hosts file of your computer so that the FHIR servers of the simulated organizations can be accessed in your web browser. On Linux and Mac this file is located at /etc/hosts. On Windows you can find it at C:\\Windows\\System32\\drivers\\etc\\hosts

    127.0.0.1	dic
    +127.0.0.1	cos
    +127.0.0.1	hrp
    +

    Java IDE


    For the development of the processes we recommend the use of an IDE, e.g. Eclipse or IntelliJ:

    `,6),A={href:"https://wiki.eclipse.org/Eclipse/Installation",target:"_blank",rel:"noopener noreferrer"},P={href:"https://www.jetbrains.com/help/idea/installation-guide.html",target:"_blank",rel:"noopener noreferrer"},j=e("h3",{id:"bpmn-editor",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bpmn-editor"},[e("span",null,"BPMN Editor")])],-1),B=e("hr",null,null,-1),H=e("p",null,"To simplify modeling of BPMN processes, we recommend a graphical editor, e.g. the Camunda Modeler:",-1),R={href:"https://camunda.com/de/download/modeler/",target:"_blank",rel:"noopener noreferrer"},L=e("h3",{id:"hardware",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#hardware"},[e("span",null,"Hardware")])],-1),C=e("hr",null,null,-1),z=e("p",null,"The minimum hardware requirements to run all simulated organizations as part of the Docker test-setup is 16 GB of RAM.",-1),O=e("hr",null,null,-1);function F(K,V){const s=i("ExternalLinkIcon"),t=i("RouteLink");return c(),d("div",null,[u,h,m,e("p",null,[e("a",g,[n("git"),a(s)]),n(" is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.")]),e("ul",null,[e("li",null,[n("An installation guide for Linux, Mac and Windows can be found here: "),e("a",k,[n("installation guide"),a(s)])]),e("li",null,[n("The most basic git CLI commands are described here: "),e("a",v,[n("commands"),a(s)])])]),b,f,e("p",null,[n("Processes for the DSF are written using the "),e("a",_,[n("Java"),a(s)]),n(" programming language in version 11. Various open source releases of the Java Developer Kit (JDK) 11 exist, you are free in your choice.")]),w,x,E,e("ul",null,[e("li",null,[n("An installation guide for Maven 3.8 can be found here: "),e("a",y,[n("installation guide"),a(s)])]),e("li",null,[n("The most important maven commands are described here: "),e("a",M,[n("commands"),a(s)])])]),D,e("p",null,[n("In order to download DSF packages from the GitHub Package Registry using Maven you need a personal GitHub access token with scope "),I,n(". This "),e("a",T,[n("GitHub documentation"),a(s)]),n(" shows you how to generate one.")]),q,e("ul",null,[e("li",null,[n("An installation guide for Docker and docker-compose can be found here: "),e("a",G,[n("installation guide"),a(s)])]),e("li",null,[n("The most important Docker commands are described here: "),e("a",N,[n("Docker commands"),a(s)])]),e("li",null,[n("An overview of docker-compose commands are described here: "),e("a",S,[n("docker-compose commands"),a(s)])])]),J,e("ul",null,[e("li",null,[n("An installation guide for Eclipse can be found here: "),e("a",A,[n("Eclipse installation guide"),a(s)])]),e("li",null,[n("An installation guide for IntelliJ can be found here: "),e("a",P,[n("IntelliJ installation guide"),a(s)])])]),j,B,H,e("ul",null,[e("li",null,[n("An installation guide for the Camunda Modeler can be found here: "),e("a",R,[n("installation guide"),a(s)])])]),L,C,z,O,e("p",null,[n("Prerequisites | "),a(t,{to:"/oldstable/tutorial/exercise1-simpleProcess.html"},{default:o(()=>[n("Exercise 1")]),_:1}),n(" | "),a(t,{to:"/oldstable/tutorial/exercise11-processDebugging.html"},{default:o(()=>[n("Exercise 1.1")]),_:1}),n(" | "),a(t,{to:"/oldstable/tutorial/exercise2-inputParameters.html"},{default:o(()=>[n("Exercise 2")]),_:1}),n(" | "),a(t,{to:"/oldstable/tutorial/exercise3-messageEvents.html"},{default:o(()=>[n("Exercise 3")]),_:1}),n(" | "),a(t,{to:"/oldstable/tutorial/exercise4-exclusiveGateways.html"},{default:o(()=>[n("Exercise 4")]),_:1}),n(" | "),a(t,{to:"/oldstable/tutorial/exercise5-eventBasedGateways.html"},{default:o(()=>[n("Exercise 5")]),_:1})])])}const X=r(p,[["render",F],["__file","prerequisites.html.vue"]]),Q=JSON.parse('{"path":"/oldstable/tutorial/prerequisites.html","title":"Prerequisites","lang":"en-US","frontmatter":{"title":"Prerequisites","icon":"slides"},"headers":[{"level":3,"title":"git","slug":"git","link":"#git","children":[]},{"level":3,"title":"Java 11","slug":"java-11","link":"#java-11","children":[]},{"level":3,"title":"Maven 3.8","slug":"maven-3-8","link":"#maven-3-8","children":[]},{"level":3,"title":"GitHub Packages","slug":"github-packages","link":"#github-packages","children":[]},{"level":3,"title":"Docker and docker-compose","slug":"docker-and-docker-compose","link":"#docker-and-docker-compose","children":[]},{"level":3,"title":"Java IDE","slug":"java-ide","link":"#java-ide","children":[]},{"level":3,"title":"BPMN Editor","slug":"bpmn-editor","link":"#bpmn-editor","children":[]},{"level":3,"title":"Hardware","slug":"hardware","link":"#hardware","children":[]}],"git":{"createdTime":1692783801000,"updatedTime":1692786258000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":2.01,"words":603},"filePathRelative":"oldstable/tutorial/prerequisites.md","localizedDate":"August 23, 2023","excerpt":"

    In order to be able to solve the exercises described in this tutorial a software development environment with git, Java 11, Maven 3.8, Docker, docker-compose, a Java IDE like Eclipse or IntelliJ, a BPMN Editor like the Camunda Modeler a and minimum 16GB of RAM is needed.

    \\n

    git

    \\n
    \\n

    git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

    "}');export{X as comp,Q as data}; diff --git a/assets/process-plugins-advanced.html-4Prol2h5.js b/assets/process-plugins-advanced.html-4Prol2h5.js new file mode 100644 index 000000000..6b477901e --- /dev/null +++ b/assets/process-plugins-advanced.html-4Prol2h5.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as s,c as n}from"./app-kq9lCQfY.js";const i={};function t(a,o){return s(),n("div")}const d=e(i,[["render",t],["__file","process-plugins-advanced.html.vue"]]),m=JSON.parse('{"path":"/stable/process-plugins-advanced.html","title":"Process Plugins Advanced","lang":"en-US","frontmatter":{"title":"Process Plugins Advanced","icon":"info"},"headers":[],"git":{"createdTime":1690473388000,"updatedTime":1692790324000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"stable/process-plugins-advanced.md","localizedDate":"July 27, 2023","excerpt":""}');export{d as comp,m as data}; diff --git a/assets/process-plugins-advanced.html-BAq1SVRv.js b/assets/process-plugins-advanced.html-BAq1SVRv.js new file mode 100644 index 000000000..133c72717 --- /dev/null +++ b/assets/process-plugins-advanced.html-BAq1SVRv.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as s,c}from"./app-kq9lCQfY.js";const n={};function t(i,a){return s(),c("div")}const d=e(n,[["render",t],["__file","process-plugins-advanced.html.vue"]]),m=JSON.parse('{"path":"/v1.4.0/process-plugins-advanced.html","title":"Process Plugins Advanced","lang":"en-US","frontmatter":{"title":"Process Plugins Advanced","icon":"info"},"headers":[],"git":{"createdTime":1702917645000,"updatedTime":1702917645000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.4.0/process-plugins-advanced.md","localizedDate":"December 18, 2023","excerpt":""}');export{d as comp,m as data}; diff --git a/assets/process-plugins-advanced.html-BC3FU9gh.js b/assets/process-plugins-advanced.html-BC3FU9gh.js new file mode 100644 index 000000000..7b55325c4 --- /dev/null +++ b/assets/process-plugins-advanced.html-BC3FU9gh.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as s,c as t}from"./app-kq9lCQfY.js";const n={};function c(i,a){return s(),t("div")}const d=e(n,[["render",c],["__file","process-plugins-advanced.html.vue"]]),m=JSON.parse('{"path":"/v1.2.0/process-plugins-advanced.html","title":"Process Plugins Advanced","lang":"en-US","frontmatter":{"title":"Process Plugins Advanced","icon":"info"},"headers":[],"git":{"createdTime":1694544770000,"updatedTime":1694544770000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.2.0/process-plugins-advanced.md","localizedDate":"September 12, 2023","excerpt":""}');export{d as comp,m as data}; diff --git a/assets/process-plugins-advanced.html-BUm0RhL8.js b/assets/process-plugins-advanced.html-BUm0RhL8.js new file mode 100644 index 000000000..141aa9caf --- /dev/null +++ b/assets/process-plugins-advanced.html-BUm0RhL8.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as s,c as t}from"./app-kq9lCQfY.js";const c={};function n(i,o){return s(),t("div")}const d=e(c,[["render",n],["__file","process-plugins-advanced.html.vue"]]),l=JSON.parse('{"path":"/v1.3.0/process-plugins-advanced.html","title":"Process Plugins Advanced","lang":"en-US","frontmatter":{"title":"Process Plugins Advanced","icon":"info"},"headers":[],"git":{"createdTime":1696944513000,"updatedTime":1696944513000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.3.0/process-plugins-advanced.md","localizedDate":"October 10, 2023","excerpt":""}');export{d as comp,l as data}; diff --git a/assets/process-plugins-advanced.html-BfqgRQbf.js b/assets/process-plugins-advanced.html-BfqgRQbf.js new file mode 100644 index 000000000..6fa3ab403 --- /dev/null +++ b/assets/process-plugins-advanced.html-BfqgRQbf.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as s,c}from"./app-kq9lCQfY.js";const n={};function t(i,a){return s(),c("div")}const d=e(n,[["render",t],["__file","process-plugins-advanced.html.vue"]]),m=JSON.parse('{"path":"/v1.3.2/process-plugins-advanced.html","title":"Process Plugins Advanced","lang":"en-US","frontmatter":{"title":"Process Plugins Advanced","icon":"info"},"headers":[],"git":{"createdTime":1701710218000,"updatedTime":1701710218000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.3.2/process-plugins-advanced.md","localizedDate":"December 4, 2023","excerpt":""}');export{d as comp,m as data}; diff --git a/assets/process-plugins-advanced.html-CyU9Nv_o.js b/assets/process-plugins-advanced.html-CyU9Nv_o.js new file mode 100644 index 000000000..812f7593b --- /dev/null +++ b/assets/process-plugins-advanced.html-CyU9Nv_o.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as s,c as n}from"./app-kq9lCQfY.js";const t={};function c(a,i){return s(),n("div")}const d=e(t,[["render",c],["__file","process-plugins-advanced.html.vue"]]),l=JSON.parse('{"path":"/v1.5.0/process-plugins-advanced.html","title":"Process Plugins Advanced","lang":"en-US","frontmatter":{"title":"Process Plugins Advanced","icon":"info"},"headers":[],"git":{"createdTime":1708419681000,"updatedTime":1708419681000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.5.0/process-plugins-advanced.md","localizedDate":"February 20, 2024","excerpt":""}');export{d as comp,l as data}; diff --git a/assets/process-plugins-advanced.html-D0pCDuaN.js b/assets/process-plugins-advanced.html-D0pCDuaN.js new file mode 100644 index 000000000..93abf5556 --- /dev/null +++ b/assets/process-plugins-advanced.html-D0pCDuaN.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as s,c as t}from"./app-kq9lCQfY.js";const n={};function c(i,a){return s(),t("div")}const d=e(n,[["render",c],["__file","process-plugins-advanced.html.vue"]]),l=JSON.parse('{"path":"/v1.0.0/process-plugins-advanced.html","title":"Process Plugins Advanced","lang":"en-US","frontmatter":{"title":"Process Plugins Advanced","icon":"info"},"headers":[],"git":{"createdTime":1692708510000,"updatedTime":1692708510000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.0.0/process-plugins-advanced.md","localizedDate":"August 22, 2023","excerpt":""}');export{d as comp,l as data}; diff --git a/assets/process-plugins-advanced.html-D1AIXOF4.js b/assets/process-plugins-advanced.html-D1AIXOF4.js new file mode 100644 index 000000000..56dcb7186 --- /dev/null +++ b/assets/process-plugins-advanced.html-D1AIXOF4.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as n,c as s}from"./app-kq9lCQfY.js";const t={};function a(c,o){return n(),s("div")}const d=e(t,[["render",a],["__file","process-plugins-advanced.html.vue"]]),l=JSON.parse('{"path":"/v1.5.2/process-plugins-advanced.html","title":"Process Plugins Advanced","lang":"en-US","frontmatter":{"title":"Process Plugins Advanced","icon":"info"},"headers":[],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.5.2/process-plugins-advanced.md","localizedDate":"July 8, 2024","excerpt":""}');export{d as comp,l as data}; diff --git a/assets/process-plugins-advanced.html-D6ZVnnoI.js b/assets/process-plugins-advanced.html-D6ZVnnoI.js new file mode 100644 index 000000000..543431594 --- /dev/null +++ b/assets/process-plugins-advanced.html-D6ZVnnoI.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as s,c as t}from"./app-kq9lCQfY.js";const c={};function n(i,o){return s(),t("div")}const d=e(c,[["render",n],["__file","process-plugins-advanced.html.vue"]]),l=JSON.parse('{"path":"/v1.3.1/process-plugins-advanced.html","title":"Process Plugins Advanced","lang":"en-US","frontmatter":{"title":"Process Plugins Advanced","icon":"info"},"headers":[],"git":{"createdTime":1698748420000,"updatedTime":1698748420000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.3.1/process-plugins-advanced.md","localizedDate":"October 31, 2023","excerpt":""}');export{d as comp,l as data}; diff --git a/assets/process-plugins-advanced.html-Dw-obtVz.js b/assets/process-plugins-advanced.html-Dw-obtVz.js new file mode 100644 index 000000000..f1a0042e5 --- /dev/null +++ b/assets/process-plugins-advanced.html-Dw-obtVz.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as s,c as n}from"./app-kq9lCQfY.js";const t={};function c(i,a){return s(),n("div")}const d=e(t,[["render",c],["__file","process-plugins-advanced.html.vue"]]),l=JSON.parse('{"path":"/v1.5.1/process-plugins-advanced.html","title":"Process Plugins Advanced","lang":"en-US","frontmatter":{"title":"Process Plugins Advanced","icon":"info"},"headers":[],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.5.1/process-plugins-advanced.md","localizedDate":"April 17, 2024","excerpt":""}');export{d as comp,l as data}; diff --git a/assets/process-plugins-advanced.html-W6uvf7xk.js b/assets/process-plugins-advanced.html-W6uvf7xk.js new file mode 100644 index 000000000..a58eb21dd --- /dev/null +++ b/assets/process-plugins-advanced.html-W6uvf7xk.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as s,c as t}from"./app-kq9lCQfY.js";const n={};function c(i,a){return s(),t("div")}const d=e(n,[["render",c],["__file","process-plugins-advanced.html.vue"]]),l=JSON.parse('{"path":"/v1.1.0/process-plugins-advanced.html","title":"Process Plugins Advanced","lang":"en-US","frontmatter":{"title":"Process Plugins Advanced","icon":"info"},"headers":[],"git":{"createdTime":1692790324000,"updatedTime":1692790324000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.02,"words":6},"filePathRelative":"v1.1.0/process-plugins-advanced.md","localizedDate":"August 23, 2023","excerpt":""}');export{d as comp,l as data}; diff --git a/assets/process-plugins.html-DS2-s-JK.js b/assets/process-plugins.html-DS2-s-JK.js new file mode 100644 index 000000000..1c37fc392 --- /dev/null +++ b/assets/process-plugins.html-DS2-s-JK.js @@ -0,0 +1 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as r,c as l,a as e,b as s,d as o,e as n}from"./app-kq9lCQfY.js";const p="/photos/info/plugins/bpmn-example.png",c="/photos/info/use-cases/ping-pong.png",g={},h=n('

    Overview

    It is important to understand that the DSF is only the silent helper in the background: a middleware. The DSF is use case agnostic. This means that process plugins make it possible to execute almost any use case you can imagine with the DSF. Process plugins provide individual functionality. For example, it is possible to use the Ping Pong process to test bilateral communication or the Feasibility process to perform feasibility queries for research.
    However, it is possible to deploy several process plugins together, even the same process plugin in different versions. A process plugin is basically an archive of BPMN 2.0 models, FHIR R4 resources and Java code. This process plugin is deployed as a Jar file on the BPE.

    BPMN: Example

    ',3),d={href:"https://camunda.com/de",target:"_blank",rel:"noopener noreferrer"},u=e("a",{href:"/intro/use-cases"},"chapter",-1),m=e("figure",null,[e("img",{src:p,alt:"BPMN: Example",tabindex:"0",loading:"lazy"}),e("figcaption",null,"BPMN: Example")],-1),f=e("h2",{id:"ping-pong-process",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#ping-pong-process"},[e("span",null,"Ping Pong Process")])],-1),b={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},v=n('
    Ping-Pong Process
    Ping-Pong Process

    The ping pong process is composed of 3 different subprocesses:

    Autostart Ping Process

    The autostart ping process is used to execute connection tests in a predefined interval. This subprocess performs the following steps:

    • Start a timer with a predefined interval (default 24 h)
    • Start the ping process once per interval
    • Stop the timer after the current interval completes

    Ping Process

    The ping process is used to check outgoing and incoming connections to organizations in your allow-list. This subprocess performs the following steps:

    • Select organizations in your allow list that should receive a ping message
    • Send ping message to selected organizations
    • Receive pong message from selected organizations
    • Log status of ping/pong messages
    • Log errors if any occur

    Pong Process

    The pong process is used to send a response during the connection test to the requesting organization. This subprocess performs the following steps:

    • Receive ping message from requesting organizations
    • Send pong message to requesting organizations
    • Log status of ping/pong message
    • Log errors if any occur
    ',11);function P(_,x){const i=a("ExternalLinkIcon");return r(),l("div",null,[h,e("p",null,[s("BPMN models can be created with "),e("a",d,[s("Camunda Modeler"),o(i)]),s(". The following model is a BPMN model consisting of two lanes: These are the square boxes, i.e. Organization A and B. This process is intended only as an example to illustrate the formalities. We will look at realistic processes in the next "),u,s(".")]),m,f,e("p",null,[s("The "),e("a",b,[s("ping process plugin"),o(i)]),s(" can be used for (periodic) connection testing between organizations that are part of your DSF allow list. The following figure shows a representation of the process.")]),v])}const T=t(g,[["render",P],["__file","process-plugins.html.vue"]]),k=JSON.parse('{"path":"/intro/info/process-plugins.html","title":"Process Plugins","lang":"en-US","frontmatter":{"title":"Process Plugins","icon":"plugin"},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"BPMN: Example","slug":"bpmn-example","link":"#bpmn-example","children":[]},{"level":2,"title":"Ping Pong Process","slug":"ping-pong-process","link":"#ping-pong-process","children":[{"level":3,"title":"Autostart Ping Process","slug":"autostart-ping-process","link":"#autostart-ping-process","children":[]},{"level":3,"title":"Ping Process","slug":"ping-process","link":"#ping-process","children":[]},{"level":3,"title":"Pong Process","slug":"pong-process","link":"#pong-process","children":[]}]}],"git":{"createdTime":1690473388000,"updatedTime":1691144820000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":6}]},"readingTime":{"minutes":1.8,"words":540},"filePathRelative":"intro/info/process-plugins.md","localizedDate":"July 27, 2023","excerpt":"

    Overview

    \\n

    It is important to understand that the DSF is only the silent helper in the background: a middleware. The DSF is use case agnostic. This means that process plugins make it possible to execute almost any use case you can imagine with the DSF. Process plugins provide individual functionality. For example, it is possible to use the Ping Pong process to test bilateral communication or the Feasibility process to perform feasibility queries for research.
    \\nHowever, it is possible to deploy several process plugins together, even the same process plugin in different versions. A process plugin is basically an archive of BPMN 2.0 models, FHIR R4 resources and Java code. This process plugin is deployed as a Jar file on the BPE.

    "}');export{T as comp,k as data}; diff --git a/assets/proxyTestTool.html-C_Ex6mgz.js b/assets/proxyTestTool.html-C_Ex6mgz.js new file mode 100644 index 000000000..26734fb7b --- /dev/null +++ b/assets/proxyTestTool.html-C_Ex6mgz.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as l,o as s,c as a,a as e,b as t,d as r}from"./app-kq9lCQfY.js";const i={},p=e("p",null,[t("If the BPE will be deployed behind a proxy, you can test the internet access of the BPE using the tool in "),e("code",null,"dsf-tools/dsf-tools-proxy-test"),t(".")],-1),d=e("p",null,"The proxy test jar takes three input variables:",-1),h={href:"https://www.google.de",target:"_blank",rel:"noopener noreferrer"},c={href:"http://proxy.klinikum.de:8080",target:"_blank",rel:"noopener noreferrer"},u=e("li",null,"args[1]: the proxy username",-1),m=e("p",null,[t("The proxy password will be asked as command line input. The name of the main class is "),e("code",null,"ProxyTest"),t(".")],-1);function g(_,x){const o=l("ExternalLinkIcon");return s(),a("div",null,[p,d,e("ul",null,[e("li",null,[t("args[0]: the base url to test against (e.g. "),e("a",h,[t("https://www.google.de"),r(o)]),t(")")]),e("li",null,[t("args[1]: the proxy url to connect to (e.g. "),e("a",c,[t("http://proxy.klinikum.de:8080"),r(o)]),t(")")]),u]),m])}const k=n(i,[["render",g],["__file","proxyTestTool.html.vue"]]),b=JSON.parse('{"path":"/oldstable/build/proxyTestTool.html","title":"Proxy Test Tool","lang":"en-US","frontmatter":{"title":"Proxy Test Tool","icon":"back-stage"},"headers":[],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.3,"words":90},"filePathRelative":"oldstable/build/proxyTestTool.md","localizedDate":"August 23, 2023","excerpt":"

    If the BPE will be deployed behind a proxy, you can test the internet access of the BPE using the tool in dsf-tools/dsf-tools-proxy-test.

    \\n

    The proxy test jar takes three input variables:

    \\n"}');export{k as comp,b as data}; diff --git a/assets/public.html-BOk6SNIO.js b/assets/public.html-BOk6SNIO.js new file mode 100644 index 000000000..b095e0435 --- /dev/null +++ b/assets/public.html-BOk6SNIO.js @@ -0,0 +1 @@ +import{_ as r}from"./mii-bWzWhniO.js";import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as s,c as h,a as e,b as t,d as i,e as c}from"./app-kq9lCQfY.js";const d="/photos/learnmore/funding/bmbf.png",l="/photos/learnmore/funding/highmed.jpg",m={},u=e("div",{style:{"text-align":"center"}},[e("h2",{id:"dsf-medical-informatics-structure-data-sharing-framework-community-2023-2026",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#dsf-medical-informatics-structure-data-sharing-framework-community-2023-2026"},[e("span",null,'DSF - Medical Informatics Structure "Data Sharing Framework Community" (2023-2026)')])])],-1),f=e("figure",null,[e("img",{src:d,alt:"",width:"228",height:"158",tabindex:"0",loading:"lazy"}),e("figcaption")],-1),p={href:"https://www.medizininformatik-initiative.de/de/start",target:"_blank",rel:"noopener noreferrer"},g={href:"https://www.netzwerk-universitaetsmedizin.de/",target:"_blank",rel:"noopener noreferrer"},b={href:"https://forschen-fuer-gesundheit.de/",target:"_blank",rel:"noopener noreferrer"},w={href:"https://www.gesundheitsforschung-bmbf.de/de/transit-medizininformatik-struktur-data-management-unit-16148.php",target:"_blank",rel:"noopener noreferrer"},_={href:"https://www.gesundheitsforschung-bmbf.de/de/dsf-medizininformatik-struktur-data-sharing-framework-community-16133.php",target:"_blank",rel:"noopener noreferrer"},v=c('

    Heilbronn University (HHN) focuses on the connecting of DSF related topics and competencies in the MII with the community management. The quality assurance of new DSF plugins and further development of the application and core components aim at a scalable, stable and secure operation of the DSF (Funding code: 01ZZ2307A).

    Heidelberg University is focusing on the further development of the DSF core components as well as the rollout of the DSF plugins, in particular also from the perspective of a data integration center in consultation with the FDGP+ and TRANSIT projects (Funding code: 01ZZ2307B).

    The University of Leipzig will further develop and adapt the DSF plugin for the Research Data Portal for Health FDPG according to specifications resulting from the FDPG+ project and enable Data Integration Centers (DIC) to operate the FDPG plugin (Funding code: 01ZZ2307C).





    ',9),k={href:"https://www.highmed.org/en/home",target:"_blank",rel:"noopener noreferrer"},y={href:"https://www.hs-heilbronn.de/de/gecko",target:"_blank",rel:"noopener noreferrer"},F=e("figure",null,[e("img",{src:l,alt:"",width:"450",height:"150",tabindex:"0",loading:"lazy"}),e("figcaption")],-1);function D(S,I){const n=a("ExternalLinkIcon");return s(),h("div",null,[u,f,e("p",null,[t("The DSF Community connects the DSF competencies of the entire "),e("a",p,[t("Medical Informatics Initiative (MII)"),i(n)]),t(" so that new use cases, in particular from Module 3 or the "),e("a",g,[t("Network University Medicine (NUM)"),i(n)]),t(", are better supported in creating the respective DSF plugins. In the context of Module 2b, the DSF Community contributes to the further development of the common digital infrastructure of the MII together with the "),e("a",b,[t("FDPG+"),i(n)]),t(" and "),e("a",w,[t("TRANSIT"),i(n)]),t(" projects. "),e("a",_,[t("BMBF"),i(n)])]),v,e("p",null,[e("a",k,[t("HiGHmed"),i(n)]),t(" aims to increase the efficiency of clinical research and improve patient care through new medical informatics solutions and cross-organizational data exchange. The concept will be developed on the basis of three defined prototypical use cases, which will ensure close integration with the requirements of patient care and medical research. The "),e("a",y,[t("GECKO Institute"),i(n)]),t(" of HHN will establish a trusted third party with pseudonymization service to implement the goals of HiGHmed and is involved in the technical development of the DSF together with the partners (Funding code: 01ZZ1802E). Heidelberg University is in particular involved in the technical development of the DSF (Funding code: 01ZZ1802A).")]),F])}const H=o(m,[["render",D],["__file","public.html.vue"]]),T=JSON.parse('{"path":"/about/learnmore/public.html","title":"Public Funding","lang":"en-US","frontmatter":{"title":"Public Funding","icon":"free"},"headers":[],"git":{"createdTime":1678951140000,"updatedTime":1681803685000,"contributors":[{"name":"simon","email":"smoeding@stu.hs-heilbronn.de","commits":2},{"name":"simonmoedinger","email":"simonmoedi@web.de","commits":1}]},"readingTime":{"minutes":1.3,"words":391},"filePathRelative":"about/learnmore/public.md","localizedDate":"March 16, 2023","excerpt":"
    \\n

    DSF - Medical Informatics Structure \\"Data Sharing Framework Community\\" (2023-2026)

    \\n
    \\n
    \\"\\"
    \\n

    The DSF Community connects the DSF competencies of the entire Medical Informatics Initiative (MII) so that new use cases, in particular from Module 3 or the Network University Medicine (NUM), are better supported in creating the respective DSF plugins. In the context of Module 2b, the DSF Community contributes to the further development of the common digital infrastructure of the MII together with the FDPG+ and TRANSIT projects. BMBF

    "}');export{H as comp,T as data}; diff --git a/assets/publications.html-CWGWwyve.js b/assets/publications.html-CWGWwyve.js new file mode 100644 index 000000000..16e0fa036 --- /dev/null +++ b/assets/publications.html-CWGWwyve.js @@ -0,0 +1 @@ +import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as l,c as a,a as e,b as n,d as r,w as d}from"./app-kq9lCQfY.js";const h={},c=e("h3",{id:"publications",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#publications"},[e("span",null,"Publications")])],-1),u=e("strong",null,"Executing Distributed Healthcare and Research Processes – The HiGHmed Data Sharing Framework",-1),H={href:"https://ebooks.iospress.nl/doi/10.3233/SHTI210060",target:"_blank",rel:"noopener noreferrer"},p=e("strong",null,"Feasibility Queries in Distributed Architectures – Concept and Implementation in HiGHmed",-1),m={href:"https://ebooks.iospress.nl/doi/10.3233/SHTI210061",target:"_blank",rel:"noopener noreferrer"},g=e("strong",null,"A Federated Record Linkage Algorithm for Secure Medical Data Sharing",-1),f={href:"https://ebooks.iospress.nl/doi/10.3233/SHTI210062",target:"_blank",rel:"noopener noreferrer"},S=e("strong",null,"Data Sharing in Distributed Architectures – Concept and Implementation in HiGHmed",-1),b={href:"https://ebooks.iospress.nl/doi/10.3233/SHTI210548",target:"_blank",rel:"noopener noreferrer"},_=e("strong",null,"The COVID-19 Data Exchange Platform of the German University Medicine",-1),k={href:"https://ebooks.iospress.nl/doi/10.3233/SHTI220554",target:"_blank",rel:"noopener noreferrer"},T=e("strong",null,"Secure Multi-Party Computation Based Distributed Feasibility Queries – A HiGHmed Use Case",-1),I={href:"https://ebooks.iospress.nl/doi/10.3233/SHTI220802",target:"_blank",rel:"noopener noreferrer"},C=e("strong",null,"Monitoring Distributed Business Processes in Biomedical Research",-1),D={href:"https://ebooks.iospress.nl/doi/10.3233/SHTI230113",target:"_blank",rel:"noopener noreferrer"},F=e("strong",null,"No Transfer Without Validation: A Data Sharing Framework Use Case",-1),M={href:"https://ebooks.iospress.nl/doi/10.3233/SHTI230066",target:"_blank",rel:"noopener noreferrer"},w=e("strong",null,"Interoperability Is a Process- The Data Sharing Framework",-1),P={href:"https://ebooks.iospress.nl/doi/10.3233/SHTI230921",target:"_blank",rel:"noopener noreferrer"},R=e("h3",{id:"recorded-talks",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#recorded-talks"},[e("span",null,"Recorded Talks")])],-1),y=e("h4",{id:"gmds-conference-2022",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#gmds-conference-2022"},[e("span",null,"GMDS Conference 2022")])],-1),x={href:"https://www.youtube.com/playlist?list=PLsHs7HOt6jDMe3PNevpo-uGsDTWVSMsYZ",target:"_blank",rel:"noopener noreferrer"},B=e("h4",{id:"gmds-conference-2020",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#gmds-conference-2020"},[e("span",null,"GMDS Conference 2020")])],-1),G={href:"https://www.youtube.com/watch?v=OzjyqmZZPSA",target:"_blank",rel:"noopener noreferrer"},W={href:"https://www.youtube.com/watch?v=6Pom8KqYhTs",target:"_blank",rel:"noopener noreferrer"},A={href:"https://www.youtube.com/watch?v=bSEPqzxF8mM",target:"_blank",rel:"noopener noreferrer"};function z(v,K){const t=o("ExternalLinkIcon"),i=o("RouteLink");return l(),a("div",null,[c,e("ul",null,[e("li",null,[e("p",null,[n("H. Hund, R. Wettstein, C.M. Heidt, C. Fegeler, "),u,n(", Stud Health Technol Inform, 278 (2021) 126-133, "),e("a",H,[n("doi:10.3233/SHTI210060"),r(t)])])]),e("li",null,[e("p",null,[n("R. Wettstein, H. Hund, I. Kobylinski, C. Fegeler, O. Heinze, "),p,n(", Stud Health Technol Inform, 278 (2021) 134-141, "),e("a",m,[n("doi:10.3233/SHTI210061"),r(t)])])]),e("li",null,[e("p",null,[n("C.M. Heidt, H. Hund, C. Fegeler, "),g,n(", Stud Health Technol Inform, 278 (2021) 142-149, "),e("a",f,[n("doi:10.3233/SHTI210062"),r(t)])])]),e("li",null,[e("p",null,[n("R. Wettstein, H. Hund, C. Fegeler, O. Heinze, "),S,n(", Stud Health Technol Inform, 283 (2021) 111-118, "),e("a",b,[n("doi:10.3233/SHTI210548"),r(t)])])]),e("li",null,[e("p",null,[n("H.-U. Prokosch, T. Bahls, M. Bialke, J. Eils, C. Fegeler, J. Gruendner, B. Haarbrandt, C. Hampf, W. Hoffmann, H. Hund, et al. "),_,n(", Stud Health Technol Inform, 294 (2022) 674-678, "),e("a",k,[n("doi:10.3233/SHTI220554"),r(t)])])]),e("li",null,[e("p",null,[n("R. Wettstein, T. Kussel, H. Hund, C. Fegeler, M. Dugas, K. Hamacher, "),T,n(", Stud Health Technol Inform, 296 (2022) 41-49, "),e("a",I,[n("doi:10.3233/SHTI220802"),r(t)])])]),e("li",null,[e("p",null,[n("C. Zilske, M. Kurscheidt, S.T. Schweizer, H. Hund, S. Mödinger, C. Fegeler, "),C,n(", Stud Health Technol Inform, 302 (2023) 252-256, "),e("a",D,[n("doi:10.3233/SHTI230113"),r(t)])])]),e("li",null,[e("p",null,[n("H. Hund, R. Wettstein, C. Hampf, M. Bialke, M. Kurscheidt, S.T. Schweizer, C. Zilske, S. Mödinger, C. Fegeler, "),F,n(", Stud Health Technol Inform, 302 (2023) 68-72, "),e("a",M,[n("doi:10.3233/SHTI230066"),r(t)])])]),e("li",null,[e("p",null,[n("H. Hund, R. Wettstein, M. Kurscheidt, S.T. Schweizer, C. Zilske, C. Fegeler, "),w,n(", Stud Health Technol Inform, 310 (2024) 28-32, "),e("a",P,[n("doi:10.3233/SHTI230921"),r(t)])])])]),R,y,e("ul",null,[e("li",null,[e("a",x,[n("Hands On! - Introduction to the Data Sharing Framework from a User Perspective "),r(t)])]),e("li",null,[n("Tutorial: "),r(i,{to:"/oldstable/tutorial/"},{default:d(()=>[n("Implementing BPMN Processes as DSF Process-Plugins")]),_:1})])]),B,e("ul",null,[e("li",null,[e("a",G,[n("Executing Distributed Healthcare and Research Processes – the HiGHmed Data Sharing Framework"),r(t)])]),e("li",null,[e("a",W,[n("Feasibility Queries in Distributed Architectures – Concept and Implementation in HiGHmed"),r(t)])]),e("li",null,[e("a",A,[n("A Federated Record Linkage Algorithm for Secure Medical Data Sharing"),r(t)])])])])}const U=s(h,[["render",z],["__file","publications.html.vue"]]),Z=JSON.parse('{"path":"/intro/publications.html","title":"Publications and Talks","lang":"en-US","frontmatter":{"title":"Publications and Talks","icon":"blog"},"headers":[{"level":3,"title":"Publications","slug":"publications","link":"#publications","children":[]},{"level":3,"title":"Recorded Talks","slug":"recorded-talks","link":"#recorded-talks","children":[]}],"git":{"createdTime":1690461865000,"updatedTime":1706233271000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":2},{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":2},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.3,"words":390},"filePathRelative":"intro/publications.md","localizedDate":"July 27, 2023","excerpt":"

    Publications

    \\n
      \\n
    • \\n

      H. Hund, R. Wettstein, C.M. Heidt, C. Fegeler, Executing Distributed Healthcare and Research Processes – The HiGHmed Data Sharing Framework, Stud Health Technol Inform, 278 (2021) 126-133, doi:10.3233/SHTI210060

      \\n
    • \\n
    • \\n

      R. Wettstein, H. Hund, I. Kobylinski, C. Fegeler, O. Heinze, Feasibility Queries in Distributed Architectures – Concept and Implementation in HiGHmed, Stud Health Technol Inform, 278 (2021) 134-141, doi:10.3233/SHTI210061

      \\n
    • \\n
    • \\n

      C.M. Heidt, H. Hund, C. Fegeler, A Federated Record Linkage Algorithm for Secure Medical Data Sharing, Stud Health Technol Inform, 278 (2021) 142-149, doi:10.3233/SHTI210062

      \\n
    • \\n
    • \\n

      R. Wettstein, H. Hund, C. Fegeler, O. Heinze, Data Sharing in Distributed Architectures – Concept and Implementation in HiGHmed, Stud Health Technol Inform, 283 (2021) 111-118, doi:10.3233/SHTI210548

      \\n
    • \\n
    • \\n

      H.-U. Prokosch, T. Bahls, M. Bialke, J. Eils, C. Fegeler, J. Gruendner, B. Haarbrandt, C. Hampf, W. Hoffmann, H. Hund, et al. The COVID-19 Data Exchange Platform of the German University Medicine, Stud Health Technol Inform, 294 (2022) 674-678, doi:10.3233/SHTI220554

      \\n
    • \\n
    • \\n

      R. Wettstein, T. Kussel, H. Hund, C. Fegeler, M. Dugas, K. Hamacher, Secure Multi-Party Computation Based Distributed Feasibility Queries – A HiGHmed Use Case, Stud Health Technol Inform, 296 (2022) 41-49, doi:10.3233/SHTI220802

      \\n
    • \\n
    • \\n

      C. Zilske, M. Kurscheidt, S.T. Schweizer, H. Hund, S. Mödinger, C. Fegeler, Monitoring Distributed Business Processes in Biomedical Research, Stud Health Technol Inform, 302 (2023) 252-256, doi:10.3233/SHTI230113

      \\n
    • \\n
    • \\n

      H. Hund, R. Wettstein, C. Hampf, M. Bialke, M. Kurscheidt, S.T. Schweizer, C. Zilske, S. Mödinger, C. Fegeler, No Transfer Without Validation: A Data Sharing Framework Use Case, Stud Health Technol Inform, 302 (2023) 68-72, doi:10.3233/SHTI230066

      \\n
    • \\n
    • \\n

      H. Hund, R. Wettstein, M. Kurscheidt, S.T. Schweizer, C. Zilske, C. Fegeler, Interoperability Is a Process- The Data Sharing Framework, Stud Health Technol Inform, 310 (2024) 28-32, doi:10.3233/SHTI230921

      \\n
    • \\n
    "}');export{U as comp,Z as data}; diff --git a/assets/releaseANewVersion.html-jLnIfCDT.js b/assets/releaseANewVersion.html-jLnIfCDT.js new file mode 100644 index 000000000..672602f90 --- /dev/null +++ b/assets/releaseANewVersion.html-jLnIfCDT.js @@ -0,0 +1 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o as r,c as o,a as e,b as i,d as a,e as l}from"./app-kq9lCQfY.js";const c={},d=e("h2",{id:"release-a-new-final-version",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#release-a-new-final-version"},[e("span",null,"Release a new final version")])],-1),u=l("
  • Write release notes
  • Create new release/x.y.z branch from develop
  • Remove -SNAPSHOT from version in pom.xml files
  • Change status from draft to active and update dates, verify versions in FHIR resources
  • Update version and date-released in CITATION.cff
  • Push branch release/x.y.z
  • Create pull request (release/x.y.z -> main)
  • Build maven
  • Build docker images and run manual tests in 3MeDIC/TTP test setup
  • ",9),h={href:"https://aquasecurity.github.io/trivy/",target:"_blank",rel:"noopener noreferrer"},m=l("
  • Merge release/x.y.z into main
  • Git tag main branch
  • Push main branch (including Git tag)
  • Build maven
  • Run multi-arch docker build (including push)
  • Update release notes with docker links, check Git tag
  • Publish release notes
  • Create 'start next development cycle' issue and branch
  • Merge main into issue branch
  • Increase version
  • Merge next development cycle issue branch into develop via PR
  • ",11),v=e("h2",{id:"release-a-new-candidate-version",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#release-a-new-candidate-version"},[e("span",null,"Release a new candidate version")])],-1),f=l("
  • Write release notes
  • Create new release/x.y.z-RC# branch from develop
  • Replace -SNAPSHOT in versions with -RC# in pom.xml files
  • Change status from draft to active and update dates, verify versions in FHIR resources
  • Update version and date-released in CITATION.cff
  • Git tag release/x.y.z-RC# branch
  • Build maven
  • Build docker images and run manual tests in 3MeDIC/TTP test setup
  • ",8),p={href:"https://aquasecurity.github.io/trivy/",target:"_blank",rel:"noopener noreferrer"},g=e("li",null,"Push release/x.y.z-RC# branch (including Git tag)",-1),b=e("li",null,"Run multi-arch docker build (including push)",-1),_=e("li",null,"Update release notes with docker links, check Git tag",-1),k=e("li",null,"Publish release notes",-1);function x(w,y){const n=s("ExternalLinkIcon");return r(),o("div",null,[d,e("ol",null,[u,e("li",null,[i("Execute "),e("a",h,[i("trivy"),a(n)]),i(" and check CVEs for the docker images")]),m]),v,e("ol",null,[f,e("li",null,[i("Execute "),e("a",p,[i("trivy"),a(n)]),i(" and check CVEs for the docker images")]),g,b,_,k])])}const T=t(c,[["render",x],["__file","releaseANewVersion.html.vue"]]),P=JSON.parse(`{"path":"/oldstable/build/releaseANewVersion.html","title":"Release a new version","lang":"en-US","frontmatter":{"title":"Release a new version","icon":"back-stage"},"headers":[{"level":2,"title":"Release a new final version","slug":"release-a-new-final-version","link":"#release-a-new-final-version","children":[]},{"level":2,"title":"Release a new candidate version","slug":"release-a-new-candidate-version","link":"#release-a-new-candidate-version","children":[]}],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.92,"words":276},"filePathRelative":"oldstable/build/releaseANewVersion.md","localizedDate":"August 23, 2023","excerpt":"

    Release a new final version

    \\n
      \\n
    1. Write release notes
    2. \\n
    3. Create new release/x.y.z branch from develop
    4. \\n
    5. Remove -SNAPSHOT from version in pom.xml files
    6. \\n
    7. Change status from draft to active and update dates, verify versions in FHIR resources
    8. \\n
    9. Update version and date-released in CITATION.cff
    10. \\n
    11. Push branch release/x.y.z
    12. \\n
    13. Create pull request (release/x.y.z -> main)
    14. \\n
    15. Build maven
    16. \\n
    17. Build docker images and run manual tests in 3MeDIC/TTP test setup
    18. \\n
    19. Execute trivy and check CVEs for the docker images
    20. \\n
    21. Merge release/x.y.z into main
    22. \\n
    23. Git tag main branch
    24. \\n
    25. Push main branch (including Git tag)
    26. \\n
    27. Build maven
    28. \\n
    29. Run multi-arch docker build (including push)
    30. \\n
    31. Update release notes with docker links, check Git tag
    32. \\n
    33. Publish release notes
    34. \\n
    35. Create 'start next development cycle' issue and branch
    36. \\n
    37. Merge main into issue branch
    38. \\n
    39. Increase version
    40. \\n
    41. Merge next development cycle issue branch into develop via PR
    42. \\n
    "}`);export{T as comp,P as data}; diff --git a/assets/reverseproxy.html-BBN9Od3-.js b/assets/reverseproxy.html-BBN9Od3-.js new file mode 100644 index 000000000..d8b4f9bac --- /dev/null +++ b/assets/reverseproxy.html-BBN9Od3-.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,e as r}from"./app-kq9lCQfY.js";const s={},o=r('

    Parameters FHIR Reverse Proxy

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem
    ',23),n=[o];function a(l,c){return t(),i("div",null,n)}const h=e(s,[["render",a],["__file","reverseproxy.html.vue"]]),f=JSON.parse('{"path":"/v1.0.0/maintain/configuration/reverseproxy.html","title":"Parameters FHIR Reverse Proxy","lang":"en-US","frontmatter":{},"headers":[{"level":3,"title":"APP_SERVER_IP","slug":"app-server-ip","link":"#app-server-ip","children":[]},{"level":3,"title":"HTTPS_SERVER_NAME_PORT","slug":"https-server-name-port","link":"#https-server-name-port","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_HTTP","slug":"proxy-pass-connection-timeout-http","link":"#proxy-pass-connection-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_CONNECTION_TIMEOUT_WS","slug":"proxy-pass-connection-timeout-ws","link":"#proxy-pass-connection-timeout-ws","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_HTTP","slug":"proxy-pass-timeout-http","link":"#proxy-pass-timeout-http","children":[]},{"level":3,"title":"PROXY_PASS_TIMEOUT_WS","slug":"proxy-pass-timeout-ws","link":"#proxy-pass-timeout-ws","children":[]},{"level":3,"title":"SSL_CA_CERTIFICATE_FILE","slug":"ssl-ca-certificate-file","link":"#ssl-ca-certificate-file","children":[]},{"level":3,"title":"SSL_CA_DN_REQUEST_FILE","slug":"ssl-ca-dn-request-file","link":"#ssl-ca-dn-request-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_CHAIN_FILE","slug":"ssl-certificate-chain-file","link":"#ssl-certificate-chain-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_FILE","slug":"ssl-certificate-file","link":"#ssl-certificate-file","children":[]},{"level":3,"title":"SSL_CERTIFICATE_KEY_FILE","slug":"ssl-certificate-key-file","link":"#ssl-certificate-key-file","children":[]}],"git":{"createdTime":1692708510000,"updatedTime":1692708510000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.16,"words":348},"filePathRelative":"v1.0.0/maintain/configuration/reverseproxy.md","localizedDate":"August 22, 2023","excerpt":"\\n

    APP_SERVER_IP

    \\n
      \\n
    • Required: Yes
    • \\n
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • \\n
    • Example: app, 172.28.1.3
    • \\n
    \\n

    HTTPS_SERVER_NAME_PORT

    "}');export{h as comp,f as data}; diff --git a/assets/security.html-Qj_akVd-.js b/assets/security.html-Qj_akVd-.js new file mode 100644 index 000000000..55b8f1e09 --- /dev/null +++ b/assets/security.html-Qj_akVd-.js @@ -0,0 +1 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as s,o,c,a as t,b as e,d as a,e as n}from"./app-kq9lCQfY.js";const l="/photos/info/security/certificates-light.svg",d="/photos/info/security/certificates-dark.svg",h={},u=n('

    Basics Security

    The open-source Data Sharing Framework is EU-GDPR compliant and meets the highest security standards by design. DSF FHIR servers only accept certain FHIR resources from internal systems/administrators (e.g. tasks, binary resources...). In addition, the communication partners are defined via Allow Lists. This means that an organisation can only communicate with organisations that are included in the allow list of approved organisations of the participating organisations. More information about allow lists can be found in the next chapter.
    For transport encryption, the TLS protocol is used. Secure Web Socket (WSS) connections provide security for the connection between the DSF FHIR server (DMZ) and the BPE (internal network). In addition, the DSF is being actively developed and there is an excellent community, both of which guarantee fast security patches.

    Authentication

    ',5),f={href:"https://www.pki.dfn.de/ueberblick-dfn-pki/",target:"_blank",rel:"noopener noreferrer"},p={href:"https://www.tmf-ev.de",target:"_blank",rel:"noopener noreferrer"},m={href:"https://doku.tid.dfn.de/de:dfnpki:start",target:"_blank",rel:"noopener noreferrer"},g={href:"https://www.pki.dfn.de/fileadmin/PKI/anleitungen/DFN-PKI-Zertifikatprofile_Global.pdf",target:"_blank",rel:"noopener noreferrer"},b=n('

    More information about client and server certificates can be found here.

    Certificate Requests 🔒

    FHIR Endpoint

    Server certificates are used to authenticate the FHIR endpoint on the local network and to other organisations

    • Certificate profile:
      • DFN-PKI Global G2 via DFN e.V.: Web Server
      • D-Trust via TMF e.V.: Advanced SSL ID
      • GÉANT TCS via DFN e.V.: Web Server
    • Common name: FQDN of the server used while accessing from other organizations (external FQDN)
    • Subject alternative DNS entries: Use additional alternative FQDNs if a different name is used while accessing the Server from the local Network (local FQDN)

    More information: Parameters FHIR Server

    Business Process Engine Server

    Client certificates are used to authenticate against remote FHIR endpoints (when either the BPE server or the FHIR endpoint server acts as the client).
    In addition, client certificates are used to authenticate the Business Process Engine server on the local network.

    • Certificate profile:
      • DFN-PKI Global G2 via DFN e.V.: 802.1X Client
      • D-Trust via TMF e.V.: Basic Team ID
      • GÉANT TCS via DFN e.V.: Web Server
    • Common name: FQDN of the server used while accessing from the local network (local FQDN)

    More information: Parameters BPE Server

    ',10);function v(y,F){const i=s("ExternalLinkIcon");return o(),c("div",null,[u,t("p",null,[e("Authentication of organizations within the DSF is handled by the use of X.509 client and server certificates. Currently the certificate authorities run by "),t("a",f,[e("DFN-PKI Global G2"),a(i)]),e(", "),t("a",p,[e("D-Trust via TMF e.V."),a(i)]),e(" and "),t("a",m,[e("GÉANT TCS via DFN"),a(i)]),e(" are supported. All participating organizations are entered in a distributed and synchronized allow-list of valid organizations and certificates.")]),t("p",null,[e("A webserver certificate is needed to run the FHIR endpoint and a 802.1X client certificate is used to authenticate against other organizations endpoints and as a server certificate for the business process engine. For available certificate profiles see "),t("a",g,[e("DFN-PKI-Zertifikatprofile_Global.pdf"),a(i)])]),b])}const D=r(h,[["render",v],["__file","security.html.vue"]]),_=JSON.parse('{"path":"/intro/info/security.html","title":"Security by Design","lang":"en-US","frontmatter":{"title":"Security by Design","icon":"safe"},"headers":[{"level":2,"title":"Basics Security","slug":"basics-security","link":"#basics-security","children":[]},{"level":2,"title":"Authentication","slug":"authentication","link":"#authentication","children":[{"level":3,"title":"Certificate Requests 🔒","slug":"certificate-requests","link":"#certificate-requests","children":[]}]}],"git":{"createdTime":1690473388000,"updatedTime":1691410780000,"contributors":[{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":4}]},"readingTime":{"minutes":1.54,"words":461},"filePathRelative":"intro/info/security.md","localizedDate":"July 27, 2023","excerpt":"

    Basics Security

    \\n

    The open-source Data Sharing Framework is EU-GDPR compliant and meets the highest security standards by design. DSF FHIR servers only accept certain FHIR resources from internal systems/administrators (e.g. tasks, binary resources...). In addition, the communication partners are defined via Allow Lists. This means that an organisation can only communicate with organisations that are included in the allow list of approved organisations of the participating organisations. More information about allow lists can be found in the next chapter.
    \\nFor transport encryption, the TLS protocol is used. Secure Web Socket (WSS) connections provide security for the connection between the DSF FHIR server (DMZ) and the BPE (internal network). In addition, the DSF is being actively developed and there is an excellent community, both of which guarantee fast security patches.

    "}');export{D as comp,_ as data}; diff --git a/assets/style-afHLk1yB.css b/assets/style-afHLk1yB.css new file mode 100644 index 000000000..5a88d2709 --- /dev/null +++ b/assets/style-afHLk1yB.css @@ -0,0 +1 @@ +@charset "UTF-8";html[data-theme=dark]{--text-color: #9e9e9e;--bg-color: #0d1117;--bg-color-secondary: #161b22;--bg-color-tertiary: #21262c;--border-color: #30363d;--box-shadow: #282a32;--card-shadow: rgba(0, 0, 0, .3);--black: #fff;--dark-grey: #999;--light-grey: #666;--white: #000;--grey3: #bbb;--grey12: #333;--grey14: #111;--bg-color-light: #161b22;--bg-color-back: #0d1117;--bg-color-float: #161b22;--bg-color-blur: rgba(13, 17, 23, .9);--bg-color-float-blur: rgba(22, 27, 34, .9);--text-color-light: #a8a8a8;--text-color-lighter: #b1b1b1;--text-color-bright: #c5c5c5;--border-color-light: #2e333a;--border-color-dark: #394048}:root{--theme-color: #326F95;--text-color: #2c3e50;--bg-color: #fff;--bg-color-secondary: #f8f8f8;--bg-color-tertiary: #efeef4;--border-color: #eaecef;--box-shadow: #f0f1f2;--card-shadow: rgba(0, 0, 0, .15);--black: #000;--dark-grey: #666;--light-grey: #999;--white: #fff;--grey3: #333;--grey12: #bbb;--grey14: #eee;--navbar-height: 3.75rem;--navbar-horizontal-padding: 1.5rem;--navbar-vertical-padding: .7rem;--navbar-mobile-height: 3.25rem;--navbar-mobile-horizontal-padding: 1rem;--navbar-mobile-vertical-padding: .5rem;--sidebar-width: 18rem;--sidebar-mobile-width: 16rem;--content-width: 780px;--home-page-width: 1160px;--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", STHeiti, "Microsoft YaHei", SimSun, sans-serif;--font-family-heading: Georgia Pro, Crimson, Georgia, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", STHeiti, "Microsoft YaHei", SimSun, sans-serif;--font-family-mono: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;--line-numbers-width: 2.5rem;--color-transition: .3s ease;--transform-transition: .3s ease;--vp-bg: var(--bg-color);--vp-bgl: var(--bg-color-light);--vp-bglt: var(--bg-color-tertiary);--vp-c: var(--text-color);--vp-cl: var(--text-color-light);--vp-clt: var(--text-color-lighter);--vp-brc: var(--border-color);--vp-brcd: var(--border-color-dark);--vp-tc: var(--theme-color);--vp-tcl: var(--theme-color-light);--vp-ct: var(--color-transition);--vp-tt: var(--transform-transition);--bg-color-light: #fff;--bg-color-back: #f8f8f8;--bg-color-float: #fff;--bg-color-blur: rgba(255, 255, 255, .9);--bg-color-float-blur: rgba(255, 255, 255, .9);--text-color-light: #3a5169;--text-color-lighter: #476582;--text-color-bright: #6a8bad;--border-color-light: #eceef1;--border-color-dark: #cfd4db;--theme-color-dark: #2d6486;--theme-color-light: #3a80ac;--theme-color-mask: rgba(50, 111, 149, .15)}.font-icon{display:inline-block}.theme-hope-content .font-icon{vertical-align:middle}@media screen{.sr-only{position:absolute;overflow:hidden;clip:rect 0,0,0,0;width:1px;height:1px;margin:-1px;padding:0;border:0}}@media print{.sr-only{display:none}}.vp-catalog-wrapper{margin-top:8px;margin-bottom:8px}.vp-catalog-wrapper.index ol{padding-inline-start:0}.vp-catalog-wrapper.index li{list-style-type:none}.vp-catalog-wrapper.index .vp-catalogs{padding-inline-start:0}.vp-catalog-wrapper.index .vp-catalog{list-style-type:none}.vp-catalog-wrapper.index .vp-catalog-title:before{content:"§" counter(catalog-item,upper-roman) " "}.vp-catalog-wrapper.index .vp-child-catalogs{counter-reset:child-catalog}.vp-catalog-wrapper.index .vp-child-catalog{counter-increment:child-catalog}.vp-catalog-wrapper.index .vp-child-catalog .vp-catalog-title:before{content:counter(catalog-item) "." counter(child-catalog) " "}.vp-catalog-wrapper.index .vp-sub-catalogs{padding-inline-start:.5rem}.vp-catalogs{margin:0;counter-reset:catalog-item}.vp-catalogs.deep{padding-inline-start:0}.vp-catalogs.deep .vp-catalog{list-style-type:none}.vp-catalogs .font-icon{vertical-align:baseline;margin-inline-end:.25rem}.vp-catalog{counter-increment:catalog-item}.vp-catalog-main-title{margin-top:calc(.5rem - var(--navbar-height, 3.6rem));margin-bottom:.5rem;padding-top:var(--navbar-height, 3.6rem);font-weight:500;font-size:1.75rem}.vp-catalog-main-title:first-child{margin-bottom:.5rem!important}.vp-catalog-main-title:only-child{margin-bottom:0!important}.vp-catalog-main-title .vp-link{text-decoration:none!important}.vp-catalog-child-title{margin-bottom:.5rem!important}.vp-catalog-child-title.has-children{margin-top:calc(.5rem - var(--navbar-height, 3.6rem));padding-top:var(--navbar-height, 3.6rem);border-bottom:1px solid var(--catalog-border-color);font-weight:500;font-size:1.3rem;transition:border-color .3s}.vp-catalog-child-title.has-children:only-child{margin-bottom:0!important}.vp-catalog-child-title .vp-link{text-decoration:none!important}.vp-catalog-sub-title{font-weight:500;font-size:1.1rem}.vp-catalog-sub-title:only-child{margin-bottom:0!important}.vp-catalog-title{color:inherit;text-decoration:none}.vp-catalog-title:hover{color:var(--catalog-active-color)}.vp-child-catalogs{margin:0}.vp-child-catalog{list-style-type:disc}.vp-sub-catalogs{counter-reset:sub-catalog}.vp-sub-catalog{counter-increment:sub-catalog}.vp-sub-catalog .vp-link:before{content:counter(catalog-item) "." counter(child-catalog) "." counter(sub-catalog) " "}.vp-sub-catalogs-wrapper{display:flex;flex-wrap:wrap}.vp-sub-catalog-link{display:inline-block;margin:4px 8px;padding:4px 8px;border-radius:6px;background-color:var(--catalog-bg-secondary-color);line-height:1.5;overflow-wrap:break-word;transition:background-color .3s,color .3s}.vp-sub-catalog-link:hover{background-color:var(--catalog-hover-color);color:var(--catalog-bg-color);text-decoration:none!important}.vp-catalog-header-anchor{font-size:.85em;float:left;margin-left:-1em;padding-right:0;margin-top:.125em;opacity:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;text-decoration:none;content:"¶"}@media print{.vp-catalog-header-anchor{display:none}}h2:hover .vp-catalog-header-anchor,h3:hover .vp-catalog-header-anchor{opacity:1;text-decoration:none}.vp-catalog-header-anchor:focus-visible{opacity:1}.vp-empty-catalog{font-size:1.25rem;text-align:center}:root{--catalog-bg-color: #fff;--catalog-bg-secondary-color: #f8f8f8;--catalog-border-color: #e5e5e5;--catalog-active-color: #3eaf7c;--catalog-hover-color: #71cda3}.vp-back-to-top-button{position:fixed!important;bottom:4rem;inset-inline-end:1rem;z-index:100;width:3rem;height:3rem;padding:.5rem;border-width:0;border-radius:50%;background:var(--back-to-top-bg-color);color:var(--back-to-top-color);box-shadow:2px 2px 10px 4px var(--back-to-top-shadow);cursor:pointer}@media (max-width: 959px){.vp-back-to-top-button{width:2.5rem;height:2.5rem}}@media print{.vp-back-to-top-button{display:none}}.vp-back-to-top-button:hover{color:var(--back-to-top-color-hover)}.vp-back-to-top-button .back-to-top-icon{overflow:hidden;width:100%;height:100%;background:currentcolor;border-radius:50%;-webkit-mask-image:var(--back-to-top-icon);mask-image:var(--back-to-top-icon);-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:cover;mask-size:cover}.vp-scroll-progress{position:absolute;right:-2px;bottom:-2px;width:calc(100% + 4px);height:calc(100% + 4px)}.vp-scroll-progress svg{width:100%;height:100%}.vp-scroll-progress circle{opacity:.9;fill:none;stroke:currentColor;transform:rotate(-90deg);transform-origin:50% 50%;r:22;stroke-dasharray:0% 314.1593%;stroke-width:3px}@media (max-width: 959px){.vp-scroll-progress circle{r:18}}.back-to-top-enter-active,.back-to-top-leave-active{transition:opacity .3s}.back-to-top-enter-from,.back-to-top-leave-to{opacity:0}:root{--back-to-top-z-index: 5;--back-to-top-icon: url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201024%201024'%3e%3cpath%20d='M512%20843.2c-36.2%200-66.4-13.6-85.8-21.8-10.8-4.6-22.6%203.6-21.8%2015.2l7%20102c.4%206.2%207.6%209.4%2012.6%205.6l29-22c3.6-2.8%209-1.8%2011.4%202l41%2064.2c3%204.8%2010.2%204.8%2013.2%200l41-64.2c2.4-3.8%207.8-4.8%2011.4-2l29%2022c5%203.8%2012.2.6%2012.6-5.6l7-102c.8-11.6-11-20-21.8-15.2-19.6%208.2-49.6%2021.8-85.8%2021.8'/%3e%3cpath%20d='m795.4%20586.2-96-98.2C699.4%20172%20513%2032%20513%2032S324.8%20172%20324.8%20488l-96%2098.2c-3.6%203.6-5.2%209-4.4%2014.2L261.2%20824c1.8%2011.4%2014.2%2017%2023.6%2010.8L419%20744s41.4%2040%2094.2%2040%2092.2-40%2092.2-40l134.2%2090.8c9.2%206.2%2021.6.6%2023.6-10.8l37-223.8c.4-5.2-1.2-10.4-4.8-14M513%20384c-34%200-61.4-28.6-61.4-64s27.6-64%2061.4-64c34%200%2061.4%2028.6%2061.4%2064S547%20384%20513%20384'/%3e%3c/svg%3e");--back-to-top-bg-color: #fff;--back-to-top-color: #3eaf7c;--back-to-top-color-hover: #71cda3;--back-to-top-shadow: rgb(0 0 0 / 20%)}:root{--external-link-icon-color: #aaa}.external-link-icon{position:relative;display:inline-block;color:var(--external-link-icon-color);vertical-align:middle;top:-1px}@media print{.external-link-icon{display:none}}.external-link-icon-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}:root{--nprogress-color: #29d;--nprogress-z-index: 1031}#nprogress{pointer-events:none}#nprogress .bar{background:var(--nprogress-color);position:fixed;z-index:var(--nprogress-z-index);top:0;left:0;width:100%;height:2px}div[class*=language-]:hover:before{display:none}div[class*=language-]:hover .vp-copy-code-button{opacity:1}.vp-copy-code-button{position:absolute;top:.5em;right:.5em;z-index:5;width:2.5rem;height:2.5rem;padding:0;border-width:0;border-radius:.5rem;background:transparent;outline:none;opacity:0;cursor:pointer;transition:opacity .4s}@media print{.vp-copy-code-button{display:none}}.vp-copy-code-button:focus,.vp-copy-code-button.copied{opacity:1}.vp-copy-code-button:hover,.vp-copy-code-button.copied{background:var(--copy-code-hover)}.vp-copy-code-button.copied .vp-copy-icon{-webkit-mask-image:var(--code-copied-icon);mask-image:var(--code-copied-icon)}.vp-copy-code-button.copied:after{content:attr(data-copied);position:absolute;top:0;right:calc(100% + .25rem);display:block;height:1.25rem;padding:.625rem;border-radius:.5rem;background:var(--copy-code-hover);color:var(--copy-code-color);font-weight:500;line-height:1.25rem;white-space:nowrap}.vp-copy-icon{width:1.25rem;height:1.25rem;padding:.625rem;background:currentcolor;color:var(--copy-code-color);font-size:1.25rem;-webkit-mask-image:var(--code-copy-icon);mask-image:var(--code-copy-icon);-webkit-mask-position:50%;mask-position:50%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:1em;mask-size:1em}:root{--code-copy-icon: url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20height='20'%20width='20'%20stroke='rgba(128,128,128,1)'%20stroke-width='2'%3e%3cpath%20stroke-linecap='round'%20stroke-linejoin='round'%20d='M9%205H7a2%202%200%200%200-2%202v12a2%202%200%200%200%202%202h10a2%202%200%200%200%202-2V7a2%202%200%200%200-2-2h-2M9%205a2%202%200%200%200%202%202h2a2%202%200%200%200%202-2M9%205a2%202%200%200%201%202-2h2a2%202%200%200%201%202%202'%20/%3e%3c/svg%3e");--code-copied-icon: url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20height='20'%20width='20'%20stroke='rgba(128,128,128,1)'%20stroke-width='2'%3e%3cpath%20stroke-linecap='round'%20stroke-linejoin='round'%20d='M9%205H7a2%202%200%200%200-2%202v12a2%202%200%200%200%202%202h10a2%202%200%200%200%202-2V7a2%202%200%200%200-2-2h-2M9%205a2%202%200%200%200%202%202h2a2%202%200%200%200%202-2M9%205a2%202%200%200%201%202-2h2a2%202%200%200%201%202%202m-6%209%202%202%204-4'%20/%3e%3c/svg%3e");--copy-code-color: #9e9e9e;--copy-code-hover: rgb(0 0 0 / 50%)}.vp-code-tabs-nav{overflow-x:auto;margin:.85rem 0 -.85rem;padding:0;border-radius:6px 6px 0 0;background:var(--code-tabs-nav-bg-color, #3a404c);list-style:none;white-space:nowrap;transition:background var(--vp-ct)}@media print{.vp-code-tabs-nav{display:none}}@media (max-width: 419px){.vp-code-tabs-nav{margin-inline:-1.5rem;border-radius:0}}.vp-code-tab-nav{border-width:0;position:relative;min-width:3rem;margin:0;padding:6px 12px;border-radius:6px 6px 0 0;background:transparent;color:var(--code-tabs-nav-text-color, #eee);font-weight:600;font-size:.85em;line-height:1.4;cursor:pointer;transition:background var(--vp-ct),color var(--vp-ct)}.vp-code-tab-nav:hover{background:var(--code-tabs-nav-hover-color, #434a57)}.vp-code-tab-nav:before,.vp-code-tab-nav:after{content:" ";position:absolute;bottom:0;z-index:1;width:6px;height:6px}.vp-code-tab-nav:before{right:100%}.vp-code-tab-nav:after{left:100%}.vp-code-tab-nav.active{background:var(--code-bg-color, #282c34)}.vp-code-tab-nav.active:before{background:radial-gradient(12px at left top,transparent 50%,var(--code-bg-color, #282c34) 50%)}.vp-code-tab-nav.active:after{background:radial-gradient(12px at right top,transparent 50%,var(--code-bg-color, #282c34) 50%)}.vp-code-tab-nav:first-child:before{display:none}html[dir=rtl] .vp-code-tab-nav:first-child:before{display:block}html[dir=rtl] .vp-code-tab-nav:first-child:after{display:none}.vp-code-tab{display:none}@media print{.vp-code-tab{display:block}}.vp-code-tab.active{display:block}.vp-code-tab div[class*=language-]{border-top-left-radius:0;border-top-right-radius:0}@media (max-width: 419px){.vp-code-tab div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}@media print{.vp-code-tab div[class*=language-] code{white-space:pre-wrap}}.vp-code-tab-title{display:none;font-weight:500}@media print{.vp-code-tab-title{display:block}}.code-group-nav{display:flex;margin:.85rem 0 -.85rem;padding:0;border-radius:6px 6px 0 0;background:var(--code-tabs-nav-bg-color, #3a404c);list-style:none;transition:background var(--vp-ct)}@media (max-width: 419px){.code-group-nav{margin-inline:-1.5rem;border-radius:0}}.code-group-nav-tab{border-width:0;position:relative;min-width:3rem;margin:0;padding:6px 10px;border-radius:6px 6px 0 0;background:transparent;color:var(--code-tabs-nav-text-color, #eee);font-weight:600;font-size:.85em;line-height:1.4;cursor:pointer;transition:background var(--vp-ct),color var(--vp-ct)}.code-group-nav-tab:hover{background:var(--code-tabs-nav-hover-color, #434a57)}.code-group-nav-tab:before,.code-group-nav-tab:after{content:" ";position:absolute;bottom:0;z-index:1;width:6px;height:6px}.code-group-nav-tab:before{right:100%}.code-group-nav-tab:after{left:100%}.code-group-nav-tab.active{background:var(--code-bg-color, #282c34)}.code-group-nav-tab.active:before{background:radial-gradient(12px at left top,transparent 50%,var(--code-bg-color, #282c34) 50%)}.code-group-nav-tab.active:after{background:radial-gradient(12px at right top,transparent 50%,var(--code-bg-color, #282c34) 50%)}.code-group-nav-tab:first-child:before{display:none}html[dir=rtl] .code-group-nav-tab:first-child:before{display:block}html[dir=rtl] .code-group-nav-tab:first-child:after{display:none}.code-group-item{display:none}.code-group-item.active{display:block}.code-group-item div[class*=language-]{border-top-left-radius:0;border-top-right-radius:0}.vp-card{display:inline-flex;align-items:center;max-width:400px;margin:1rem .5rem;padding:1rem;border-radius:.5rem;background:var(--vp-bg);color:inherit;box-shadow:2px 2px 10px 0 var(--card-shadow);transition:background var(--vp-ct),box-shadow var(--vp-ct)}.vp-card:hover{background:var(--vp-bgl);text-decoration:none!important}.vp-card hr{margin:.25em 0}.vp-card-logo{width:3em;height:3em;margin-inline-end:1em;border-radius:50%}.vp-card-content{flex:1}.vp-card-title{font-weight:500;font-size:1.1em}.vp-card-desc{color:#888;font-size:.9em;line-height:1.5;transition:color var(--vp-ct)}.vp-card-container{display:flex;flex-wrap:wrap;align-items:stretch;place-content:stretch center}.vp-card-container .vp-card{flex-basis:calc(50% - 3rem);max-width:unset;margin:.5rem}@media (max-width: 959px){.vp-card-container .vp-card{flex-basis:100%}}@media (max-width: 719px){.vp-card-container .vp-card{font-size:.95rem}}@media (max-width: 419px){.vp-card-container .vp-card{font-size:.9rem}}.theme-hope-content figure{position:relative;display:flex;flex-direction:column;width:auto;margin:1rem auto;text-align:center;transition:transform var(--vp-tt)}.theme-hope-content figure img{overflow:hidden;margin:0 auto;border-radius:8px}.theme-hope-content figure img[tabindex]:hover,.theme-hope-content figure img[tabindex]:focus{box-shadow:2px 2px 10px 0 var(--card-shadow)}@media print{.theme-hope-content figure>a[href^="http://"]:after,.theme-hope-content figure>a[href^="https://"]:after{content:""}}.theme-hope-content figure>a .external-link-icon{display:none}.theme-hope-content figure figcaption{display:inline-block;margin:6px auto;font-size:.8rem}.footnote-item{margin-top:calc(0rem - var(--navbar-height, 3.6rem));padding-top:calc(var(--navbar-height, 3.6rem) + .5rem)}.footnote-item>p{margin-bottom:0}.footnote-ref{position:relative}.footnote-anchor{position:absolute;top:calc(-.5rem - var(--navbar-height, 3.6rem))}:root{--important-title-color: #230555;--important-bg-color: #f4eefe;--important-border-color: #a371f7;--important-code-bg-color: rgb(163 113 247 / 10%);--info-title-color: #193c47;--info-bg-color: #eef9fd;--info-border-color: #4cb3d4;--info-code-bg-color: rgb(76 179 212 / 10%);--note-title-color: #474748;--note-bg-color: #fdfdfe;--note-border-color: #ccc;--note-code-bg-color: rgb(212 213 216 / 20%);--tip-title-color: #003100;--tip-bg-color: #e6f6e6;--tip-border-color: #009400;--tip-code-bg-color: rgb(0 148 0 / 15%);--warning-title-color: #4d3800;--warning-bg-color: #fff8e6;--warning-border-color: #e6a700;--warning-code-bg-color: rgb(230 167 0 / 15%);--caution-title-color: #4b1113;--caution-bg-color: #ffebec;--caution-border-color: #e13238;--caution-code-bg-color: rgb(225 50 56 / 15%);--detail-bg-color: #eee;--detail-text-color: inherit;--detail-code-bg-color: rgb(127 127 127 / 15%)}html[data-theme=dark]{--important-title-color: #f4eefe;--important-bg-color: #230555;--info-title-color: #eef9fd;--info-bg-color: #193c47;--note-title-color: #fdfdfe;--note-bg-color: #474748;--tip-title-color: #e6f6e6;--tip-bg-color: #003100;--warning-title-color: #fff8e6;--warning-bg-color: #4d3800;--caution-title-color: #ffebec;--caution-bg-color: #4b1113;--detail-bg-color: #333;--detail-text-color: #a8a8a8}.hint-container{position:relative;transition:background var(--vp-ct),border-color var(--vp-ct),color var(--vp-ct)}@media print{.hint-container{page-break-inside:avoid}}.hint-container .hint-container-title{position:relative;font-weight:600;line-height:1.25}.hint-container.important,.hint-container.info,.hint-container.note,.hint-container.tip,.hint-container.warning,.hint-container.caution{margin:1rem 0;padding:.25rem 1rem;border-inline-start-width:.3rem;border-inline-start-style:solid;border-radius:.5rem;color:inherit}@media (max-width: 419px){.hint-container.important,.hint-container.info,.hint-container.note,.hint-container.tip,.hint-container.warning,.hint-container.caution{margin-inline:-.75rem}}.hint-container.important .hint-container-title,.hint-container.info .hint-container-title,.hint-container.note .hint-container-title,.hint-container.tip .hint-container-title,.hint-container.warning .hint-container-title,.hint-container.caution .hint-container-title{padding-inline-start:1.75rem}@media print{.hint-container.important .hint-container-title,.hint-container.info .hint-container-title,.hint-container.note .hint-container-title,.hint-container.tip .hint-container-title,.hint-container.warning .hint-container-title,.hint-container.caution .hint-container-title{padding-inline-start:0}}.hint-container.important .hint-container-title:before,.hint-container.info .hint-container-title:before,.hint-container.note .hint-container-title:before,.hint-container.tip .hint-container-title:before,.hint-container.warning .hint-container-title:before,.hint-container.caution .hint-container-title:before{content:" ";position:absolute;top:calc(50% - .6125em);inset-inline-start:0;width:1.25em;height:1.25em;background-position:left;background-repeat:no-repeat}@media print{.hint-container.important .hint-container-title:before,.hint-container.info .hint-container-title:before,.hint-container.note .hint-container-title:before,.hint-container.tip .hint-container-title:before,.hint-container.warning .hint-container-title:before,.hint-container.caution .hint-container-title:before{display:none}}.hint-container.important p,.hint-container.info p,.hint-container.note p,.hint-container.tip p,.hint-container.warning p,.hint-container.caution p{line-height:1.5}.hint-container.important a,.hint-container.info a,.hint-container.note a,.hint-container.tip a,.hint-container.warning a,.hint-container.caution a{color:var(--vp-tc)}.hint-container.important{border-color:var(--important-border-color);background:var(--important-bg-color)}.hint-container.important>.hint-container-title{color:var(--important-title-color)}.hint-container.important>.hint-container-title:before{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M512 981.333a84.992 84.992 0 0 1-84.907-84.906h169.814A84.992 84.992 0 0 1 512 981.333zm384-128H128v-42.666l85.333-85.334v-256A298.325 298.325 0 0 1 448 177.92V128a64 64 0 0 1 128 0v49.92a298.325 298.325 0 0 1 234.667 291.413v256L896 810.667v42.666zm-426.667-256v85.334h85.334v-85.334h-85.334zm0-256V512h85.334V341.333h-85.334z' fill='%23a371f7'/%3E%3C/svg%3E")}.hint-container.important code{background:var(--important-code-bg-color)}.hint-container.info{border-color:var(--info-border-color);background:var(--info-bg-color)}.hint-container.info>.hint-container-title{color:var(--info-title-color)}.hint-container.info>.hint-container-title:before{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-1-11v6h2v-6h-2zm0-4v2h2V7h-2z' fill='%234cb3d4'/%3E%3C/svg%3E")}.hint-container.info code{background:var(--info-code-bg-color)}.hint-container.note{border-color:var(--note-border-color);background:var(--note-bg-color)}.hint-container.note>.hint-container-title{color:var(--note-title-color)}.hint-container.note>.hint-container-title:before{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-1-11v6h2v-6h-2zm0-4v2h2V7h-2z' fill='%23ccc'/%3E%3C/svg%3E")}.hint-container.note code{background:var(--note-code-bg-color)}.hint-container.tip{border-color:var(--tip-border-color);background:var(--tip-bg-color)}.hint-container.tip>.hint-container-title{color:var(--tip-title-color)}.hint-container.tip>.hint-container-title:before{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23009400' d='M7.941 18c-.297-1.273-1.637-2.314-2.187-3a8 8 0 1 1 12.49.002c-.55.685-1.888 1.726-2.185 2.998H7.94zM16 20v1a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2v-1h8zm-3-9.995V6l-4.5 6.005H11v4l4.5-6H13z'/%3E%3C/svg%3E")}.hint-container.tip code{background:var(--tip-code-bg-color)}.hint-container.warning{border-color:var(--warning-border-color);background:var(--warning-bg-color)}.hint-container.warning>.hint-container-title{color:var(--warning-title-color)}.hint-container.warning>.hint-container-title:before{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M576.286 752.57v-95.425q0-7.031-4.771-11.802t-11.3-4.772h-96.43q-6.528 0-11.3 4.772t-4.77 11.802v95.424q0 7.031 4.77 11.803t11.3 4.77h96.43q6.528 0 11.3-4.77t4.77-11.803zm-1.005-187.836 9.04-230.524q0-6.027-5.022-9.543-6.529-5.524-12.053-5.524H456.754q-5.524 0-12.053 5.524-5.022 3.516-5.022 10.547l8.538 229.52q0 5.023 5.022 8.287t12.053 3.265h92.913q7.032 0 11.803-3.265t5.273-8.287zM568.25 95.65l385.714 707.142q17.578 31.641-1.004 63.282-8.538 14.564-23.354 23.102t-31.892 8.538H126.286q-17.076 0-31.892-8.538T71.04 866.074q-18.582-31.641-1.004-63.282L455.75 95.65q8.538-15.57 23.605-24.61T512 62t32.645 9.04 23.605 24.61z' fill='%23e6a700'/%3E%3C/svg%3E")}.hint-container.warning code{background:var(--warning-code-bg-color)}.hint-container.caution{border-color:var(--caution-border-color);background:var(--caution-bg-color)}.hint-container.caution>.hint-container-title{color:var(--caution-title-color)}.hint-container.caution>.hint-container-title:before{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2c5.523 0 10 4.477 10 10v3.764a2 2 0 0 1-1.106 1.789L18 19v1a3 3 0 0 1-2.824 2.995L14.95 23a2.5 2.5 0 0 0 .044-.33L15 22.5V22a2 2 0 0 0-1.85-1.995L13 20h-2a2 2 0 0 0-1.995 1.85L9 22v.5c0 .171.017.339.05.5H9a3 3 0 0 1-3-3v-1l-2.894-1.447A2 2 0 0 1 2 15.763V12C2 6.477 6.477 2 12 2zm-4 9a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm8 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4z' fill='%23e13238'/%3E%3C/svg%3E")}.hint-container.caution code{background:var(--caution-code-bg-color)}.hint-container.details{position:relative;display:block;margin:1rem 0;padding:1.5rem;border-radius:.5rem;background:var(--detail-bg-color);color:var(--detail-text-color);transition:background var(--vp-tt),color var(--vp-tt)}@media (max-width: 419px){.hint-container.details{margin-inline:-.75rem}}.hint-container.details h4{margin-top:0}.hint-container.details figure:last-child,.hint-container.details p:last-child{margin-bottom:0;padding-bottom:0}.hint-container.details a{color:var(--vp-tc)}.hint-container.details code{background:var(--detail-code-bg-color)}.hint-container.details summary{position:relative;margin:-1.5rem;padding-block:1.5rem;padding-inline:4rem 1.5rem;list-style:none;cursor:pointer}.hint-container.details summary::-webkit-details-marker{display:none}.hint-container.details summary::marker{color:transparent;font-size:0}.hint-container.details summary:before,.hint-container.details summary:after{content:" ";position:absolute;top:calc(50% - .75rem);inset-inline-start:1.5rem;width:1.5rem;height:1.5rem}.hint-container.details summary:before{border-radius:50%;background:#ccc;transition:background var(--vp-ct),transform var(--vp-tt)}html[data-theme=dark] .hint-container.details summary:before{background:#555}.hint-container.details summary:after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");line-height:normal;transition:transform var(--vp-tt);transform:rotate(90deg)}html[data-theme=dark] .hint-container.details summary:after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.hint-container.details[open]>summary{margin-bottom:.5em}.hint-container.details[open]>summary:after{transform:rotate(180deg)}html[data-theme=light] figure:has(img[data-mode=darkmode-only]),html[data-theme=light] img[data-mode=darkmode-only]{display:none!important}html[data-theme=dark] figure:has(img[data-mode=lightmode-only]),html[data-theme=dark] img[data-mode=lightmode-only]{display:none!important}:root{--playground-header-bg-color: #eee}html[data-theme=dark]{--playground-header-bg-color: #333}.vp-playground{overflow:hidden;margin-top:1rem;margin-bottom:1rem;border:1px solid var(--vp-brc);border-radius:6px}@media print{.vp-playground{display:none!important}}.vp-playground-header{display:flex;flex-flow:row wrap;padding:8px 10px;border-bottom:1px solid var(--vp-brc);background:var(--playground-header-bg-color, #eee);font-weight:500;transition:background var(--vp-ct),border-color var(--vp-ct)}.vp-playground-title{flex:1;overflow:hidden;font-size:1.25rem;text-overflow:ellipsis;white-space:nowrap}.vp-playground-actions{display:flex;align-items:center}.vp-playground-action{display:inline-flex;margin-inline-start:10px}.vp-playground-action .icon{width:1.5rem;height:1.5rem;fill:#777}.vp-playground-action:hover .icon{fill:var(--vp-tc)}.vp-playground-container{position:relative;overflow:hidden;background:var(--vp-bg);transition:background var(--vp-ct)}@media print{.vp-playground-container{page-break-inside:avoid}}.vp-playground-container iframe{display:block;width:100%;height:100%;min-height:400px;border:none;resize:vertical}.search-pro-button{border-width:0;background:transparent;display:inline-flex;align-items:center;box-sizing:content-box;height:1.25rem;margin-inline:1rem 0;margin-top:0;margin-bottom:0;padding:.5rem;border:0;border:1px solid var(--vp-bgl);border-radius:1rem;background:var(--vp-bgl);color:var(--vp-c);font-weight:500;cursor:pointer;transition:background var(--vp-ct),color var(--vp-ct)}@media print{.search-pro-button{display:none}}@media (max-width: 959px){.search-pro-button{border-radius:50%}}.search-pro-button:hover{border:1px solid var(--vp-tc);background-color:var(--vp-bglt);color:var(--vp-clt)}.search-pro-button .search-icon{width:1.25rem;height:1.25rem}.search-pro-placeholder{margin-inline:.25rem;font-size:1rem}@media (max-width: 959px){.search-pro-placeholder{display:none}}.search-pro-key-hints{font-size:.75rem}@media (max-width: 959px){.search-pro-key-hints{display:none}}.search-pro-key{display:inline-block;min-width:1em;margin-inline:.125rem;padding:.25rem;border:1px solid var(--vp-brc);border-radius:4px;box-shadow:1px 1px 4px 0 var(--card-shadow);line-height:1;letter-spacing:-.1em;transition:background var(--vp-ct),color var(--vp-ct),border var(--vp-ct) box-shadow var(--vp-ct)}@keyframes search-pro-fade-in{0%{opacity:.2}to{opacity:1}}.search-pro-modal-wrapper{position:fixed;top:0;right:0;bottom:0;left:0;z-index:997;display:flex;align-items:center;justify-content:center;overflow:auto;cursor:default}.search-pro-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:998;animation:.25s search-pro-fade-in;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.search-pro-modal{position:absolute;z-index:999;display:flex;flex-direction:column;width:calc(100% - 6rem);max-width:50em;border-radius:10px;background:var(--vp-bg);box-shadow:2px 2px 10px 0 var(--card-shadow);transition:background var(--vp-ct);animation:.15s pwa-opened}@media (max-width: 1280px){.search-pro-modal{animation:.25s pwa-mobile}}@media (max-width: 719px){.search-pro-modal{width:100vw;max-width:unset;height:100vh}}.search-pro-box{display:flex;margin:1rem}.search-pro-box form{position:relative;display:flex;flex:1}.search-pro-box label{position:absolute;top:calc(50% - .75rem);inset-inline-start:.5rem;color:var(--vp-tc)}.search-pro-box label .search-icon{width:1.5rem;height:1.5rem}.search-pro-clear-button{border-width:0;background:transparent;cursor:pointer;position:absolute;top:calc(50% - 10px);inset-inline-end:.75rem;padding:0;color:var(--vp-tc)}.search-pro-clear-button:hover{border-radius:50%;background-color:#0000001a}.search-pro-close-button{border-width:0;background:transparent;cursor:pointer;display:none;margin-inline:.5rem -.5rem;padding:.5rem;color:var(--grey3);font-size:1rem}@media (max-width: 719px){.search-pro-close-button{display:block}}.search-pro-input{flex:1;width:0;margin:0;padding-block:.25rem;padding-inline:2.5rem 2rem;border:0;border:2px solid var(--vp-tc);border-radius:8px;background:var(--vp-bg);color:var(--vp-c);outline:none;font-size:1.25rem;line-height:2.5;-webkit-appearance:none;-moz-appearance:none;appearance:none}.search-pro-input::-webkit-search-cancel-button{display:none}.search-pro-suggestions{position:absolute;inset:calc(100% + 4px) 0 auto;z-index:20;overflow:visible;overflow-y:auto;max-height:50vh;margin:0;padding:0;border-radius:.5rem;background-color:var(--vp-bg);box-shadow:2px 2px 10px 0 var(--card-shadow);list-style:none;line-height:1.5}.search-pro-suggestion{padding:.25rem 1rem;border-top:1px solid var(--vp-brc);cursor:pointer}.search-pro-suggestion:first-child{border-top:none}.search-pro-suggestion.active,.search-pro-suggestion:hover{background-color:var(--vp-bglt)}.search-pro-auto-complete{display:none;float:right;margin:0 .5rem;padding:4px;border:1px solid var(--vp-brc);border-radius:4px;box-shadow:1px 1px 4px 0 var(--card-shadow);font-size:12px;line-height:1}.search-pro-suggestion.active .search-pro-auto-complete{display:block}.search-pro-result-wrapper{flex-grow:1;overflow-y:auto;min-height:40vh;max-height:calc(80vh - 10rem);padding:0 1rem}@media (max-width: 719px){.search-pro-result-wrapper{min-height:unset;max-height:unset}}.search-pro-result-wrapper.loading,.search-pro-result-wrapper.empty{display:flex;align-items:center;justify-content:center;padding:1.5rem;font-weight:600;font-size:22px;text-align:center}.search-pro-hints{margin-top:1rem;padding:.75rem .5rem;box-shadow:0 -1px 4px 0 var(--card-shadow);line-height:1}.search-pro-hint{display:inline-flex;align-items:center;margin:0 .5rem}.search-pro-hint kbd{margin:0 .5rem;padding:2px;border:1px solid var(--vp-brc);border-radius:4px;box-shadow:1px 1px 4px 0 var(--card-shadow)}.search-pro-hint kbd+kbd{margin-inline-start:-.25rem}.search-pro-hint svg{display:block;width:15px;height:15px}:root{--balloon-border-radius: 2px;--balloon-color: rgba(16, 16, 16, .95);--balloon-text-color: #fff;--balloon-font-size: 12px;--balloon-move: 4px}button[aria-label][data-balloon-pos]{overflow:visible}[aria-label][data-balloon-pos]{position:relative;cursor:pointer}[aria-label][data-balloon-pos]:after{opacity:0;pointer-events:none;transition:all .18s ease-out .18s;text-indent:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-weight:400;font-style:normal;text-shadow:none;font-size:var(--balloon-font-size);background:var(--balloon-color);border-radius:2px;color:var(--balloon-text-color);border-radius:var(--balloon-border-radius);content:attr(aria-label);padding:.5em 1em;position:absolute;white-space:nowrap;z-index:10}[aria-label][data-balloon-pos]:before{width:0;height:0;border:5px solid transparent;border-top-color:var(--balloon-color);opacity:0;pointer-events:none;transition:all .18s ease-out .18s;content:"";position:absolute;z-index:10}[aria-label][data-balloon-pos]:hover:before,[aria-label][data-balloon-pos]:hover:after,[aria-label][data-balloon-pos][data-balloon-visible]:before,[aria-label][data-balloon-pos][data-balloon-visible]:after,[aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:before,[aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:after{opacity:1;pointer-events:none}[aria-label][data-balloon-pos].font-awesome:after{font-family:FontAwesome,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}[aria-label][data-balloon-pos][data-balloon-break]:after{white-space:pre}[aria-label][data-balloon-pos][data-balloon-break][data-balloon-length]:after{white-space:pre-line;word-break:break-word}[aria-label][data-balloon-pos][data-balloon-blunt]:before,[aria-label][data-balloon-pos][data-balloon-blunt]:after{transition:none}[aria-label][data-balloon-pos][data-balloon-pos=up]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos=up][data-balloon-visible]:after,[aria-label][data-balloon-pos][data-balloon-pos=down]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos=down][data-balloon-visible]:after{transform:translate(-50%)}[aria-label][data-balloon-pos][data-balloon-pos=up]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos=up][data-balloon-visible]:before,[aria-label][data-balloon-pos][data-balloon-pos=down]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos=down][data-balloon-visible]:before{transform:translate(-50%)}[aria-label][data-balloon-pos][data-balloon-pos*=-left]:after{left:0}[aria-label][data-balloon-pos][data-balloon-pos*=-left]:before{left:5px}[aria-label][data-balloon-pos][data-balloon-pos*=-right]:after{right:0}[aria-label][data-balloon-pos][data-balloon-pos*=-right]:before{right:5px}[aria-label][data-balloon-pos][data-balloon-po*=-left]:hover:after,[aria-label][data-balloon-pos][data-balloon-po*=-left][data-balloon-visible]:after,[aria-label][data-balloon-pos][data-balloon-pos*=-right]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos*=-right][data-balloon-visible]:after{transform:translate(0)}[aria-label][data-balloon-pos][data-balloon-po*=-left]:hover:before,[aria-label][data-balloon-pos][data-balloon-po*=-left][data-balloon-visible]:before,[aria-label][data-balloon-pos][data-balloon-pos*=-right]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos*=-right][data-balloon-visible]:before{transform:translate(0)}[aria-label][data-balloon-pos][data-balloon-pos^=up]:before,[aria-label][data-balloon-pos][data-balloon-pos^=up]:after{bottom:100%;transform-origin:top;transform:translateY(var(--balloon-move))}[aria-label][data-balloon-pos][data-balloon-pos^=up]:after{margin-bottom:10px}[aria-label][data-balloon-pos][data-balloon-pos=up]:before,[aria-label][data-balloon-pos][data-balloon-pos=up]:after{left:50%;transform:translate(-50%,var(--balloon-move))}[aria-label][data-balloon-pos][data-balloon-pos^=down]:before,[aria-label][data-balloon-pos][data-balloon-pos^=down]:after{top:100%;transform:translateY(calc(var(--balloon-move) * -1))}[aria-label][data-balloon-pos][data-balloon-pos^=down]:after{margin-top:10px}[aria-label][data-balloon-pos][data-balloon-pos^=down]:before{width:0;height:0;border:5px solid transparent;border-bottom-color:var(--balloon-color)}[aria-label][data-balloon-pos][data-balloon-pos=down]:after,[aria-label][data-balloon-pos][data-balloon-pos=down]:before{left:50%;transform:translate(-50%,calc(var(--balloon-move) * -1))}[aria-label][data-balloon-pos][data-balloon-pos=left]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos=left][data-balloon-visible]:after,[aria-label][data-balloon-pos][data-balloon-pos=right]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos=right][data-balloon-visible]:after{transform:translateY(-50%)}[aria-label][data-balloon-pos][data-balloon-pos=left]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos=left][data-balloon-visible]:before,[aria-label][data-balloon-pos][data-balloon-pos=right]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos=right][data-balloon-visible]:before{transform:translateY(-50%)}[aria-label][data-balloon-pos][data-balloon-pos=left]:after,[aria-label][data-balloon-pos][data-balloon-pos=left]:before{right:100%;top:50%;transform:translate(var(--balloon-move),-50%)}[aria-label][data-balloon-pos][data-balloon-pos=left]:after{margin-right:10px}[aria-label][data-balloon-pos][data-balloon-pos=left]:before{width:0;height:0;border:5px solid transparent;border-left-color:var(--balloon-color)}[aria-label][data-balloon-pos][data-balloon-pos=right]:after,[aria-label][data-balloon-pos][data-balloon-pos=right]:before{left:100%;top:50%;transform:translate(calc(var(--balloon-move) * -1),-50%)}[aria-label][data-balloon-pos][data-balloon-pos=right]:after{margin-left:10px}[aria-label][data-balloon-pos][data-balloon-pos=right]:before{width:0;height:0;border:5px solid transparent;border-right-color:var(--balloon-color)}[aria-label][data-balloon-pos][data-balloon-length]:after{white-space:normal}[aria-label][data-balloon-pos][data-balloon-length=small]:after{width:80px}[aria-label][data-balloon-pos][data-balloon-length=medium]:after{width:150px}[aria-label][data-balloon-pos][data-balloon-length=large]:after{width:260px}[aria-label][data-balloon-pos][data-balloon-length=xlarge]:after{width:380px}@media screen and (max-width: 768px){[aria-label][data-balloon-pos][data-balloon-length=xlarge]:after{width:90vw}}[aria-label][data-balloon-pos][data-balloon-length=fit]:after{width:100%}:root{--navbar-bg-color: var(--bg-color-float-blur);--sidebar-bg-color: var(--bg-color-blur)}html[data-theme=dark]{--navbar-bg-color: var(--bg-color-blur);--sidebar-bg-color: var(--bg-color-blur)}#app{--code-hl-bg-color: var(--code-highlight-line-color);--code-ln-color: var(--code-line-color);--code-ln-wrapper-width: var(--line-numbers-width);--code-tabs-nav-text-color: var(--code-color);--code-tabs-nav-bg-color: var(--code-border-color);--code-tabs-nav-hover-color: var(--code-highlight-line-color);--sidebar-space: var(--sidebar-width)}@media (max-width: 959px){#app{--navbar-height: var(--navbar-mobile-height);--navbar-vertical-padding: var(--navbar-mobile-vertical-padding);--navbar-horizontal-padding: var(--navbar-mobile-horizontal-padding);--sidebar-width: var(--sidebar-mobile-width)}}@media (min-width: 1440px){#app{--sidebar-space: clamp( var(--sidebar-width), max(0px, calc((100vw - var(--content-width)) / 2 - 2rem)) , 100vw )}}.vp-copy-code-button{--copy-code-color: var(--code-ln-color);--copy-code-hover: var(--code-hl-bg-color)}.DocSearch-Button,.DocSearch{--docsearch-primary-color: var(--vp-tc);--docsearch-text-color: var(--vp-c);--docsearch-highlight-color: var(--vp-tc);--docsearch-muted-color: var(--light-grey);--docsearch-container-background: rgb(9 10 17 / 80%);--docsearch-modal-background: var(--bg-color-float);--docsearch-searchbox-background: var(--bg-color-secondary);--docsearch-searchbox-focus-background: var(--vp-bg);--docsearch-searchbox-shadow: inset 0 0 0 2px var(--vp-tc);--docsearch-hit-color: var(--vp-cl);--docsearch-hit-active-color: var(--vp-bg);--docsearch-hit-background: var(--vp-bg);--docsearch-hit-shadow: 0 1px 3px 0 var(--border-color);--docsearch-footer-background: var(--vp-bg)}html[data-theme=dark] .DocSearch-Button,html[data-theme=dark] .DocSearch{--docsearch-logo-color: var(--vp-c);--docsearch-modal-shadow: inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;--docsearch-key-shadow: inset 0 -2px 0 0 #282d55, inset 0 0 1px 1px #51577d, 0 2px 2px 0 rgb(3 4 9 / 30%);--docsearch-key-gradient: linear-gradient(-225deg, #444950, #1c1e21);--docsearch-footer-shadow: inset 0 1px 0 0 rgb(73 76 106 / 50%), 0 -4px 8px 0 rgb(0 0 0 / 20%)}.vp-back-to-top-button{--back-to-top-color: var(--vp-tc);--back-to-top-color-hover: var(--vp-tcl);--back-to-top-bg-color: var(--vp-bg)}.vp-catalog-wrapper{--catalog-bg-color: var(--vp-bg);--catalog-bg-secondary-color: var(--vp-bgl);--catalog-border-color: var(--vp-brc);--catalog-active-color: var(--vp-tc);--catalog-hover-color: var(--vp-tcl)}.external-link-icon{--external-link-icon-color: var(--light-grey)}#nprogress{--nprogress-color: var(--vp-tc)}body{--photo-swipe-bullet: var(--white);--photo-swipe-bullet-active: var(--vp-tc);--pwa-text-color: var(--vp-c);--pwa-bg-color: var(--vp-bg);--pwa-border-color: var(--vp-brc);--pwa-btn-text-color: var(--vp-bg);--pwa-btn-bg-color: var(--vp-tc);--pwa-btn-hover-bg-color: var(--vp-tcl);--pwa-shadow-color: var(--card-shadow);--pwa-content-color: var(--grey3);--pwa-content-light-color: var(--dark-grey)}.language-modal-mask{--redirect-bg-color: var(--vp-bg);--redirect-bg-color-light: var(--vp-bgl);--redirect-bg-color-lighter: var(--vp-bglt);--redirect-text-color: var(--vp-c);--redirect-primary-color: var(--vp-tc);--redirect-primary-hover-color: var(--vp-tcl);--redirect-primary-text-color: var(--white)}.search-box{--search-bg-color: var(--vp-bg);--search-accent-color: var(--vp-tc);--search-text-color: var(--vp-c);--search-border-color: var(--border-color);--search-item-text-color: var(--vp-clt);--search-item-focus-bg-color: var(--bg-color-secondary)}html,body{margin:0;padding:0;background:#fff}html{font-size:16px;font-display:optional;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:transparent}@media print{html{font-size:12pt}}body{min-height:100vh;color:#2c3e50}a{color:#3eaf7c;font-weight:500;text-decoration:none;overflow-wrap:break-word}kbd{display:inline-block;min-width:1em;margin-inline:.125rem;padding:.25em;border:1px solid #eee;border-radius:.25em;box-shadow:1px 1px 4px #00000026;line-height:1;letter-spacing:-.1em;text-align:center}code{margin:0;padding:.2rem .4rem;border-radius:5px;background:#7f7f7f1f;font-size:.85em;overflow-wrap:break-word}table code{padding:.1rem .4rem}p a code{color:#3eaf7c;font-weight:400}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:500;line-height:1.25;overflow-wrap:break-word}h1:focus-visible,h2:focus-visible,h3:focus-visible,h4:focus-visible,h5:focus-visible,h6:focus-visible{outline:none}h1{font-size:2rem}h2{padding-bottom:.3rem;border-bottom:1px solid #eaecef;font-size:1.65rem}h3{font-size:1.35rem}h4{font-size:1.15rem}h5{font-size:1.05rem}h6{font-size:1rem}a.header-anchor{position:relative;color:inherit}a.header-anchor:hover:before{content:"¶";position:absolute;bottom:0;left:-.75em;color:var(--c-brand);font-size:.75em}a.header-anchor:focus-visible{outline:none}a.header-anchor:focus-visible:before{content:"¶";position:absolute;left:-.75em;color:var(--c-brand);outline:auto}p,ul,ol{line-height:1.6;overflow-wrap:break-word}@media print{p,ul,ol{line-height:1.5}}ul,ol{padding-inline-start:1.2em}blockquote{margin:1rem 0;padding:.25rem 0 .25rem 1rem;border-inline-start:.2rem solid #ddd;color:#666;font-size:1rem;overflow-wrap:break-word}blockquote>p{margin:0}hr{border:0;border-top:1px solid #eaecef}table{display:block;overflow-x:auto;margin:1rem 0;border-collapse:collapse}tr:nth-child(odd){background:#f6f8fa}th,td{padding:.6em 1em;border:1px solid #dfe2e5}pre{direction:ltr}@page{margin:2cm;font-size:12pt;size:a4}@media print{*,:after,:before{box-shadow:none!important;text-shadow:none!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}a{color:inherit;font-weight:inherit!important;font-size:inherit!important;text-decoration:underline}a[href^="http://"]:after,a[href^="https://"]:after{content:" (" attr(href) ") "}abbr[title]:after{content:" (" attr(title) ")"}pre{border:1px solid #eee;white-space:pre-wrap!important}pre>code{white-space:pre-wrap!important}blockquote{border-inline-start:.2rem solid #ddd;color:inherit}blockquote,pre{orphans:5;widows:5}img,tr,canvas{page-break-inside:avoid}}@font-face{font-weight:400;font-style:normal;font-family:Crimson;src:url(data:font/truetype;charset=utf-8;base64,AAEAAAANAIAAAwBQRkZUTYr5mwEAAAyMAAAAHEdERUYAKQATAAAMbAAAAB5PUy8yVsJ0MgAAAVgAAABgY21hcBiKDzgAAAHcAAABWGdhc3D//wADAAAMZAAAAAhnbHlmr+DBdQAAA1AAAAdsaGVhZBZwt+8AAADcAAAANmhoZWEFawEuAAABFAAAACRobXR4BksA9gAAAbgAAAAibG9jYQlsC24AAAM0AAAAHG1heHAAEQBZAAABOAAAACBuYW1lLaFDVAAACrwAAAFrcG9zdAC1AHoAAAwoAAAAPAABAAAAAQAAqBd2H18PPPUACwQAAAAAANqqufwAAAAA2qq5/AAb/9wB4QMeAAAACAACAAAAAAAAAAEAAAMs/ywAXAH9AAAAAAHhAAEAAAAAAAAAAAAAAAAAAAAEAAEAAAANAFkAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAH1AZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAIABgMAAAAAAAAAAAABEAAAAAAAAAAAAAAAUGZFZADAADAAOQMs/ywAXAMsANQAAAABAAAAAAMYAAAAAAAgAAEBpwAfAAAAAAFVAAAB/QAfAH0ALQA+ABsAPgAyACgAPgAxAAAAAAADAAAAAwAAABwAAQAAAAAAUgADAAEAAAAcAAQANgAAAAQABAABAAAAOf//AAAAL///AAAAAQAEAAAAAAADAAQABQAGAAcACAAJAAoACwAMAAABBgAAAQAAAAAAAAABAgAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAwQFBgcICQoLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAJgAmAGIAwAEeAZIBzgJAApYC2gNiA7YAAQAf/9wBhwMeABIAAAEGBwYHATAXFjM2NzY3ASYnJjcBgxwLCgH+zgMECxIKCgIBLgEDAwMDHhQFBgP85wMEAQgJBgMOAwMDEwAAAAIAH//9Ad0CkAAQACEAABMWFxYXNjc2NzQnJicGBwYHNyY3NjcWFxYXFAcGByYnJjcfATo6amo7OQE5OmxrOjkBXQIlJEE5IyIBIyJEOSQjAgFOkV5eBAReXoqJXl4EBF5eggJ0UlEDA09Qe3xVVgMDU1OEAAAAAAEAff/9AYACkQA+AAA3FAcGBwYHBiMGFQYXNjc2MzIXFhc2JzQnIicmJyY1JjURNjc2MSYnJicjBgcGBwYVFBUUFxYXNjc2NzIXFhXkAQEEBRgYDAMBBB4ZGhweGxofBAEDDBgZBQQBAQMEAQIDBAIFNTZCAgMDBA0XFw0LBQV3GBMVDAgEBAUKCgUCAQICAQIFCgoFBAQIDBUTGAGnLxkbBAYFAQIZGh4BAgECBQUEAwUHBwEICRYAAAAAAQAtAAAB0QKRADoAADcGFxYXITY3NjcmJyYjIgcGBwYHBisBNjc2NzY3NjUmJyYnBgcGBxQXFhc2NzY3FhcWFxYHBgcGBwYHLgEEAwMBYwURERADBwYFBAMDAg8VEx/LJkBAOhsQDwIxMkxSMjIHCAYGCSYmPTIfHwEBCgoeLkJBQg8EBQQCETAwKQICAgEBBCgUEylJSUYhJicsRDIzAgY1NRoEBQYBEyEhAwEjIjYlJCQtQlBQSAAAAAABAD7/+wG+ApEASgAANwYXFhcWFxYzNjc2NyYnJic2NzY3JicmIwYHBgcUFxYXNjc2NxYXFhcGBwYHBgcUFRQXNjc2NxYXFhcGBwYnIicmJyYnJiciBwYXPwEIBwUaHB0VZU5NBAMvLi8eIB4DAywsKzwrKxgEAwUIHR4wLRscAQMvLz8BAQYKEhEQNSYmAgImJSsWExQPCw0NFREMDQE7DgsLBQwFBgE8PWpMKSoGECQkMkAiIQIdHyUHBwcBCRscAwEbGSpCIyUOAgMCAwwIAwUEAQEoKD9XJSQBBQYODg8PAQ0NFQAAAgAb//oB4QKTACIAJQAANxQXFhchFRQXFjMyNzYjNTM2NzY1NCcmJyMRNCcmIwYHBgcBExEbAgMFASEJCRIdCAkBRgIBAQUEBTwFAwgHCQkG/vjmxgUGBgOwBQIBAwKzAgQDCBAMDQEBlAYGBgEICQf+cwEs/tQAAQA+//sBvgKTAEoAADcGFxYXFhcWMzY3NjcmJyYnIgcGBzY3NjczMjc2NzY3NjU0JyYnBgcGByMGBwYHFBcWMzY3NjMWFxYHBgcGJyInJicmJyYnIgcGFz8BCAcFGhwdFWVOTQQBMjJbFx8gFwoJCQlWKB0dFQ4JCAQDBQMdHSKXCREQEgMCBA4bGhNYJyUBAiYlKxYTFA8LDQ0VEQwNATsOCwsFDAUGATw9akU2NwMFBggrMC8uAgICExcZBgQCAgMBAwQBMVNUWAUFBAYFBAMxMTNZIyQBBQYODg8PAQ0NFQAAAgAy//oBzQKXACAAMwAANxQXFhc2NzY3NicmJyIHBgc2NzY3NCcmJwYHBgcGBwYXNyY3Njc2FxYXFgcGBwYHJicmNzM1NV5aOTsCAioqahoiIRsnWFhFAwIHQ0tMOTAZGQFbBAQaGxkXRB8fAQEfIDE9Hh4E511FRwQDPT1ZPEJBBQwLF4Y9PRMGCwwBEiwsPDZFRkkTHyAbCAcBAjAwREYsLQEFREVQAAAAAAEAKP/7AdUCiwApAAATFhcWMzI3Njc2NzYzIQYHBgcWFxYzMjcBNjc2NzQnJiMiBwYjIQYHBgcoAwYHAwYDAwELEBEdAQUJYWJXAQ8PDgcDAQ4LCQgBAQEEBhUVFv7JBgsNDAH6DQMCAQEFKRITFMjHjQcFBgMCPxYSEwoEAgMBAhkrKiAAAAADAD7/9wG/ApIAKABBAFgAADcGFxYXNjc2NyYnJicmJzQ3Njc2NyYnJiMGBwYHFhcWFxYVFAcGBwYHNyY3Njc2MzIzMhcyFxYXFhcGBwYHIicmNxMmNzY3FhcWFRQHBgcGByIjIicmJyY3PwE1M1ZQODgDAykpMQIBAyYlJQMCMC9HRjExAgIiIiMCAiMvLwNTBBQTKgEBAQECAQIBEjU1CAEdHjMrISICGAMYGSYvGxoTEx8CAQIBBAMfJCQBoU8tLQECMjFPOC4uGwIBAgEWJiU7SCYoAjEwQzopKhMBAgECEykpQAQsIiEbAQEBBywsQjUeHQEiI0QBZSMhIAECJiYvKh8gFAEBAhAfIEYAAAIAMf/6AcsClwAgADMAABMGFxYXMjc2NwYHBgcUFxYXNjc2NzY3NjUmJyYnBgcGBzcmNzY3FhcWFRQHBgcGJyYnJjc0AyopahoiIRsoV1hFAwIHQ0tMODEZGQE2NF5ZOjoBWgMfHzE9Hh4EGhoaF0QeHwUBy0dBQgUMCxeFPj0SBwsLAREsLD01RkVPV0dFBQQ8PU8UPCwtAQVFRUklIRsHCAECMDBPAAAADACWAAEAAAAAAAEABwAQAAEAAAAAAAIABwAoAAEAAAAAAAMABwBAAAEAAAAAAAQABwBYAAEAAAAAAAUAHgCeAAEAAAAAAAYABwDNAAMAAQQJAAEADgAAAAMAAQQJAAIADgAYAAMAAQQJAAMADgAwAAMAAQQJAAQADgBIAAMAAQQJAAUAPABgAAMAAQQJAAYADgC9AEMAcgBpAG0AcwBvAG4AAENyaW1zb24AAEMAcgBpAG0AcwBvAG4AAENyaW1zb24AAEMAcgBpAG0AcwBvAG4AAENyaW1zb24AAEMAcgBpAG0AcwBvAG4AAENyaW1zb24AAFYAZQByAHMAaQBvAG4AIAAxAC4AMAA7ACAARgBvAG4AdABFAGQAaQB0AG8AcgAgACgAdgAxAC4AMAApAABWZXJzaW9uIDEuMDsgRm9udEVkaXRvciAodjEuMCkAAEMAcgBpAG0AcwBvAG4AAENyaW1zb24AAAACAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAABAAIAEwAUABUAFgAXABgAGQAaABsAHAAAAAH//wACAAEAAAAMAAAAFgAAAAIAAQADAAwAAQAEAAAAAgAAAAAAAAABAAAAANWkJwgAAAAA2qq5/AAAAADaqrn8) format("truetype")}html,body{background:var(--bg-color);transition:background var(--color-transition)}:root{color-scheme:light}html[data-theme=dark]{color-scheme:dark}body{color:var(--text-color);font-family:var(--font-family)}@media (min-width: 1440px){body{font-size:17px}}a{color:var(--theme-color)}kbd{border-color:var(--border-color-dark);background:var(--bg-color-secondary);font-family:var(--font-family-mono)}code{font-family:var(--font-family-mono);transition:background var(--color-transition),color var(--color-transition)}html[data-theme=dark] code{background:#333}p a code{color:var(--theme-color)}blockquote{border-color:#eee;color:#666;transition:border-color var(--color-transition),color var(--color-transition)}html[data-theme=dark] blockquote{border-color:#333}h1,h2,h3,h4,h5,h6{font-family:var(--font-family-heading)}@media (max-width: 419px){h1{font-size:1.9rem}}h2{border-color:var(--border-color);transition:border-bottom-color var(--color-transition)}hr{border-color:var(--border-color);transition:border-top-color var(--color-transition)}tr:nth-child(odd){background:var(--bg-color-secondary)}th,td{border-color:var(--border-color-dark)}@media print{@page{--text-color: #000 !important;--bg-color: #fff !important}div[class*=language-]{position:relative!important}}.theme-hope-content:not(.custom)>*:first-child{margin-top:0}.vp-breadcrumb{max-width:var(--content-width, 740px);margin-inline:auto;padding-inline:2.5rem;position:relative;z-index:2;padding-top:1rem;font-size:15px}@media (max-width: 959px){.vp-breadcrumb{padding-inline:1.5rem}}@media print{.vp-breadcrumb{max-width:unset}}@media (max-width: 959px){.vp-breadcrumb{font-size:14px}}@media (max-width: 419px){.vp-breadcrumb{padding-top:.5rem;font-size:12.8px}}@media print{.vp-breadcrumb{display:none}}.vp-breadcrumb .icon{margin-inline-end:.25em;font-size:1em}.vp-breadcrumb img.icon{vertical-align:-.125em;height:1em}.vp-breadcrumb a{display:inline-block;padding:0 .5em}.vp-breadcrumb a:before{position:relative;bottom:.125rem;margin-inline-end:.25em}.vp-breadcrumb a:hover{color:var(--theme-color)}.vp-breadcrumb ol{margin:0;padding-inline-start:0;list-style:none}.vp-breadcrumb li{display:inline-block;line-height:1.5}.vp-breadcrumb li:first-child a{padding-inline-start:0}.vp-breadcrumb li:last-child a{padding-inline-end:0}.vp-breadcrumb li.is-active a{color:var(--light-grey);cursor:default;pointer-events:none}.vp-breadcrumb li+li:before{content:"/";color:var(--light-grey)}.toggle-sidebar-wrapper{position:fixed;top:var(--navbar-height);bottom:0;inset-inline-start:var(--sidebar-space);z-index:100;display:flex;align-items:center;justify-content:center;font-size:2rem;transition:inset-inline-start var(--transform-transition)}@media (max-width: 719px){.toggle-sidebar-wrapper{display:none}}@media (min-width: 1440px){.toggle-sidebar-wrapper{display:none}}.toggle-sidebar-wrapper:hover{background:#7f7f7f0d;cursor:pointer}.toggle-sidebar-wrapper .arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s}html[data-theme=dark] .toggle-sidebar-wrapper .arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.toggle-sidebar-wrapper .arrow.down{transform:rotate(180deg)}html[dir=rtl] .toggle-sidebar-wrapper .arrow.down{transform:rotate(-180deg)}.toggle-sidebar-wrapper .arrow.end{transform:rotate(90deg)}html[dir=rtl] .toggle-sidebar-wrapper .arrow.end,.toggle-sidebar-wrapper .arrow.start{transform:rotate(-90deg)}html[dir=rtl] .toggle-sidebar-wrapper .arrow.start{transform:rotate(90deg)}.theme-container{display:flex;flex-direction:column;justify-content:space-between;min-height:100vh}.theme-container .vp-page{padding-top:var(--navbar-height);padding-inline-start:calc(var(--sidebar-space) + 2rem)}@media (max-width: 719px){.theme-container .vp-page{padding-inline:0}}@media (min-width: 1440px){.theme-container .vp-page{padding-inline-end:calc(100vw - var(--content-width) - var(--sidebar-space) - 6rem)}}.theme-container .vp-sidebar{top:var(--navbar-height)}.theme-container.no-navbar .vp-page{padding-top:0}.theme-container.no-navbar .vp-sidebar{top:0}@media (max-width: 719px){.theme-container.no-navbar .vp-sidebar{top:0}}@media (max-width: 719px){.theme-container.hide-navbar .vp-sidebar{top:0}}.theme-container.sidebar-collapsed .vp-page{padding-inline-start:0}.theme-container.sidebar-collapsed .vp-sidebar{box-shadow:none;transform:translate(-100%)}html[dir=rtl] .theme-container.sidebar-collapsed .vp-sidebar{transform:translate(100%)}.theme-container.sidebar-collapsed .toggle-sidebar-wrapper{inset-inline-start:0}.theme-container.no-sidebar .vp-page{padding-inline:0}@media (min-width: 1440px){.theme-container.no-sidebar.has-toc .vp-page{padding-inline-end:16rem}}.theme-container.no-sidebar .vp-toggle-sidebar-button,.theme-container.no-sidebar .toggle-sidebar-wrapper,.theme-container.no-sidebar .vp-sidebar{display:none}.theme-container.sidebar-open .vp-sidebar{box-shadow:2px 0 8px var(--card-shadow);transform:translate(0)}.fade-slide-y-enter-active{transition:all .3s ease!important}.fade-slide-y-leave-active{transition:all .3s cubic-bezier(1,.5,.8,1)!important}.fade-slide-y-enter-from,.fade-slide-y-leave-to{opacity:0;transform:translateY(10px)}.vp-feature-wrapper{position:relative}.vp-feature-bg{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;background-attachment:fixed;background-position:50%;background-size:cover}.vp-feature-bg.light{display:inline-block}.vp-feature-bg.dark,html[data-theme=dark] .vp-feature-bg.light{display:none}html[data-theme=dark] .vp-feature-bg.dark{display:inline-block}.vp-feature{position:relative;z-index:1;margin:0 auto;padding:1.5rem 1rem;color:var(--text-color-lighter);text-align:center}.vp-feature-bg+.vp-feature{color:#222}html[data-theme=dark] .vp-feature-bg+.vp-feature{color:#eee}.vp-feature-bg+.vp-feature .icon{color:inherit}.vp-feature-image{height:10rem;margin:0 auto}@media (max-width: 959px){.vp-feature-image{height:8rem}}.vp-feature-image.light{display:inline-block}.vp-feature-image.dark,html[data-theme=dark] .vp-feature-image.light{display:none}html[data-theme=dark] .vp-feature-image.dark{display:inline-block}.vp-feature-header{margin-bottom:1.5rem;border-bottom:none;font-size:3rem;font-family:var(--font-family);text-align:center}@media (max-width: 959px){.vp-feature-header{font-size:2.5rem}}@media (max-width: 719px){.vp-feature-header{font-size:2.25rem}}@media (max-width: 419px){.vp-feature-header{font-size:2rem}}.vp-feature-description{font-size:1.125rem}.vp-features{z-index:1;display:flex;flex-wrap:wrap;align-items:stretch;place-content:stretch center;margin:1rem 0;text-align:start}@media print{.vp-features{display:block}}.vp-features:first-child{border-top:1px solid var(--border-color);transition:border-color var(--color-transition)}.vp-feature-item{position:relative;display:block;flex-basis:calc(33% - 3rem);margin:.5rem;padding:1rem;border-radius:.5rem;color:inherit;transition:background var(--color-transition),box-shadow var(--color-transition),transform var(--transform-transition)}@media (min-width: 1440px){.vp-feature-item{flex-basis:calc(25% - 3rem)}}@media (max-width: 959px){.vp-feature-item{flex-basis:calc(50% - 3rem)}}@media (max-width: 719px){.vp-feature-item{flex-basis:100%;font-size:.95rem}}@media (max-width: 419px){.vp-feature-item{margin:.5rem 0;font-size:.9rem}}.vp-feature-item.link{cursor:pointer}@media print{.vp-feature-item.link{text-decoration:none}}.vp-feature-item .icon{display:inline-block;height:1.1em;margin-inline-end:.5rem;color:var(--theme-color);font-weight:400;font-size:1.1em}.vp-feature-item:hover{background-color:var(--bg-color-secondary);box-shadow:0 2px 12px 0 var(--card-shadow);transform:translate(-2px,-2px);transform:scale(1.05)}.vp-feature-bg+.vp-feature .vp-feature-item:hover{background-color:transparent}.vp-feature-item:only-child{flex-basis:100%}.vp-feature-item:first-child:nth-last-child(2),.vp-feature-item:nth-child(2):last-child{flex-basis:calc(50% - 3rem)}@media (max-width: 719px){.vp-feature-item:first-child:nth-last-child(2),.vp-feature-item:nth-child(2):last-child{flex-basis:100%}}.vp-feature-title{margin:.25rem 0 .5rem;font-weight:700;font-size:1.3rem;font-family:var(--font-family)}@media (max-width: 419px){.vp-feature-title{font-size:1.2rem}}.vp-feature-details{margin:0;line-height:1.4}.vp-footer-wrapper{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-evenly;padding-block:.75rem;padding-inline:calc(var(--sidebar-space) + 2rem) 2rem;border-top:1px solid var(--border-color);background:var(--bg-color);color:var(--dark-grey);text-align:center;transition:border-top-color var(--color-transition),background var(--color-transition),padding var(--transform-transition)}@media (max-width: 719px){.vp-footer-wrapper{padding-inline-start:2rem}}@media (min-width: 1440px){.vp-footer-wrapper{z-index:50;padding-inline-start:2rem}}@media print{.vp-footer-wrapper{margin:0!important;padding:0!important}}@media (max-width: 419px){.vp-footer-wrapper{display:block}}.no-sidebar .vp-footer-wrapper,.sidebar-collapsed .vp-footer-wrapper{padding-inline-start:2rem}.vp-footer{margin:.5rem 1rem;font-size:14px}@media print{.vp-footer{display:none}}.vp-copyright{margin:6px 0;font-size:13px}.vp-page:not(.not-found)+.vp-footer-wrapper{margin-top:-2rem}.vp-hero-info-wrapper{position:relative;display:flex;align-items:center;justify-content:center;margin-inline:auto}.vp-hero-info-wrapper.fullscreen{height:calc(100vh - var(--navbar-height))!important}.vp-hero-info{z-index:1;width:100%;padding-inline:2.5rem}@media (max-width: 959px){.vp-hero-info{padding-inline:1.5rem}}@media (min-width: 959px){.vp-hero-info{display:flex;align-items:center;justify-content:space-evenly}}.vp-hero-mask{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;background-position:50%;background-size:cover}.vp-hero-mask:after{content:" ";position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:block}.vp-hero-mask.light{display:block}html[data-theme=dark] .vp-hero-mask.light,.vp-hero-mask.dark{display:none}html[data-theme=dark] .vp-hero-mask.dark{display:block}.vp-hero-infos{z-index:1;margin:0 .5rem}.vp-hero-image{display:block;max-width:100%;max-height:18rem;margin:1rem}@media (max-width: 959px){.vp-hero-image{margin:2rem auto}}@media (max-width: 719px){.vp-hero-image{max-height:16rem;margin:1.5rem auto}}@media (max-width: 419px){.vp-hero-image{max-height:14rem}}.vp-hero-image.light{display:block}html[data-theme=dark] .vp-hero-image.light,.vp-hero-image.dark{display:none}html[data-theme=dark] .vp-hero-image.dark{display:block}#main-title{margin:.5rem 0;background:linear-gradient(120deg,var(--theme-color-light),var(--theme-color) 30%,#583295 100%);-webkit-background-clip:text;background-clip:text;font-weight:700;font-size:3.6rem;font-family:var(--font-family);line-height:1.5;-webkit-text-fill-color:transparent}@media (max-width: 719px){#main-title{margin:0}}@media (max-width: 959px){#main-title{font-size:2.5rem;text-align:center}}@media (max-width: 719px){#main-title{font-size:2.25rem;text-align:center}}@media (max-width: 419px){#main-title{margin:0 auto;font-size:2rem}}#main-description,.vp-hero-actions{margin:1.8rem 0}@media (max-width: 719px){#main-description,.vp-hero-actions{margin:1.5rem 0}}@media (max-width: 959px){#main-description,.vp-hero-actions{margin:1.5rem auto;text-align:center}}@media (max-width: 419px){#main-description,.vp-hero-actions{margin:1.2rem 0}}#main-description{max-width:35rem;color:var(--text-color-light);font-weight:500;font-size:1.6rem;line-height:1.3}@media (max-width: 719px){#main-description{font-size:1.4rem}}@media (max-width: 419px){#main-description{font-size:1.2rem}}.vp-hero-action{display:inline-block;overflow:hidden;min-width:4rem;margin:.5rem;padding:.5em 1.5rem;border-radius:2rem;background:var(--bg-color-secondary);color:var(--text-color);font-size:1.2rem;text-align:center;transition:color var(--color-transition),color var(--color-transition),transform var(--transform-transition)}@media (max-width: 719px){.vp-hero-action{padding:.5rem 1rem;font-size:1.1rem}}@media (max-width: 419px){.vp-hero-action{font-size:1rem}}@media print{.vp-hero-action{text-decoration:none}}.vp-hero-action:hover{background:var(--bg-color-tertiary)}.vp-hero-action.primary{border-color:var(--theme-color);background:var(--theme-color);color:var(--white)}.vp-hero-action.primary:hover{border-color:var(--theme-color-light);background:var(--theme-color-light)}.vp-project-home:not(.pure) .vp-hero-action:active{transform:scale(.96)}.vp-hero-action .icon{margin-inline-end:.25em}.vp-highlight-wrapper{position:relative;display:flex;align-items:center;justify-content:center}.vp-highlight-wrapper:nth-child(odd) .vp-highlight{flex-direction:row-reverse}.vp-highlight{z-index:1;display:flex;flex:1;align-items:center;justify-content:flex-end;max-width:var(--home-page-width);margin:0 auto;padding:1.5rem 2.5rem;color:#222}@media (max-width: 719px){.vp-highlight{display:block;padding-inline:1.5rem;text-align:center}}html[data-theme=dark] .vp-highlight{color:#eee}.vp-highlight-bg{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;background-attachment:fixed;background-position:50%;background-size:cover}.vp-highlight-bg.light{display:inline-block}.vp-highlight-bg.dark,html[data-theme=dark] .vp-highlight-bg.light{display:none}html[data-theme=dark] .vp-highlight-bg.dark{display:inline-block}.vp-highlight-image{width:12rem;margin:2rem 4rem}@media (max-width: 959px){.vp-highlight-image{width:10rem}}@media (max-width: 719px){.vp-highlight-image{width:8rem;margin:0 auto}}.vp-highlight-image.light{display:inline-block}.vp-highlight-image.dark,html[data-theme=dark] .vp-highlight-image.light{display:none}html[data-theme=dark] .vp-highlight-image.dark{display:inline-block}.vp-highlight-info-wrapper{display:flex;flex:1;justify-content:center;padding:2rem}@media (max-width: 719px){.vp-highlight-info-wrapper{padding:1rem 0}}.vp-highlight-info-wrapper:only-child{flex:1 0 100%}.vp-highlight-info{text-align:start}.vp-highlight-header{margin-bottom:1.5rem;border-bottom:none;font-size:3rem;font-family:var(--font-family)}@media (max-width: 959px){.vp-highlight-header{font-size:2.5rem}}@media (max-width: 719px){.vp-highlight-header{font-size:2.25rem;text-align:center}}@media (max-width: 419px){.vp-highlight-header{font-size:2rem}}.vp-highlight-description{font-size:1.125rem}.vp-highlights{margin-inline-start:-1.25em;padding-inline-start:0}.vp-highlight-item-wrapper{padding:.5em .5em .5em 1.75em;border-radius:.5rem;list-style:none}.vp-highlight-item-wrapper.link{cursor:pointer}.vp-highlight-item-wrapper:hover{background-color:var(--bg-color-secondary);box-shadow:0 2px 12px 0 var(--card-shadow);transition:transform var(--transform-transition);transform:translate(-2px,-2px)}.vp-highlight-bg+.vp-highlight .vp-highlight-item-wrapper:hover{background-color:transparent}.vp-highlight-item-wrapper::marker{font-weight:700}.vp-highlight-item{display:list-item;color:inherit;list-style:initial}@media print{.vp-highlight-item{text-decoration:none}}.vp-highlight-title{margin:0;font-weight:600;font-size:1.125rem;font-family:var(--font-family)}.vp-highlight-title .icon{margin-inline-end:.25em;font-size:1em}.vp-highlight-title img.icon{vertical-align:-.125em;height:1em}.vp-highlight-details{margin:.5rem 0 0}.vp-project-home{--content-width: var(--home-page-width);display:block;flex:1;padding-top:var(--navbar-height)}@media screen{.vp-project-home .vp-hero-info-wrapper:not(.fullscreen) .vp-hero-info{max-width:var(--home-page-width)}}@media screen{.vp-project-home .vp-feature{max-width:var(--home-page-width)}}.vp-project-home .theme-hope-content{padding-bottom:1.5rem!important}.vp-project-home .theme-hope-content:empty{padding:0!important}.not-found-hint{padding:2rem}.not-found-hint .error-code{margin:0;font-weight:700;font-size:4rem;line-height:4rem}.not-found-hint .error-title{font-weight:700}.not-found-hint .error-hint{margin:0;padding:12px 0;font-weight:600;font-size:20px;line-height:20px;letter-spacing:2px}.vp-page.not-found{display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;width:100vw;max-width:var(--home-page-width);margin:0 auto;padding:calc(var(--navbar-height) + 1rem) 1rem 1rem!important;text-align:center}.vp-page.not-found .action-button{display:inline-block;box-sizing:border-box;margin:.25rem;padding:.75rem 1rem;border-width:0;border-bottom:1px solid var(--theme-color-dark);border-radius:3rem;background:var(--theme-color);color:var(--white);outline:none;font-size:1rem;transition:background .1s ease}.vp-page.not-found .action-button:hover{background:var(--theme-color-light);cursor:pointer}.vp-page-nav{display:flex;flex-wrap:wrap;max-width:var(--content-width, 740px);min-height:2rem;margin-inline:auto;margin-top:0;padding-block:.5rem;padding-inline:2rem;border-top:1px solid var(--border-color);transition:border-top var(--color-transition)}@media (max-width: 959px){.vp-page-nav{padding-inline:1rem}}@media print{.vp-page-nav{display:none}}.vp-page-nav .nav-link{display:inline-block;flex-grow:1;margin:.25rem;padding:.25rem .5rem;border:1px solid var(--border-color);border-radius:.25rem}.vp-page-nav .nav-link:hover{background:var(--bg-color-secondary)}.vp-page-nav .nav-link .hint{color:var(--light-grey);font-size:.875rem;line-height:2}.vp-page-nav .nav-link .arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s;font-size:.75rem}html[data-theme=dark] .vp-page-nav .nav-link .arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.vp-page-nav .nav-link .arrow.down{transform:rotate(180deg)}html[dir=rtl] .vp-page-nav .nav-link .arrow.down{transform:rotate(-180deg)}.vp-page-nav .nav-link .arrow.end{transform:rotate(90deg)}html[dir=rtl] .vp-page-nav .nav-link .arrow.end,.vp-page-nav .nav-link .arrow.start{transform:rotate(-90deg)}html[dir=rtl] .vp-page-nav .nav-link .arrow.start{transform:rotate(90deg)}.vp-page-nav .prev{text-align:start}.vp-page-nav .prev .icon{margin-inline-end:.25em;font-size:1em}.vp-page-nav .prev img.icon{vertical-align:-.125em;height:1em}.vp-page-nav .next{text-align:end}.vp-page-nav .next .icon{margin-inline-start:.25em;font-size:1em}.vp-page-nav .next img.icon{vertical-align:-.125em;height:1em}.vp-page-title{max-width:var(--content-width, 740px);margin-inline:auto;padding-inline:2.5rem;position:relative;z-index:1;padding-top:1rem;padding-bottom:0}@media (max-width: 959px){.vp-page-title{padding-inline:1.5rem}}@media print{.vp-page-title{max-width:unset}}@media print{.vp-page-title{padding-inline:0!important}}@media (max-width: 959px){.vp-page-title{padding-top:.5rem}}.vp-page-title h1{margin-top:calc(0px - var(--navbar-height))!important;margin-bottom:1rem;padding-top:var(--navbar-height)!important;font-size:2.2rem}@media (max-width: 959px){.vp-page-title h1{margin-bottom:.5rem}}.vp-page-title h1 .icon{margin-inline-end:.25em;color:var(--theme-color);font-size:.9em}.vp-page-title h1 img.icon{vertical-align:-.125em;height:1em}.theme-hope-content:not(.custom){padding-top:0!important}.theme-hope-content:not(.custom) h1:first-child,.theme-hope-content:not(.custom) h2:first-child,.theme-hope-content:not(.custom) h3:first-child,.theme-hope-content:not(.custom) h4:first-child,.theme-hope-content:not(.custom) h5:first-child,.theme-hope-content:not(.custom) h6:first-child{margin-top:calc(.5rem - var(--navbar-height))!important;padding-top:var(--navbar-height)!important}.theme-hope-content:not(.custom)>h1:first-child{display:none}.vp-page{display:block;flex-grow:1;padding-bottom:2rem;transition:padding var(--transform-transition)}@media print{.vp-page{min-height:auto!important;margin:0!important;padding:0!important}}.page-cover{width:var(--content-width);margin-inline:auto}@media (max-width: 719px){.page-cover{width:100%}}.page-cover img{-o-object-fit:cover;object-fit:cover;width:100%;max-height:25vh;border-radius:.5rem}@media (max-width: 719px){.page-cover img{border-radius:0}}#vp-comment{max-width:var(--content-width, 740px);margin:0 auto;padding:2rem 2.5rem}@media (max-width: 959px){#vp-comment{padding:1.5rem}}@media (max-width: 419px){#vp-comment{padding:1rem 1.5rem}}@media print{#vp-comment{max-width:unset}}.vp-skip-link{top:.25rem;inset-inline-start:.25rem;z-index:999;padding:.65rem 1.5rem;border-radius:.5rem;background:var(--bg-color);color:var(--theme-color);box-shadow:var(--card-shadow);font-weight:700;font-size:.9em;text-decoration:none}@media print{.vp-skip-link{display:none}}.vp-skip-link:focus{clip:auto;width:auto;height:auto;-webkit-clip-path:none;clip-path:none}.theme-hope-content pre{overflow:auto;margin:.85rem 0;padding:1rem;border-radius:6px;line-height:1.375}.theme-hope-content pre code{padding:0;border-radius:0;background:transparent!important;color:var(--code-color);font-family:var(--font-family-mono);text-align:left;white-space:pre;word-spacing:normal;word-wrap:normal;word-break:normal;overflow-wrap:unset;-webkit-hyphens:none;hyphens:none;transition:color var(--color-transition);-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}@media print{.theme-hope-content pre code{white-space:pre-wrap}}.theme-hope-content .line-number{font-family:var(--font-family-mono)}div[class*=language-]{position:relative;border-radius:6px;background:var(--code-bg-color);font-size:16px;transition:background var(--color-transition)}@media (max-width: 419px){.theme-hope-content>div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}div[class*=language-]:before{content:attr(data-title);position:absolute;top:0;right:1em;z-index:3;color:var(--code-line-color);font-size:.75rem;transition:color var(--color-transition)}div[class*=language-] pre{position:relative;z-index:1;scrollbar-gutter:stable}div[class*=language-] .highlight-lines{position:absolute;top:0;bottom:0;left:0;width:100%;padding:1rem 0;line-height:1.375;-webkit-user-select:none;-moz-user-select:none;user-select:none}div[class*=language-] .highlight-line{background:var(--code-highlight-line-color);transition:background var(--color-transition)}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;top:0;bottom:0;left:0;z-index:2;width:var(--line-numbers-width);border-right:1px solid var(--code-highlight-line-color);border-radius:6px 0 0 6px;transition:border-color var(--color-transition)}@media (max-width: 419px){div[class*=language-].line-numbers-mode:after{border-radius:0}}@media print{div[class*=language-].line-numbers-mode:after{display:none}}div[class*=language-].line-numbers-mode .highlight-line{position:relative}div[class*=language-].line-numbers-mode .highlight-line:before{content:" ";position:absolute;top:0;left:0;z-index:3;display:block;width:var(--line-numbers-width);height:100%}div[class*=language-].line-numbers-mode pre{vertical-align:middle;margin-left:var(--line-numbers-width);padding-left:.5rem}@media print{div[class*=language-].line-numbers-mode pre{margin-left:0;padding-left:1rem}}div[class*=language-].line-numbers-mode .line-numbers{position:absolute;top:0;bottom:0;left:0;display:flex;flex-direction:column;width:var(--line-numbers-width);padding:1rem 0;color:var(--code-line-color);counter-reset:line-number;text-align:center;transition:color var(--color-transition)}@media print{div[class*=language-].line-numbers-mode .line-numbers{display:none}}div[class*=language-].line-numbers-mode .line-number{position:relative;z-index:4;display:flex;flex:1;align-items:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-number:before{content:counter(line-number);display:block;font-size:.8em;line-height:1;counter-increment:line-number}div[class*=language-]:not(.line-numbers-mode) .line-numbers{display:none}html[data-theme=light] #app{--code-color: #383a42;--code-line-color: rgba(56, 58, 66, .67);--code-bg-color: #ecf4fa;--code-border-color: #c3def3;--code-highlight-line-color: #d8e9f6}html[data-theme=light] code[class*=language-],html[data-theme=light] pre[class*=language-]{-moz-tab-size:2;-o-tab-size:2;tab-size:2}html[data-theme=light] code[class*=language-]::-moz-selection,html[data-theme=light] code[class*=language-] ::-moz-selection,html[data-theme=light] pre[class*=language-]::-moz-selection,html[data-theme=light] pre[class*=language-] ::-moz-selection{background:#e5e5e6;color:inherit}html[data-theme=light] code[class*=language-]::selection,html[data-theme=light] code[class*=language-] ::selection,html[data-theme=light] pre[class*=language-]::selection,html[data-theme=light] pre[class*=language-] ::selection{background:#e5e5e6;color:inherit}html[data-theme=light] .token.comment,html[data-theme=light] .token.prolog,html[data-theme=light] .token.cdata{color:#a0a1a7}html[data-theme=light] .token.doctype,html[data-theme=light] .token.punctuation,html[data-theme=light] .token.entity{color:#383a42}html[data-theme=light] .token.attr-name,html[data-theme=light] .token.class-name,html[data-theme=light] .token.boolean,html[data-theme=light] .token.constant,html[data-theme=light] .token.number,html[data-theme=light] .token.atrule{color:#b76b01}html[data-theme=light] .token.keyword{color:#a626a4}html[data-theme=light] .token.property,html[data-theme=light] .token.tag,html[data-theme=light] .token.symbol,html[data-theme=light] .token.deleted,html[data-theme=light] .token.important{color:#e45649}html[data-theme=light] .token.selector,html[data-theme=light] .token.string,html[data-theme=light] .token.char,html[data-theme=light] .token.builtin,html[data-theme=light] .token.inserted,html[data-theme=light] .token.regex,html[data-theme=light] .token.attr-value,html[data-theme=light] .token.attr-value>.token.punctuation{color:#50a14f}html[data-theme=light] .token.variable,html[data-theme=light] .token.operator,html[data-theme=light] .token.function{color:#4078f2}html[data-theme=light] .token.url{color:#0184bc}html[data-theme=light] .token.attr-value>.token.punctuation.attr-equals,html[data-theme=light] .token.special-attr>.token.attr-value>.token.value.css{color:#383a42}html[data-theme=light] .language-css .token.selector{color:#e45649}html[data-theme=light] .language-css .token.property{color:#383a42}html[data-theme=light] .language-css .token.function,html[data-theme=light] .language-css .token.url>.token.function{color:#0184bc}html[data-theme=light] .language-css .token.url>.token.string.url{color:#50a14f}html[data-theme=light] .language-css .token.important,html[data-theme=light] .language-css .token.atrule .token.rule,html[data-theme=light] .language-javascript .token.operator{color:#a626a4}html[data-theme=light] .language-javascript .token.template-string>.token.interpolation>.token.interpolation-punctuation.punctuation{color:#ca1243}html[data-theme=light] .language-json .token.operator{color:#383a42}html[data-theme=light] .language-json .token.null.keyword{color:#b76b01}html[data-theme=light] .language-markdown .token.url,html[data-theme=light] .language-markdown .token.url>.token.operator,html[data-theme=light] .language-markdown .token.url-reference.url>.token.string{color:#383a42}html[data-theme=light] .language-markdown .token.url>.token.content{color:#4078f2}html[data-theme=light] .language-markdown .token.url>.token.url,html[data-theme=light] .language-markdown .token.url-reference.url{color:#0184bc}html[data-theme=light] .language-markdown .token.blockquote.punctuation,html[data-theme=light] .language-markdown .token.hr.punctuation{color:#a0a1a7;font-style:italic}html[data-theme=light] .language-markdown .token.code-snippet{color:#50a14f}html[data-theme=light] .language-markdown .token.bold .token.content{color:#b76b01}html[data-theme=light] .language-markdown .token.italic .token.content{color:#a626a4}html[data-theme=light] .language-markdown .token.strike .token.content,html[data-theme=light] .language-markdown .token.strike .token.punctuation,html[data-theme=light] .language-markdown .token.list.punctuation,html[data-theme=light] .language-markdown .token.title.important>.token.punctuation{color:#e45649}html[data-theme=light] .token.bold{font-weight:700}html[data-theme=light] .token.comment,html[data-theme=light] .token.italic{font-style:italic}html[data-theme=light] .token.entity{cursor:help}html[data-theme=light] .token.namespace{opacity:.8}html[data-theme=dark] #app{--code-color: #abb2bf;--code-line-color: rgba(171, 178, 191, .67);--code-bg-color: #282c34;--code-border-color: #343e51;--code-highlight-line-color: #2f3542}html[data-theme=dark] code[class*=language-],html[data-theme=dark] pre[class*=language-]{text-shadow:0 1px rgba(0,0,0,.3);-moz-tab-size:2;-o-tab-size:2;tab-size:2}@media print{html[data-theme=dark] code[class*=language-],html[data-theme=dark] pre[class*=language-]{text-shadow:none}}html[data-theme=dark] code[class*=language-]::-moz-selection,html[data-theme=dark] code[class*=language-] ::-moz-selection,html[data-theme=dark] pre[class*=language-]::-moz-selection,html[data-theme=dark] pre[class*=language-] ::-moz-selection{background:#3e4451;color:inherit;text-shadow:none}html[data-theme=dark] code[class*=language-]::selection,html[data-theme=dark] code[class*=language-] ::selection,html[data-theme=dark] pre[class*=language-]::selection,html[data-theme=dark] pre[class*=language-] ::selection{background:#3e4451;color:inherit;text-shadow:none}html[data-theme=dark] .token.comment,html[data-theme=dark] .token.prolog,html[data-theme=dark] .token.cdata{color:#5c6370}html[data-theme=dark] .token.doctype,html[data-theme=dark] .token.punctuation,html[data-theme=dark] .token.entity{color:#abb2bf}html[data-theme=dark] .token.attr-name,html[data-theme=dark] .token.class-name,html[data-theme=dark] .token.boolean,html[data-theme=dark] .token.constant,html[data-theme=dark] .token.number,html[data-theme=dark] .token.atrule{color:#d19a66}html[data-theme=dark] .token.keyword{color:#c678dd}html[data-theme=dark] .token.property,html[data-theme=dark] .token.tag,html[data-theme=dark] .token.symbol,html[data-theme=dark] .token.deleted,html[data-theme=dark] .token.important{color:#e06c75}html[data-theme=dark] .token.selector,html[data-theme=dark] .token.string,html[data-theme=dark] .token.char,html[data-theme=dark] .token.builtin,html[data-theme=dark] .token.inserted,html[data-theme=dark] .token.regex,html[data-theme=dark] .token.attr-value,html[data-theme=dark] .token.attr-value>.token.punctuation{color:#98c379}html[data-theme=dark] .token.variable,html[data-theme=dark] .token.operator,html[data-theme=dark] .token.function{color:#61afef}html[data-theme=dark] .token.url{color:#56b6c2}html[data-theme=dark] .token.attr-value>.token.punctuation.attr-equals,html[data-theme=dark] .token.special-attr>.token.attr-value>.token.value.css{color:#abb2bf}html[data-theme=dark] .language-css .token.selector{color:#e06c75}html[data-theme=dark] .language-css .token.property{color:#abb2bf}html[data-theme=dark] .language-css .token.function,html[data-theme=dark] .language-css .token.url>.token.function{color:#56b6c2}html[data-theme=dark] .language-css .token.url>.token.string.url{color:#98c379}html[data-theme=dark] .language-css .token.important,html[data-theme=dark] .language-css .token.atrule .token.rule,html[data-theme=dark] .language-javascript .token.operator{color:#c678dd}html[data-theme=dark] .language-javascript .token.template-string>.token.interpolation>.token.interpolation-punctuation.punctuation{color:#be5046}html[data-theme=dark] .language-json .token.operator{color:#abb2bf}html[data-theme=dark] .language-json .token.null.keyword{color:#d19a66}html[data-theme=dark] .language-markdown .token.url,html[data-theme=dark] .language-markdown .token.url>.token.operator,html[data-theme=dark] .language-markdown .token.url-reference.url>.token.string{color:#abb2bf}html[data-theme=dark] .language-markdown .token.url>.token.content{color:#61afef}html[data-theme=dark] .language-markdown .token.url>.token.url,html[data-theme=dark] .language-markdown .token.url-reference.url{color:#56b6c2}html[data-theme=dark] .language-markdown .token.blockquote.punctuation,html[data-theme=dark] .language-markdown .token.hr.punctuation{color:#5c6370;font-style:italic}html[data-theme=dark] .language-markdown .token.code-snippet{color:#98c379}html[data-theme=dark] .language-markdown .token.bold .token.content{color:#d19a66}html[data-theme=dark] .language-markdown .token.italic .token.content{color:#c678dd}html[data-theme=dark] .language-markdown .token.strike .token.content,html[data-theme=dark] .language-markdown .token.strike .token.punctuation,html[data-theme=dark] .language-markdown .token.list.punctuation,html[data-theme=dark] .language-markdown .token.title.important>.token.punctuation{color:#e06c75}html[data-theme=dark] .token.bold{font-weight:700}html[data-theme=dark] .token.comment,html[data-theme=dark] .token.italic{font-style:italic}html[data-theme=dark] .token.entity{cursor:help}html[data-theme=dark] .token.namespace{opacity:.8}.sr-only{position:absolute;overflow:hidden;clip:rect(0,0,0,0);width:1px;height:1px;margin:-1px;padding:0;border-width:0;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media print{.theme-hope-content{margin:0!important;padding-inline:0!important}}.theme-hope-content.custom{margin:0;padding:0}.theme-hope-content:not(.custom){max-width:var(--content-width, 740px);margin:0 auto;padding:2rem 2.5rem;padding-top:0}@media (max-width: 959px){.theme-hope-content:not(.custom){padding:1.5rem}}@media (max-width: 419px){.theme-hope-content:not(.custom){padding:1rem 1.5rem}}@media print{.theme-hope-content:not(.custom){max-width:unset}}.theme-hope-content:not(.custom)>h1,.theme-hope-content:not(.custom)>h2,.theme-hope-content:not(.custom)>h3,.theme-hope-content:not(.custom)>h4,.theme-hope-content:not(.custom)>h5,.theme-hope-content:not(.custom)>h6{margin-top:calc(.5rem - var(--navbar-height));margin-bottom:.5rem;padding-top:calc(1rem + var(--navbar-height));outline:none}.theme-container.no-navbar .theme-hope-content:not(.custom)>h1,.theme-container.no-navbar .theme-hope-content:not(.custom)>h2,.theme-container.no-navbar .theme-hope-content:not(.custom)>h3,.theme-container.no-navbar .theme-hope-content:not(.custom)>h4,.theme-container.no-navbar .theme-hope-content:not(.custom)>h5,.theme-container.no-navbar .theme-hope-content:not(.custom)>h6{margin-top:1.5rem;padding-top:0}.theme-hope-content:not(.custom)>p,.theme-hope-content:not(.custom)>ul p,.theme-hope-content:not(.custom)>ol p{text-align:justify;overflow-wrap:break-word;-webkit-hyphens:auto;hyphens:auto}@media (max-width: 419px){.theme-hope-content:not(.custom)>p,.theme-hope-content:not(.custom)>ul p,.theme-hope-content:not(.custom)>ol p{text-align:start}}@media print{.theme-hope-content:not(.custom)>p,.theme-hope-content:not(.custom)>ul p,.theme-hope-content:not(.custom)>ol p{text-align:start}}.theme-hope-content a:not(.header-anchor):hover{text-decoration:underline}.theme-hope-content img{max-width:100%}::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}html[data-theme=light]::view-transition-old(root),html[data-theme=dark]::view-transition-new(root){z-index:1}html[data-theme=light]::view-transition-new(root),html[data-theme=dark]::view-transition-old(root){z-index:99999}@media (min-width: 1280px){.chart-wrapper::-webkit-scrollbar,.flowchart-wrapper::-webkit-scrollbar,.mermaid-wrapper::-webkit-scrollbar{width:8px;height:8px}.chart-wrapper::-webkit-scrollbar-track-piece,.flowchart-wrapper::-webkit-scrollbar-track-piece,.mermaid-wrapper::-webkit-scrollbar-track-piece{border-radius:8px;background:#0000001a}}html[dir=rtl] a.header-anchor:before{right:-.75em}#docsearch-container{min-width:145.7px!important}@media (max-width: 959px){#docsearch-container{min-width:36px!important}}.DocSearch.DocSearch-Button{margin-left:0}@media (max-width: 959px){.DocSearch.DocSearch-Button{min-width:36px!important}}.DocSearch .DocSearch-Button-Placeholder{display:inline-block;padding:4px 12px 4px 6px;font-size:14px}@media (max-width: 719px){.DocSearch .DocSearch-Button-Placeholder{display:none}}.DocSearch .DocSearch-Search-Icon{width:1.25em;height:1.25em}@media (max-width: 959px){.DocSearch .DocSearch-Button-Keys{display:none}}.DocSearch .DocSearch-Button-Key{background:var(--bg-color);box-shadow:none}:root{scrollbar-width:thin}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track-piece{border-radius:6px;background:#0000001a}::-webkit-scrollbar-thumb{border-radius:6px;background:var(--theme-color)}::-webkit-scrollbar-thumb:active{background:var(--theme-color-light)}@media (max-width: 719px){.hide-in-mobile{display:none!important}}@media (max-width: 959px){.hide-in-pad{display:none!important}}.page-author-item{display:inline-block;margin:0 4px;font-weight:400;overflow-wrap:break-word}.page-category-info{flex-wrap:wrap}.page-category-item{display:inline-block;margin:.125em .25em;padding:0 .25em;border-radius:.25em;background:var(--bg-color-secondary);color:var(--text-color-light);font-weight:700;font-size:.75rem;line-height:2;transition:background var(--color-transition),color var(--color-transition)}@media print{.page-category-item{padding:0;font-weight:400}.page-category-item:after{content:", "}.page-category-item:last-of-type:after{content:""}}.page-category-item.clickable>span:hover{color:var(--theme-color);cursor:pointer}.page-category-item.category0{background:#fde5e7;color:#ec2f3e}html[data-theme=dark] .page-category-item.category0{background:#340509;color:#ba111f}.page-category-item.category0:hover{background:#f9bec3}html[data-theme=dark] .page-category-item.category0:hover{background:#53080e}.page-category-item.category1{background:#ffeee8;color:#fb7649}html[data-theme=dark] .page-category-item.category1{background:#441201;color:#f54205}.page-category-item.category1:hover{background:#fed4c6}html[data-theme=dark] .page-category-item.category1:hover{background:#6d1d02}.page-category-item.category2{background:#fef5e7;color:#f5b041}html[data-theme=dark] .page-category-item.category2{background:#3e2703;color:#e08e0b}.page-category-item.category2:hover{background:#fce6c4}html[data-theme=dark] .page-category-item.category2:hover{background:#633f05}.page-category-item.category3{background:#eafaf1;color:#55d98d}html[data-theme=dark] .page-category-item.category3{background:#0c331c;color:#29b866}.page-category-item.category3:hover{background:#caf3db}html[data-theme=dark] .page-category-item.category3:hover{background:#12522d}.page-category-item.category4{background:#e6f9ee;color:#36d278}html[data-theme=dark] .page-category-item.category4{background:#092917;color:#219552}.page-category-item.category4:hover{background:#c0f1d5}html[data-theme=dark] .page-category-item.category4:hover{background:#0f4224}.page-category-item.category5{background:#e1fcfc;color:#16e1e1}html[data-theme=dark] .page-category-item.category5{background:#042929;color:#0e9595}.page-category-item.category5:hover{background:#b4f8f8}html[data-theme=dark] .page-category-item.category5:hover{background:#064242}.page-category-item.category6{background:#e4f0fe;color:#2589f6}html[data-theme=dark] .page-category-item.category6{background:#021b36;color:#0862c3}.page-category-item.category6:hover{background:#bbdafc}html[data-theme=dark] .page-category-item.category6:hover{background:#042c57}.page-category-item.category7{background:#f7f1fd;color:#bb8ced}html[data-theme=dark] .page-category-item.category7{background:#2a0b4b;color:#9851e4}.page-category-item.category7:hover{background:#eadbfa}html[data-theme=dark] .page-category-item.category7:hover{background:#431277}.page-category-item.category8{background:#fdeaf5;color:#ef59ab}html[data-theme=dark] .page-category-item.category8{background:#400626;color:#e81689}.page-category-item.category8:hover{background:#facbe5}html[data-theme=dark] .page-category-item.category8:hover{background:#670a3d}.page-original-info{position:relative;display:inline-block;vertical-align:middle;overflow:hidden;padding:0 .5em;border:.5px solid var(--dark-grey);border-radius:.75em;background:var(--bg-color);font-size:.75em;line-height:1.5!important}.page-info{display:flex;flex-wrap:wrap;align-items:center;place-content:stretch flex-start;color:var(--dark-grey);font-size:14px}@media print{.page-info{display:flex!important}}.page-info>span{display:flex;align-items:center;max-width:100%;margin-inline-end:.5em;line-height:2}@media (min-width: 1440px){.page-info>span{font-size:1.1em}}@media (max-width: 419px){.page-info>span{margin-inline-end:.3em;font-size:.875em}}@media print{.page-info>span{display:flex!important}}.page-info .icon{position:relative;display:inline-block;vertical-align:middle;width:1em;height:1em;margin-inline-end:.25em}.page-info a{color:inherit}.page-info a:hover,.page-info a:active{color:var(--theme-color)}.page-meta{max-width:var(--content-width, 740px);margin-inline:auto;padding-inline:2.5rem;display:flex;flex-wrap:wrap;justify-content:space-between;overflow:auto;padding-top:.75rem;padding-bottom:.75rem}@media (max-width: 959px){.page-meta{padding-inline:1.5rem}}@media print{.page-meta{max-width:unset}}@media print{.page-meta{margin:0!important;padding-inline:0!important}}@media (max-width: 719px){.page-meta{display:block}}.page-meta .meta-item{flex-grow:1}.page-meta .meta-item .label{font-weight:500}.page-meta .meta-item .label:not(a){color:var(--text-color-lighter)}.page-meta .meta-item .info{color:var(--dark-grey);font-weight:400}.page-meta .git-info{text-align:end}.page-meta .edit-link{margin-top:.25rem;margin-bottom:.25rem;margin-inline-end:.5rem;font-size:14px}@media print{.page-meta .edit-link{display:none}}.page-meta .edit-link .icon{position:relative;bottom:-.125em;width:1em;height:1em;margin-inline-end:.25em}.page-meta .update-time,.page-meta .contributors{margin-top:.25rem;margin-bottom:.25rem;font-size:14px}@media (max-width: 719px){.page-meta .update-time,.page-meta .contributors{font-size:13px;text-align:start}}.print-button{border-width:0;background:transparent;cursor:pointer;box-sizing:content-box;width:1rem;height:1rem;padding:.5rem;border-radius:.25em;color:inherit;font-size:1rem;transform:translateY(.25rem)}@media print{.print-button{display:none}}.page-tag-info{flex-wrap:wrap}.page-tag-item{position:relative;display:inline-block;vertical-align:middle;overflow:hidden;min-width:1.5rem;margin:.125rem;padding:.125rem .25rem .125rem .625rem;background:var(--bg-color-secondary);background:linear-gradient(135deg,transparent .75em,var(--bg-color-secondary) 0) top,linear-gradient(45deg,transparent .75em,var(--bg-color-secondary) 0) bottom;background-size:100% 52%!important;background-repeat:no-repeat!important;color:var(--text-color-light);font-weight:700;font-size:.625rem;line-height:1.5;text-align:center;transition:background var(--color-transition),color var(--color-transition)}@media print{.page-tag-item{padding:0;font-weight:400}.page-tag-item:after{content:", "}.page-tag-item:last-of-type:after{content:""}}.page-tag-item.clickable:hover{cursor:pointer}.page-tag-item.tag0{background:#fde5e7;background:linear-gradient(135deg,transparent .75em,#fde5e7 0) top,linear-gradient(45deg,transparent .75em,#fde5e7 0) bottom;color:#ec2f3e}html[data-theme=dark] .page-tag-item.tag0{background:#340509;background:linear-gradient(135deg,transparent .75em,#340509 0) top,linear-gradient(45deg,transparent .75em,#340509 0) bottom;color:#ba111f}.page-tag-item.tag0.clickable:hover{background:#f9bec3;background:linear-gradient(135deg,transparent .75em,#f9bec3 0) top,linear-gradient(45deg,transparent .75em,#f9bec3 0) bottom}html[data-theme=dark] .page-tag-item.tag0.clickable:hover{background:#53080e;background:linear-gradient(135deg,transparent .75em,#53080e 0) top,linear-gradient(45deg,transparent .75em,#53080e 0) bottom}.page-tag-item.tag1{background:#ffeee8;background:linear-gradient(135deg,transparent .75em,#ffeee8 0) top,linear-gradient(45deg,transparent .75em,#ffeee8 0) bottom;color:#fb7649}html[data-theme=dark] .page-tag-item.tag1{background:#441201;background:linear-gradient(135deg,transparent .75em,#441201 0) top,linear-gradient(45deg,transparent .75em,#441201 0) bottom;color:#f54205}.page-tag-item.tag1.clickable:hover{background:#fed4c6;background:linear-gradient(135deg,transparent .75em,#fed4c6 0) top,linear-gradient(45deg,transparent .75em,#fed4c6 0) bottom}html[data-theme=dark] .page-tag-item.tag1.clickable:hover{background:#6d1d02;background:linear-gradient(135deg,transparent .75em,#6d1d02 0) top,linear-gradient(45deg,transparent .75em,#6d1d02 0) bottom}.page-tag-item.tag2{background:#fef5e7;background:linear-gradient(135deg,transparent .75em,#fef5e7 0) top,linear-gradient(45deg,transparent .75em,#fef5e7 0) bottom;color:#f5b041}html[data-theme=dark] .page-tag-item.tag2{background:#3e2703;background:linear-gradient(135deg,transparent .75em,#3e2703 0) top,linear-gradient(45deg,transparent .75em,#3e2703 0) bottom;color:#e08e0b}.page-tag-item.tag2.clickable:hover{background:#fce6c4;background:linear-gradient(135deg,transparent .75em,#fce6c4 0) top,linear-gradient(45deg,transparent .75em,#fce6c4 0) bottom}html[data-theme=dark] .page-tag-item.tag2.clickable:hover{background:#633f05;background:linear-gradient(135deg,transparent .75em,#633f05 0) top,linear-gradient(45deg,transparent .75em,#633f05 0) bottom}.page-tag-item.tag3{background:#eafaf1;background:linear-gradient(135deg,transparent .75em,#eafaf1 0) top,linear-gradient(45deg,transparent .75em,#eafaf1 0) bottom;color:#55d98d}html[data-theme=dark] .page-tag-item.tag3{background:#0c331c;background:linear-gradient(135deg,transparent .75em,#0c331c 0) top,linear-gradient(45deg,transparent .75em,#0c331c 0) bottom;color:#29b866}.page-tag-item.tag3.clickable:hover{background:#caf3db;background:linear-gradient(135deg,transparent .75em,#caf3db 0) top,linear-gradient(45deg,transparent .75em,#caf3db 0) bottom}html[data-theme=dark] .page-tag-item.tag3.clickable:hover{background:#12522d;background:linear-gradient(135deg,transparent .75em,#12522d 0) top,linear-gradient(45deg,transparent .75em,#12522d 0) bottom}.page-tag-item.tag4{background:#e6f9ee;background:linear-gradient(135deg,transparent .75em,#e6f9ee 0) top,linear-gradient(45deg,transparent .75em,#e6f9ee 0) bottom;color:#36d278}html[data-theme=dark] .page-tag-item.tag4{background:#092917;background:linear-gradient(135deg,transparent .75em,#092917 0) top,linear-gradient(45deg,transparent .75em,#092917 0) bottom;color:#219552}.page-tag-item.tag4.clickable:hover{background:#c0f1d5;background:linear-gradient(135deg,transparent .75em,#c0f1d5 0) top,linear-gradient(45deg,transparent .75em,#c0f1d5 0) bottom}html[data-theme=dark] .page-tag-item.tag4.clickable:hover{background:#0f4224;background:linear-gradient(135deg,transparent .75em,#0f4224 0) top,linear-gradient(45deg,transparent .75em,#0f4224 0) bottom}.page-tag-item.tag5{background:#e1fcfc;background:linear-gradient(135deg,transparent .75em,#e1fcfc 0) top,linear-gradient(45deg,transparent .75em,#e1fcfc 0) bottom;color:#16e1e1}html[data-theme=dark] .page-tag-item.tag5{background:#042929;background:linear-gradient(135deg,transparent .75em,#042929 0) top,linear-gradient(45deg,transparent .75em,#042929 0) bottom;color:#0e9595}.page-tag-item.tag5.clickable:hover{background:#b4f8f8;background:linear-gradient(135deg,transparent .75em,#b4f8f8 0) top,linear-gradient(45deg,transparent .75em,#b4f8f8 0) bottom}html[data-theme=dark] .page-tag-item.tag5.clickable:hover{background:#064242;background:linear-gradient(135deg,transparent .75em,#064242 0) top,linear-gradient(45deg,transparent .75em,#064242 0) bottom}.page-tag-item.tag6{background:#e4f0fe;background:linear-gradient(135deg,transparent .75em,#e4f0fe 0) top,linear-gradient(45deg,transparent .75em,#e4f0fe 0) bottom;color:#2589f6}html[data-theme=dark] .page-tag-item.tag6{background:#021b36;background:linear-gradient(135deg,transparent .75em,#021b36 0) top,linear-gradient(45deg,transparent .75em,#021b36 0) bottom;color:#0862c3}.page-tag-item.tag6.clickable:hover{background:#bbdafc;background:linear-gradient(135deg,transparent .75em,#bbdafc 0) top,linear-gradient(45deg,transparent .75em,#bbdafc 0) bottom}html[data-theme=dark] .page-tag-item.tag6.clickable:hover{background:#042c57;background:linear-gradient(135deg,transparent .75em,#042c57 0) top,linear-gradient(45deg,transparent .75em,#042c57 0) bottom}.page-tag-item.tag7{background:#f7f1fd;background:linear-gradient(135deg,transparent .75em,#f7f1fd 0) top,linear-gradient(45deg,transparent .75em,#f7f1fd 0) bottom;color:#bb8ced}html[data-theme=dark] .page-tag-item.tag7{background:#2a0b4b;background:linear-gradient(135deg,transparent .75em,#2a0b4b 0) top,linear-gradient(45deg,transparent .75em,#2a0b4b 0) bottom;color:#9851e4}.page-tag-item.tag7.clickable:hover{background:#eadbfa;background:linear-gradient(135deg,transparent .75em,#eadbfa 0) top,linear-gradient(45deg,transparent .75em,#eadbfa 0) bottom}html[data-theme=dark] .page-tag-item.tag7.clickable:hover{background:#431277;background:linear-gradient(135deg,transparent .75em,#431277 0) top,linear-gradient(45deg,transparent .75em,#431277 0) bottom}.page-tag-item.tag8{background:#fdeaf5;background:linear-gradient(135deg,transparent .75em,#fdeaf5 0) top,linear-gradient(45deg,transparent .75em,#fdeaf5 0) bottom;color:#ef59ab}html[data-theme=dark] .page-tag-item.tag8{background:#400626;background:linear-gradient(135deg,transparent .75em,#400626 0) top,linear-gradient(45deg,transparent .75em,#400626 0) bottom;color:#e81689}.page-tag-item.tag8.clickable:hover{background:#facbe5;background:linear-gradient(135deg,transparent .75em,#facbe5 0) top,linear-gradient(45deg,transparent .75em,#facbe5 0) bottom}html[data-theme=dark] .page-tag-item.tag8.clickable:hover{background:#670a3d;background:linear-gradient(135deg,transparent .75em,#670a3d 0) top,linear-gradient(45deg,transparent .75em,#670a3d 0) bottom}.vp-toc-placeholder{margin-inline:auto;padding-inline:2.5rem;position:sticky;top:calc(var(--navbar-height) + .5rem);z-index:99;display:none;max-width:var(--content-width, 740px)}@media (max-width: 959px){.vp-toc-placeholder{padding-inline:1.5rem}}@media print{.vp-toc-placeholder{max-width:unset}}@media (max-width: 719px){.hide-navbar .vp-toc-placeholder{top:.5rem}}@media (min-width: 1440px){.vp-toc-placeholder{top:calc(var(--navbar-height) + 2rem)}}@media print{.vp-toc-placeholder{display:none!important}}.vp-toc-placeholder+.theme-hope-content:not(.custom){padding-top:0}.has-toc .vp-toc-placeholder{display:block}#toc{margin-bottom:1rem;border-radius:8px;background:var(--bg-color-secondary)}@media (min-width: 1440px){#toc{position:absolute;inset-inline-start:calc(100% + 1rem);min-width:10rem;max-width:15rem;margin-bottom:0;border-radius:0;background:transparent}}.vp-toc-header{padding:.5rem 1rem;font-weight:600}@media (min-width: 1440px){.vp-toc-header{padding-top:0;font-size:.875rem}}.vp-toc-header .arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s}html[data-theme=dark] .vp-toc-header .arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.vp-toc-header .arrow.down{transform:rotate(180deg)}html[dir=rtl] .vp-toc-header .arrow.down{transform:rotate(-180deg)}.vp-toc-header .arrow.end{transform:rotate(90deg)}html[dir=rtl] .vp-toc-header .arrow.end,.vp-toc-header .arrow.start{transform:rotate(-90deg)}html[dir=rtl] .vp-toc-header .arrow.start{transform:rotate(90deg)}@media (min-width: 1440px){.vp-toc-header .arrow{display:none}}.vp-toc-header .print-button{display:none}@media (min-width: 1440px){.vp-toc-header .print-button{display:inline-block}}.vp-toc-wrapper{position:relative;overflow:hidden auto;height:0;max-height:8rem;margin:0 .5rem;padding-inline-start:8px;text-overflow:ellipsis;white-space:nowrap;transition:height .5s;scroll-behavior:smooth}@media (min-width: 1440px){.vp-toc-wrapper{height:auto;max-height:75vh}}.vp-toc-wrapper.open{height:auto;margin-top:.5rem;padding-bottom:.5rem}.vp-toc-wrapper::-webkit-scrollbar-track-piece{background:transparent}.vp-toc-wrapper::-webkit-scrollbar{width:3px}.vp-toc-wrapper::-webkit-scrollbar-thumb:vertical{background:#ddd}html[data-theme=dark] .vp-toc-wrapper::-webkit-scrollbar-thumb:vertical{background:#333}.vp-toc-wrapper:before{content:" ";position:absolute;top:0;bottom:0;inset-inline-start:0;z-index:-1;width:2px;background:var(--border-color)}.vp-toc-list{position:relative;margin:0;padding:0}.vp-toc-marker{position:absolute;top:0;inset-inline-start:0;z-index:2;display:none;width:2px;height:1.7rem;background:var(--theme-color);transition:top var(--vp-tt)}@media (min-width: 1440px){.vp-toc-marker{display:block}}.vp-toc-link{position:relative;display:block;overflow:hidden;max-width:100%;color:var(--light-grey);line-height:inherit;text-overflow:ellipsis;white-space:nowrap}.vp-toc-link.level2{padding-inline-start:0px;font-size:14px}.vp-toc-link.level3{padding-inline-start:8px;font-size:13px}.vp-toc-link.level4{padding-inline-start:16px;font-size:12px}.vp-toc-link.level5{padding-inline-start:24px;font-size:11px}.vp-toc-link.level6{padding-inline-start:32px;font-size:10px}.vp-toc-item{position:relative;box-sizing:border-box;height:1.7rem;list-style:none;line-height:1.7rem}@media (min-width: 1440px){.vp-toc-item{padding:0 .5rem}}.vp-toc-item:hover>.vp-toc-link{color:var(--theme-color)}.vp-toc-item.active>.vp-toc-link{color:var(--theme-color);font-weight:700}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper:not(:hover) .arrow{transform:rotate(-180deg)}.dropdown-wrapper .dropdown-title{border-width:0;background:transparent;cursor:pointer;padding:0 .25rem;color:var(--dark-grey);font-weight:500;font-size:inherit;font-family:inherit;line-height:inherit;cursor:inherit}.dropdown-wrapper .dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .icon{margin-inline-end:.25em;font-size:1em}.dropdown-wrapper .dropdown-title .arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s;font-size:1.2em}html[data-theme=dark] .dropdown-wrapper .dropdown-title .arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.dropdown-wrapper .dropdown-title .arrow.down{transform:rotate(180deg)}html[dir=rtl] .dropdown-wrapper .dropdown-title .arrow.down{transform:rotate(-180deg)}.dropdown-wrapper .dropdown-title .arrow.end{transform:rotate(90deg)}html[dir=rtl] .dropdown-wrapper .dropdown-title .arrow.end,.dropdown-wrapper .dropdown-title .arrow.start{transform:rotate(-90deg)}html[dir=rtl] .dropdown-wrapper .dropdown-title .arrow.start{transform:rotate(90deg)}.dropdown-wrapper ul{margin:0;padding:0;list-style-type:none}.dropdown-wrapper .nav-dropdown{position:absolute;top:100%;inset-inline-end:0;overflow-y:auto;box-sizing:border-box;min-width:6rem;max-height:calc(100vh - var(--navbar-height));margin:0;padding:.5rem .75rem;border:1px solid var(--grey14);border-radius:.5rem;background:var(--bg-color);box-shadow:2px 2px 10px var(--card-shadow);text-align:start;white-space:nowrap;opacity:0;visibility:hidden;transition:all .18s ease-out;transform:scale(.9)}.dropdown-wrapper:hover .nav-dropdown,.dropdown-wrapper.open .nav-dropdown{z-index:2;opacity:1;visibility:visible;transform:none}.dropdown-wrapper .nav-link{position:relative;display:block;margin-bottom:0;border-bottom:none;color:var(--dark-grey);font-weight:400;font-size:.875rem;line-height:1.7rem;transition:color var(--color-transition)}.dropdown-wrapper .nav-link:hover,.dropdown-wrapper .nav-link.active{color:var(--theme-color)}.dropdown-wrapper .dropdown-subtitle{margin:0;padding:.5rem .25rem 0;color:var(--light-grey);font-weight:600;font-size:.75rem;line-height:2;text-transform:uppercase;transition:color var(--color-transition)}.dropdown-wrapper .dropdown-subitem-wrapper{padding:0 0 .25rem}.dropdown-wrapper .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .dropdown-item:last-child .dropdown-subtitle{padding-top:0}.dropdown-wrapper .dropdown-item:last-child .dropdown-subitem-wrapper{padding-bottom:0}.nav-screen-dropdown-title{border-width:0;background:transparent;position:relative;display:flex;align-items:center;width:100%;padding:0;color:var(--dark-grey);font-size:inherit;font-family:inherit;text-align:start;cursor:pointer}.nav-screen-dropdown-title:hover,.nav-screen-dropdown-title.active{color:var(--text-color)}.nav-screen-dropdown-title .title{flex:1}.nav-screen-dropdown-title .arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s}html[data-theme=dark] .nav-screen-dropdown-title .arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.nav-screen-dropdown-title .arrow.down{transform:rotate(180deg)}html[dir=rtl] .nav-screen-dropdown-title .arrow.down{transform:rotate(-180deg)}.nav-screen-dropdown-title .arrow.end{transform:rotate(90deg)}html[dir=rtl] .nav-screen-dropdown-title .arrow.end,.nav-screen-dropdown-title .arrow.start{transform:rotate(-90deg)}html[dir=rtl] .nav-screen-dropdown-title .arrow.start{transform:rotate(90deg)}.nav-screen-dropdown{overflow:hidden;margin:.5rem 0 0;padding:0;list-style:none;transition:transform .1s ease-out;transform:scaleY(1);transform-origin:top}.nav-screen-dropdown.hide{height:0;margin:0;transform:scaleY(0)}.nav-screen-dropdown .nav-link{position:relative;display:block;padding-inline-start:.5rem;font-weight:400;line-height:2}.nav-screen-dropdown .nav-link:hover,.nav-screen-dropdown .nav-link.active{color:var(--theme-color)}.nav-screen-dropdown .nav-link .icon{font-size:1em}.nav-screen-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.nav-screen-dropdown .dropdown-subtitle{margin:0;padding-inline-start:.25rem;color:var(--light-grey);font-weight:600;font-size:.75rem;line-height:2;text-transform:uppercase;transition:color var(--color-transition)}.nav-screen-dropdown .dropdown-subtitle .nav-link{padding:0}.nav-screen-dropdown .dropdown-subitem-wrapper{margin:0;padding:0;list-style:none}.nav-screen-dropdown .dropdown-subitem{padding-inline-start:.5rem;font-size:.9em}.nav-screen-links{display:none;padding-bottom:.75rem}@media (max-width: 719px){.nav-screen-links{display:block}}.nav-screen-links .navbar-links-item{position:relative;display:block;padding:12px 4px 11px 0;border-bottom:1px solid var(--border-color);font-size:16px;line-height:1.5rem;transition:border-bottom-color var(--color-transition)}.nav-screen-links .nav-link{display:inline-block;width:100%;color:var(--dark-grey);font-weight:400}.nav-screen-links .nav-link:hover{color:var(--text-color)}.nav-screen-links .nav-link.active{color:var(--theme-color)}.vp-nav-screen-container{max-width:320px;margin:0 auto;padding:2rem 0 4rem}#nav-screen{position:fixed;inset:var(--navbar-height) 0 0 0;z-index:150;display:none;overflow-y:auto;padding:0 2rem;background:var(--bg-color);transition:background .5s}@media (max-width: 719px){#nav-screen{display:block}}#nav-screen.fade-enter-active,#nav-screen.fade-leave-active{transition:opacity .25s}#nav-screen.fade-enter-active .vp-nav-screen-container,#nav-screen.fade-leave-active .vp-nav-screen-container{transition:transform .25s ease}#nav-screen.fade-enter-from,#nav-screen.fade-leave-to{opacity:0}#nav-screen.fade-enter-from .vp-nav-screen-container,#nav-screen.fade-leave-to .vp-nav-screen-container{transform:translateY(-8px)}#nav-screen .icon{margin-inline-end:.25em;font-size:1em}#nav-screen img.icon{vertical-align:-.125em;height:1em}.vp-outlook-wrapper{display:flex;justify-content:space-around}.vp-nav-logo{vertical-align:top;height:var(--navbar-line-height);margin-inline-end:.8rem}.vp-nav-logo.light{display:inline-block}.vp-nav-logo.dark,html[data-theme=dark] .vp-nav-logo.light{display:none}html[data-theme=dark] .vp-nav-logo.dark{display:inline-block}.vp-site-name{position:relative;color:var(--text-color);font-size:1.25rem}@media (max-width: 719px){.vp-site-name{overflow:hidden;width:calc(100vw - 9.4rem);text-overflow:ellipsis;white-space:nowrap}}.vp-brand:hover .vp-site-name{color:var(--theme-color)}.vp-navbar .vp-nav-links{display:flex;align-items:center;font-size:.875rem}.vp-navbar .nav-item{position:relative;margin:0 .25rem;line-height:2rem}.vp-navbar .nav-item:first-child{margin-inline-start:0}.vp-navbar .nav-item:last-child{margin-inline-end:0}.vp-navbar .nav-item>.nav-link{color:var(--dark-grey)}.vp-navbar .nav-item>.nav-link:after{content:" ";position:absolute;inset:auto 50% 0;height:2px;border-radius:1px;background:var(--theme-color-light);visibility:hidden;transition:inset .2s ease-in-out}.vp-navbar .nav-item>.nav-link.active{color:var(--theme-color)}.vp-navbar .nav-item>.nav-link:hover:after,.vp-navbar .nav-item>.nav-link.active:after{inset:auto 0 0;visibility:visible}.vp-navbar{--navbar-line-height: calc( var(--navbar-height) - var(--navbar-vertical-padding) * 2 );position:fixed;inset:0 0 auto;z-index:175;display:flex;align-items:center;justify-content:space-between;box-sizing:border-box;height:var(--navbar-height);padding:var(--navbar-vertical-padding) var(--navbar-horizontal-padding);background:var(--navbar-bg-color);box-shadow:0 2px 8px var(--card-shadow);line-height:var(--navbar-line-height);white-space:nowrap;transition:transform ease-in-out .3s,background var(--color-transition),box-shadow var(--color-transition);-webkit-backdrop-filter:saturate(150%) blur(12px);backdrop-filter:saturate(150%) blur(12px)}@media print{.vp-navbar{display:none}}.hide-navbar .vp-navbar.auto-hide{transform:translateY(-100%)}.vp-navbar .nav-link{padding:0 .25rem;color:var(--dark-grey)}.vp-navbar .nav-link.active{color:var(--theme-color)}.vp-navbar .nav-link .icon{margin-inline-end:.25em;font-size:1em}.vp-navbar .nav-link img.icon{vertical-align:-.125em;height:1em}.vp-navbar.hide-icon .vp-nav-links .icon{display:none!important}.vp-navbar-start,.vp-navbar-end,.vp-navbar-center{display:flex;flex:1;align-items:center}.vp-navbar-start>*,.vp-navbar-end>*,.vp-navbar-center>*{position:relative;margin:0 .25rem!important}.vp-navbar-start>*:first-child,.vp-navbar-end>*:first-child,.vp-navbar-center>*:first-child{margin-inline-start:0!important}.vp-navbar-start>*:last-child,.vp-navbar-end>*:last-child,.vp-navbar-center>*:last-child{margin-inline-end:0!important}.vp-navbar-start{justify-content:start}.vp-navbar-center{justify-content:center}.vp-navbar-end{justify-content:end}.vp-navbar .vp-repo{margin:0!important}.vp-navbar .vp-repo-link{display:inline-block;margin:auto;padding:6px;color:var(--dark-grey);line-height:1}.vp-navbar .vp-repo-link:hover,.vp-navbar .vp-repo-link:active{color:var(--theme-color)}.vp-toggle-navbar-button{border-width:0;background:transparent;cursor:pointer;position:relative;display:none;align-items:center;justify-content:center;padding:6px}@media screen and (max-width: 719px){.vp-toggle-navbar-button{display:flex}}.vp-toggle-navbar-button>span{position:relative;overflow:hidden;width:16px;height:14px}.vp-toggle-navbar-button .vp-top,.vp-toggle-navbar-button .vp-middle,.vp-toggle-navbar-button .vp-bottom{position:absolute;width:16px;height:2px;background:var(--dark-grey);transition:top .25s,background .5s,transform .25s}.vp-toggle-navbar-button .vp-top{top:0;left:0;transform:translate(0)}.vp-toggle-navbar-button .vp-middle{top:6px;left:0;transform:translate(8px)}.vp-toggle-navbar-button .vp-bottom{top:12px;left:0;transform:translate(4px)}.vp-toggle-navbar-button:hover .vp-top{top:0;left:0;transform:translate(4px)}.vp-toggle-navbar-button:hover .vp-middle{top:6;left:0;transform:translate(0)}.vp-toggle-navbar-button:hover .vp-bottom{top:12px;left:0;transform:translate(8px)}.vp-toggle-navbar-button.is-active .vp-top{top:6px;transform:translate(0) rotate(225deg)}.vp-toggle-navbar-button.is-active .vp-middle{top:6px;transform:translate(16px)}.vp-toggle-navbar-button.is-active .vp-bottom{top:6px;transform:translate(0) rotate(135deg)}.vp-toggle-navbar-button.is-active:hover .vp-top,.vp-toggle-navbar-button.is-active:hover .vp-middle,.vp-toggle-navbar-button.is-active:hover .vp-bottom{background:var(--theme-color);transition:top .25s,background .25s,transform .25s}.vp-toggle-sidebar-button{border-width:0;background:transparent;cursor:pointer;display:none;vertical-align:middle;box-sizing:content-box;width:1rem;height:1rem;padding:.5rem;font:unset;transition:transform .2s ease-in-out}@media screen and (max-width: 719px){.vp-toggle-sidebar-button{display:block;padding-inline-end:var(--navbar-mobile-horizontal-padding)}}.vp-toggle-sidebar-button:before,.vp-toggle-sidebar-button:after,.vp-toggle-sidebar-button .icon{display:block;width:100%;height:2px;border-radius:.05em;background:var(--dark-grey);transition:transform .2s ease-in-out}.vp-toggle-sidebar-button:before{content:" ";margin-top:.125em}.sidebar-open .vp-toggle-sidebar-button:before{transform:translateY(.34rem) rotate(135deg)}.vp-toggle-sidebar-button:after{content:" ";margin-bottom:.125em}.sidebar-open .vp-toggle-sidebar-button:after{transform:translateY(-.34rem) rotate(-135deg)}.vp-toggle-sidebar-button .icon{margin:.2em 0}.sidebar-open .vp-toggle-sidebar-button .icon{transform:scale(0)}.appearance-title{display:block;margin:0;padding:0 .25rem;color:var(--light-grey);font-weight:600;font-size:.75rem;line-height:2;transition:color var(--color-transition)}#appearance-switch{border-width:0;background:transparent;vertical-align:middle;padding:6px;color:var(--dark-grey);cursor:pointer;transition:color var(--color-transition)}#appearance-switch:hover{color:var(--theme-color)}#appearance-switch .icon{width:1.25rem;height:1.25rem}.outlook-button{border-width:0;background:transparent;cursor:pointer;position:relative;padding:.375rem;color:var(--dark-grey)}.outlook-button .icon{vertical-align:middle;width:1.25rem;height:1.25rem}.outlook-dropdown{position:absolute;top:100%;inset-inline-end:0;overflow-y:auto;box-sizing:border-box;min-width:100px;margin:0;padding:.5rem .75rem;border:1px solid var(--grey14);border-radius:.25rem;background:var(--bg-color);box-shadow:2px 2px 10px var(--card-shadow);text-align:start;white-space:nowrap;opacity:0;visibility:hidden;transition:all .18s ease-out;transform:scale(.8)}.outlook-dropdown>*:not(:last-child){padding-bottom:.5rem;border-bottom:1px solid var(--grey14)}.outlook-button:hover .outlook-dropdown,.outlook-button.open .outlook-dropdown{z-index:2;opacity:1;visibility:visible;transform:scale(1)}.theme-color-title{display:block;margin:0;padding:0 .25rem;color:var(--light-grey);font-weight:600;font-size:.75rem;line-height:2;transition:color var(--color-transition)}#theme-color-picker{display:flex;margin:0;padding:0;list-style-type:none;font-size:14px}#theme-color-picker li span{display:inline-block;vertical-align:middle;width:15px;height:15px;margin:0 2px;border-radius:2px}#theme-color-picker li span.theme-color,#theme-color-picker li span.theme-color html[data-theme=dark]{background:#326f95}@media print{.full-screen-wrapper{display:none}}.full-screen-title{display:block;margin:0;padding:0 .25rem;color:var(--light-grey);font-weight:600;font-size:.75rem;line-height:2;transition:color var(--color-transition)}.full-screen,.cancel-full-screen{border-width:0;background:transparent;vertical-align:middle;padding:.375rem;color:var(--dark-grey);cursor:pointer}.full-screen:hover,.cancel-full-screen:hover{color:var(--theme-color)}.full-screen .icon,.cancel-full-screen .icon{width:1.25rem;height:1.25rem}.enter-fullscreen-icon:hover,.cancel-fullscreen-icon{color:var(--theme-color)}.cancel-fullscreen-icon:hover{color:var(--dark-grey)}.vp-sidebar-header{display:flex;align-items:center;overflow:hidden;box-sizing:border-box;width:calc(100% - 1rem);margin:0;margin-inline:.5rem;padding:.25rem .5rem;border-width:0;border-radius:.375rem;background:transparent;color:var(--text-color);font-size:1.1em;line-height:1.5;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:color .15s ease;transform:rotate(0)}.vp-sidebar-header.open{color:inherit}.vp-sidebar-header.clickable:hover{background:var(--bg-color-secondary)}.vp-sidebar-header.clickable.exact{border-inline-start-color:var(--theme-color);color:var(--theme-color)}.vp-sidebar-header.clickable.exact a{color:inherit}.vp-sidebar-header .vp-sidebar-title{flex:1}.vp-sidebar-header .vp-arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s;font-size:1.5em}html[data-theme=dark] .vp-sidebar-header .vp-arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.vp-sidebar-header .vp-arrow.down{transform:rotate(180deg)}html[dir=rtl] .vp-sidebar-header .vp-arrow.down{transform:rotate(-180deg)}.vp-sidebar-header .vp-arrow.end{transform:rotate(90deg)}html[dir=rtl] .vp-sidebar-header .vp-arrow.end,.vp-sidebar-header .vp-arrow.start{transform:rotate(-90deg)}html[dir=rtl] .vp-sidebar-header .vp-arrow.start{transform:rotate(90deg)}button.vp-sidebar-header{outline:none;font-weight:inherit;font-family:inherit;line-height:inherit;text-align:start;cursor:pointer}.vp-sidebar-link{display:inline-block;box-sizing:border-box;width:calc(100% - 1rem);margin-inline:.5rem;padding:.25rem .5rem;border-radius:.375rem;color:var(--text-color);font-weight:400;font-size:1em;line-height:1.5}.vp-sidebar-link:hover{background:var(--bg-color-secondary)}.vp-sidebar-link.active{background:var(--theme-color-mask);color:var(--theme-color);font-weight:500}.vp-sidebar-link.active .icon{color:var(--theme-color)}.vp-sidebar-group:not(.collapsible) .vp-sidebar-header:not(.clickable){color:inherit;cursor:auto}.vp-sidebar-group .vp-sidebar-group{padding-inline-start:.75rem}.vp-sidebar-group .vp-sidebar-group .vp-sidebar-header{font-size:1em}.vp-sidebar-group .vp-sidebar-link{padding-inline-start:1.25rem}.vp-sidebar-links,.vp-sidebar-links ul{margin:0;padding:0}.vp-sidebar-links li{list-style-type:none}.vp-sidebar>.vp-sidebar-links{padding:1.5rem 0}@media (max-width: 719px){.vp-sidebar>.vp-sidebar-links{padding:1rem 0}}.vp-sidebar>.vp-sidebar-links>li>.vp-sidebar-link{font-size:1.1em}.vp-sidebar>.vp-sidebar-links>li:not(:first-child){margin-top:.5rem}.vp-sidebar{position:fixed;top:0;bottom:0;inset-inline-start:0;z-index:1;overflow-y:auto;width:var(--sidebar-width);margin:0;padding-inline-start:calc(var(--sidebar-space) - var(--sidebar-width));background:var(--sidebar-bg-color);box-shadow:2px 0 8px var(--card-shadow);font-size:.94rem;transition:background var(--color-transition),box-shadow var(--color-transition),padding var(--transform-transition),transform var(--transform-transition);-webkit-backdrop-filter:saturate(150%) blur(12px);backdrop-filter:saturate(150%) blur(12px);scrollbar-color:var(--theme-color) var(--border-color);scrollbar-width:thin}@media (max-width: 959px){.vp-sidebar{font-size:.86em}}@media (max-width: 719px){.vp-sidebar{z-index:125;box-shadow:none;transform:translate(-100%)}html[dir=rtl] .vp-sidebar{transform:translate(100%)}}@media (min-width: 1440px){.vp-sidebar{padding-bottom:3rem;box-shadow:none;font-size:1rem}}@media print{.vp-sidebar{display:none}}.vp-sidebar a{display:inline-block;color:var(--text-color);font-weight:400}.vp-sidebar .icon{margin-inline-end:.25em;font-size:1em}.vp-sidebar img.icon{vertical-align:-.125em;height:1em}.vp-sidebar.hide-icon .icon{display:none!important}.vp-sidebar-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9;background:#00000026}.vp-sidebar-mask.fade-enter-active,.vp-sidebar-mask.fade-leave-active{transition:opacity .25s}.vp-sidebar-mask.fade-enter-from,.vp-sidebar-mask.fade-leave-to{opacity:0}h1,h2,h3,h4,h5{font-family:var(--font-family)}.vp-hero-infos{display:none}.image-container{height:150px;width:361px;max-width:calc(100% - 20px);padding:10px;float:right}.search-pro-result-wrapper{scrollbar-color:var(--vp-tc) var(--vp-brc);scrollbar-width:thin}@media (max-width: 419px){.search-pro-result-wrapper{font-size:14px}}.search-pro-result-wrapper::-webkit-scrollbar{width:6px;height:6px}.search-pro-result-wrapper::-webkit-scrollbar-track-piece{border-radius:6px;background:#0000001a}.search-pro-result-wrapper::-webkit-scrollbar-thumb{border-radius:6px;background:var(--vp-tc)}.search-pro-result-wrapper::-webkit-scrollbar-thumb:active{background:var(--vp-tcl)}.search-pro-result-wrapper mark{border-radius:.25em;line-height:1}.search-pro-result-list{margin:0;padding:0}.search-pro-result-list-item{display:block;list-style:none}.search-pro-result-title{position:sticky;top:-2px;z-index:10;margin:-4px;margin-bottom:.25rem;padding:4px;background:var(--vp-bg);color:var(--vp-tc);font-weight:600;font-size:.85em;line-height:2rem;text-indent:.5em}.search-pro-result-item.active .search-pro-result-title{color:var(--vp-tc)}.search-pro-result-type{display:block;width:1rem;height:1rem;margin-inline-start:-.5rem;padding:.5rem;color:var(--vp-tc)}.search-pro-remove-icon{border-width:0;background:transparent;cursor:pointer;box-sizing:content-box;height:1.5rem;padding:0;border-radius:50%;color:var(--vp-tc);font-size:1rem}.search-pro-remove-icon svg{width:1.5rem;height:1.5rem}.search-pro-remove-icon:hover{background:#8080804d}.search-pro-result-content{display:flex;flex-grow:1;flex-direction:column;align-items:stretch;justify-content:center;line-height:1.5}.search-pro-result-content .content-header{margin-bottom:.25rem;border-bottom:1px solid var(--vp-brcd);font-size:.9em}.search-pro-result-item{display:flex;align-items:center;margin:.5rem 0;padding:.5rem .75rem;border-radius:.25rem;background:var(--vp-bgl);color:inherit;box-shadow:0 1px 3px 0 var(--card-shadow);font-weight:400;white-space:pre-wrap;word-wrap:break-word}.search-pro-result-item strong{color:var(--vp-tc)}.search-pro-result-item:hover,.search-pro-result-item.active{background-color:var(--vp-tcl);color:var(--white);cursor:pointer}.search-pro-result-item:hover .search-pro-result-type,.search-pro-result-item:hover .search-pro-remove-icon,.search-pro-result-item:hover strong,.search-pro-result-item.active .search-pro-result-type,.search-pro-result-item.active .search-pro-remove-icon,.search-pro-result-item.active strong{color:var(--white)} diff --git a/assets/team.html-BVqb5cyl.js b/assets/team.html-BVqb5cyl.js new file mode 100644 index 000000000..4d9994b1d --- /dev/null +++ b/assets/team.html-BVqb5cyl.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as l,c as a,a as e,b as r,d as n}from"./app-kq9lCQfY.js";const h={},s=e("p",null,"The funded project team includes:",-1),u={href:"https://www.hs-heilbronn.de/de/christian.fegeler",target:"_blank",rel:"noopener noreferrer"},c={href:"https://github.com/hhund",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/MadMax93",target:"_blank",rel:"noopener noreferrer"},d={href:"https://github.com/schwzr",target:"_blank",rel:"noopener noreferrer"},b={href:"https://github.com/ZilskeC",target:"_blank",rel:"noopener noreferrer"},p={href:"https://github.com/wetret",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/alexanderkiel",target:"_blank",rel:"noopener noreferrer"},f=e("p",null,"We thank additional contributors, including:",-1),g={href:"https://github.com/FloSeidel",target:"_blank",rel:"noopener noreferrer"},k={href:"https://github.com/simonmoedinger",target:"_blank",rel:"noopener noreferrer"};function H(w,x){const t=i("ExternalLinkIcon");return l(),a("div",null,[s,e("ul",null,[e("li",null,[r("Prof. Dr. Christian Fegeler • "),e("a",u,[r("Homepage"),n(t)])]),e("li",null,[r("Hauke Hund • "),e("a",c,[r("GitHub"),n(t)])]),e("li",null,[r("Maximilian Kurscheidt • "),e("a",m,[r("GitHub"),n(t)])]),e("li",null,[r("Simon Schweizer • "),e("a",d,[r("GitHub"),n(t)])]),e("li",null,[r("Christoph Zilske • "),e("a",b,[r("GitHub"),n(t)])]),e("li",null,[r("Reto Wettstein • "),e("a",p,[r("GitHub"),n(t)])]),e("li",null,[r("Alexander Kiel • "),e("a",_,[r("GitHub"),n(t)])])]),f,e("ul",null,[e("li",null,[r("Florian Seidel • "),e("a",g,[r("GitHub"),n(t)])]),e("li",null,[r("Simon Mödinger • "),e("a",k,[r("GitHub"),n(t)])])])])}const T=o(h,[["render",H],["__file","team.html.vue"]]),z=JSON.parse('{"path":"/about/learnmore/team.html","title":"Team","lang":"en-US","frontmatter":{"title":"Team","icon":"group"},"headers":[],"git":{"createdTime":1677250569000,"updatedTime":1693577806000,"contributors":[{"name":"simon","email":"smoeding@stu.hs-heilbronn.de","commits":4},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":0.21,"words":62},"filePathRelative":"about/learnmore/team.md","localizedDate":"February 24, 2023","excerpt":"

    The funded project team includes:

    \\n
      \\n
    • Prof. Dr. Christian Fegeler • Homepage
    • \\n
    • Hauke Hund • GitHub
    • \\n
    • Maximilian Kurscheidt • GitHub
    • \\n
    • Simon Schweizer • GitHub
    • \\n
    • Christoph Zilske • GitHub
    • \\n
    • Reto Wettstein • GitHub
    • \\n
    • Alexander Kiel • GitHub
    • \\n
    "}');export{T as comp,z as data}; diff --git a/assets/upgrade-from-0.html-1FImxnbl.js b/assets/upgrade-from-0.html-1FImxnbl.js new file mode 100644 index 000000000..ca56d2b03 --- /dev/null +++ b/assets/upgrade-from-0.html-1FImxnbl.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as i,c as l,a as e,b as r,d as o}from"./app-kq9lCQfY.js";const s={},p={class:"hint-container tip"},d=e("p",{class:"hint-container-title"},"Work in progress",-1),c=e("p",null,"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:",-1),h={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function u(f,_){const t=a("ExternalLinkIcon");return i(),l("div",null,[e("div",p,[d,c,e("ul",null,[e("li",null,[r("The "),e("a",h,[r("hello world plugin"),o(t)])]),e("li",null,[r("The "),e("a",g,[r("ping pong plugin"),o(t)])]),e("li",null,[r("The "),e("a",m,[r("update allowlist plugin"),o(t)])])])])])}const b=n(s,[["render",u],["__file","upgrade-from-0.html.vue"]]),v=JSON.parse('{"path":"/v1.4.0/develop/upgrade-from-0.html","title":"Upgrade processes from 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade processes from 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1702917645000,"updatedTime":1702917645000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.26,"words":79},"filePathRelative":"v1.4.0/develop/upgrade-from-0.md","localizedDate":"December 18, 2023","excerpt":"
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:

    \\n\\n
    "}');export{b as comp,v as data}; diff --git a/assets/upgrade-from-0.html-3oJ76TSs.js b/assets/upgrade-from-0.html-3oJ76TSs.js new file mode 100644 index 000000000..aa9c74e40 --- /dev/null +++ b/assets/upgrade-from-0.html-3oJ76TSs.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as i,c as l,a as e,b as r,d as o}from"./app-kq9lCQfY.js";const s={},p={class:"hint-container tip"},d=e("p",{class:"hint-container-title"},"Work in progress",-1),c=e("p",null,"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:",-1),h={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function u(f,_){const t=a("ExternalLinkIcon");return i(),l("div",null,[e("div",p,[d,c,e("ul",null,[e("li",null,[r("The "),e("a",h,[r("hello world plugin"),o(t)])]),e("li",null,[r("The "),e("a",g,[r("ping pong plugin"),o(t)])]),e("li",null,[r("The "),e("a",m,[r("update allowlist plugin"),o(t)])])])])])}const b=n(s,[["render",u],["__file","upgrade-from-0.html.vue"]]),v=JSON.parse('{"path":"/v1.5.1/develop/upgrade-from-0.html","title":"Upgrade processes from 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade processes from 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.26,"words":79},"filePathRelative":"v1.5.1/develop/upgrade-from-0.md","localizedDate":"April 17, 2024","excerpt":"
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:

    \\n\\n
    "}');export{b as comp,v as data}; diff --git a/assets/upgrade-from-0.html-B6n07FQd.js b/assets/upgrade-from-0.html-B6n07FQd.js new file mode 100644 index 000000000..cd583f90f --- /dev/null +++ b/assets/upgrade-from-0.html-B6n07FQd.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as i,c as l,a as e,b as r,d as o}from"./app-kq9lCQfY.js";const s={},p={class:"hint-container tip"},d=e("p",{class:"hint-container-title"},"Work in progress",-1),h=e("p",null,"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:",-1),c={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function u(f,_){const t=a("ExternalLinkIcon");return i(),l("div",null,[e("div",p,[d,h,e("ul",null,[e("li",null,[r("The "),e("a",c,[r("hello world plugin"),o(t)])]),e("li",null,[r("The "),e("a",m,[r("ping pong plugin"),o(t)])]),e("li",null,[r("The "),e("a",g,[r("update allowlist plugin"),o(t)])])])])])}const b=n(s,[["render",u],["__file","upgrade-from-0.html.vue"]]),v=JSON.parse('{"path":"/v1.1.0/develop/upgrade-from-0.html","title":"Upgrade processes from 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade processes from 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1692790324000,"updatedTime":1692966267000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.26,"words":79},"filePathRelative":"v1.1.0/develop/upgrade-from-0.md","localizedDate":"August 23, 2023","excerpt":"
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:

    \\n\\n
    "}');export{b as comp,v as data}; diff --git a/assets/upgrade-from-0.html-BAE2R3EL.js b/assets/upgrade-from-0.html-BAE2R3EL.js new file mode 100644 index 000000000..b0a5eea88 --- /dev/null +++ b/assets/upgrade-from-0.html-BAE2R3EL.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as l,c as i,a as e,b as r,d as o}from"./app-kq9lCQfY.js";const s={},p={class:"hint-container tip"},d=e("p",{class:"hint-container-title"},"Work in progress",-1),h=e("p",null,"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:",-1),c={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function m(f,_){const t=a("ExternalLinkIcon");return l(),i("div",null,[e("div",p,[d,h,e("ul",null,[e("li",null,[r("The "),e("a",c,[r("hello world plugin"),o(t)])]),e("li",null,[r("The "),e("a",g,[r("ping pong plugin"),o(t)])]),e("li",null,[r("The "),e("a",u,[r("update allowlist plugin"),o(t)])])])])])}const b=n(s,[["render",m],["__file","upgrade-from-0.html.vue"]]),v=JSON.parse('{"path":"/v1.5.2/develop/upgrade-from-0.html","title":"Upgrade processes from 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade processes from 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.26,"words":79},"filePathRelative":"v1.5.2/develop/upgrade-from-0.md","localizedDate":"July 8, 2024","excerpt":"
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:

    \\n\\n
    "}');export{b as comp,v as data}; diff --git a/assets/upgrade-from-0.html-BLIdrZVI.js b/assets/upgrade-from-0.html-BLIdrZVI.js new file mode 100644 index 000000000..3338f45dd --- /dev/null +++ b/assets/upgrade-from-0.html-BLIdrZVI.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as l,c as i,a as e,b as r,d as o}from"./app-kq9lCQfY.js";const s={},p={class:"hint-container tip"},d=e("p",{class:"hint-container-title"},"Work in progress",-1),c=e("p",null,"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:",-1),h={href:"https://github.com/datasharingframework/dsf-process-hello-world/tree/develop",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function u(f,_){const t=a("ExternalLinkIcon");return l(),i("div",null,[e("div",p,[d,c,e("ul",null,[e("li",null,[r("The "),e("a",h,[r("hello world plugin"),o(t)])]),e("li",null,[r("The "),e("a",g,[r("ping pong plugin"),o(t)])]),e("li",null,[r("The "),e("a",m,[r("update allowlist plugin"),o(t)])])])])])}const b=n(s,[["render",u],["__file","upgrade-from-0.html.vue"]]),v=JSON.parse('{"path":"/v1.0.0/develop/upgrade-from-0.html","title":"Upgrade processes from 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade processes from 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1692708510000,"updatedTime":1692708510000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.26,"words":79},"filePathRelative":"v1.0.0/develop/upgrade-from-0.md","localizedDate":"August 22, 2023","excerpt":"
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:

    \\n\\n
    "}');export{b as comp,v as data}; diff --git a/assets/upgrade-from-0.html-BU67otYx.js b/assets/upgrade-from-0.html-BU67otYx.js new file mode 100644 index 000000000..70e263e42 --- /dev/null +++ b/assets/upgrade-from-0.html-BU67otYx.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,e as n}from"./app-kq9lCQfY.js";const i={},r=n('

    Do not upgrade unless prompted!

    Please do not upgrade your DSF installation from DSF 0.9.x to DSF 1.x unless prompted to do so (e.g. from the German MII).

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported. Instead, please perform the following steps:

    1. shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. install the new DSF according to the instructions.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    ',4),a=[r];function s(p,d){return t(),o("div",null,a)}const m=e(i,[["render",s],["__file","upgrade-from-0.html.vue"]]),u=JSON.parse('{"path":"/v1.0.0/maintain/upgrade-from-0.html","title":"Upgrade from DSF 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1692708510000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.45,"words":134},"filePathRelative":"v1.0.0/maintain/upgrade-from-0.md","localizedDate":"August 22, 2023","excerpt":"
    \\n

    Do not upgrade unless prompted!

    \\n

    Please do not upgrade your DSF installation from DSF 0.9.x to DSF 1.x unless prompted to do so (e.g. from the German MII).

    \\n
    \\n

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported. Instead, please perform the following steps:

    "}');export{m as comp,u as data}; diff --git a/assets/upgrade-from-0.html-C6LY6wwR.js b/assets/upgrade-from-0.html-C6LY6wwR.js new file mode 100644 index 000000000..447021647 --- /dev/null +++ b/assets/upgrade-from-0.html-C6LY6wwR.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,e as n}from"./app-kq9lCQfY.js";const a={},i=n('

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    Do not use your 0.9.x configuration as starting point

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    Instead, please perform the following steps:

    1. Shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. Install the new DSF according to the instructions.
    4. You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).
    5. Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).
    6. If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).
    7. If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Use your old virtual machine

    We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.

    ',6),r=[i];function s(c,l){return t(),o("div",null,r)}const u=e(a,[["render",s],["__file","upgrade-from-0.html.vue"]]),h=JSON.parse('{"path":"/v1.3.2/maintain/upgrade-from-0.html","title":"Upgrade from DSF 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1701710218000,"updatedTime":1701710218000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.12,"words":337},"filePathRelative":"v1.3.2/maintain/upgrade-from-0.md","localizedDate":"December 4, 2023","excerpt":"

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    \\n
    \\n

    Do not use your 0.9.x configuration as starting point

    \\n

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    \\n

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    \\n
    "}');export{u as comp,h as data}; diff --git a/assets/upgrade-from-0.html-COvMZ4yo.js b/assets/upgrade-from-0.html-COvMZ4yo.js new file mode 100644 index 000000000..83ee40696 --- /dev/null +++ b/assets/upgrade-from-0.html-COvMZ4yo.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,e as n}from"./app-kq9lCQfY.js";const a={},i=n('

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    Do not use your 0.9.x configuration as starting point

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    Instead, please perform the following steps:

    1. Shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. Install the new DSF according to the instructions.
    4. You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).
    5. Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).
    6. If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).
    7. If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Use your old virtual machine

    We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.

    ',6),r=[i];function s(l,c){return t(),o("div",null,r)}const u=e(a,[["render",s],["__file","upgrade-from-0.html.vue"]]),h=JSON.parse('{"path":"/v1.5.2/maintain/upgrade-from-0.html","title":"Upgrade from DSF 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.12,"words":337},"filePathRelative":"v1.5.2/maintain/upgrade-from-0.md","localizedDate":"July 8, 2024","excerpt":"

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    \\n
    \\n

    Do not use your 0.9.x configuration as starting point

    \\n

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    \\n

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    \\n
    "}');export{u as comp,h as data}; diff --git a/assets/upgrade-from-0.html-CPvp7H4y.js b/assets/upgrade-from-0.html-CPvp7H4y.js new file mode 100644 index 000000000..9b30a9ba0 --- /dev/null +++ b/assets/upgrade-from-0.html-CPvp7H4y.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,e as n}from"./app-kq9lCQfY.js";const a={},i=n('

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    Do not use your 0.9.x configuration as starting point

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    Instead, please perform the following steps:

    1. Shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. Install the new DSF according to the instructions.
    4. You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).
    5. Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).
    6. If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).
    7. If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Use your old virtual machine

    We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.

    ',6),r=[i];function s(c,l){return t(),o("div",null,r)}const u=e(a,[["render",s],["__file","upgrade-from-0.html.vue"]]),h=JSON.parse('{"path":"/v1.5.0/maintain/upgrade-from-0.html","title":"Upgrade from DSF 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1708419681000,"updatedTime":1708419681000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.12,"words":337},"filePathRelative":"v1.5.0/maintain/upgrade-from-0.md","localizedDate":"February 20, 2024","excerpt":"

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    \\n
    \\n

    Do not use your 0.9.x configuration as starting point

    \\n

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    \\n

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    \\n
    "}');export{u as comp,h as data}; diff --git a/assets/upgrade-from-0.html-CRAe3DJ7.js b/assets/upgrade-from-0.html-CRAe3DJ7.js new file mode 100644 index 000000000..a2a235e65 --- /dev/null +++ b/assets/upgrade-from-0.html-CRAe3DJ7.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as i,c as l,a as e,b as r,d as o}from"./app-kq9lCQfY.js";const s={},p={class:"hint-container tip"},d=e("p",{class:"hint-container-title"},"Work in progress",-1),c=e("p",null,"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:",-1),h={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function u(f,_){const t=a("ExternalLinkIcon");return i(),l("div",null,[e("div",p,[d,c,e("ul",null,[e("li",null,[r("The "),e("a",h,[r("hello world plugin"),o(t)])]),e("li",null,[r("The "),e("a",g,[r("ping pong plugin"),o(t)])]),e("li",null,[r("The "),e("a",m,[r("update allowlist plugin"),o(t)])])])])])}const b=n(s,[["render",u],["__file","upgrade-from-0.html.vue"]]),v=JSON.parse('{"path":"/v1.3.1/develop/upgrade-from-0.html","title":"Upgrade processes from 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade processes from 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1698748420000,"updatedTime":1698748420000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.26,"words":79},"filePathRelative":"v1.3.1/develop/upgrade-from-0.md","localizedDate":"October 31, 2023","excerpt":"
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:

    \\n\\n
    "}');export{b as comp,v as data}; diff --git a/assets/upgrade-from-0.html-CXaHlGc8.js b/assets/upgrade-from-0.html-CXaHlGc8.js new file mode 100644 index 000000000..483fe152e --- /dev/null +++ b/assets/upgrade-from-0.html-CXaHlGc8.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as i,c as l,a as e,b as r,d as o}from"./app-kq9lCQfY.js";const s={},p={class:"hint-container tip"},d=e("p",{class:"hint-container-title"},"Work in progress",-1),c=e("p",null,"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:",-1),h={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function u(f,_){const t=a("ExternalLinkIcon");return i(),l("div",null,[e("div",p,[d,c,e("ul",null,[e("li",null,[r("The "),e("a",h,[r("hello world plugin"),o(t)])]),e("li",null,[r("The "),e("a",g,[r("ping pong plugin"),o(t)])]),e("li",null,[r("The "),e("a",m,[r("update allowlist plugin"),o(t)])])])])])}const b=n(s,[["render",u],["__file","upgrade-from-0.html.vue"]]),v=JSON.parse('{"path":"/v1.2.0/develop/upgrade-from-0.html","title":"Upgrade processes from 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade processes from 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1694544770000,"updatedTime":1694544770000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.26,"words":79},"filePathRelative":"v1.2.0/develop/upgrade-from-0.md","localizedDate":"September 12, 2023","excerpt":"
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:

    \\n\\n
    "}');export{b as comp,v as data}; diff --git a/assets/upgrade-from-0.html-Ccchte1p.js b/assets/upgrade-from-0.html-Ccchte1p.js new file mode 100644 index 000000000..76f443e9c --- /dev/null +++ b/assets/upgrade-from-0.html-Ccchte1p.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,e as n}from"./app-kq9lCQfY.js";const a={},i=n('

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    Do not use your 0.9.x configuration as starting point

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    Instead, please perform the following steps:

    1. Shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. Install the new DSF according to the instructions.
    4. You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).
    5. Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).
    6. If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).
    7. If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Use your old virtual machine

    We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.

    ',6),r=[i];function s(c,l){return t(),o("div",null,r)}const u=e(a,[["render",s],["__file","upgrade-from-0.html.vue"]]),h=JSON.parse('{"path":"/v1.4.0/maintain/upgrade-from-0.html","title":"Upgrade from DSF 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1702917645000,"updatedTime":1702917645000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.12,"words":337},"filePathRelative":"v1.4.0/maintain/upgrade-from-0.md","localizedDate":"December 18, 2023","excerpt":"

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    \\n
    \\n

    Do not use your 0.9.x configuration as starting point

    \\n

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    \\n

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    \\n
    "}');export{u as comp,h as data}; diff --git a/assets/upgrade-from-0.html-Ct5W8opP.js b/assets/upgrade-from-0.html-Ct5W8opP.js new file mode 100644 index 000000000..da09cc417 --- /dev/null +++ b/assets/upgrade-from-0.html-Ct5W8opP.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,e as n}from"./app-kq9lCQfY.js";const r={},i=n('

    Do not upgrade unless prompted!

    Please do not upgrade your DSF installation from DSF 0.9.x to DSF 1.x unless prompted to do so (e.g. from the German MII).

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported. Instead, please perform the following steps:

    1. shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. install the new DSF according to the instructions.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    ',4),a=[i];function s(p,d){return t(),o("div",null,a)}const m=e(r,[["render",s],["__file","upgrade-from-0.html.vue"]]),u=JSON.parse('{"path":"/v1.1.0/maintain/upgrade-from-0.html","title":"Upgrade from DSF 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1692790324000,"updatedTime":1692790324000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.45,"words":134},"filePathRelative":"v1.1.0/maintain/upgrade-from-0.md","localizedDate":"August 23, 2023","excerpt":"
    \\n

    Do not upgrade unless prompted!

    \\n

    Please do not upgrade your DSF installation from DSF 0.9.x to DSF 1.x unless prompted to do so (e.g. from the German MII).

    \\n
    \\n

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported. Instead, please perform the following steps:

    "}');export{m as comp,u as data}; diff --git a/assets/upgrade-from-0.html-D4zkI0hy.js b/assets/upgrade-from-0.html-D4zkI0hy.js new file mode 100644 index 000000000..f6a7f2f14 --- /dev/null +++ b/assets/upgrade-from-0.html-D4zkI0hy.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,e as n}from"./app-kq9lCQfY.js";const r={},i=n('

    Do not upgrade unless prompted!

    Please do not upgrade your DSF installation from DSF 0.9.x to DSF 1.x unless prompted to do so (e.g. from the German MII).

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported. Instead, please perform the following steps:

    1. shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. install the new DSF according to the instructions.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    ',4),a=[i];function s(p,d){return t(),o("div",null,a)}const m=e(r,[["render",s],["__file","upgrade-from-0.html.vue"]]),u=JSON.parse('{"path":"/v1.2.0/maintain/upgrade-from-0.html","title":"Upgrade from DSF 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1694544770000,"updatedTime":1694544770000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.45,"words":134},"filePathRelative":"v1.2.0/maintain/upgrade-from-0.md","localizedDate":"September 12, 2023","excerpt":"
    \\n

    Do not upgrade unless prompted!

    \\n

    Please do not upgrade your DSF installation from DSF 0.9.x to DSF 1.x unless prompted to do so (e.g. from the German MII).

    \\n
    \\n

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported. Instead, please perform the following steps:

    "}');export{m as comp,u as data}; diff --git a/assets/upgrade-from-0.html-D5p1Fyxp.js b/assets/upgrade-from-0.html-D5p1Fyxp.js new file mode 100644 index 000000000..a5648474b --- /dev/null +++ b/assets/upgrade-from-0.html-D5p1Fyxp.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as i,c as l,a as e,b as r,d as o}from"./app-kq9lCQfY.js";const s={},p={class:"hint-container tip"},d=e("p",{class:"hint-container-title"},"Work in progress",-1),c=e("p",null,"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:",-1),h={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function u(f,_){const t=a("ExternalLinkIcon");return i(),l("div",null,[e("div",p,[d,c,e("ul",null,[e("li",null,[r("The "),e("a",h,[r("hello world plugin"),o(t)])]),e("li",null,[r("The "),e("a",g,[r("ping pong plugin"),o(t)])]),e("li",null,[r("The "),e("a",m,[r("update allowlist plugin"),o(t)])])])])])}const b=n(s,[["render",u],["__file","upgrade-from-0.html.vue"]]),v=JSON.parse('{"path":"/v1.3.0/develop/upgrade-from-0.html","title":"Upgrade processes from 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade processes from 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1696944513000,"updatedTime":1696944513000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.26,"words":79},"filePathRelative":"v1.3.0/develop/upgrade-from-0.md","localizedDate":"October 10, 2023","excerpt":"
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:

    \\n\\n
    "}');export{b as comp,v as data}; diff --git a/assets/upgrade-from-0.html-D9NWv8w7.js b/assets/upgrade-from-0.html-D9NWv8w7.js new file mode 100644 index 000000000..cb22ce022 --- /dev/null +++ b/assets/upgrade-from-0.html-D9NWv8w7.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,e as n}from"./app-kq9lCQfY.js";const a={},i=n('

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    Do not use your 0.9.x configuration as starting point

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    Instead, please perform the following steps:

    1. Shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. Install the new DSF according to the instructions.
    4. You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).
    5. Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).
    6. If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).
    7. If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Use your old virtual machine

    We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.

    ',6),r=[i];function s(l,c){return t(),o("div",null,r)}const u=e(a,[["render",s],["__file","upgrade-from-0.html.vue"]]),h=JSON.parse('{"path":"/stable/maintain/upgrade-from-0.html","title":"Upgrade from DSF 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1688985700000,"updatedTime":1692790324000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":3},{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.12,"words":337},"filePathRelative":"stable/maintain/upgrade-from-0.md","localizedDate":"July 10, 2023","excerpt":"

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    \\n
    \\n

    Do not use your 0.9.x configuration as starting point

    \\n

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    \\n

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    \\n
    "}');export{u as comp,h as data}; diff --git a/assets/upgrade-from-0.html-Dyi1OPIG.js b/assets/upgrade-from-0.html-Dyi1OPIG.js new file mode 100644 index 000000000..c3f8f1b2f --- /dev/null +++ b/assets/upgrade-from-0.html-Dyi1OPIG.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as i,c as l,a as e,b as r,d as o}from"./app-kq9lCQfY.js";const s={},p={class:"hint-container tip"},d=e("p",{class:"hint-container-title"},"Work in progress",-1),c=e("p",null,"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:",-1),h={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function u(f,_){const t=a("ExternalLinkIcon");return i(),l("div",null,[e("div",p,[d,c,e("ul",null,[e("li",null,[r("The "),e("a",h,[r("hello world plugin"),o(t)])]),e("li",null,[r("The "),e("a",g,[r("ping pong plugin"),o(t)])]),e("li",null,[r("The "),e("a",m,[r("update allowlist plugin"),o(t)])])])])])}const b=n(s,[["render",u],["__file","upgrade-from-0.html.vue"]]),v=JSON.parse('{"path":"/v1.5.0/develop/upgrade-from-0.html","title":"Upgrade processes from 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade processes from 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1708419681000,"updatedTime":1708419681000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.26,"words":79},"filePathRelative":"v1.5.0/develop/upgrade-from-0.md","localizedDate":"February 20, 2024","excerpt":"
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:

    \\n\\n
    "}');export{b as comp,v as data}; diff --git a/assets/upgrade-from-0.html-LF0qk2hq.js b/assets/upgrade-from-0.html-LF0qk2hq.js new file mode 100644 index 000000000..70af30419 --- /dev/null +++ b/assets/upgrade-from-0.html-LF0qk2hq.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as i,c as l,a as e,b as r,d as o}from"./app-kq9lCQfY.js";const s={},p={class:"hint-container tip"},d=e("p",{class:"hint-container-title"},"Work in progress",-1),c=e("p",null,"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:",-1),h={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function u(f,_){const t=a("ExternalLinkIcon");return i(),l("div",null,[e("div",p,[d,c,e("ul",null,[e("li",null,[r("The "),e("a",h,[r("hello world plugin"),o(t)])]),e("li",null,[r("The "),e("a",g,[r("ping pong plugin"),o(t)])]),e("li",null,[r("The "),e("a",m,[r("update allowlist plugin"),o(t)])])])])])}const b=n(s,[["render",u],["__file","upgrade-from-0.html.vue"]]),v=JSON.parse('{"path":"/v1.3.2/develop/upgrade-from-0.html","title":"Upgrade processes from 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade processes from 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1701710218000,"updatedTime":1701710218000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.26,"words":79},"filePathRelative":"v1.3.2/develop/upgrade-from-0.md","localizedDate":"December 4, 2023","excerpt":"
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:

    \\n\\n
    "}');export{b as comp,v as data}; diff --git a/assets/upgrade-from-0.html-Qee7uBnc.js b/assets/upgrade-from-0.html-Qee7uBnc.js new file mode 100644 index 000000000..5028aa91b --- /dev/null +++ b/assets/upgrade-from-0.html-Qee7uBnc.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,e as n}from"./app-kq9lCQfY.js";const a={},i=n('

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    Do not use your 0.9.x configuration as starting point

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    Instead, please perform the following steps:

    1. Shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. Install the new DSF according to the instructions.
    4. You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).
    5. Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).
    6. If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).
    7. If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Use your old virtual machine

    We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.

    ',6),r=[i];function s(c,l){return t(),o("div",null,r)}const u=e(a,[["render",s],["__file","upgrade-from-0.html.vue"]]),h=JSON.parse('{"path":"/v1.3.0/maintain/upgrade-from-0.html","title":"Upgrade from DSF 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1696944513000,"updatedTime":1698660030000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":1.12,"words":337},"filePathRelative":"v1.3.0/maintain/upgrade-from-0.md","localizedDate":"October 10, 2023","excerpt":"

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    \\n
    \\n

    Do not use your 0.9.x configuration as starting point

    \\n

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    \\n

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    \\n
    "}');export{u as comp,h as data}; diff --git a/assets/upgrade-from-0.html-Uv4WDNVz.js b/assets/upgrade-from-0.html-Uv4WDNVz.js new file mode 100644 index 000000000..57fbb08c5 --- /dev/null +++ b/assets/upgrade-from-0.html-Uv4WDNVz.js @@ -0,0 +1 @@ +import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,o as i,c as l,a as e,b as r,d as o}from"./app-kq9lCQfY.js";const s={},p={class:"hint-container tip"},d=e("p",{class:"hint-container-title"},"Work in progress",-1),c=e("p",null,"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:",-1),h={href:"https://github.com/datasharingframework/dsf-process-hello-world",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/datasharingframework/dsf-process-ping-pong",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/datasharingframework/dsf-process-allow-list",target:"_blank",rel:"noopener noreferrer"};function u(f,_){const t=a("ExternalLinkIcon");return i(),l("div",null,[e("div",p,[d,c,e("ul",null,[e("li",null,[r("The "),e("a",h,[r("hello world plugin"),o(t)])]),e("li",null,[r("The "),e("a",m,[r("ping pong plugin"),o(t)])]),e("li",null,[r("The "),e("a",g,[r("update allowlist plugin"),o(t)])])])])])}const b=n(s,[["render",u],["__file","upgrade-from-0.html.vue"]]),v=JSON.parse('{"path":"/stable/develop/upgrade-from-0.html","title":"Upgrade processes from 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade processes from 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1688985700000,"updatedTime":1692790324000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2},{"name":"Simon Mödinger","email":"smoeding@stud.hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.26,"words":79},"filePathRelative":"stable/develop/upgrade-from-0.md","localizedDate":"July 10, 2023","excerpt":"
    \\n

    Work in progress

    \\n

    We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:

    \\n\\n
    "}');export{b as comp,v as data}; diff --git a/assets/upgrade-from-0.html-hTNkwIzD.js b/assets/upgrade-from-0.html-hTNkwIzD.js new file mode 100644 index 000000000..1f5f71e98 --- /dev/null +++ b/assets/upgrade-from-0.html-hTNkwIzD.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,e as n}from"./app-kq9lCQfY.js";const a={},i=n('

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    Do not use your 0.9.x configuration as starting point

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    Instead, please perform the following steps:

    1. Shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. Install the new DSF according to the instructions.
    4. You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).
    5. Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).
    6. If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).
    7. If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Use your old virtual machine

    We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.

    ',6),r=[i];function s(c,l){return t(),o("div",null,r)}const u=e(a,[["render",s],["__file","upgrade-from-0.html.vue"]]),h=JSON.parse('{"path":"/v1.3.1/maintain/upgrade-from-0.html","title":"Upgrade from DSF 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1698748420000,"updatedTime":1698748420000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.12,"words":337},"filePathRelative":"v1.3.1/maintain/upgrade-from-0.md","localizedDate":"October 31, 2023","excerpt":"

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    \\n
    \\n

    Do not use your 0.9.x configuration as starting point

    \\n

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    \\n

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    \\n
    "}');export{u as comp,h as data}; diff --git a/assets/upgrade-from-0.html-y0bCUoag.js b/assets/upgrade-from-0.html-y0bCUoag.js new file mode 100644 index 000000000..43d08908a --- /dev/null +++ b/assets/upgrade-from-0.html-y0bCUoag.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,e as n}from"./app-kq9lCQfY.js";const a={},i=n('

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    Do not use your 0.9.x configuration as starting point

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    Instead, please perform the following steps:

    1. Shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. Install the new DSF according to the instructions.
    4. You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).
    5. Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).
    6. If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).
    7. If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Use your old virtual machine

    We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.

    ',6),r=[i];function s(c,l){return t(),o("div",null,r)}const u=e(a,[["render",s],["__file","upgrade-from-0.html.vue"]]),h=JSON.parse('{"path":"/v1.5.1/maintain/upgrade-from-0.html","title":"Upgrade from DSF 0.9.x","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 0.9.x","icon":"update"},"headers":[],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.12,"words":337},"filePathRelative":"v1.5.1/maintain/upgrade-from-0.md","localizedDate":"April 17, 2024","excerpt":"

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    \\n
    \\n

    Do not use your 0.9.x configuration as starting point

    \\n

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    \\n

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    \\n
    "}');export{u as comp,h as data}; diff --git a/assets/upgrade-from-1.html-3neSA-BB.js b/assets/upgrade-from-1.html-3neSA-BB.js new file mode 100644 index 000000000..c8c724e02 --- /dev/null +++ b/assets/upgrade-from-1.html-3neSA-BB.js @@ -0,0 +1,22 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as r,c as t,a as e,b as n,d as o,e as l}from"./app-kq9lCQfY.js";const d={},p=l(`

    Upgrading the DSF from 1.0.0 to 1.1.0 involves modifying the docker-compose.yml files and recreating the containers.

    Upgrade from 0.9.x

    If you want to migrate from DSF 0.9.x, please follow these instructions.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.1.0_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.1.0

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.0.0
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.1.0
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.0.0
    ++   image: ghcr.io/datasharingframework/fhir:1.1.0
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.1.0_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.1.0

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.0.0
    ++   image: ghcr.io/datasharingframework/bpe:1.1.0
    +    restart: on-failure
    +...
    +
    `,9),c=e("li",null,[e("p",null,[n("Upgrade the DSF BPE containers"),e("br"),n(" From "),e("code",null,"/opt/bpe"),n(" execute")]),e("div",{class:"language-text line-numbers-mode","data-ext":"text","data-title":"text"},[e("pre",{class:"language-text"},[e("code",null,`docker compose up -d && docker compose logs -f +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])])],-1),u=e("p",null,"Verify your upgrade:",-1),f=e("li",null,[n("Verify the DSF FHIR server is running in version 1.1.0. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.1.0, [...]")],-1),m=e("li",null,"Verify the DSF FHIR server started without errors",-1),h={href:"https://your-dsf-endpoint.de/fhir/",target:"_blank",rel:"noopener noreferrer"},g=e("li",null,[n("Verify the DSF BPE server is running in version 1.1.0. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.1.0, [...]")],-1),v=e("li",null,"Verify the DSF BPE server started without errors",-1),b=e("li",null,"Verify your install with a ping/pong test",-1);function k(x,_){const s=i("ExternalLinkIcon");return r(),t("div",null,[p,e("ol",null,[c,e("li",null,[u,e("ul",null,[f,m,e("li",null,[n("Verify the DSF FHIR server is accessible via https, for example by browsing to "),e("a",h,[n("https://your-dsf-endpoint.de/fhir/"),o(s)]),n(" (authentication with your client-certificate)")]),g,v,b])])])])}const S=a(d,[["render",k],["__file","upgrade-from-1.html.vue"]]),w=JSON.parse('{"path":"/v1.1.0/maintain/upgrade-from-1.html","title":"Upgrade from DSF 1.x","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 1.x","icon":"update"},"headers":[{"level":2,"title":"Modify DSF FHIR Server Setup","slug":"modify-dsf-fhir-server-setup","link":"#modify-dsf-fhir-server-setup","children":[]},{"level":2,"title":"Modify DSF BPE Server Setup","slug":"modify-dsf-bpe-server-setup","link":"#modify-dsf-bpe-server-setup","children":[]}],"git":{"createdTime":1692805200000,"updatedTime":1703006341000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":2},{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.06,"words":317},"filePathRelative":"v1.1.0/maintain/upgrade-from-1.md","localizedDate":"August 23, 2023","excerpt":"

    Upgrading the DSF from 1.0.0 to 1.1.0 involves modifying the docker-compose.yml files and recreating the containers.

    \\n
    \\n

    Upgrade from 0.9.x

    \\n

    If you want to migrate from DSF 0.9.x, please follow these instructions.

    \\n
    "}');export{S as comp,w as data}; diff --git a/assets/upgrade-from-1.html-Bedy_Kcy.js b/assets/upgrade-from-1.html-Bedy_Kcy.js new file mode 100644 index 000000000..d50faad15 --- /dev/null +++ b/assets/upgrade-from-1.html-Bedy_Kcy.js @@ -0,0 +1,22 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as r,c as t,a as e,b as n,d as o,e as l}from"./app-kq9lCQfY.js";const d={},p=l(`

    Upgrading the DSF from 1.5.0 to 1.5.1 involves modifying the docker-compose.yml files and recreating the containers.

    Update to DSF 1.2.0 first

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.5.1_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.5.1.

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.5.0
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.5.1
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.5.0
    ++   image: ghcr.io/datasharingframework/fhir:1.5.1
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.5.1_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.5.1.

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.5.0
    ++   image: ghcr.io/datasharingframework/bpe:1.5.1
    +    restart: on-failure
    +...
    +
    `,9),c={start:"3"},u=e("li",null,[e("p",null,[n("Upgrade the DSF BPE containers"),e("br"),n(" From "),e("code",null,"/opt/bpe"),n(" execute")]),e("div",{class:"language-text line-numbers-mode","data-ext":"text","data-title":"text"},[e("pre",{class:"language-text"},[e("code",null,`docker compose up -d && docker compose logs -f +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])])],-1),f=e("p",null,"Verify your upgrade:",-1),m=e("li",null,[n("Verify the DSF FHIR server is running in version 1.5.1. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.5.1, [...]")],-1),h=e("li",null,"Verify the DSF FHIR server started without errors",-1),g={href:"https://your-dsf-endpoint.de/fhir/",target:"_blank",rel:"noopener noreferrer"},v=e("li",null,[n("Verify the DSF BPE server is running in version 1.5.1. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.5.1, [...]")],-1),b=e("li",null,"Verify the DSF BPE server started without errors",-1),k=e("li",null,"Verify your install with a ping/pong test",-1);function _(x,y){const s=i("ExternalLinkIcon");return r(),t("div",null,[p,e("ol",c,[u,e("li",null,[f,e("ul",null,[m,h,e("li",null,[n("Verify the DSF FHIR server is accessible via https, for example by browsing to "),e("a",g,[n("https://your-dsf-endpoint.de/fhir/"),o(s)]),n(" (authentication with your client-certificate)")]),v,b,k])])])])}const D=a(d,[["render",_],["__file","upgrade-from-1.html.vue"]]),w=JSON.parse('{"path":"/v1.5.1/maintain/upgrade-from-1.html","title":"Upgrade from DSF 1.5.0","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 1.5.0","icon":"update"},"headers":[{"level":2,"title":"Modify DSF FHIR Server Setup","slug":"modify-dsf-fhir-server-setup","link":"#modify-dsf-fhir-server-setup","children":[]},{"level":2,"title":"Modify DSF BPE Server Setup","slug":"modify-dsf-bpe-server-setup","link":"#modify-dsf-bpe-server-setup","children":[]}],"git":{"createdTime":1713374283000,"updatedTime":1713374283000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.07,"words":322},"filePathRelative":"v1.5.1/maintain/upgrade-from-1.md","localizedDate":"April 17, 2024","excerpt":"

    Upgrading the DSF from 1.5.0 to 1.5.1 involves modifying the docker-compose.yml files and recreating the containers.

    \\n
    \\n

    Update to DSF 1.2.0 first

    \\n

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    \\n
    "}');export{D as comp,w as data}; diff --git a/assets/upgrade-from-1.html-Bn629slA.js b/assets/upgrade-from-1.html-Bn629slA.js new file mode 100644 index 000000000..217674864 --- /dev/null +++ b/assets/upgrade-from-1.html-Bn629slA.js @@ -0,0 +1,22 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as r,c as t,a as e,b as n,d as o,e as l}from"./app-kq9lCQfY.js";const d={},p=l(`

    Upgrading the DSF from 1.4.0 to 1.5.0 involves modifying the docker-compose.yml files and recreating the containers.

    Update to DSF 1.2.0 first

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.5.0_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.5.0.

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.4.0
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.5.0
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.4.0
    ++   image: ghcr.io/datasharingframework/fhir:1.5.0
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.5.0_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.5.0.

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.4.0
    ++   image: ghcr.io/datasharingframework/bpe:1.5.0
    +    restart: on-failure
    +...
    +
    `,9),c={start:"3"},u=e("li",null,[e("p",null,[n("Upgrade the DSF BPE containers"),e("br"),n(" From "),e("code",null,"/opt/bpe"),n(" execute")]),e("div",{class:"language-text line-numbers-mode","data-ext":"text","data-title":"text"},[e("pre",{class:"language-text"},[e("code",null,`docker compose up -d && docker compose logs -f +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])])],-1),f=e("p",null,"Verify your upgrade:",-1),m=e("li",null,[n("Verify the DSF FHIR server is running in version 1.5.0. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.5.0, [...]")],-1),h=e("li",null,"Verify the DSF FHIR server started without errors",-1),g={href:"https://your-dsf-endpoint.de/fhir/",target:"_blank",rel:"noopener noreferrer"},v=e("li",null,[n("Verify the DSF BPE server is running in version 1.5.0. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.5.0, [...]")],-1),b=e("li",null,"Verify the DSF BPE server started without errors",-1),k=e("li",null,"Verify your install with a ping/pong test",-1);function _(x,y){const s=i("ExternalLinkIcon");return r(),t("div",null,[p,e("ol",c,[u,e("li",null,[f,e("ul",null,[m,h,e("li",null,[n("Verify the DSF FHIR server is accessible via https, for example by browsing to "),e("a",g,[n("https://your-dsf-endpoint.de/fhir/"),o(s)]),n(" (authentication with your client-certificate)")]),v,b,k])])])])}const D=a(d,[["render",_],["__file","upgrade-from-1.html.vue"]]),w=JSON.parse('{"path":"/v1.5.0/maintain/upgrade-from-1.html","title":"Upgrade from DSF 1.4.0","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 1.4.0","icon":"update"},"headers":[{"level":2,"title":"Modify DSF FHIR Server Setup","slug":"modify-dsf-fhir-server-setup","link":"#modify-dsf-fhir-server-setup","children":[]},{"level":2,"title":"Modify DSF BPE Server Setup","slug":"modify-dsf-bpe-server-setup","link":"#modify-dsf-bpe-server-setup","children":[]}],"git":{"createdTime":1708419681000,"updatedTime":1708419681000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.07,"words":322},"filePathRelative":"v1.5.0/maintain/upgrade-from-1.md","localizedDate":"February 20, 2024","excerpt":"

    Upgrading the DSF from 1.4.0 to 1.5.0 involves modifying the docker-compose.yml files and recreating the containers.

    \\n
    \\n

    Update to DSF 1.2.0 first

    \\n

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    \\n
    "}');export{D as comp,w as data}; diff --git a/assets/upgrade-from-1.html-BybCxOQT.js b/assets/upgrade-from-1.html-BybCxOQT.js new file mode 100644 index 000000000..06eb84262 --- /dev/null +++ b/assets/upgrade-from-1.html-BybCxOQT.js @@ -0,0 +1,22 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as r,c as t,a as e,b as n,d as o,e as l}from"./app-kq9lCQfY.js";const d={},p=l(`

    Upgrading the DSF from 1.5.1 to 1.5.2 involves modifying the docker-compose.yml files and recreating the containers.

    Update to DSF 1.2.0 first

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.5.2_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.5.2.

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.5.1
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.5.2
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.5.1
    ++   image: ghcr.io/datasharingframework/fhir:1.5.2
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.5.2_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.5.2.

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.5.1
    ++   image: ghcr.io/datasharingframework/bpe:1.5.2
    +    restart: on-failure
    +...
    +
    `,9),c={start:"3"},u=e("li",null,[e("p",null,[n("Upgrade the DSF BPE containers"),e("br"),n(" From "),e("code",null,"/opt/bpe"),n(" execute")]),e("div",{class:"language-text line-numbers-mode","data-ext":"text","data-title":"text"},[e("pre",{class:"language-text"},[e("code",null,`docker compose up -d && docker compose logs -f +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])])],-1),f=e("p",null,"Verify your upgrade:",-1),m=e("li",null,[n("Verify the DSF FHIR server is running in version 1.5.2. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.5.2, [...]")],-1),h=e("li",null,"Verify the DSF FHIR server started without errors",-1),g={href:"https://your-dsf-endpoint.de/fhir/",target:"_blank",rel:"noopener noreferrer"},v=e("li",null,[n("Verify the DSF BPE server is running in version 1.5.2. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.5.2, [...]")],-1),k=e("li",null,"Verify the DSF BPE server started without errors",-1),b=e("li",null,"Verify your install with a ping/pong test",-1);function _(x,y){const s=i("ExternalLinkIcon");return r(),t("div",null,[p,e("ol",c,[u,e("li",null,[f,e("ul",null,[m,h,e("li",null,[n("Verify the DSF FHIR server is accessible via https, for example by browsing to "),e("a",g,[n("https://your-dsf-endpoint.de/fhir/"),o(s)]),n(" (authentication with your client-certificate)")]),v,k,b])])])])}const D=a(d,[["render",_],["__file","upgrade-from-1.html.vue"]]),w=JSON.parse('{"path":"/v1.5.2/maintain/upgrade-from-1.html","title":"Upgrade from DSF 1.5.1","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 1.5.1","icon":"update"},"headers":[{"level":2,"title":"Modify DSF FHIR Server Setup","slug":"modify-dsf-fhir-server-setup","link":"#modify-dsf-fhir-server-setup","children":[]},{"level":2,"title":"Modify DSF BPE Server Setup","slug":"modify-dsf-bpe-server-setup","link":"#modify-dsf-bpe-server-setup","children":[]}],"git":{"createdTime":1720449876000,"updatedTime":1720449876000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.07,"words":322},"filePathRelative":"v1.5.2/maintain/upgrade-from-1.md","localizedDate":"July 8, 2024","excerpt":"

    Upgrading the DSF from 1.5.1 to 1.5.2 involves modifying the docker-compose.yml files and recreating the containers.

    \\n
    \\n

    Update to DSF 1.2.0 first

    \\n

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    \\n
    "}');export{D as comp,w as data}; diff --git a/assets/upgrade-from-1.html-CLS-rGPo.js b/assets/upgrade-from-1.html-CLS-rGPo.js new file mode 100644 index 000000000..7596fe81e --- /dev/null +++ b/assets/upgrade-from-1.html-CLS-rGPo.js @@ -0,0 +1,38 @@ +import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as t,o as l,c as r,a as e,b as n,d as a,e as o}from"./app-kq9lCQfY.js";const d={},p=o(`

    Upgrading the DSF from 1.1.0 to 1.2.0 involves modifying the docker-compose.yml files and recreating the containers.

    Upgrade from 0.9.x

    If you want to migrate from DSF 0.9.x, please follow these instructions.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.2.0_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.2.0 and remove the old healthcheck definition. The new healthcheck is defined as part of the docker image.

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.1.0
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.2.0
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.1.0
    ++   image: ghcr.io/datasharingframework/fhir:1.2.0
    +    restart: on-failure
    +-   healthcheck:
    +-     test: ["CMD", "java", "-cp", "dsf_fhir.jar", "dev.dsf.common.status.client.StatusClient"]
    +-     interval: 10s
    +-     timeout: 15s
    +-     retries: 5
    +...
    +
    1. The role configuration is now optional. If you don't use roles, you can remove the role config (default for new installations):
      app:
    +...
    +    environment:
    +...
    +-     # TODO specify role configuration to allow access to the UI via web-browser or REST API for specific users, see documentation at dsf.dev
    +-     DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.2.0_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.2.0 and remove the old healthcheck definition. The new healthcheck is defined as part of the docker image.

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.1.0
    ++   image: ghcr.io/datasharingframework/bpe:1.2.0
    +    restart: on-failure
    +-   healthcheck:
    +-     test: ["CMD", "java", "-cp", "dsf_bpe.jar", "dev.dsf.common.status.client.StatusClient"]
    +-     interval: 10s
    +-     timeout: 15s
    +-     retries: 5
    +...
    +
    `,11),c={start:"3"},u={href:"https://github.com/datasharingframework/dsf-process-ping-pong/releases",target:"_blank",rel:"noopener noreferrer"},f={href:"https://github.com/datasharingframework/dsf-process-allow-list/releases",target:"_blank",rel:"noopener noreferrer"},h=e("li",null,[e("p",null,[n("Upgrade the DSF BPE containers"),e("br"),n(" From "),e("code",null,"/opt/bpe"),n(" execute")]),e("div",{class:"language-text line-numbers-mode","data-ext":"text","data-title":"text"},[e("pre",{class:"language-text"},[e("code",null,`docker compose up -d && docker compose logs -f +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])])],-1),m=e("p",null,"Verify your upgrade:",-1),v=e("li",null,[n("Verify the DSF FHIR server is running in version 1.2.0. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.2.0, [...]")],-1),g=e("li",null,"Verify the DSF FHIR server started without errors",-1),k={href:"https://your-dsf-endpoint.de/fhir/",target:"_blank",rel:"noopener noreferrer"},b=e("li",null,[n("Verify the DSF BPE server is running in version 1.2.0. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.2.0, [...]")],-1),x=e("li",null,"Verify the DSF BPE server started without errors",-1),_=e("li",null,"Verify your install with a ping/pong test",-1);function y(w,S){const s=t("ExternalLinkIcon");return l(),r("div",null,[p,e("ol",c,[e("li",null,[e("p",null,[n("DSF v1.2.0 is not compatible with the Ping/Pong process plugin v1.0.0.0, upgrade to the "),e("a",u,[n("Ping/Pong plugin v1.0.1.0"),a(s)]),n(" by removing the old jar file and replacing it with the new v1.0.1.0 one.")])]),e("li",null,[e("p",null,[n("We have released a new version of the Allow List Process plugin where we added support for delete operations. Please upgrade to the "),e("a",f,[n("Allow-List process v1.0.0.1"),a(s)]),n(" by removing the old jar file and replacing it with the new v1.0.0.1 one.")])]),h,e("li",null,[m,e("ul",null,[v,g,e("li",null,[n("Verify the DSF FHIR server is accessible via https, for example by browsing to "),e("a",k,[n("https://your-dsf-endpoint.de/fhir/"),a(s)]),n(" (authentication with your client-certificate)")]),b,x,_])])])])}const I=i(d,[["render",y],["__file","upgrade-from-1.html.vue"]]),q=JSON.parse('{"path":"/v1.2.0/maintain/upgrade-from-1.html","title":"Upgrade from DSF 1.1.0","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 1.1.0","icon":"update"},"headers":[{"level":2,"title":"Modify DSF FHIR Server Setup","slug":"modify-dsf-fhir-server-setup","link":"#modify-dsf-fhir-server-setup","children":[]},{"level":2,"title":"Modify DSF BPE Server Setup","slug":"modify-dsf-bpe-server-setup","link":"#modify-dsf-bpe-server-setup","children":[]}],"git":{"createdTime":1694544770000,"updatedTime":1703006341000,"contributors":[{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":6},{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":2}]},"readingTime":{"minutes":1.71,"words":513},"filePathRelative":"v1.2.0/maintain/upgrade-from-1.md","localizedDate":"September 12, 2023","excerpt":"

    Upgrading the DSF from 1.1.0 to 1.2.0 involves modifying the docker-compose.yml files and recreating the containers.

    \\n
    \\n

    Upgrade from 0.9.x

    \\n

    If you want to migrate from DSF 0.9.x, please follow these instructions.

    \\n
    "}');export{I as comp,q as data}; diff --git a/assets/upgrade-from-1.html-CpUfeiok.js b/assets/upgrade-from-1.html-CpUfeiok.js new file mode 100644 index 000000000..a0c0cf91a --- /dev/null +++ b/assets/upgrade-from-1.html-CpUfeiok.js @@ -0,0 +1,22 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as r,c as t,a as e,b as n,d as o,e as l}from"./app-kq9lCQfY.js";const d={},p=l(`

    Upgrading the DSF from 1.2.0 to 1.3.0 involves modifying the docker-compose.yml files and recreating the containers.

    Upgrade from 0.9.x

    If you want to migrate from DSF 0.9.x, please follow these instructions.

    Update to DSF 1.2.0 first

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.3.0_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.3.0.

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.2.0
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.3.0
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.2.0
    ++   image: ghcr.io/datasharingframework/fhir:1.3.0
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.3.0_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.3.0.

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.2.0
    ++   image: ghcr.io/datasharingframework/bpe:1.3.0
    +    restart: on-failure
    +...
    +
    `,10),c={start:"3"},u=e("li",null,[e("p",null,[n("Upgrade the DSF BPE containers"),e("br"),n(" From "),e("code",null,"/opt/bpe"),n(" execute")]),e("div",{class:"language-text line-numbers-mode","data-ext":"text","data-title":"text"},[e("pre",{class:"language-text"},[e("code",null,`docker compose up -d && docker compose logs -f +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])])],-1),f=e("p",null,"Verify your upgrade:",-1),m=e("li",null,[n("Verify the DSF FHIR server is running in version 1.3.0. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.3.0, [...]")],-1),h=e("li",null,"Verify the DSF FHIR server started without errors",-1),g={href:"https://your-dsf-endpoint.de/fhir/",target:"_blank",rel:"noopener noreferrer"},v=e("li",null,[n("Verify the DSF BPE server is running in version 1.3.0. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.3.0, [...]")],-1),b=e("li",null,"Verify the DSF BPE server started without errors",-1),k=e("li",null,"Verify your install with a ping/pong test",-1);function x(_,y){const s=i("ExternalLinkIcon");return r(),t("div",null,[p,e("ol",c,[u,e("li",null,[f,e("ul",null,[m,h,e("li",null,[n("Verify the DSF FHIR server is accessible via https, for example by browsing to "),e("a",g,[n("https://your-dsf-endpoint.de/fhir/"),o(s)]),n(" (authentication with your client-certificate)")]),v,b,k])])])])}const w=a(d,[["render",x],["__file","upgrade-from-1.html.vue"]]),D=JSON.parse('{"path":"/v1.3.0/maintain/upgrade-from-1.html","title":"Upgrade from DSF 1.2.0","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 1.2.0","icon":"update"},"headers":[{"level":2,"title":"Modify DSF FHIR Server Setup","slug":"modify-dsf-fhir-server-setup","link":"#modify-dsf-fhir-server-setup","children":[]},{"level":2,"title":"Modify DSF BPE Server Setup","slug":"modify-dsf-bpe-server-setup","link":"#modify-dsf-bpe-server-setup","children":[]}],"git":{"createdTime":1696944513000,"updatedTime":1703006341000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":2},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.14,"words":342},"filePathRelative":"v1.3.0/maintain/upgrade-from-1.md","localizedDate":"October 10, 2023","excerpt":"

    Upgrading the DSF from 1.2.0 to 1.3.0 involves modifying the docker-compose.yml files and recreating the containers.

    \\n
    \\n

    Upgrade from 0.9.x

    \\n

    If you want to migrate from DSF 0.9.x, please follow these instructions.

    \\n
    "}');export{w as comp,D as data}; diff --git a/assets/upgrade-from-1.html-DG_FtmPQ.js b/assets/upgrade-from-1.html-DG_FtmPQ.js new file mode 100644 index 000000000..fd3263b27 --- /dev/null +++ b/assets/upgrade-from-1.html-DG_FtmPQ.js @@ -0,0 +1,22 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as r,c as t,a as e,b as n,d as o,e as l}from"./app-kq9lCQfY.js";const d={},p=l(`

    Upgrading the DSF from 1.3.2 to 1.4.0 involves modifying the docker-compose.yml files and recreating the containers.

    Update to DSF 1.2.0 first

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.4.0_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.4.0.

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.3.2
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.4.0
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.3.2
    ++   image: ghcr.io/datasharingframework/fhir:1.4.0
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.4.0_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.4.0.

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.3.2
    ++   image: ghcr.io/datasharingframework/bpe:1.4.0
    +    restart: on-failure
    +...
    +
    `,9),c={start:"3"},u=e("li",null,[e("p",null,[n("Upgrade the DSF BPE containers"),e("br"),n(" From "),e("code",null,"/opt/bpe"),n(" execute")]),e("div",{class:"language-text line-numbers-mode","data-ext":"text","data-title":"text"},[e("pre",{class:"language-text"},[e("code",null,`docker compose up -d && docker compose logs -f +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])])],-1),f=e("p",null,"Verify your upgrade:",-1),m=e("li",null,[n("Verify the DSF FHIR server is running in version 1.4.0. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.4.0, [...]")],-1),h=e("li",null,"Verify the DSF FHIR server started without errors",-1),g={href:"https://your-dsf-endpoint.de/fhir/",target:"_blank",rel:"noopener noreferrer"},v=e("li",null,[n("Verify the DSF BPE server is running in version 1.4.0. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.4.0, [...]")],-1),b=e("li",null,"Verify the DSF BPE server started without errors",-1),k=e("li",null,"Verify your install with a ping/pong test",-1);function _(x,y){const s=i("ExternalLinkIcon");return r(),t("div",null,[p,e("ol",c,[u,e("li",null,[f,e("ul",null,[m,h,e("li",null,[n("Verify the DSF FHIR server is accessible via https, for example by browsing to "),e("a",g,[n("https://your-dsf-endpoint.de/fhir/"),o(s)]),n(" (authentication with your client-certificate)")]),v,b,k])])])])}const D=a(d,[["render",_],["__file","upgrade-from-1.html.vue"]]),w=JSON.parse('{"path":"/v1.4.0/maintain/upgrade-from-1.html","title":"Upgrade from DSF 1.3.2","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 1.3.2","icon":"update"},"headers":[{"level":2,"title":"Modify DSF FHIR Server Setup","slug":"modify-dsf-fhir-server-setup","link":"#modify-dsf-fhir-server-setup","children":[]},{"level":2,"title":"Modify DSF BPE Server Setup","slug":"modify-dsf-bpe-server-setup","link":"#modify-dsf-bpe-server-setup","children":[]}],"git":{"createdTime":1702917645000,"updatedTime":1703006341000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.07,"words":322},"filePathRelative":"v1.4.0/maintain/upgrade-from-1.md","localizedDate":"December 18, 2023","excerpt":"

    Upgrading the DSF from 1.3.2 to 1.4.0 involves modifying the docker-compose.yml files and recreating the containers.

    \\n
    \\n

    Update to DSF 1.2.0 first

    \\n

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    \\n
    "}');export{D as comp,w as data}; diff --git a/assets/upgrade-from-1.html-DO57QWSu.js b/assets/upgrade-from-1.html-DO57QWSu.js new file mode 100644 index 000000000..c79e5daf3 --- /dev/null +++ b/assets/upgrade-from-1.html-DO57QWSu.js @@ -0,0 +1,22 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as r,c as t,a as e,b as n,d as o,e as l}from"./app-kq9lCQfY.js";const d={},p=l(`

    Upgrading the DSF from 1.3.1 to 1.3.2 involves modifying the docker-compose.yml files and recreating the containers.

    Update to DSF 1.2.0 first

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.3.2_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.3.2.

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.3.1
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.3.2
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.3.1
    ++   image: ghcr.io/datasharingframework/fhir:1.3.2
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.3.2_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.3.2.

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.3.1
    ++   image: ghcr.io/datasharingframework/bpe:1.3.2
    +    restart: on-failure
    +...
    +
    `,9),c={start:"3"},u=e("li",null,[e("p",null,[n("Upgrade the DSF BPE containers"),e("br"),n(" From "),e("code",null,"/opt/bpe"),n(" execute")]),e("div",{class:"language-text line-numbers-mode","data-ext":"text","data-title":"text"},[e("pre",{class:"language-text"},[e("code",null,`docker compose up -d && docker compose logs -f +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])])],-1),f=e("p",null,"Verify your upgrade:",-1),m=e("li",null,[n("Verify the DSF FHIR server is running in version 1.3.2. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.3.2, [...]")],-1),h=e("li",null,"Verify the DSF FHIR server started without errors",-1),g={href:"https://your-dsf-endpoint.de/fhir/",target:"_blank",rel:"noopener noreferrer"},v=e("li",null,[n("Verify the DSF BPE server is running in version 1.3.2. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.3.2, [...]")],-1),b=e("li",null,"Verify the DSF BPE server started without errors",-1),k=e("li",null,"Verify your install with a ping/pong test",-1);function _(x,y){const s=i("ExternalLinkIcon");return r(),t("div",null,[p,e("ol",c,[u,e("li",null,[f,e("ul",null,[m,h,e("li",null,[n("Verify the DSF FHIR server is accessible via https, for example by browsing to "),e("a",g,[n("https://your-dsf-endpoint.de/fhir/"),o(s)]),n(" (authentication with your client-certificate)")]),v,b,k])])])])}const D=a(d,[["render",_],["__file","upgrade-from-1.html.vue"]]),w=JSON.parse('{"path":"/v1.3.2/maintain/upgrade-from-1.html","title":"Upgrade from DSF 1.3.1","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 1.3.1","icon":"update"},"headers":[{"level":2,"title":"Modify DSF FHIR Server Setup","slug":"modify-dsf-fhir-server-setup","link":"#modify-dsf-fhir-server-setup","children":[]},{"level":2,"title":"Modify DSF BPE Server Setup","slug":"modify-dsf-bpe-server-setup","link":"#modify-dsf-bpe-server-setup","children":[]}],"git":{"createdTime":1701710218000,"updatedTime":1703006341000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":2},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.07,"words":322},"filePathRelative":"v1.3.2/maintain/upgrade-from-1.md","localizedDate":"December 4, 2023","excerpt":"

    Upgrading the DSF from 1.3.1 to 1.3.2 involves modifying the docker-compose.yml files and recreating the containers.

    \\n
    \\n

    Update to DSF 1.2.0 first

    \\n

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    \\n
    "}');export{D as comp,w as data}; diff --git a/assets/upgrade-from-1.html-DVhYYBK6.js b/assets/upgrade-from-1.html-DVhYYBK6.js new file mode 100644 index 000000000..178d21a6c --- /dev/null +++ b/assets/upgrade-from-1.html-DVhYYBK6.js @@ -0,0 +1,22 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as r,c as t,a as e,b as n,d as o,e as l}from"./app-kq9lCQfY.js";const d={},p=l(`

    Upgrading the DSF from 1.3.0 to 1.3.1 involves modifying the docker-compose.yml files and recreating the containers.

    Update to DSF 1.2.0 first

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.3.1_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.3.1.

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.3.0
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.3.1
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.3.0
    ++   image: ghcr.io/datasharingframework/fhir:1.3.1
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.3.1_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.3.1.

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.3.0
    ++   image: ghcr.io/datasharingframework/bpe:1.3.1
    +    restart: on-failure
    +...
    +
    `,9),c={start:"3"},u=e("li",null,[e("p",null,[n("Upgrade the DSF BPE containers"),e("br"),n(" From "),e("code",null,"/opt/bpe"),n(" execute")]),e("div",{class:"language-text line-numbers-mode","data-ext":"text","data-title":"text"},[e("pre",{class:"language-text"},[e("code",null,`docker compose up -d && docker compose logs -f +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])])],-1),f=e("p",null,"Verify your upgrade:",-1),m=e("li",null,[n("Verify the DSF FHIR server is running in version 1.3.1. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.3.1, [...]")],-1),h=e("li",null,"Verify the DSF FHIR server started without errors",-1),g={href:"https://your-dsf-endpoint.de/fhir/",target:"_blank",rel:"noopener noreferrer"},v=e("li",null,[n("Verify the DSF BPE server is running in version 1.3.1. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.3.1, [...]")],-1),b=e("li",null,"Verify the DSF BPE server started without errors",-1),k=e("li",null,"Verify your install with a ping/pong test",-1);function _(x,y){const s=i("ExternalLinkIcon");return r(),t("div",null,[p,e("ol",c,[u,e("li",null,[f,e("ul",null,[m,h,e("li",null,[n("Verify the DSF FHIR server is accessible via https, for example by browsing to "),e("a",g,[n("https://your-dsf-endpoint.de/fhir/"),o(s)]),n(" (authentication with your client-certificate)")]),v,b,k])])])])}const D=a(d,[["render",_],["__file","upgrade-from-1.html.vue"]]),w=JSON.parse('{"path":"/v1.3.1/maintain/upgrade-from-1.html","title":"Upgrade from DSF 1.3.0","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 1.3.0","icon":"update"},"headers":[{"level":2,"title":"Modify DSF FHIR Server Setup","slug":"modify-dsf-fhir-server-setup","link":"#modify-dsf-fhir-server-setup","children":[]},{"level":2,"title":"Modify DSF BPE Server Setup","slug":"modify-dsf-bpe-server-setup","link":"#modify-dsf-bpe-server-setup","children":[]}],"git":{"createdTime":1698748420000,"updatedTime":1703006341000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1},{"name":"Simon Schweizer","email":"simon-tobias.schweizer@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.07,"words":322},"filePathRelative":"v1.3.1/maintain/upgrade-from-1.md","localizedDate":"October 31, 2023","excerpt":"

    Upgrading the DSF from 1.3.0 to 1.3.1 involves modifying the docker-compose.yml files and recreating the containers.

    \\n
    \\n

    Update to DSF 1.2.0 first

    \\n

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    \\n
    "}');export{D as comp,w as data}; diff --git a/assets/upgrade-from-1.html-UX0GM5eH.js b/assets/upgrade-from-1.html-UX0GM5eH.js new file mode 100644 index 000000000..577ff0d72 --- /dev/null +++ b/assets/upgrade-from-1.html-UX0GM5eH.js @@ -0,0 +1,22 @@ +import{_ as a}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as r,c as t,a as e,b as n,d as o,e as l}from"./app-kq9lCQfY.js";const d={},p=l(`

    Upgrading the DSF from 1.5.1 to 1.5.2 involves modifying the docker-compose.yml files and recreating the containers.

    Update to DSF 1.2.0 first

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.5.2_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.5.2.

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.5.1
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.5.2
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.5.1
    ++   image: ghcr.io/datasharingframework/fhir:1.5.2
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.5.2_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.5.2.

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.5.1
    ++   image: ghcr.io/datasharingframework/bpe:1.5.2
    +    restart: on-failure
    +...
    +
    `,9),c={start:"3"},u=e("li",null,[e("p",null,[n("Upgrade the DSF BPE containers"),e("br"),n(" From "),e("code",null,"/opt/bpe"),n(" execute")]),e("div",{class:"language-text line-numbers-mode","data-ext":"text","data-title":"text"},[e("pre",{class:"language-text"},[e("code",null,`docker compose up -d && docker compose logs -f +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])])],-1),f=e("p",null,"Verify your upgrade:",-1),m=e("li",null,[n("Verify the DSF FHIR server is running in version 1.5.2. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.5.2, [...]")],-1),h=e("li",null,"Verify the DSF FHIR server started without errors",-1),g={href:"https://your-dsf-endpoint.de/fhir/",target:"_blank",rel:"noopener noreferrer"},v=e("li",null,[n("Verify the DSF BPE server is running in version 1.5.2. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.5.2, [...]")],-1),b=e("li",null,"Verify the DSF BPE server started without errors",-1),k=e("li",null,"Verify your install with a ping/pong test",-1);function _(x,y){const s=i("ExternalLinkIcon");return r(),t("div",null,[p,e("ol",c,[u,e("li",null,[f,e("ul",null,[m,h,e("li",null,[n("Verify the DSF FHIR server is accessible via https, for example by browsing to "),e("a",g,[n("https://your-dsf-endpoint.de/fhir/"),o(s)]),n(" (authentication with your client-certificate)")]),v,b,k])])])])}const D=a(d,[["render",_],["__file","upgrade-from-1.html.vue"]]),w=JSON.parse('{"path":"/stable/maintain/upgrade-from-1.html","title":"Upgrade from DSF 1.5.1","lang":"en-US","frontmatter":{"title":"Upgrade from DSF 1.5.1","icon":"update"},"headers":[{"level":2,"title":"Modify DSF FHIR Server Setup","slug":"modify-dsf-fhir-server-setup","link":"#modify-dsf-fhir-server-setup","children":[]},{"level":2,"title":"Modify DSF BPE Server Setup","slug":"modify-dsf-bpe-server-setup","link":"#modify-dsf-bpe-server-setup","children":[]}],"git":{"createdTime":null,"updatedTime":null,"contributors":[]},"readingTime":{"minutes":1.07,"words":322},"filePathRelative":"stable/maintain/upgrade-from-1.md","excerpt":"

    Upgrading the DSF from 1.5.1 to 1.5.2 involves modifying the docker-compose.yml files and recreating the containers.

    \\n
    \\n

    Update to DSF 1.2.0 first

    \\n

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    \\n
    "}');export{D as comp,w as data}; diff --git a/assets/upgradeFrom7.html-CEFLW_mR.js b/assets/upgradeFrom7.html-CEFLW_mR.js new file mode 100644 index 000000000..5526cc7e5 --- /dev/null +++ b/assets/upgradeFrom7.html-CEFLW_mR.js @@ -0,0 +1,100 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as l,o as r,c as o,a as e,b as s,d as a,e as i}from"./app-kq9lCQfY.js";const d={},p=e("p",null,"Upgrading the DSF from 0.7.0 to 0.9.0 involves replacing a config file, modifying the docker-compose.yml files, replacing the process plugins and recreating the containers.",-1),c={href:"https://github.com/highmed/highmed-dsf/wiki/DSF-Upgrade-From-0.6.0-to-0.7.0",target:"_blank",rel:"noopener noreferrer"},u=e("h2",{id:"modify-dsf-fhir-server-setup",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#modify-dsf-fhir-server-setup"},[e("span",null,"Modify DSF FHIR Server Setup")])],-1),h=i(`
  • Preparation / Backup

    • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
      For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_0.9.0_upgrade
  • Modify the DSF FHIR docker-compose.yml file, replace 0.7.0 with 0.9.0

    @@ -1,7 +1,7 @@
    + version: '3.8'
    + services:
    +   proxy:
    +-    image: ghcr.io/highmed/fhir_proxy:0.7.0
    ++    image: ghcr.io/highmed/fhir_proxy:0.9.0
    +     restart: on-failure
    +     ports:
    +       - 127.0.0.1:80:80
    +@@ -27,7 +27,7 @@ services:
    +       - app
    + 
    +   app:
    +-    image: ghcr.io/highmed/fhir:0.7.0
    ++    image: ghcr.io/highmed/fhir:0.9.0
    +     restart: on-failure
    +     healthcheck:
    +       test: ["CMD", "java", "-cp", "dsf_fhir.jar", "org.highmed.dsf.fhir.StatusClient"]
    +
  • `,2),g=e("p",null,"Download prepared DSF FHIR server config files and extract/replace the external FHIR bundle",-1),m=e("strong",null,"Test NUM-CODEX",-1),_=e("br",null,null,-1),f={href:"https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_test_fhir_0_9_0.tar.gz",target:"_blank",rel:"noopener noreferrer"},v=i(`
    cd /opt
    +wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_test_fhir_0_9_0.tar.gz
    +sudo tar --same-owner -zxvf dsf_codex_test_fhir_0_9_0.tar.gz fhir/conf/bundle.xml
    +
    `,1),b=e("strong",null,"Test HiGHmed",-1),k=e("br",null,null,-1),x={href:"https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_test_fhir_0_9_0.tar.gz",target:"_blank",rel:"noopener noreferrer"},w=i(`
    cd /opt
    +wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_test_fhir_0_9_0.tar.gz
    +sudo tar --same-owner -zxvf dsf_highmed_test_fhir_0_9_0.tar.gz fhir/conf/bundle.xml
    +
    `,1),D=e("strong",null,"Production NUM-CODEX",-1),F=e("br",null,null,-1),R={href:"https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_prod_fhir_0_9_0.tar.gz",target:"_blank",rel:"noopener noreferrer"},E=i(`
    cd /opt
    +wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_prod_fhir_0_9_0.tar.gz
    +sudo tar --same-owner -zxvf dsf_codex_prod_fhir_0_9_0.tar.gz fhir/conf/bundle.xml
    +
    `,1),S=e("strong",null,"Production HiGHmed",-1),H=e("br",null,null,-1),y={href:"https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_prod_fhir_0_9_0.tar.gz",target:"_blank",rel:"noopener noreferrer"},I=i(`
    cd /opt
    +wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_prod_fhir_0_9_0.tar.gz
    +sudo tar --same-owner -zxvf dsf_highmed_prod_fhir_0_9_0.tar.gz fhir/conf/bundle.xml
    +
    `,1),O=e("p",null,[s("The command will update the external FHIR bundle at "),e("code",null,"/opt/fhir/conf/bundle.xml")],-1),z=e("p",null,"The output of the tar command should be",-1),P=e("div",{class:"language-text line-numbers-mode","data-ext":"text","data-title":"text"},[e("pre",{class:"language-text"},[e("code",null,`fhir/conf/bundle.xml +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])],-1),G=e("li",null,[e("p",null,[s("Upgrade the DSF FHIR containers"),e("br"),s(" From "),e("code",null,"/opt/fhir"),s(" execute")]),e("div",{class:"language-text line-numbers-mode","data-ext":"text","data-title":"text"},[e("pre",{class:"language-text"},[e("code",null,`docker-compose up -d && docker-compose logs -f +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])])],-1),q=e("h2",{id:"modify-dsf-bpe-server-setup",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#modify-dsf-bpe-server-setup"},[e("span",null,"Modify DSF BPE Server Setup")])],-1),T=i(`
  • Preparation / Backup

    • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
      For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_0.9.0_upgrade
  • Modify the DSF BPE docker-compose.yml file

    • NUM-CODEX (non HiGHmed) instance:
      Change the bpe container version from 0.7.0 to 0.9.0, update the process exclude config and remove a bind mount

      @@ -1,7 +1,7 @@
      + version: '3.8'
      + services:
      +   app:
      +-    image: ghcr.io/highmed/bpe:0.7.0
      ++    image: ghcr.io/highmed/bpe:0.9.0
      +     restart: on-failure
      +     healthcheck:
      +       test: ["CMD", "java", "-cp", "dsf_bpe.jar", "org.highmed.dsf.bpe.StatusClient"]
      +@@ -29,9 +29,6 @@ services:
      +       - type: bind
      +         source: ./log
      +         target: /opt/bpe/log
      +-      - type: bind
      +-        source: ./last_event
      +-        target: /opt/bpe/last_event
      +       - type: bind
      +         source: ./cache
      +         target: /opt/bpe/cache
      +@@ -48,8 +45,8 @@ services:
      +       ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER
      +       ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://TODO_DSF_FRIR_SERVER_FQDN/fhir
      +       ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED: |
      +-        wwwnetzwerk-universitaetsmedizinde_dataTranslate/0.6.0
      +-        wwwnetzwerk-universitaetsmedizinde_dataReceive/0.6.0
      ++        wwwnetzwerk-universitaetsmedizinde_dataTranslate/0.7.0
      ++        wwwnetzwerk-universitaetsmedizinde_dataReceive/0.7.0
      +
      +       #TODO modify ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED for later process versions
      +       #TODO add process specific environment variables, see process documentation
      +
    • HiGHmed instance:
      Change the bpe container version from 0.7.0 to 0.9.0, update the process exclude config, and remove a bind mount

      @@ -1,7 +1,7 @@
      + version: '3.8'
      + services:
      +   app:
      +-    image: ghcr.io/highmed/bpe:0.7.0
      ++    image: ghcr.io/highmed/bpe:0.9.0
      +     restart: on-failure
      +     healthcheck:
      +       test: ["CMD", "java", "-cp", "dsf_bpe.jar", "org.highmed.dsf.bpe.StatusClient"]
      +@@ -29,9 +29,6 @@ services:
      +       - type: bind
      +         source: ./log
      +         target: /opt/bpe/log
      +-      - type: bind
      +-        source: ./last_event
      +-        target: /opt/bpe/last_event
      +       - type: bind
      +         source: ./psn
      +         target: /opt/bpe/psn
      +@@ -51,11 +48,11 @@ services:
      +       ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER
      +       ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://TODO_DSF_FRIR_SERVER_FQDN/fhir
      +       ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED: |
      +-        highmedorg_computeFeasibility/0.6.0
      +-        highmedorg_computeDataSharing/0.6.0
      +-        highmedorg_updateAllowList/0.6.0
      +-        wwwnetzwerk-universitaetsmedizinde_dataTranslate/0.6.0
      +-        wwwnetzwerk-universitaetsmedizinde_dataReceive/0.6.0
      ++        highmedorg_computeFeasibility/0.7.0
      ++        highmedorg_computeDataSharing/0.7.0
      ++        highmedorg_updateAllowList/0.7.0
      ++        wwwnetzwerk-universitaetsmedizinde_dataTranslate/0.7.0
      ++        wwwnetzwerk-universitaetsmedizinde_dataReceive/0.7.0
      +
      +       #TODO modify ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED for later process versions
      +       #TODO add process specific environment variables, see process documentation
      +
  • `,2),j=e("p",null,"Upgrade DSF Plugins and Process-Plugins",-1),M=e("strong",null,"NUM-CODEX",-1),N=e("p",null,[s("Process plugins in "),e("code",null,"/opt/bpe/process"),s(":")],-1),B=e("code",null,"codex-process-data-transfer-0.6.0.jar",-1),U=e("code",null,"codex-process-data-transfer-0.7.0.jar",-1),C={href:"https://github.com/num-codex/codex-processes-ap1/releases/tag/v0.7.0",target:"_blank",rel:"noopener noreferrer"},V=e("code",null,"dsf-bpe-process-ping-0.6.0.jar",-1),A=e("code",null,"dsf-bpe-process-ping-0.7.0.jar",-1),L={href:"https://github.com/highmed/highmed-processes/tree/v0.7.0",target:"_blank",rel:"noopener noreferrer"},X=e("p",null,[s("Make sure the process plugins in "),e("code",null,"/opt/bpe/process"),s(" are configured with "),e("code",null,"chmod 440"),s(" and "),e("code",null,"chown root:bpe"),s(".")],-1),Z=e("strong",null,"HiGHmed",-1),Q=e("p",null,[s("Process plugins in "),e("code",null,"/opt/bpe/process"),s(":")],-1),W=e("code",null,"codex-process-data-transfer-0.6.0.jar",-1),J=e("code",null,"codex-process-data-transfer-0.7.0.jar",-1),K={href:"https://github.com/num-codex/codex-processes-ap1/releases/tag/v0.7.0",target:"_blank",rel:"noopener noreferrer"},Y=e("code",null,"dsf-bpe-process-data-sharing-0.6.0.jar",-1),$=e("code",null,"dsf-bpe-process-data-sharing-0.7.0.jar",-1),ee={href:"https://github.com/highmed/highmed-processes/tree/v0.7.0",target:"_blank",rel:"noopener noreferrer"},se=e("code",null,"dsf-bpe-process-feasibility-0.6.0.jar",-1),ne=e("code",null,"dsf-bpe-process-feasibility-0.7.0.jar",-1),ae={href:"https://github.com/highmed/highmed-processes/tree/v0.7.0",target:"_blank",rel:"noopener noreferrer"},ie=e("code",null,"dsf-bpe-process-feasibility-mpc-0.6.0.jar",-1),te=e("code",null,"dsf-bpe-process-feasibility-mpc-0.7.0.jar",-1),le={href:"https://github.com/highmed/highmed-processes/tree/v0.7.0",target:"_blank",rel:"noopener noreferrer"},re=e("code",null,"dsf-bpe-process-local-services-0.6.0.jar",-1),oe=e("code",null,"dsf-bpe-process-local-services-0.7.0.jar",-1),de={href:"https://github.com/highmed/highmed-processes/tree/v0.7.0",target:"_blank",rel:"noopener noreferrer"},pe=e("code",null,"dsf-bpe-process-ping-0.6.0.jar",-1),ce=e("code",null,"dsf-bpe-process-ping-0.7.0.jar",-1),ue={href:"https://github.com/highmed/highmed-processes/tree/v0.7.0",target:"_blank",rel:"noopener noreferrer"},he=e("code",null,"dsf-bpe-process-update-allow-list-0.6.0.jar",-1),ge=e("code",null,"dsf-bpe-process-update-allow-list-0.7.0.jar",-1),me={href:"https://github.com/highmed/highmed-processes/tree/v0.7.0",target:"_blank",rel:"noopener noreferrer"},_e=e("p",null,[s("Make sure the process plugins in "),e("code",null,"/opt/bpe/process"),s(" are configured with "),e("code",null,"chmod 440"),s(" and "),e("code",null,"chown root:bpe"),s(".")],-1),fe=e("p",null,"Plugins in '/opt/bpe/plugin':",-1),ve=e("code",null,"dsf-mpi-client-pdq-0.7.0.jar",-1),be=e("code",null,"hapi-base-2.3.jar",-1),ke=e("code",null,"hapi-structures-v25-2.3.jar",-1),xe=e("code",null,"dsf-mpi-client-pdq-0.9.0.zip",-1),we={href:"https://github.com/highmed/highmed-dsf/releases/tag/v0.9.0",target:"_blank",rel:"noopener noreferrer"},De=e("code",null,"dsf-openehr-client-impl-0.7.0.jar",-1),Fe=e("code",null,"dsf-openehr-client-impl-0.9.0.zip",-1),Re={href:"https://github.com/highmed/highmed-dsf/releases/tag/v0.9.0",target:"_blank",rel:"noopener noreferrer"},Ee=e("p",null,[s("Make sure the plugins in "),e("code",null,"/opt/bpe/plugin"),s(" are configured with "),e("code",null,"chmod 440"),s(" and "),e("code",null,"chown root:bpe"),s(".")],-1),Se=e("li",null,[e("p",null,[s("Upgrade the DSF BPE containers"),e("br"),s(" From "),e("code",null,"/opt/bpe"),s(" execute")]),e("div",{class:"language-text line-numbers-mode","data-ext":"text","data-title":"text"},[e("pre",{class:"language-text"},[e("code",null,`docker-compose up -d && docker-compose logs -f +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])])],-1),He=e("p",null,"Verify your upgrade:",-1),ye=e("li",null,[s("Verify the DSF FHIR server is running in version 0.9.0. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 0.9.0, [...]")],-1),Ie=e("li",null,"Verify the DSF FHIR server started without errors",-1),Oe={href:"https://your-dsf-endpoint.de/fhir/",target:"_blank",rel:"noopener noreferrer"},ze=e("li",null,[s("Verify the DSF BPE server is running in version 0.9.0. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 0.9.0, [...]")],-1),Pe=e("li",null,"Verify the DSF BPE server started without errors",-1),Ge=e("li",null,"Verify the DSF BPE server removed ActivityDefinition resources for the deleted process plugin from the DSF FHIR server and created new ActivityDefinition for the new process plugin.",-1),qe=e("br",null,null,-1),Te={href:"https://github.com/highmed/highmed-processes/wiki/Process-Ping-Start-v0.7.0",target:"_blank",rel:"noopener noreferrer"};function je(Me,Ne){const n=l("ExternalLinkIcon");return r(),o("div",null,[p,e("p",null,[e("strong",null,[s("If you are upgrading from 0.6.0 please see the "),e("a",c,[s("Upgrade from 0.6.0 to 0.7.0 guide"),a(n)]),s(" first.")])]),u,e("ol",null,[h,e("li",null,[g,e("ul",null,[e("li",null,[m,s(" (non HiGHmed) instance:"),_,e("a",f,[s("https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_test_fhir_0_9_0.tar.gz"),a(n)]),v]),e("li",null,[b,s(" instance:"),k,e("a",x,[s("https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_test_fhir_0_9_0.tar.gz"),a(n)]),w]),e("li",null,[D,s(" (non HiGHmed) instance:"),F,e("a",R,[s("https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_prod_fhir_0_9_0.tar.gz"),a(n)]),E]),e("li",null,[S,s(" instance:"),H,e("a",y,[s("https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_prod_fhir_0_9_0.tar.gz"),a(n)]),I])]),O,z,P]),G]),q,e("ol",null,[T,e("li",null,[j,e("ul",null,[e("li",null,[M,s(" (non HiGHmed) instance: "),e("ul",null,[e("li",null,[N,e("ol",null,[e("li",null,[s("Replace "),B,s(" with "),U,s(" from the "),e("a",C,[s("latest NUM-CODEX processes release"),a(n)])]),e("li",null,[s("Replace "),V,s(" with "),A,s(" from the "),e("a",L,[s("latest HiGHmed processes release"),a(n)])])]),X])])]),e("li",null,[Z,s(" instance: "),e("ul",null,[e("li",null,[Q,e("ol",null,[e("li",null,[s("Replace "),W,s(" with "),J,s(" from the "),e("a",K,[s("latest NUM-CODEX processes release"),a(n)])]),e("li",null,[s("Replace "),Y,s(" with "),$,s(" from the "),e("a",ee,[s("latest HiGHmed processes release"),a(n)])]),e("li",null,[s("Replace "),se,s(" with "),ne,s(" from the "),e("a",ae,[s("latest HiGHmed processes release"),a(n)])]),e("li",null,[s("Replace "),ie,s(" with "),te,s(" from the "),e("a",le,[s("latest HiGHmed processes release"),a(n)])]),e("li",null,[s("Replace "),re,s(" with "),oe,s(" from the "),e("a",de,[s("latest HiGHmed processes release"),a(n)])]),e("li",null,[s("Replace "),pe,s(" with "),ce,s(" from the "),e("a",ue,[s("latest HiGHmed processes release"),a(n)])]),e("li",null,[s("Replace "),he,s(" with "),ge,s(" from the "),e("a",me,[s("latest HiGHmed processes release"),a(n)])])]),_e]),e("li",null,[fe,e("ol",null,[e("li",null,[s("If you are using the provided PDQ MPI Client, replace "),ve,s(", "),be,s(" and "),ke,s(" with the new files from "),xe,s(", see "),e("a",we,[s("DSF release notes"),a(n)])]),e("li",null,[s("If you are using the provided openEHR Client, replace "),De,s(" with the new file from "),Fe,s(", see "),e("a",Re,[s("DSF release notes"),a(n)])])]),Ee])])])])]),Se,e("li",null,[He,e("ul",null,[ye,Ie,e("li",null,[s("Verify the DSF FHIR server is accessible via https, for example by browsing to "),e("a",Oe,[s("https://your-dsf-endpoint.de/fhir/"),a(n)]),s(" (authentication with your client-certificate)")]),ze,Pe,Ge,e("li",null,[s("Verify your install with a ping/pong test"),qe,s(" For a Task resource compatible with the 0.7.0 release of the ping process, see the "),e("a",Te,[s("Ping/Pong process wiki"),a(n)]),s(".")])])])])])}const Ce=t(d,[["render",je],["__file","upgradeFrom7.html.vue"]]),Ve=JSON.parse('{"path":"/oldstable/releases/upgradeFrom7.html","title":"Upgrading from 0.7.0 to 0.9.0","lang":"en-US","frontmatter":{"title":"Upgrading from 0.7.0 to 0.9.0","icon":"install"},"headers":[{"level":2,"title":"Modify DSF FHIR Server Setup","slug":"modify-dsf-fhir-server-setup","link":"#modify-dsf-fhir-server-setup","children":[]},{"level":2,"title":"Modify DSF BPE Server Setup","slug":"modify-dsf-bpe-server-setup","link":"#modify-dsf-bpe-server-setup","children":[]}],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":3.63,"words":1088},"filePathRelative":"oldstable/releases/upgradeFrom7.md","localizedDate":"August 23, 2023","excerpt":"

    Upgrading the DSF from 0.7.0 to 0.9.0 involves replacing a config file, modifying the docker-compose.yml files, replacing the process plugins and recreating the containers.

    \\n

    If you are upgrading from 0.6.0 please see the Upgrade from 0.6.0 to 0.7.0 guide first.

    "}');export{Ce as comp,Ve as data}; diff --git a/assets/upgradeFrom8.html-1Y_v8e3q.js b/assets/upgradeFrom8.html-1Y_v8e3q.js new file mode 100644 index 000000000..0dfe2e978 --- /dev/null +++ b/assets/upgradeFrom8.html-1Y_v8e3q.js @@ -0,0 +1,52 @@ +import{_ as l}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as r,c as d,a as e,b as s,d as n,w as p,e as t}from"./app-kq9lCQfY.js";const c={},h=e("p",null,"Upgrading the DSF from 0.8.0 to 0.9.0 involves modifying the docker-compose.yml files, replacing the process plugins and recreating the containers.",-1),u={href:"https://github.com/highmed/highmed-dsf/wiki/DSF-Upgrade-From-0.6.0-to-0.7.0",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/highmed/highmed-dsf/wiki/DSF-Upgrade-From-0.7.0-to-0.9.0",target:"_blank",rel:"noopener noreferrer"},f=e("br",null,null,-1),m=t(`

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_0.9.0_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace 0.8.0 with 0.9.0

      @@ -1,7 +1,7 @@
      + version: '3.8'
      + services:
      +   proxy:
      +-    image: ghcr.io/highmed/fhir_proxy:0.8.0
      ++    image: ghcr.io/highmed/fhir_proxy:0.9.0
      +     restart: on-failure
      +     ports:
      +       - 127.0.0.1:80:80
      +@@ -27,7 +27,7 @@ services:
      +       - app
      + 
      +   app:
      +-    image: ghcr.io/highmed/fhir:0.8.0
      ++    image: ghcr.io/highmed/fhir:0.9.0
      +     restart: on-failure
      +     healthcheck:
      +       test: ["CMD", "java", "-cp", "dsf_fhir.jar", "org.highmed.dsf.fhir.StatusClient"]
      +
    3. Upgrade the DSF FHIR containers
      From /opt/fhir execute

      docker-compose up -d && docker-compose logs -f
      +

    Modify DSF BPE Server Setup

    `,3),_=t(`
  • Preparation / Backup

    • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
      For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_0.9.0_upgrade
  • Modify the DSF BPE docker-compose.yml file

    • NUM-CODEX (non HiGHmed) instance:
      Change the bpe container version from 0.8.0 to 0.9.0, update the process exclude config and remove a bind mount

      @@ -1,7 +1,7 @@
      + version: '3.8'
      + services:
      +   app:
      +-    image: ghcr.io/highmed/bpe:0.8.0
      ++    image: ghcr.io/highmed/bpe:0.9.0
      +     restart: on-failure
      +     healthcheck:
      +       test: ["CMD", "java", "-cp", "dsf_bpe.jar", "org.highmed.dsf.bpe.StatusClient"]
      +
    • HiGHmed instance:
      Change the bpe container version from 0.7.0 to 0.9.0, update the process exclude config, and remove a bind mount

      @@ -1,7 +1,7 @@
      + version: '3.8'
      + services:
      +   app:
      +-    image: ghcr.io/highmed/bpe:0.8.0
      ++    image: ghcr.io/highmed/bpe:0.9.0
      +     restart: on-failure
      +     healthcheck:
      +       test: ["CMD", "java", "-cp", "dsf_bpe.jar", "org.highmed.dsf.bpe.StatusClient"]
      +@@ -48,9 +48,9 @@ services:
      +       ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER
      +       ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://TODO_DSF_FRIR_SERVER_FQDN/fhir
      +       ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED: |
      +-        highmedorg_computeFeasibility/0.6.0
      +-        highmedorg_computeDataSharing/0.6.0
      +-        highmedorg_updateAllowList/0.6.0
      ++        highmedorg_computeFeasibility/0.7.0
      ++        highmedorg_computeDataSharing/0.7.0
      ++        highmedorg_updateAllowList/0.7.0
      +         wwwnetzwerk-universitaetsmedizinde_dataTranslate/0.7.0
      +         wwwnetzwerk-universitaetsmedizinde_dataReceive/0.7.0
      +
      +
  • `,2),v=e("p",null,"Upgrade DSF Plugins and Process-Plugins",-1),b=e("strong",null,"NUM-CODEX",-1),k=e("p",null,[s("Process plugins in "),e("code",null,"/opt/bpe/process"),s(":")],-1),x=e("code",null,"codex-process-data-transfer-0.6.0.jar",-1),F=e("code",null,"codex-process-data-transfer-0.7.0.jar",-1),y={href:"https://github.com/num-codex/codex-processes-ap1/releases/tag/v0.7.0",target:"_blank",rel:"noopener noreferrer"},w=e("code",null,"dsf-bpe-process-ping-0.6.0.jar",-1),D=e("code",null,"dsf-bpe-process-ping-0.7.0.jar",-1),S={href:"https://github.com/highmed/highmed-processes/tree/v0.7.0",target:"_blank",rel:"noopener noreferrer"},R=e("p",null,[s("Make sure the process plugins in "),e("code",null,"/opt/bpe/process"),s(" are configured with "),e("code",null,"chmod 440"),s(" and "),e("code",null,"chown root:bpe"),s(".")],-1),H=e("strong",null,"HiGHmed",-1),I=e("p",null,[s("Process plugins in "),e("code",null,"/opt/bpe/process"),s(":")],-1),E=e("code",null,"codex-process-data-transfer-0.6.0.jar",-1),q=e("code",null,"codex-process-data-transfer-0.7.0.jar",-1),j={href:"https://github.com/num-codex/codex-processes-ap1/releases/tag/v0.7.0",target:"_blank",rel:"noopener noreferrer"},P=e("code",null,"dsf-bpe-process-data-sharing-0.6.0.jar",-1),U=e("code",null,"dsf-bpe-process-data-sharing-0.7.0.jar",-1),B={href:"https://github.com/highmed/highmed-processes/tree/v0.7.0",target:"_blank",rel:"noopener noreferrer"},M=e("code",null,"dsf-bpe-process-feasibility-0.6.0.jar",-1),G=e("code",null,"dsf-bpe-process-feasibility-0.7.0.jar",-1),O={href:"https://github.com/highmed/highmed-processes/tree/v0.7.0",target:"_blank",rel:"noopener noreferrer"},C=e("code",null,"dsf-bpe-process-feasibility-mpc-0.6.0.jar",-1),N=e("code",null,"dsf-bpe-process-feasibility-mpc-0.7.0.jar",-1),V={href:"https://github.com/highmed/highmed-processes/tree/v0.7.0",target:"_blank",rel:"noopener noreferrer"},T=e("code",null,"dsf-bpe-process-local-services-0.6.0.jar",-1),A=e("code",null,"dsf-bpe-process-local-services-0.7.0.jar",-1),L={href:"https://github.com/highmed/highmed-processes/tree/v0.7.0",target:"_blank",rel:"noopener noreferrer"},z=e("code",null,"dsf-bpe-process-ping-0.6.0.jar",-1),X=e("code",null,"dsf-bpe-process-ping-0.7.0.jar",-1),Q={href:"https://github.com/highmed/highmed-processes/tree/v0.7.0",target:"_blank",rel:"noopener noreferrer"},W=e("code",null,"dsf-bpe-process-update-allow-list-0.6.0.jar",-1),Z=e("code",null,"dsf-bpe-process-update-allow-list-0.7.0.jar",-1),J={href:"https://github.com/highmed/highmed-processes/tree/v0.7.0",target:"_blank",rel:"noopener noreferrer"},K=e("p",null,[s("Make sure the process plugins in "),e("code",null,"/opt/bpe/process"),s(" are configured with "),e("code",null,"chmod 440"),s(" and "),e("code",null,"chown root:bpe"),s(".")],-1),Y=e("p",null,"Plugins in '/opt/bpe/plugin':",-1),$=e("code",null,"dsf-mpi-client-pdq-0.7.0.jar",-1),ee=e("code",null,"hapi-base-2.3.jar",-1),se=e("code",null,"hapi-structures-v25-2.3.jar",-1),ne=e("code",null,"dsf-mpi-client-pdq-0.9.0.zip",-1),ae={href:"https://github.com/highmed/highmed-dsf/releases/tag/v0.9.0",target:"_blank",rel:"noopener noreferrer"},ie=e("code",null,"dsf-openehr-client-impl-0.7.0.jar",-1),te=e("code",null,"dsf-openehr-client-impl-0.9.0.zip",-1),oe={href:"https://github.com/highmed/highmed-dsf/releases/tag/v0.9.0",target:"_blank",rel:"noopener noreferrer"},le=e("p",null,[s("Make sure the plugins in "),e("code",null,"/opt/bpe/plugin"),s(" are configured with "),e("code",null,"chmod 440"),s(" and "),e("code",null,"chown root:bpe"),s(".")],-1),re=e("li",null,[e("p",null,[s("Upgrade the DSF BPE containers"),e("br"),s(" From "),e("code",null,"/opt/bpe"),s(" execute")]),e("div",{class:"language-text line-numbers-mode","data-ext":"text","data-title":"text"},[e("pre",{class:"language-text"},[e("code",null,`docker-compose up -d && docker-compose logs -f +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])])],-1),de=e("p",null,"Verify your upgrade:",-1),pe=e("li",null,[s("Verify the DSF FHIR server is running in version 0.9.0. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 0.9.0, [...]")],-1),ce=e("li",null,"Verify the DSF FHIR server started without errors",-1),he={href:"https://your-dsf-endpoint.de/fhir/",target:"_blank",rel:"noopener noreferrer"},ue=e("li",null,[s("Verify the DSF BPE server is running in version 0.9.0. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 0.9.0, [...]")],-1),ge=e("li",null,"Verify the DSF BPE server started without errors",-1),fe=e("li",null,"Verify the DSF BPE server removed ActivityDefinition resources for the deleted process plugin from the DSF FHIR server and created new ActivityDefinition for the new process plugin.",-1),me=e("br",null,null,-1),_e={href:"https://github.com/highmed/highmed-processes/wiki/Process-Ping-Start-v0.7.0",target:"_blank",rel:"noopener noreferrer"};function ve(be,ke){const a=i("ExternalLinkIcon"),o=i("RouteLink");return r(),d("div",null,[h,e("p",null,[e("strong",null,[s("If you are upgrading from 0.6.0 please see the "),e("a",u,[s("Upgrade from 0.6.0 to 0.7.0 guide"),n(a)]),s(" first and then visit the "),e("a",g,[s("Upgrade from 0.7.0 to 0.9.0 guide"),n(a)]),s(".")]),f,e("strong",null,[s("If you are upgrading from 0.7.0 please see the "),n(o,{to:"/oldstable/releases/upgradeFrom7.html"},{default:p(()=>[s("Upgrade from 0.7.0 to 0.9.0 guide")]),_:1}),s(".")])]),m,e("ol",null,[_,e("li",null,[v,e("ul",null,[e("li",null,[b,s(" (non HiGHmed) instance: "),e("ul",null,[e("li",null,[k,e("ol",null,[e("li",null,[s("Replace "),x,s(" with "),F,s(" from the "),e("a",y,[s("latest NUM-CODEX processes release"),n(a)])]),e("li",null,[s("Replace "),w,s(" with "),D,s(" from the "),e("a",S,[s("latest HiGHmed processes release"),n(a)])])]),R])])]),e("li",null,[H,s(" instance: "),e("ul",null,[e("li",null,[I,e("ol",null,[e("li",null,[s("Replace "),E,s(" with "),q,s(" from the "),e("a",j,[s("latest NUM-CODEX processes release"),n(a)])]),e("li",null,[s("Replace "),P,s(" with "),U,s(" from the "),e("a",B,[s("latest HiGHmed processes release"),n(a)])]),e("li",null,[s("Replace "),M,s(" with "),G,s(" from the "),e("a",O,[s("latest HiGHmed processes release"),n(a)])]),e("li",null,[s("Replace "),C,s(" with "),N,s(" from the "),e("a",V,[s("latest HiGHmed processes release"),n(a)])]),e("li",null,[s("Replace "),T,s(" with "),A,s(" from the "),e("a",L,[s("latest HiGHmed processes release"),n(a)])]),e("li",null,[s("Replace "),z,s(" with "),X,s(" from the "),e("a",Q,[s("latest HiGHmed processes release"),n(a)])]),e("li",null,[s("Replace "),W,s(" with "),Z,s(" from the "),e("a",J,[s("latest HiGHmed processes release"),n(a)])])]),K]),e("li",null,[Y,e("ol",null,[e("li",null,[s("If you are using the provided PDQ MPI Client, replace "),$,s(", "),ee,s(" and "),se,s(" with the new files from "),ne,s(", see "),e("a",ae,[s("DSF release notes"),n(a)])]),e("li",null,[s("If you are using the provided openEHR Client, replace "),ie,s(" with the new file from "),te,s(", see "),e("a",oe,[s("DSF release notes"),n(a)])])]),le])])])])]),re,e("li",null,[de,e("ul",null,[pe,ce,e("li",null,[s("Verify the DSF FHIR server is accessible via https, for example by browsing to "),e("a",he,[s("https://your-dsf-endpoint.de/fhir/"),n(a)]),s(" (authentication with your client-certificate)")]),ue,ge,fe,e("li",null,[s("Verify your install with a ping/pong test"),me,s(" For a Task resource compatible with the 0.7.0 release of the ping process, see the "),e("a",_e,[s("Ping/Pong process wiki"),n(a)]),s(".")])])])])])}const ye=l(c,[["render",ve],["__file","upgradeFrom8.html.vue"]]),we=JSON.parse('{"path":"/oldstable/releases/upgradeFrom8.html","title":"Upgrading from 0.8.0 to 0.9.0","lang":"en-US","frontmatter":{"title":"Upgrading from 0.8.0 to 0.9.0","icon":"install"},"headers":[{"level":2,"title":"Modify DSF FHIR Server Setup","slug":"modify-dsf-fhir-server-setup","link":"#modify-dsf-fhir-server-setup","children":[]},{"level":2,"title":"Modify DSF BPE Server Setup","slug":"modify-dsf-bpe-server-setup","link":"#modify-dsf-bpe-server-setup","children":[]}],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":2.99,"words":898},"filePathRelative":"oldstable/releases/upgradeFrom8.md","localizedDate":"August 23, 2023","excerpt":"

    Upgrading the DSF from 0.8.0 to 0.9.0 involves modifying the docker-compose.yml files, replacing the process plugins and recreating the containers.

    \\n

    If you are upgrading from 0.6.0 please see the Upgrade from 0.6.0 to 0.7.0 guide first and then visit the Upgrade from 0.7.0 to 0.9.0 guide.
    \\nIf you are upgrading from 0.7.0 please see the Upgrade from 0.7.0 to 0.9.0 guide.

    "}');export{ye as comp,we as data}; diff --git a/assets/upgradeFrom90.html-RKmk-LJj.js b/assets/upgradeFrom90.html-RKmk-LJj.js new file mode 100644 index 000000000..10fb11f05 --- /dev/null +++ b/assets/upgradeFrom90.html-RKmk-LJj.js @@ -0,0 +1,39 @@ +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as r,c as d,a as e,b as n,d as s,w as p,e as t}from"./app-kq9lCQfY.js";const c={},u=e("p",null,"Upgrading the DSF from 0.9.0 to 0.9.1 involves modifying the docker-compose.yml files, replacing the process plugins and recreating the containers.",-1),h=t(`

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_0.9.1_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace 0.9.0 with 0.9.1

      @@ -1,7 +1,7 @@
      + version: '3.8'
      + services:
      +   proxy:
      +-    image: ghcr.io/highmed/fhir_proxy:0.9.0
      ++    image: ghcr.io/highmed/fhir_proxy:0.9.1
      +     restart: on-failure
      +     ports:
      +       - 127.0.0.1:80:80
      +@@ -27,7 +27,7 @@ services:
      +       - app
      + 
      +   app:
      +-    image: ghcr.io/highmed/fhir:0.9.0
      ++    image: ghcr.io/highmed/fhir:0.9.1
      +     restart: on-failure
      +     healthcheck:
      +       test: ["CMD", "java", "-cp", "dsf_fhir.jar", "org.highmed.dsf.fhir.StatusClient"]
      +
    3. Upgrade the DSF FHIR containers
      From /opt/fhir execute

      docker-compose up -d && docker-compose logs -f
      +

    Modify DSF BPE Server Setup

    `,3),g=t(`
  • Preparation / Backup

    • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
      For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_0.9.1_upgrade
  • Modify the DSF BPE docker-compose.yml file

    • NUM-CODEX (non HiGHmed) instance:
      Change the bpe container version from 0.9.0 to 0.9.1

      @@ -1,7 +1,7 @@
      + version: '3.8'
      + services:
      +   app:
      +-    image: ghcr.io/highmed/bpe:0.9.0
      ++    image: ghcr.io/highmed/bpe:0.9.1
      +     restart: on-failure
      +     healthcheck:
      +       test: ["CMD", "java", "-cp", "dsf_bpe.jar", "org.highmed.dsf.bpe.StatusClient"]
      +
    • HiGHmed instance:
      Change the bpe container version from 0.9.0 to 0.9.1

      @@ -1,7 +1,7 @@
      + version: '3.8'
      + services:
      +   app:
      +-    image: ghcr.io/highmed/bpe:0.8.0
      ++    image: ghcr.io/highmed/bpe:0.9.0
      +     restart: on-failure
      +     healthcheck:
      +       test: ["CMD", "java", "-cp", "dsf_bpe.jar", "org.highmed.dsf.bpe.StatusClient"]
      +
  • `,2),f=e("br",null,null,-1),m=e("br",null,null,-1),v=e("code",null,"dsf-mpi-client-pdq-0.7.0.jar",-1),k=e("code",null,"hapi-base-2.3.jar",-1),b=e("code",null,"hapi-structures-v25-2.3.jar",-1),_=e("code",null,"dsf-mpi-client-pdq-0.9.1.zip",-1),x={href:"https://github.com/highmed/highmed-dsf/releases/tag/v0.9.1",target:"_blank",rel:"noopener noreferrer"},y=e("br",null,null,-1),F=e("code",null,"dsf-openehr-client-impl-0.7.0.jar",-1),S=e("code",null,"dsf-openehr-client-impl-0.9.1.zip",-1),q={href:"https://github.com/highmed/highmed-dsf/releases/tag/v0.9.1",target:"_blank",rel:"noopener noreferrer"},D=e("pre",null,[e("code",null," Make sure the plugins in `/opt/bpe/plugin` are configured with `chmod 440` and `chown root:bpe`. \n")],-1),I=e("li",null,[e("p",null,[n("Upgrade the DSF BPE containers"),e("br"),n(" From "),e("code",null,"/opt/bpe"),n(" execute")]),e("div",{class:"language-text line-numbers-mode","data-ext":"text","data-title":"text"},[e("pre",{class:"language-text"},[e("code",null,`docker-compose up -d && docker-compose logs -f +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])])],-1),w=e("p",null,"Verify your upgrade:",-1),P=e("li",null,[n("Verify the DSF FHIR server is running in version 0.9.1. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 0.9.1, [...]")],-1),B=e("li",null,"Verify the DSF FHIR server started without errors",-1),H={href:"https://your-dsf-endpoint.de/fhir/",target:"_blank",rel:"noopener noreferrer"},R=e("li",null,[n("Verify the DSF BPE server is running in version 0.9.1. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 0.9.1, [...]")],-1),C=e("li",null,"Verify the DSF BPE server started without errors",-1),j=e("li",null,"Verify the DSF BPE server removed ActivityDefinition resources for the deleted process plugin from the DSF FHIR server and created new ActivityDefinition for the new process plugin.",-1),E=e("br",null,null,-1),M={href:"https://github.com/highmed/highmed-processes/wiki/Process-Ping-Start-v0.7.0",target:"_blank",rel:"noopener noreferrer"};function V(U,N){const l=i("RouteLink"),a=i("ExternalLinkIcon");return r(),d("div",null,[u,e("p",null,[e("strong",null,[n("If you are upgrading from 0.8.0 please see the "),s(l,{to:"/oldstable/releases/upgradeFrom8.html"},{default:p(()=>[n("Upgrade from 0.8.0 to 0.9.0 guide")]),_:1}),n(".")])]),h,e("ol",null,[g,e("li",null,[e("p",null,[n("Upgrade DSF Plugins and Process-Plugins"),f,n(" * Plugins in '/opt/bpe/plugin':"),m,n(" 1. If you are using the provided PDQ MPI Client, replace "),v,n(", "),k,n(" and "),b,n(" with the new files from "),_,n(", see "),e("a",x,[n("DSF release notes"),s(a)]),y,n(" 1. If you are using the provided openEHR Client, replace "),F,n(" with the new file from "),S,n(", see "),e("a",q,[n("DSF release notes"),s(a)])]),D]),I,e("li",null,[w,e("ul",null,[P,B,e("li",null,[n("Verify the DSF FHIR server is accessible via https, for example by browsing to "),e("a",H,[n("https://your-dsf-endpoint.de/fhir/"),s(a)]),n(" (authentication with your client-certificate)")]),R,C,j,e("li",null,[n("Verify your install with a ping/pong test"),E,n(" For a Task resource compatible with the 0.7.0 release of the ping process, see the "),e("a",M,[n("Ping/Pong process wiki"),s(a)]),n(".")])])])])])}const L=o(c,[["render",V],["__file","upgradeFrom90.html.vue"]]),O=JSON.parse('{"path":"/oldstable/releases/upgradeFrom90.html","title":"Upgrading from 0.9.0 to 0.9.1","lang":"en-US","frontmatter":{"title":"Upgrading from 0.9.0 to 0.9.1","icon":"install"},"headers":[{"level":2,"title":"Modify DSF FHIR Server Setup","slug":"modify-dsf-fhir-server-setup","link":"#modify-dsf-fhir-server-setup","children":[]},{"level":2,"title":"Modify DSF BPE Server Setup","slug":"modify-dsf-bpe-server-setup","link":"#modify-dsf-bpe-server-setup","children":[]}],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.83,"words":549},"filePathRelative":"oldstable/releases/upgradeFrom90.md","localizedDate":"August 23, 2023","excerpt":"

    Upgrading the DSF from 0.9.0 to 0.9.1 involves modifying the docker-compose.yml files, replacing the process plugins and recreating the containers.

    \\n

    If you are upgrading from 0.8.0 please see the Upgrade from 0.8.0 to 0.9.0 guide.

    "}');export{L as comp,O as data}; diff --git a/assets/upgradeFrom91.html-C4vCWdyC.js b/assets/upgradeFrom91.html-C4vCWdyC.js new file mode 100644 index 000000000..68ff8e372 --- /dev/null +++ b/assets/upgradeFrom91.html-C4vCWdyC.js @@ -0,0 +1,30 @@ +import{_ as r}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as t,o,c as l,a as e,b as n,d as a,e as i}from"./app-kq9lCQfY.js";const d={},p=i(`

    Upgrading from 0.9.1

    Upgrading the DSF from 0.9.1 to 0.9.2 involves modifying the docker-compose.yml files and recreating the containers.

    As the upgrade from 0.9.0 to 0.9.1 does not require any changes except the change of the version numbers, you can directly follow the following instructions.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_0.9.2_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace 0.9.1 (or 0.9.0) with 0.9.2

      @@ -1,7 +1,7 @@
      + version: '3.8'
      + services:
      +   proxy:
      +-    image: ghcr.io/highmed/fhir_proxy:0.9.1
      ++    image: ghcr.io/highmed/fhir_proxy:0.9.2
      +     restart: on-failure
      +     ports:
      +       - 127.0.0.1:80:80
      +@@ -27,7 +27,7 @@ services:
      +       - app
      + 
      +   app:
      +-    image: ghcr.io/highmed/fhir:0.9.1
      ++    image: ghcr.io/highmed/fhir:0.9.2
      +     restart: on-failure
      +     healthcheck:
      +       test: ["CMD", "java", "-cp", "dsf_fhir.jar", "org.highmed.dsf.fhir.StatusClient"]
      +
    3. Upgrade the DSF FHIR containers
      From /opt/fhir execute

      docker-compose up -d && docker-compose logs -f
      +

    Modify DSF BPE Server Setup

    `,6),c=i(`
  • Preparation / Backup

    • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
      For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_0.9.2_upgrade
  • Modify the DSF BPE docker-compose.yml file, replace 0.9.1 (or 0.9.0) with 0.9.2

    @@ -1,7 +1,7 @@
    + version: '3.8'
    + services:
    +   app:
    +-    image: ghcr.io/highmed/bpe:0.9.1
    ++    image: ghcr.io/highmed/bpe:0.9.2
    +     restart: on-failure
    +     healthcheck:
    +       test: ["CMD", "java", "-cp", "dsf_bpe.jar", "org.highmed.dsf.bpe.StatusClient"]
    +
  • Upgrade the DSF BPE containers
    From /opt/bpe execute

    docker-compose up -d && docker-compose logs -f
    +
  • `,3),u=e("p",null,"Verify your upgrade:",-1),h=e("li",null,[n("Verify the DSF FHIR server is running in version 0.9.2. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 0.9.2, [...]")],-1),f=e("li",null,"Verify the DSF FHIR server started without errors",-1),g={href:"https://your-dsf-endpoint.de/fhir/",target:"_blank",rel:"noopener noreferrer"},m=e("li",null,[n("Verify the DSF BPE server is running in version 0.9.2. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 0.9.2, [...]")],-1),v=e("li",null,"Verify the DSF BPE server started without errors",-1),k=e("br",null,null,-1),b={href:"https://github.com/highmed/highmed-processes/wiki/Process-Ping-Start-v0.7.0",target:"_blank",rel:"noopener noreferrer"};function x(_,y){const s=t("ExternalLinkIcon");return o(),l("div",null,[p,e("ol",null,[c,e("li",null,[u,e("ul",null,[h,f,e("li",null,[n("Verify the DSF FHIR server is accessible via https, for example by browsing to "),e("a",g,[n("https://your-dsf-endpoint.de/fhir/"),a(s)]),n(" (authentication with your client-certificate)")]),m,v,e("li",null,[n("Verify your install with a ping/pong test"),k,n(" For a Task resource compatible with the 0.7.0 release of the ping process, see the "),e("a",b,[n("Ping/Pong process wiki"),a(s)]),n(".")])])])])])}const q=r(d,[["render",x],["__file","upgradeFrom91.html.vue"]]),D=JSON.parse('{"path":"/oldstable/releases/upgradeFrom91.html","title":"Upgrading from 0.9.1","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Modify DSF FHIR Server Setup","slug":"modify-dsf-fhir-server-setup","link":"#modify-dsf-fhir-server-setup","children":[]},{"level":2,"title":"Modify DSF BPE Server Setup","slug":"modify-dsf-bpe-server-setup","link":"#modify-dsf-bpe-server-setup","children":[]}],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.26,"words":379},"filePathRelative":"oldstable/releases/upgradeFrom91.md","localizedDate":"August 23, 2023","excerpt":"\\n

    Upgrading the DSF from 0.9.1 to 0.9.2 involves modifying the docker-compose.yml files and recreating the containers.

    \\n

    As the upgrade from 0.9.0 to 0.9.1 does not require any changes except the change of the version numbers, you can directly follow the following instructions.

    "}');export{q as comp,D as data}; diff --git a/assets/upgradeFrom92.html-CoFcIWbe.js b/assets/upgradeFrom92.html-CoFcIWbe.js new file mode 100644 index 000000000..2b0dfd318 --- /dev/null +++ b/assets/upgradeFrom92.html-CoFcIWbe.js @@ -0,0 +1,30 @@ +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r,o,c as l,a as e,b as n,d as a,e as i}from"./app-kq9lCQfY.js";const d={},p=i(`

    Upgrading from 0.9.2

    Upgrading the DSF from 0.9.2 to 0.9.3 involves modifying the docker-compose.yml files and recreating the containers.

    As the upgrade from 0.9.0 to 0.9.1 and 0.9.1 to 0.9.2 does not require any changes except the change of the version numbers, you can directly follow the following instructions.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_0.9.3_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace 0.9.2 (or 0.9.0, 0.9.1) with 0.9.3

      @@ -1,7 +1,7 @@
      + version: '3.8'
      + services:
      +   proxy:
      +-    image: ghcr.io/highmed/fhir_proxy:0.9.2
      ++    image: ghcr.io/highmed/fhir_proxy:0.9.3
      +     restart: on-failure
      +     ports:
      +       - 127.0.0.1:80:80
      +@@ -27,7 +27,7 @@ services:
      +       - app
      + 
      +   app:
      +-    image: ghcr.io/highmed/fhir:0.9.2
      ++    image: ghcr.io/highmed/fhir:0.9.3
      +     restart: on-failure
      +     healthcheck:
      +       test: ["CMD", "java", "-cp", "dsf_fhir.jar", "org.highmed.dsf.fhir.StatusClient"]
      +
    3. Upgrade the DSF FHIR containers
      From /opt/fhir execute

      docker-compose up -d && docker-compose logs -f
      +

    Modify DSF BPE Server Setup

    `,6),c=i(`
  • Preparation / Backup

    • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
      For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_0.9.3_upgrade
  • Modify the DSF BPE docker-compose.yml file, replace 0.9.2 (or 0.9.0, 0.9.1) with 0.9.3

    @@ -1,7 +1,7 @@
    + version: '3.8'
    + services:
    +   app:
    +-    image: ghcr.io/highmed/bpe:0.9.2
    ++    image: ghcr.io/highmed/bpe:0.9.3
    +     restart: on-failure
    +     healthcheck:
    +       test: ["CMD", "java", "-cp", "dsf_bpe.jar", "org.highmed.dsf.bpe.StatusClient"]
    +
  • Upgrade the DSF BPE containers
    From /opt/bpe execute

    docker-compose up -d && docker-compose logs -f
    +
  • `,3),u=e("p",null,"Verify your upgrade:",-1),h=e("li",null,[n("Verify the DSF FHIR server is running in version 0.9.3. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 0.9.3, [...]")],-1),f=e("li",null,"Verify the DSF FHIR server started without errors",-1),g={href:"https://your-dsf-endpoint.de/fhir/",target:"_blank",rel:"noopener noreferrer"},m=e("li",null,[n("Verify the DSF BPE server is running in version 0.9.3. The log should contain a message:"),e("br"),e("code",null,"INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 0.9.3, [...]")],-1),v=e("li",null,"Verify the DSF BPE server started without errors",-1),k=e("br",null,null,-1),b={href:"https://github.com/highmed/highmed-processes/wiki/Process-Ping-Start-v0.7.0",target:"_blank",rel:"noopener noreferrer"};function x(_,y){const s=r("ExternalLinkIcon");return o(),l("div",null,[p,e("ol",null,[c,e("li",null,[u,e("ul",null,[h,f,e("li",null,[n("Verify the DSF FHIR server is accessible via https, for example by browsing to "),e("a",g,[n("https://your-dsf-endpoint.de/fhir/"),a(s)]),n(" (authentication with your client-certificate)")]),m,v,e("li",null,[n("Verify your install with a ping/pong test"),k,n(" For a Task resource compatible with the 0.7.0 release of the ping process, see the "),e("a",b,[n("Ping/Pong process wiki"),a(s)]),n(".")])])])])])}const q=t(d,[["render",x],["__file","upgradeFrom92.html.vue"]]),D=JSON.parse('{"path":"/oldstable/releases/upgradeFrom92.html","title":"Upgrading from 0.9.2","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Modify DSF FHIR Server Setup","slug":"modify-dsf-fhir-server-setup","link":"#modify-dsf-fhir-server-setup","children":[]},{"level":2,"title":"Modify DSF BPE Server Setup","slug":"modify-dsf-bpe-server-setup","link":"#modify-dsf-bpe-server-setup","children":[]}],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":1.28,"words":385},"filePathRelative":"oldstable/releases/upgradeFrom92.md","localizedDate":"August 23, 2023","excerpt":"\\n

    Upgrading the DSF from 0.9.2 to 0.9.3 involves modifying the docker-compose.yml files and recreating the containers.

    \\n

    As the upgrade from 0.9.0 to 0.9.1 and 0.9.1 to 0.9.2 does not require any changes except the change of the version numbers, you can directly follow the following instructions.

    "}');export{q as comp,D as data}; diff --git a/assets/usingTheGitHubMaven.html-_DTrQqeM.js b/assets/usingTheGitHubMaven.html-_DTrQqeM.js new file mode 100644 index 000000000..c45637cf1 --- /dev/null +++ b/assets/usingTheGitHubMaven.html-_DTrQqeM.js @@ -0,0 +1,40 @@ +import{_ as p}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as o,o as c,c as l,a,b as n,d as t,e}from"./app-kq9lCQfY.js";const i={},u=a("h2",{id:"authenticating-to-github-packages",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#authenticating-to-github-packages"},[a("span",null,"Authenticating to GitHub Packages")])],-1),k={href:"https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-apache-maven-registry#authenticating-to-github-packages",target:"_blank",rel:"noopener noreferrer"},g={href:"https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token",target:"_blank",rel:"noopener noreferrer"},r=e(`

    After that, add the following configuration to your local .m2/settings.xml. Replace USERNAME with your GitHub username and TOKEN with the previously generated personal GitHub access token. The token needs at least the scope read:packages.

        <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    +  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
    +                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
    +
    +  <activeProfiles>
    +    <activeProfile>github</activeProfile>
    +  </activeProfiles>
    +
    +  <profiles>
    +    <profile>
    +      <id>github</id>
    +      <repositories>
    +        <repository>
    +          <id>github</id>
    +          <name>GitHub HiGHmed Apache Maven Packages</name>
    +          <url>https://maven.pkg.github.com/highmed/highmed-dsf</url>
    +          <releases><enabled>true</enabled></releases>
    +          <snapshots><enabled>true</enabled></snapshots>
    +        </repository>
    +      </repositories>
    +    </profile>
    +  </profiles>
    +
    +  <servers>
    +    <server>
    +      <id>github</id>
    +      <username>USERNAME</username>
    +      <password>TOKEN</password>
    +    </server>
    +  </servers>
    +</settings>
    +

    Installing a Package

    `,3),d={href:"https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-apache-maven-registry#installing-a-package",target:"_blank",rel:"noopener noreferrer"},h=e(`

    To install an Apache Maven package from GitHub Packages edit the element dependencies in the pom.xml file by including the package. This could look as follows to include the dsf-bpe-process-base package (replace VERSION with the package version, e.g. 0.4.0-SNAPSHOT):

    <dependencies>
    +  <dependency>
    +    <groupId>org.highmed.dsf</groupId>
    +    <artifactId>dsf-bpe-process-base</artifactId>
    +    <version>VERSION</version>
    +  </dependency>
    +<dependencies>
    +
    `,2);function m(v,b){const s=o("ExternalLinkIcon");return c(),l("div",null,[u,a("p",null,[n("For more information take a look at this GitHub documentation about "),a("a",k,[n("authentication"),t(s)]),n(".")]),a("p",null,[n("In order to install the HiGHmed DSF packages using Maven in your own projects you need a personal GitHub access token. This "),a("a",g,[n("GitHub documentation"),t(s)]),n(" shows you how to generate one.")]),r,a("p",null,[n("For more information take a look at this GitHub documentation about "),a("a",d,[n("package installation"),t(s)]),n(".")]),h])}const w=p(i,[["render",m],["__file","usingTheGitHubMaven.html.vue"]]),x=JSON.parse('{"path":"/oldstable/code/usingTheGitHubMaven.html","title":"Using the Github Maven Package Registry","lang":"en-US","frontmatter":{"title":"Using the Github Maven Package Registry","icon":"code"},"headers":[{"level":2,"title":"Authenticating to GitHub Packages","slug":"authenticating-to-github-packages","link":"#authenticating-to-github-packages","children":[]},{"level":2,"title":"Installing a Package","slug":"installing-a-package","link":"#installing-a-package","children":[]}],"git":{"createdTime":1692783801000,"updatedTime":1692783801000,"contributors":[{"name":"Hauke Hund","email":"hauke.hund@hs-heilbronn.de","commits":1}]},"readingTime":{"minutes":0.94,"words":283},"filePathRelative":"oldstable/code/usingTheGitHubMaven.md","localizedDate":"August 23, 2023","excerpt":"

    Authenticating to GitHub Packages

    \\n

    For more information take a look at this GitHub documentation about authentication.

    "}');export{w as comp,x as data}; diff --git a/download/dsf_bpe_1_0_0.tar.gz b/download/dsf_bpe_1_0_0.tar.gz new file mode 100644 index 000000000..fbb3b74ff Binary files /dev/null and b/download/dsf_bpe_1_0_0.tar.gz differ diff --git a/download/dsf_bpe_1_1_0.tar.gz b/download/dsf_bpe_1_1_0.tar.gz new file mode 100644 index 000000000..4fa370d0e Binary files /dev/null and b/download/dsf_bpe_1_1_0.tar.gz differ diff --git a/download/dsf_bpe_1_2_0.tar.gz b/download/dsf_bpe_1_2_0.tar.gz new file mode 100644 index 000000000..10c168766 Binary files /dev/null and b/download/dsf_bpe_1_2_0.tar.gz differ diff --git a/download/dsf_bpe_1_3_0.tar.gz b/download/dsf_bpe_1_3_0.tar.gz new file mode 100644 index 000000000..3362f863e Binary files /dev/null and b/download/dsf_bpe_1_3_0.tar.gz differ diff --git a/download/dsf_bpe_1_3_1.tar.gz b/download/dsf_bpe_1_3_1.tar.gz new file mode 100644 index 000000000..2aa4491a7 Binary files /dev/null and b/download/dsf_bpe_1_3_1.tar.gz differ diff --git a/download/dsf_bpe_1_3_2.tar.gz b/download/dsf_bpe_1_3_2.tar.gz new file mode 100644 index 000000000..34008fd0e Binary files /dev/null and b/download/dsf_bpe_1_3_2.tar.gz differ diff --git a/download/dsf_bpe_1_4_0.tar.gz b/download/dsf_bpe_1_4_0.tar.gz new file mode 100644 index 000000000..1b84fca62 Binary files /dev/null and b/download/dsf_bpe_1_4_0.tar.gz differ diff --git a/download/dsf_bpe_1_5_0.tar.gz b/download/dsf_bpe_1_5_0.tar.gz new file mode 100644 index 000000000..60f117774 Binary files /dev/null and b/download/dsf_bpe_1_5_0.tar.gz differ diff --git a/download/dsf_bpe_1_5_1.tar.gz b/download/dsf_bpe_1_5_1.tar.gz new file mode 100644 index 000000000..eb92deee5 Binary files /dev/null and b/download/dsf_bpe_1_5_1.tar.gz differ diff --git a/download/dsf_bpe_1_5_2.tar.gz b/download/dsf_bpe_1_5_2.tar.gz new file mode 100644 index 000000000..054bf5c54 Binary files /dev/null and b/download/dsf_bpe_1_5_2.tar.gz differ diff --git a/download/dsf_fhir_1_0_0.tar.gz b/download/dsf_fhir_1_0_0.tar.gz new file mode 100644 index 000000000..4b4ebef6d Binary files /dev/null and b/download/dsf_fhir_1_0_0.tar.gz differ diff --git a/download/dsf_fhir_1_1_0.tar.gz b/download/dsf_fhir_1_1_0.tar.gz new file mode 100644 index 000000000..7f05e2002 Binary files /dev/null and b/download/dsf_fhir_1_1_0.tar.gz differ diff --git a/download/dsf_fhir_1_2_0.tar.gz b/download/dsf_fhir_1_2_0.tar.gz new file mode 100644 index 000000000..b79e705d0 Binary files /dev/null and b/download/dsf_fhir_1_2_0.tar.gz differ diff --git a/download/dsf_fhir_1_3_0.tar.gz b/download/dsf_fhir_1_3_0.tar.gz new file mode 100644 index 000000000..897f03d05 Binary files /dev/null and b/download/dsf_fhir_1_3_0.tar.gz differ diff --git a/download/dsf_fhir_1_3_1.tar.gz b/download/dsf_fhir_1_3_1.tar.gz new file mode 100644 index 000000000..263d7470d Binary files /dev/null and b/download/dsf_fhir_1_3_1.tar.gz differ diff --git a/download/dsf_fhir_1_3_2.tar.gz b/download/dsf_fhir_1_3_2.tar.gz new file mode 100644 index 000000000..9e650e9e6 Binary files /dev/null and b/download/dsf_fhir_1_3_2.tar.gz differ diff --git a/download/dsf_fhir_1_4_0.tar.gz b/download/dsf_fhir_1_4_0.tar.gz new file mode 100644 index 000000000..ef7d24b8b Binary files /dev/null and b/download/dsf_fhir_1_4_0.tar.gz differ diff --git a/download/dsf_fhir_1_5_0.tar.gz b/download/dsf_fhir_1_5_0.tar.gz new file mode 100644 index 000000000..7e9c6bc22 Binary files /dev/null and b/download/dsf_fhir_1_5_0.tar.gz differ diff --git a/download/dsf_fhir_1_5_1.tar.gz b/download/dsf_fhir_1_5_1.tar.gz new file mode 100644 index 000000000..511bab7c7 Binary files /dev/null and b/download/dsf_fhir_1_5_1.tar.gz differ diff --git a/download/dsf_fhir_1_5_2.tar.gz b/download/dsf_fhir_1_5_2.tar.gz new file mode 100644 index 000000000..de8a28ff5 Binary files /dev/null and b/download/dsf_fhir_1_5_2.tar.gz differ diff --git a/for-you/index.html b/for-you/index.html new file mode 100644 index 000000000..6c1a2a4d0 --- /dev/null +++ b/for-you/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF for your project + + + + + +
    Skip to main content

    DSF for your project

    DSF-TeamAbout 1 min

    Summary

    • Use case agnostic middleware: DSF is adaptable to any distributed process, leveraging BPMN 2.0 and FHIR R4 for secure, efficient data sharing across various biomedical research scenarios.

    • Security: DSF prioritizes security through stringent authentication and authorization protocols, ensuring data is accessed and shared only by authorized organizations to maintain data confidentiality and integrity.

    • Proven in clinical research: Deployed in German university hospitals, DSF's effectiveness and reliability are validated in real-world settings.

    • Implementation guidance: DSF offers resources on how to implement new process plugins.

    Overview of DSF

    The Data Sharing Framework (DSF) is a secure middleware solution designed to facilitate data sharing across different organizations for biomedical research. It utilizes BPMN 2.0 and FHIR R4 standards to support processes such as data extraction, merging, pseudonymization, and provisioning. Funded by the German Federal Ministry of Education and Research as part of the Medical Informatics initiative, the DSF aims to improve data interoperability and security across institutional boundaries.

    Key features and benefits

    Distributed data sharing processes

    DSF enables distributed data sharing by providing each participating site with a FHIR endpoint and a business process engine. This setup ensures that data can be securely shared and processed across different sites, facilitating cross-site data sharing and feasibility analyses.

    Flexibility with data standards

    While DSF primarily uses the FHIR R4 standard to ensure high-quality data exchange, it is designed to be open and adaptable to other data formats. This flexibility allows for a wide range of data types to be incorporated into research projects.

    Security and access control

    Security is a critical component of DSF, which includes robust authentication and authorization protocols. These protocols ensure that data access and sharing are restricted to authorized organizations, maintaining the confidentiality and integrity of the data.

    Deployment in clinical environments

    DSF is already deployed and operational in Data Integration Centers at German university hospitals, demonstrating its applicability and reliability in real-world clinical research settings.

    Getting started with the DSF

    If you're looking to leverage the DSF for your research or you're interested in exploring how it can enhance your data sharing needs, we're here to support you. Visit the Learn how to implement your use case page to start your journey towards integrating the DSF into your research project.

    Should you have any questions or need personalized assistance, don't hesitate to reach out to the DSF core team directly at dsf-gecko@hs-heilbronn.de.

    Embark on your DSF journey today and join a community committed to advancing biomedical research through secure, interoperable data sharing.

    Last update:
    + + + diff --git a/for-you/learn.html b/for-you/learn.html new file mode 100644 index 000000000..48a418e42 --- /dev/null +++ b/for-you/learn.html @@ -0,0 +1,40 @@ + + + + + + + + + + How to implement your use-case + + + + + + + + + diff --git a/hackathon/index.html b/hackathon/index.html new file mode 100644 index 000000000..8d595b4e3 --- /dev/null +++ b/hackathon/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Hackathon + + + + + +
    Skip to main content

    Hackathon

    DSF-TeamAbout 2 min

    Gemeinsame technische Sprechstunde der DSF-Community und des FDPG+

    Hackathon vom 18.06.2024

    Wir laden Sie herzlich zu unserem kommenden Hackathon am 18.06. von 10:00 Uhr bis 15:30 Uhr ein. Diese Veranstaltung bietet die Gelegenheit, sich mit den neuesten Updates und Funktionen unserer Komponenten vertraut zu machen.

    Agenda:

    1. Einführung in Neuerungen (10:00 - 11:00 Uhr):
      • Begrüßung und Einführung in die neuen Funktionen und Verbesserungen des DSFs
      • Präsentation der Änderungen der MII DSF-Prozessplugins, sowie von Blaze und Flare
    2. Updates MII-Komponenten (ab 11:00 Uhr bis verlängerter Pause, um NUM-DIZ-Meeting besuchen zu können):
      • DSF
      • Feasibility
      • Data Sharing
      • Data Transfer
      • KDS Report
      • Blaze
      • Flare mit neuer KDS Ontologie
    3. Testen des Prozessplugins "Data Sharing" (ab 14:15 Uhr):
      • Praktische Anwendung des "Data Sharing"-Prozessplugins auf unserer Testinfrastruktur.

    Ziel der Veranstaltung ist es die Test- und Produktivsysteme möglichst aller Standorte auf den neusten Stand zu patchen.

    Vorbereitung

    In diesem Hackathon ist das Aktualisieren der Systeme ein aktiver Bestandteil und bedarf keiner speziellen Vorbereitung. Für das Testen der Data Sharing Prozesse sollten jedoch einige Voraussetzungen bereits vor dem Termin erfüllt sein.

    Netzwerkfreigaben

    Für den Hackathon werden wir primär die Test-DMS aus Heilbronn verwenden, dafür muss neben der Freigabe zur FDPG auch die Freigabe zum und vom MII-Test-System der HHN vorhanden sein (mii-test.gecko.hs-heilbronn.deopen in new window).

    In diesem Kontext bietet es sich an, auch die Freigaben für weitere Test-DMSen zu beantragen. Weitere Details dazu befinden sich in der Liste der Firewallregeln im Test-Allowlist-Management-Tool (allowlist-test.gecko.hs-heilbronn.deopen in new window) unter dem Punkt “Download Allowlist”. Wir planen während des Termins auch mit ausgewählten DIZen erste Funktionstests der Test-DMSen durchzuführen.

    Wir empfehlen auch sicherzustellen, dass Sie Zugriff auf die Weboberfläche Ihres DSF-FHIR-Servers haben.

    FHIR-Store

    Zur Datenausleitung im Kontext des Data Sharing Prozesses werden wir FHIR Bundles mit Testdaten zur Verfügung stellen, die in Form eines FHIR Bundles auf einem FHIR Store gespeichert werden müssen. Dabei kann ein beliebiger FHIR Server (z.B. HAPI FHIR oder Blaze) verwendet werden. Es kann auch der FHIR Server verwendet werden, der z.B. für Feasibility im Testsystem genutzt wird.

    Weitere Details zum Data Sharing Prozess sind hier zu finden:

    https://github.com/medizininformatik-initiative/mii-process-data-sharing/wikiopen in new window

    Eine Installation kann vor oder während des Hackathons durchgeführt werden.

    Installationshinweise

    DSF

    Installationopen in new window oder Updateopen in new window

    Prozessplugins

    Weitere Anwendungen

    Data Sharing Demodaten

    Falls Sie Fragen zum Hackathon oder der Installation des DSF haben, melden Sie sich gerne über den DSF-Community Zulip-Channel oder dsf-gecko@hs-heilbronn.de.

    Last update:
    + + + diff --git a/index.html b/index.html new file mode 100644 index 000000000..544ad38be --- /dev/null +++ b/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Data Sharing Framework + + + + + +
    Skip to main content
    Data Sharing Framework

    Data Sharing Framework

    A performant, secure, and innovative framework that enables biomedical researchers to extract value from routine data.


    Data Sharing Framework

    The Data Sharing Framework (DSF) is a concept for a secure middleware to distribute data sharing processes based on the BPMN 2.0 and FHIR R4 standards. The DSF is used to support biomedical research with routine data, aiming to extract, merge, pseudonymize and provide data stored in multiple distributed organizations. Every participating site runs a FHIR endpoint accessible by other sites and a business process engine in the local secured network. The process engines execute BPMN processes in order to coordinate local and remote steps necessary to enable cross-site data sharing or feasibility analyses. This includes access to local data repositories, use-and-access-committee decision support, consent filtering, and privacy preserving record-linkage and pseudonymization. The aim is to enable secure and syntactically-, semantically- and process-interoperable data exchange across organizational boundaries. The secure communication infrastructure is funded by the German Federal Ministry of Education and Research within the Medical Informatics structure as DSF Communityopen in new window.

    DSF concept
    DSF concept

    Rolf Hansen Memorial Award 2023 goes to Hauke Hundopen in new window

    We are very pleased to have won the Rolf Hansen Memorial Award at EFMI MIE 2023open in new window in Gothenburg. The Rolf Hansen Memorial Award is presented annually by the European Federation for Medical Informatics (EFMI) for an outstanding paper as well as for an excellent presentation. It is named after Rolf Hansen (1931-1993), a well-known Norwegian medical informatician and former president of EFMI. Hauke Hund presented his Paper: No Transfer Without Validation: A Data Sharing Framework Use Case in May at the EFMI MIE. doi:10.3233/SHTI230066 open in new window

    Feel free to contact us via dsf-gecko@hs-heilbronn.de and we will take care of your request as soon as possible.

    + + + diff --git a/intro/index.html b/intro/index.html new file mode 100644 index 000000000..5134468f8 --- /dev/null +++ b/intro/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Documentation + + + + + + + + + diff --git a/intro/info/allowList.html b/intro/info/allowList.html new file mode 100644 index 000000000..9d237b789 --- /dev/null +++ b/intro/info/allowList.html @@ -0,0 +1,40 @@ + + + + + + + + + + Allow Lists + + + + + +
    Skip to main content

    Allow Lists

    DSF-TeamLess than 1 minute

    Goal

    The main objective is to allow only authorized organizations to do what "we" allow them to do (e.g. query data).
    First, we need a list of organizations that we trust. Secondly, we need a way to ensure that the other party is a member of the parent organization. Thirdly, a list of actions we want to allow the organization to perform is needed. An organization can have different roles in different use cases.

    The Allow List consists of Organization-, Endpoint- and OrganisationAffiliation- resources. With these resources the allow list defines communication partners and and parent organizations like research consortia and groups as well as the roles of each organization. Each DSF FHIR server stores their own allow list. To make sure that processes can be executed, parties must allow access via their allow list.

    Architecture
    Architecture

    Allow List Managment

    Here you can read all the information if you want to create or update an Allow List.

    Feel free to contact us via E-Mail (dsf-gecko@hs-heilbronn.de) and we will take care of your request as soon as possible.

    Last update:
    + + + diff --git a/intro/info/architecture.html b/intro/info/architecture.html new file mode 100644 index 000000000..7789ac835 --- /dev/null +++ b/intro/info/architecture.html @@ -0,0 +1,40 @@ + + + + + + + + + + Architecture + + + + + +
    Skip to main content

    Architecture

    DSF-TeamAbout 2 min

    The Data Sharing Framework implements a distributed business process engine based on the BPMN 2.0 and FHIR R4 standards. Every participating organisation (e.g. ORG. A) runs a FHIR endpoint accessible by other sites and a business process engine (BPE) in the local secured network. Once the DSF has been installed in an organisation, it can be used for multiple use cases.

    Simplified DSF Architecture
    Simplified DSF Architecture

    The following architecture diagram also shows three organisations, each of which has installed the DSF. The FHIR endpoint (green) is located in a demilitarised zone (DMZ) and is accessible from outside for communication with other organisations. It can be compared to a mailbox. The Business Process Engine (BPE - blue) is located in the intranet of an organisation and is responsible for the execution of processes. The metaphor: control centre helps here.

    DSF Architecture
    DSF Architecture

    DSF FHIR Server 📫

    As mentioned above, the externally accessible DSF FHIR server acts as a mailbox for communication. This means that an organisation creates a task resource in its DSF and drops the task resource (letters) into the mailbox of another organisation, requesting that something happen. Task resources have been explained in more detail in the section Basics and Standards.
    It is important to understand that the DSF FHIR server is not used for persisting medical data.

    DSF FHIR Server
    DSF FHIR Server

    Business Process Engine (BPE)

    The BPE located in the secure internal network executes the processes (BPMN/Java). The BPE is deployed in the internal network and has access to the local systems, such as the organisation's own FHIR server, on which medical data is stored. These FHIR servers are not to be confused with the DSF FHIR server, on which no medical data is persisted.
    Different processes can be executed simultaneously. For this, only a new process plugin file has to be added and configured. More about this in the Process Plugins.

    BPE
    BPE

    The DSF BPE uses websocket (WSS) and webservice (HTTPS) connections to communicate with the DSF FHIR server. FHIR resources are created, read, updated and deleted via HTTP requests against the FHIR webservice API. The FHIR subscription mechanism is used to communicate Task resources with status 'requested' and QuestionnaireResponse resources with status 'completed' to the BPE via websockets. When the BPE starts and before the websocket connections are established, 'requested' Task resources and 'completed' QuestionnaireResponse not seen by the BPE are read via webservice requests.

    Flexible Deployment

    The deployment of the architecture is flexible. The organisations can be deployed as a star schema (left) or as a mesh schema (right). In the Star schema (left), all Data Integration Centres (DIC) are connected to a central node (CRR - Central Research Repository), which transfers the information to all nodes (DIC). For security reasons, a data transfer hub (DTH) is connected upstream, which provides additional security so that the medical data is never transferred together with the authenticating data.

    In the mesh scheme (right), the nodes (DIC) are all directly connected to each other and the information is transferred from node to node. Here in the FDPG (Forschungsdatenportal - Research Data Portal), the data can then be accessed for research purposes. More about this here.

    Star schema Mesh schema

    Network Setup & Additional Reverse Proxy in external DMZ

    You can find more information about the network setup here

    Last update:
    + + + diff --git a/intro/info/basics.html b/intro/info/basics.html new file mode 100644 index 000000000..d0f0ebaa8 --- /dev/null +++ b/intro/info/basics.html @@ -0,0 +1,40 @@ + + + + + + + + + + Basics and Standards + + + + + +
    Skip to main content

    Basics and Standards

    DSF-TeamAbout 3 min

    Here you can find some basic information about interoperability and the standards were using within the DSF before we go into details about the architecture. Here we only describe how the standards (FHIR and BPMN) are used within the DSF. If you want to gain a deeper knowledge of the standards, we recommend visiting these websites: HL7 FHIRopen in new window and BPMNopen in new window

    Interoperability

    Interoperability is the ability of different systems to work together as seamlessly as possible. We can divide interoperability into four levels.

    • The foundational level defines the basic interconnectivity requirements which are necessary for a system or application to securely transmit data to and receive data from another system or application. Techniques such as HTTPS or REST are used for this.
    • The second level is the structural level. It defines the format and the syntax of the data exchange. Therefore, data formats like JSON or XML can be used.
    • The semantic level ensures the correct interpretation of the contents of the exchanged data between the different systems. Therefore, information models as FHIR or CDA or medical terminology systems like SNOMED CT or ICD can be used.
    • The final level, the organizational level, includes policy, social, legal and organizational aspects that enable secure, seamless and timely communication and use of data both within and between organizations. And importantly, these components enable shared consent, trust and integrated end-user processes and workflows.
    Levels of interoperability
    Levels of interoperability

    HL7 FHIR 🔥

    HL7 FHIRopen in new window is a standard for data exchange that can be used as an information model for communication within and between systems. The standard is based on resources, references and profiles. With this concept, FHIR offers interoperability out of the box. The resources describe data formats. 150 specified resources cover the entire health system. An example of a resource would be a patient, which consists of data such as name or gender. These resources can refer to other resources by means of references. This connects the information units into a network. For seamless exchange of information, FHIR supports RESTful architectures and web standards such as XML or JSON, which makes it easier for developers to use FHIR.
    The FHIR profiles can be understood as a set of rules. They explain, for example, which attributes must be mandatorily specified or which terminology may be used. In addition, profiles and controlled vocabulary can be validated.

    BPMN

    Business Process Modelling Notationopen in new window is a modelling language that can be used to model and implement processes. The models can be used for the documentation of processes and for communication between different stakeholders. Furthermore, BPMN forms a standardised bridge between process design and process implementation. This is because it simplifies implementation. These processes are executed by a Business Process Engine. Basically, a BPE is a server that can read and execute the business process. More about this in the section on architecture.

    Example of a BPMN model (Ping-Pong-Process of the DSF)
    Example of a BPMN model (Ping-Pong-Process of the DSF)

    Why are we using FHIR and BPMN?

    On the one hand we use FHIR because of the mentioned benefits. On the other hand FHIR fits great with BPMN and these two in combination are a great fit for what we do:
    Execute distributed data sharing Processes.

    We do not need all 150 FHIR resources. The following FHIR resources are the ones we need and have implemented: ActivityDefinition, Binary, Bundle, CodeSystem, DocumentReference, Endpoint, Group, Library, Measure, MeasureReport, NamingSystem, Organization, Questionnaire, QuestionnaireResponse, ResearchStudy, StructureDefinition, Subscription, Task and ValueSet.

    Don't worry, it is not important to understand them all now. But to understand why we use FHIR and BPMN, it is important to look at the ActivityDefinition and TaskResources on the FHIR side and the Message Events on the BPMN side.
    In the following picture you can see parts of BPMN. These Message Events enable the communication between different organizations. Every time there is a Message Event between two business processes, there is a corresponding TaskResource on the FHIR side. When one organization sends a message for example “do some work” to another organization or when we send a message to ourselves to start or continue a process, we do this by creating a FHIR TaskResource with the status “requested”. After that the Business Process Engine starts the work and the status switches to “in-progress” and if the work is done to “completed” or if there is a problem to “failed”.

    The ActivityDefinition is needed to publish what can be done in an instance. That means the ActivityDefinition contains the process description with the authorisation who is allowed to send a message.

    BPMN MessageEvents
    BPMN MessageEvents
    Last update:
    + + + diff --git a/intro/info/index.html b/intro/info/index.html new file mode 100644 index 000000000..33cb55365 --- /dev/null +++ b/intro/info/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Info + + + + + + + + + diff --git a/intro/info/introduction.html b/intro/info/introduction.html new file mode 100644 index 000000000..3f2977dfb --- /dev/null +++ b/intro/info/introduction.html @@ -0,0 +1,40 @@ + + + + + + + + + + Introduction + + + + + +
    Skip to main content

    Introduction

    DSF-TeamAbout 1 min

    The German Federal Ministry of Education and Researchopen in new window is funding the Medical Informatics Initiativeopen in new window with the aim of making routine data available digitally, reliably and quickly for medical research. University hospitals have founded consortia with partners such as research institutions and other companies to create the conditions for research and patient care to share their data across sites. Data Integration Centers (DIC) have been established at the university hospitals and partner institutions to create the technical and organizational conditions for data exchange between patient care and medical research.

    The Data Sharing Framework (DSF) was developed within the HiGHmed consortium of the Medical Informatics Initiative and is now funded as an independent project by the German Federal Ministry of Education and Research within the Medical Informatics structure as DSF Communityopen in new window.

    The DSF is a concept for a secure middleware to distribute data sharing processes, aiming to extract, merge, pseudonymize and provide data stored in multiple distributed DICs. A researcher can use the DSF for example to submit feasibility queries to several DICs and thus has the opportunity to obtain sufficient data from different locations for his or her research. By using international standards such as FHIR and BPMN 2.0, the problem of heterogeneous data models, primary systems, architectures and federated legislation between DICs can be solved. The aim is to enable secure and syntactically-, semantically- and process-interoperable data exchange across organisational boundaries.

    DSF concept
    DSF concept

    The DSF is a secure communication infrastructure, that (1) scales with communication relationships, (2) orchestrates processes and instances, (3) separates execution logic from program code, (4) enables automated and user-centeric process steps ​(5) and can be used for heterogeny structures.

    Federated data exchange between distributed DICs (CRP=Central Research Portal, DMU=Data Management Unit)
    Federated data exchange between distributed DICs (CRP=Central Research Portal, DMU=Data Management Unit)
    Last update:
    + + + diff --git a/intro/info/networkSetup.html b/intro/info/networkSetup.html new file mode 100644 index 000000000..4676089be --- /dev/null +++ b/intro/info/networkSetup.html @@ -0,0 +1,40 @@ + + + + + + + + + + Network Setup and General Architecture + + + + + +
    Skip to main content

    Network Setup and General Architecture

    DSF-TeamAbout 2 min

    The Data Sharing Framework consists of two components: A FHIR Endpoint Server used to except Task resources and provide resources for download by other organizations and a Business Process Engine Server run internal and not accessible by other organization to execute and coordinate processes.

    Network Setup Diagramm
    Network Setup Diagramm
    • FHIR Reverse Proxy: The FHIR Reverse Proxy is used to terminate incoming https connections to the FHIR App Server. The Reverse Proxy needs to be accessible on port 443 from the internet. Incoming https connection will be delegate as http on a docker internal network to the FHIR App Server.
    • FHIR App Server: The FHIR App Server is used as a FHIR Endpoint for incoming Task resources and providing resources for download by other organizations. In order to validate incoming FHIR resources the server will communicate with FHIR Servers at other organizations. Access to resources and authorization for creating or updating resources is granted based on the content of the resource and/or based on the client (identified by its client certificate) being part of an allow list. JDBC connections to the FHIR DB Server
    • FHIR DB Server: PostgreSQL database for the FHIR App Server.
    • BPE App Server: The BPE App Server is executing BPMN 2.0 business processes with the included business process engine. Automatic BPMN service tasks are used for example to check resource, access the PDP- and MPI-servers as well as the MDAT repository. The calculation of record linkage bit vectors (Record Bloom Filters) is also performed using an automatic service task. As of version 0.3.0 the BPE server does not provide any webservices for modifying an server resources.
    • BPE DB Server: PostgreSQL database for the BPE App Server.
    • PDP: IHE Policy Decision Point for deciding on patient consent.
    • MDAT Repo: Repository (e.g. openEHR) for storing medical data (MDAT).
    • MPI: IHE Master Patient Index for storing identifying patient date (IDAT) e.g. first name, last name, date of birth.
    • Cohort Browser: Example for a system to trigger patient cohort size estimations across multiple organizations.

    More information on Client- and Server-Certificates are available on the dedicated wiki page: Authentication: Client/Server Certificates

    Additional Reverse Proxy in external DMZ

    In some organizations an additional reverse proxy in an external DMZ is needed. This can be accomplished by using for example nginx or haproxy as a TCP-Proxy. Example configurations routing traffic using SNI can be found below. Configuring an additional reverse proxy to terminate the incoming TLS connection early is not recommended.

    Network Setup Diagramm
    Network Setup Diagramm
    Last update:
    + + + diff --git a/intro/info/process-plugins.html b/intro/info/process-plugins.html new file mode 100644 index 000000000..7afd7c7b6 --- /dev/null +++ b/intro/info/process-plugins.html @@ -0,0 +1,40 @@ + + + + + + + + + + Process Plugins + + + + + +
    Skip to main content

    Process Plugins

    DSF-TeamAbout 2 min

    Overview

    It is important to understand that the DSF is only the silent helper in the background: a middleware. The DSF is use case agnostic. This means that process plugins make it possible to execute almost any use case you can imagine with the DSF. Process plugins provide individual functionality. For example, it is possible to use the Ping Pong process to test bilateral communication or the Feasibility process to perform feasibility queries for research.
    However, it is possible to deploy several process plugins together, even the same process plugin in different versions. A process plugin is basically an archive of BPMN 2.0 models, FHIR R4 resources and Java code. This process plugin is deployed as a Jar file on the BPE.

    BPMN: Example

    BPMN models can be created with Camunda Modeleropen in new window. The following model is a BPMN model consisting of two lanes: These are the square boxes, i.e. Organization A and B. This process is intended only as an example to illustrate the formalities. We will look at realistic processes in the next chapter.

    BPMN: Example
    BPMN: Example

    Ping Pong Process

    The ping process pluginopen in new window can be used for (periodic) connection testing between organizations that are part of your DSF allow list. The following figure shows a representation of the process.

    Ping-Pong Process
    Ping-Pong Process

    The ping pong process is composed of 3 different subprocesses:

    Autostart Ping Process

    The autostart ping process is used to execute connection tests in a predefined interval. This subprocess performs the following steps:

    • Start a timer with a predefined interval (default 24 h)
    • Start the ping process once per interval
    • Stop the timer after the current interval completes

    Ping Process

    The ping process is used to check outgoing and incoming connections to organizations in your allow-list. This subprocess performs the following steps:

    • Select organizations in your allow list that should receive a ping message
    • Send ping message to selected organizations
    • Receive pong message from selected organizations
    • Log status of ping/pong messages
    • Log errors if any occur

    Pong Process

    The pong process is used to send a response during the connection test to the requesting organization. This subprocess performs the following steps:

    • Receive ping message from requesting organizations
    • Send pong message to requesting organizations
    • Log status of ping/pong message
    • Log errors if any occur
    Last update:
    + + + diff --git a/intro/info/security.html b/intro/info/security.html new file mode 100644 index 000000000..f09081b5f --- /dev/null +++ b/intro/info/security.html @@ -0,0 +1,40 @@ + + + + + + + + + + Security by Design + + + + + +
    Skip to main content

    Security by Design

    DSF-TeamAbout 2 min

    Basics Security

    The open-source Data Sharing Framework is EU-GDPR compliant and meets the highest security standards by design. DSF FHIR servers only accept certain FHIR resources from internal systems/administrators (e.g. tasks, binary resources...). In addition, the communication partners are defined via Allow Lists. This means that an organisation can only communicate with organisations that are included in the allow list of approved organisations of the participating organisations. More information about allow lists can be found in the next chapter.
    For transport encryption, the TLS protocol is used. Secure Web Socket (WSS) connections provide security for the connection between the DSF FHIR server (DMZ) and the BPE (internal network). In addition, the DSF is being actively developed and there is an excellent community, both of which guarantee fast security patches.

    Authentication

    Authentication of organizations within the DSF is handled by the use of X.509 client and server certificates. Currently the certificate authorities run by DFN-PKI Global G2open in new window, D-Trust via TMF e.V.open in new window and GÉANT TCS via DFNopen in new window are supported. All participating organizations are entered in a distributed and synchronized allow-list of valid organizations and certificates.

    A webserver certificate is needed to run the FHIR endpoint and a 802.1X client certificate is used to authenticate against other organizations endpoints and as a server certificate for the business process engine. For available certificate profiles see DFN-PKI-Zertifikatprofile_Global.pdfopen in new window

    More information about client and server certificates can be found here.

    Certificate Requests 🔒

    FHIR Endpoint

    Server certificates are used to authenticate the FHIR endpoint on the local network and to other organisations

    • Certificate profile:
      • DFN-PKI Global G2 via DFN e.V.: Web Server
      • D-Trust via TMF e.V.: Advanced SSL ID
      • GÉANT TCS via DFN e.V.: Web Server
    • Common name: FQDN of the server used while accessing from other organizations (external FQDN)
    • Subject alternative DNS entries: Use additional alternative FQDNs if a different name is used while accessing the Server from the local Network (local FQDN)

    More information: Parameters FHIR Server

    Business Process Engine Server

    Client certificates are used to authenticate against remote FHIR endpoints (when either the BPE server or the FHIR endpoint server acts as the client).
    In addition, client certificates are used to authenticate the Business Process Engine server on the local network.

    • Certificate profile:
      • DFN-PKI Global G2 via DFN e.V.: 802.1X Client
      • D-Trust via TMF e.V.: Basic Team ID
      • GÉANT TCS via DFN e.V.: Web Server
    • Common name: FQDN of the server used while accessing from the local network (local FQDN)

    More information: Parameters BPE Server

    Last update:
    + + + diff --git a/intro/publications.html b/intro/publications.html new file mode 100644 index 000000000..303ebab3f --- /dev/null +++ b/intro/publications.html @@ -0,0 +1,40 @@ + + + + + + + + + + Publications and Talks + + + + + +
    Skip to main content

    Publications and Talks

    DSF-TeamAbout 1 min

    Publications

    • H. Hund, R. Wettstein, C.M. Heidt, C. Fegeler, Executing Distributed Healthcare and Research Processes – The HiGHmed Data Sharing Framework, Stud Health Technol Inform, 278 (2021) 126-133, doi:10.3233/SHTI210060open in new window

    • R. Wettstein, H. Hund, I. Kobylinski, C. Fegeler, O. Heinze, Feasibility Queries in Distributed Architectures – Concept and Implementation in HiGHmed, Stud Health Technol Inform, 278 (2021) 134-141, doi:10.3233/SHTI210061open in new window

    • C.M. Heidt, H. Hund, C. Fegeler, A Federated Record Linkage Algorithm for Secure Medical Data Sharing, Stud Health Technol Inform, 278 (2021) 142-149, doi:10.3233/SHTI210062open in new window

    • R. Wettstein, H. Hund, C. Fegeler, O. Heinze, Data Sharing in Distributed Architectures – Concept and Implementation in HiGHmed, Stud Health Technol Inform, 283 (2021) 111-118, doi:10.3233/SHTI210548open in new window

    • H.-U. Prokosch, T. Bahls, M. Bialke, J. Eils, C. Fegeler, J. Gruendner, B. Haarbrandt, C. Hampf, W. Hoffmann, H. Hund, et al. The COVID-19 Data Exchange Platform of the German University Medicine, Stud Health Technol Inform, 294 (2022) 674-678, doi:10.3233/SHTI220554open in new window

    • R. Wettstein, T. Kussel, H. Hund, C. Fegeler, M. Dugas, K. Hamacher, Secure Multi-Party Computation Based Distributed Feasibility Queries – A HiGHmed Use Case, Stud Health Technol Inform, 296 (2022) 41-49, doi:10.3233/SHTI220802open in new window

    • C. Zilske, M. Kurscheidt, S.T. Schweizer, H. Hund, S. Mödinger, C. Fegeler, Monitoring Distributed Business Processes in Biomedical Research, Stud Health Technol Inform, 302 (2023) 252-256, doi:10.3233/SHTI230113open in new window

    • H. Hund, R. Wettstein, C. Hampf, M. Bialke, M. Kurscheidt, S.T. Schweizer, C. Zilske, S. Mödinger, C. Fegeler, No Transfer Without Validation: A Data Sharing Framework Use Case, Stud Health Technol Inform, 302 (2023) 68-72, doi:10.3233/SHTI230066open in new window

    • H. Hund, R. Wettstein, M. Kurscheidt, S.T. Schweizer, C. Zilske, C. Fegeler, Interoperability Is a Process- The Data Sharing Framework, Stud Health Technol Inform, 310 (2024) 28-32, doi:10.3233/SHTI230921open in new window

    Recorded Talks

    GMDS Conference 2022

    GMDS Conference 2020

    Last update:
    + + + diff --git a/intro/tutorials/GMDS2022-dev.html b/intro/tutorials/GMDS2022-dev.html new file mode 100644 index 000000000..88b767e11 --- /dev/null +++ b/intro/tutorials/GMDS2022-dev.html @@ -0,0 +1,40 @@ + + + + + + + + + + GMDS2022 - Process Development + + + + + + + + + diff --git a/intro/tutorials/MIE2023.html b/intro/tutorials/MIE2023.html new file mode 100644 index 000000000..ca7c3255d --- /dev/null +++ b/intro/tutorials/MIE2023.html @@ -0,0 +1,40 @@ + + + + + + + + + + MIE May 2023 + + + + + +
    Skip to main content

    MIE May 2023

    DSF-TeamAbout 2 min

    Abstract

    With this tutorial, participants will gain a detailed insight into the Data Sharing Framework (DSF) (https://github.com/highmed/highmed-dsfopen in new window). The open source DSF enables users to execute biomedical research and healthcare delivery processes across organizations, and the tutorial will demonstrate this with examples from the German Medical Informatics Initiative (MII) (https://www.medizininformatik-initiative.de/en/startopen in new window) funded by the Federal Ministry of Education and Research (BMBF). The tutorial will cover fundamental concepts of distributed processes, the DSFs architecture and key standards such as HL7 FHIR and BPMN 2.0. Participants will have the opportunity to gain hands-on experience with the DSF by working with different processes in a lab setting. Technical aspects such as authentication and authorization will be covered, as well as guidance on using the DSF for other use cases. This tutorial is designed for those involved in distributed research projects, including project members and software developers, as well as individuals interested in multi-organizational research projects.

    Topic

    The use of real-world data collected by healthcare providers for bio-medical research requires the data to be available and accessible. This is especially important when considering the usage of data across organizations. Distributed processes such as feasibility studies, record linkage, and data sharing need to be established for effective consolidation and analysis.
    While even multi-center retrospective studies using real-world data become commonplace, maintaining infrastructure components for every project conducted is not sustainable. To address this, the Data Sharing Framework (DSF) was developed as an open source, use case independent distributed business process engine to execute cross-organizational research and healthcare delivery processes.

    The tutorial will cover the fundamental concepts of distributed processes and will provide an overview of the DSF's architecture and key standards such as HL7 FHIR and BPMN 2.0 that are used in the framework. The tutorial will present real-world examples to illustrate the DSFs capabilities and delve into specific issues the DSF addresses for the German Medical Informatics Initiative (MII).

    Participants will have the opportunity to gain hands-on experience with the DSF by working with different processes in a lab setting. Technical aspects such as authentication and authorization, onboarding of new organizations and guidance on using the DSF for other use cases, such as specific research projects or new infrastructure developments, will be covered.
    Finally, the tutorial will present lessons learned from the last years of using the DSF in test and production environments in multiple research consortia and will present ideas for future improvements based on feedback from end-users, process developers, project managers and administrative staff.

    Target Group

    Decision makers and project members with data sharing ideas looking for an architecture, as well as medical informatics professionals and software developers tasked with building multi-centric data sharing applications, are the target audience for this tutorial.

    What you need

    You need a laptop with a web browser for the hands-on portion of the tutorial.

    What you will learn

    You will...

    • … gain knowledge on various distributed processes specific to bio-medical research.
    • … understand the unique challenges and considerations from the German MII resulting in the design and architecture of the DSF.
    • … be introduced to the key concepts of the DSF and the various contexts in which it can be applied.
    • … learn how to evaluate if the DSF is appropriate for their particular project or application your planning.
    • … understand the difficulties that can occur when implementing distributed processes, as well as strategies for addressing them.
    Last update:
    + + + diff --git a/intro/tutorials/Talks.html b/intro/tutorials/Talks.html new file mode 100644 index 000000000..217e8c016 --- /dev/null +++ b/intro/tutorials/Talks.html @@ -0,0 +1,40 @@ + + + + + + + + + + Recorded talks + + + + + + + + + diff --git a/intro/tutorials/index.html b/intro/tutorials/index.html new file mode 100644 index 000000000..3d558a075 --- /dev/null +++ b/intro/tutorials/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Tutorials + + + + + + + + + diff --git a/intro/use-cases/feasibility.html b/intro/use-cases/feasibility.html new file mode 100644 index 000000000..2ab1c0d14 --- /dev/null +++ b/intro/use-cases/feasibility.html @@ -0,0 +1,40 @@ + + + + + + + + + + Feasibility + + + + + +
    Skip to main content

    Feasibility

    DSF-TeamAbout 1 min

    Overview

    Funded by the German Federal Ministry of Research and Education, 25 sitesopen in new window have installed the DSF to execute the Feasibilityopen in new window process. To perform feasibility queries, a researcher can register and query data on the FDPG (Forschungsdaten Portal für Gesundheit - Research Data Portal)open in new window website. Basic data of hospitalizations of over 8 million patients with over 40 million diagnoses and much more such as laboratory values or drug prescriptions are available. After a successful query, the data is made available in standardized FHIR format. Further information can be found in the flyeropen in new window.

    The Feasibility Process

    Medical routine data holds great promise for advancing research, yet its integration into a research context poses significant challenges. To address this, Medical Data Integration Centers have been established, by the medical informatics initiative to consolidate data from primary information systems into a central repository. However, relying on data from only one organization is rarely sufficient to answer complex research questions, so merging data across institutional boundaries is necessary.

    To enable researchers to leverage this integrated data for specific research projects, there is a critical need for the ability to query cohort sizes across institutions. The feasibilityopen in new window process allows researchers to conduct automated and distributed feasibility queries, i.e., cohort size estimates. This process is executed according to the open standard BPMN 2.0, the underlying process data model is based on HL7 FHIR R4 resources.

    Technical Information

    Last update:
    + + + diff --git a/intro/use-cases/index.html b/intro/use-cases/index.html new file mode 100644 index 000000000..fa29ff417 --- /dev/null +++ b/intro/use-cases/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Use-Cases + + + + + + + + + diff --git a/intro/use-cases/num.html b/intro/use-cases/num.html new file mode 100644 index 000000000..edd32b1fc --- /dev/null +++ b/intro/use-cases/num.html @@ -0,0 +1,40 @@ + + + + + + + + + + Network University Medicine + + + + + +
    Skip to main content

    Network University Medicine

    DSF-TeamLess than 1 minute

    The Network University Medicineopen in new window was established in April 2020 as part of the COVID-19 pandemic crisis management. The aim of the NUM is to better coordinate COVID-19 research at all 36 university hospitals in Germany.'

    As part of the CODEX | COVID-19 Data Exchange Platformopen in new window project, a nationwide, uniform, privacy-compliant infrastructure for storing and providing COVID-19 research datasets was established. Since 2022, the work continues within the project NUM RDPopen in new window. All 36 university hospitals have installed the DSF to share Covid-19 research data.

    The Data Transfer Process

    The Data Transfer Processopen in new window is used in NUM CODEX to send data from a Data Integration Center (DIC), via the Gecco Transfer Hub (GTH), to the Central Research Repository (CRR). The infrastructure and communincation messages on which the process is based can be seen in the following figure. All organizations use the Data Sharing Framework (DSF) for deployment and execution of the process.

    More technical information can be found on GitHubopen in new window.

    Last update:
    + + + diff --git a/oldstable/build/build.html b/oldstable/build/build.html new file mode 100644 index 000000000..922a04181 --- /dev/null +++ b/oldstable/build/build.html @@ -0,0 +1,60 @@ + + + + + + + + + + Build and Test + + + + + +
    Skip to main content

    Build and Test

    DSF-TeamAbout 2 min

    Build Project

    Prerequisite: Java 11, Maven 3.6, Docker

    mvn install
    +

    Manual Integration Testing (without Docker)

    Prerequisite: Java 11, Maven 3.6, PostgreSQL 11

    • Build the entire project from the root directory of the repository
      mvn install
      +
    • Install PostgreSQL 11 (localhost:5432)
    • Add DB User liquibase_user
      CREATE USER liquibase_user WITH LOGIN NOSUPERUSER INHERIT CREATEDB CREATEROLE NOREPLICATION
      +PASSWORD 'fLp6ZSd5QrMAkGZMjxqXjmcWrTfa3Dn8fA57h92Y';
      +
    • Create Databases fhir and bpe with owner liquibase_user
      CREATE DATABASE bpe OWNER liquibase_user;
      +CREATE DATABASE fhir OWNER liquibase_user;
      +
    • Start org.highmed.dsf.fhir.FhirJettyServerHttps from your IDE with execution folder: .../highmed-dsf/dsf-fhir/dsf-fhir-server-jetty
    • Start org.highmed.dsf.bpe.BpeJettyServerHttps from your IDE with execition folder: .../highmed-dsf/dsf-bpe/dsf-bpe-server-jetty
    • To access the FHIR endpoint (https://localhost:8001/fhir/open in new window...) and BPE rest interface (https://localhost:8002/bpe/open in new window...) via WebBrowser install .../highmed-dsf/dsf-tools/dsf-tools-test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12 (Password: password) in your browsers certifiate store. The p12 file includes a client certificate for "Webbrowser Test User" and the "Test CA" certificate. All private-keys and certificates including the Test CA are generated during the maven build and are private to your machine. Make sure to protect the CA private-key at .../highmed-dsf/dsf-tools/dsf-tools-test-data-generator/cert/ca/testca_private-key.pem from third-party access if you have installed the Test CA certificate in your certificate store.

    Manual Integration Testing (local with Docker)

    Prerequisite: Java 11, Maven 3.6, Docker 18

    • Build the entire project from the root directory of this repository
      mvn install
      +
    • Build docker images
      • Windows: in the .../dsf-docker-test-setup folder execute
        docker-build.bat
        +
      • Unix/Linux: in the .../dsf-docker-test-setup folder execute
        docker-build.sh
        +
    • Start docker containers
      • To start the FHIR server execute in the .../dsf-docker-test-setup/fhir folder
        dev:
        +docker-compose up
        +
        +prod: 
        +docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
        +
      • To start the BPE server execute in the .../dsf-docker-test-setup/bpe folder
        dev:
        +docker-compose up
        +    
        +prod: 
        +docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
        +
    • To access the FHIR endpoint (https://localhost/fhir/open in new window...) and BPE rest interface (https://localhost:8443/bpe/open in new window...) via WebBrowser install .../highmed-dsf/dsf-tools/dsf-tools-test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12 (Password: password) in your browsers certifiate store. The p12 file includes a client certificate for "Webbrowser Test User" and the "Test CA" certificate. All private-keys and certificates including the Test CA are generated during the maven build and are private to your machine. Make sure to protect the CA private-key at .../highmed-dsf/dsf-tools/dsf-tools-test-data-generator/cert/ca/testca_private-key.pem from third-party access if you have installed the Test CA certificate in your certificate store.

    Troubleshooting

    • If you run in docker network troubles, clean up your network using docker network ls -q | xargs docker network rm
    • In production: if the warning Service "db" is using volume "/var/lib/postgresql/data" from the previous container appears, run the command
      docker-compose down -v 
      +
      before starting the containers.

    Manual Integration Testing (VMs for Docker-Registry, 3 MeDICs, TTP)

    • For hints on setting up 5 Ubuntu VMs with Docker running on a Windows 10 host with Hyper-V and Ansible see test_setup_windows.txt
    • For hints on setting up 5 Ubuntu VMs with Docker running on a MacOS Catalina host with VirtualBox and Ansible see test_setup_macos.txt

    Starting the Processes

    Each process contains an ExampleStarter which creates FHIR resources and sends them to a designated FHIR-Endpoint in order to start the corresponding process in the Manual Integration Test Setup. The same client certificate can be used as above: .../highmed-dsf/dsf-tools/dsf-tools-test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12 (Password: password).

    The following configuration is needed:

    • The path to the client certificate: either the environment-variable DSF_CLIENT_CERTIFICATE_PATH or args[0] has to be set
    • The password of the client certificate: either the environment-variable DSF_CLIENT_CERTIFICATE_PASSWORD or args[1] has to be set
    Last update:
    + + + diff --git a/oldstable/build/index.html b/oldstable/build/index.html new file mode 100644 index 000000000..e0134f0d2 --- /dev/null +++ b/oldstable/build/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Build and Test + + + + + + + + + diff --git a/oldstable/build/proxyTestTool.html b/oldstable/build/proxyTestTool.html new file mode 100644 index 000000000..266edcdca --- /dev/null +++ b/oldstable/build/proxyTestTool.html @@ -0,0 +1,40 @@ + + + + + + + + + + Proxy Test Tool + + + + + +
    Skip to main content

    Proxy Test Tool

    DSF-TeamLess than 1 minute

    If the BPE will be deployed behind a proxy, you can test the internet access of the BPE using the tool in dsf-tools/dsf-tools-proxy-test.

    The proxy test jar takes three input variables:

    The proxy password will be asked as command line input. The name of the main class is ProxyTest.

    Last update:
    + + + diff --git a/oldstable/build/releaseANewVersion.html b/oldstable/build/releaseANewVersion.html new file mode 100644 index 000000000..1946b03d0 --- /dev/null +++ b/oldstable/build/releaseANewVersion.html @@ -0,0 +1,40 @@ + + + + + + + + + + Release a new version + + + + + +
    Skip to main content

    Release a new version

    DSF-TeamLess than 1 minute

    Release a new final version

    1. Write release notes
    2. Create new release/x.y.z branch from develop
    3. Remove -SNAPSHOT from version in pom.xml files
    4. Change status from draft to active and update dates, verify versions in FHIR resources
    5. Update version and date-released in CITATION.cff
    6. Push branch release/x.y.z
    7. Create pull request (release/x.y.z -> main)
    8. Build maven
    9. Build docker images and run manual tests in 3MeDIC/TTP test setup
    10. Execute trivyopen in new window and check CVEs for the docker images
    11. Merge release/x.y.z into main
    12. Git tag main branch
    13. Push main branch (including Git tag)
    14. Build maven
    15. Run multi-arch docker build (including push)
    16. Update release notes with docker links, check Git tag
    17. Publish release notes
    18. Create 'start next development cycle' issue and branch
    19. Merge main into issue branch
    20. Increase version
    21. Merge next development cycle issue branch into develop via PR

    Release a new candidate version

    1. Write release notes
    2. Create new release/x.y.z-RC# branch from develop
    3. Replace -SNAPSHOT in versions with -RC# in pom.xml files
    4. Change status from draft to active and update dates, verify versions in FHIR resources
    5. Update version and date-released in CITATION.cff
    6. Git tag release/x.y.z-RC# branch
    7. Build maven
    8. Build docker images and run manual tests in 3MeDIC/TTP test setup
    9. Execute trivyopen in new window and check CVEs for the docker images
    10. Push release/x.y.z-RC# branch (including Git tag)
    11. Run multi-arch docker build (including push)
    12. Update release notes with docker links, check Git tag
    13. Publish release notes
    Last update:
    + + + diff --git a/oldstable/code/addingANewFhirR.html b/oldstable/code/addingANewFhirR.html new file mode 100644 index 000000000..ca159bdb1 --- /dev/null +++ b/oldstable/code/addingANewFhirR.html @@ -0,0 +1,40 @@ + + + + + + + + + + Adding FHIR Resources + + + + + +
    Skip to main content

    Adding FHIR Resources

    DSF-TeamAbout 2 min

    This wiki entry walks through the steps to add a new FHIR resource to the server

    Database

    • dsf-fhir-server > resources > db copy/past one file and change content to new resource (don't forget to allow permanent deletes like in db.questionnaires.changelog-0.6.0.xml)
    • dsf-fhir-server > resources > db > db.changelog.xml include new generated db changelog file (are in alphabetic order)
    • dsf-fhir-server > resources > db > trigger_functions copy/paste existing functions for insert/update triggers and change content to new resource
    • dsf-fhir-server > resources > db > db.read_access.changelog.xml include new generated functions for insert/update triggers (are in alphabetic order)

    JSON/XML Adapter

    • dsf-fhir-rest-adapter > java copy/paste existing adapter for json/xml/html and change content to new resource
    • dsf-fhir-webservice-client > java > FhirWebserviceClientJersey.javaregister generated json/xml (not html) adapters according to existing registrations (are in alphabetic order)

    DAO

    • dsf-fhir-server > java > dao copy/paste dao interface and change content to new resource
    • dsf-fhir-server > java > search > parameters copy/paste a search parameter class based on type of the parameter (extends abstract search parameter type) and change content to new resource (existing search parameters can be found on the resources specification website)
    • dsf-fhir-server > java > search > parameters > rev > include copy/paste rev include class and adapt content to resource to be rev included
    • dsf-fhir-server > java > search > parameters > user copy/paste a search user filter class and adapt content to new resource
    • dsf-fhir-server > java > dao > jdbc copy/paste dao jdbc class and adapt content (add search user filter and parameter)
    • dsf-fhir-server > java > spring > config > DaoConfig.java register bean by adding a method according to existing resource bean methods (are in alphabetic order) and add it in the `daoProvider()´ method
    • dsf-fhir-server > java > spring > config > EventConfig.java add the new created bean from the DaoConfig to the MatcherFactory according to existing dao's (are in alphabetic order)
    • dsf-fhir-server > java > dao > provider > DaoProvider.java add a method similar to the existing one
    • dsf-fhir-server > java > dao > provider > DaoProviderImpl.java adapt the class according to the other resource and implement the method similar to the existing one

    Resolve Resource References if needed

    • dsf-fhir-rest-adapter > java > service > ReferenceExtractor.java add a method similar to the existing ones
    • dsf-fhir-rest-adapter > java > service > ReferenceExtractorImpl.java implement the method similar to the existing ones

    Authorization

    • dsf-fhir-server > java > authorization copy/paste class and change content to new resource
    • dsf-fhir-server > java > spring > config > AuthorizationConfig.java register bean by adding a method according to existing resource bean methods (are in alphabetic order) and add it in the authorizationRuleProvider() and the binaryAuthorizationRule() method

    Webservice

    • dsf-fhir-server > java > webservice > specification copy/paste interface and change content to new resource
    • dsf-fhir-server > java > webservice > impl copy/paste class and change content to new resource
    • dsf-fhir-server > java > webservice > jaxrs copy/paste class and change content to new resource
    • dsf-fhir-server > java > webservice > secure copy/paste class and change content to new resource
    • dsf-fhir-server > java > webservice > impl > ConformanceServiceImpl add new Resource to list and add Search Parameter created above
    • dsf-fhir-server > java > spring > config > WebserviceConfig.java register bean by adding a method according to existing resource bean methods (are in alphabetic order)

    Test

    • dsf-fhir-server > test-java > dao copy/paste class and change tests to new resource
    • dsf-fhir-server > test-java > integration copy/paste class and change tests to new resource and above create search parameters
    Last update:
    + + + diff --git a/oldstable/code/addingANewMpiClient.html b/oldstable/code/addingANewMpiClient.html new file mode 100644 index 000000000..9d17338d5 --- /dev/null +++ b/oldstable/code/addingANewMpiClient.html @@ -0,0 +1,40 @@ + + + + + + + + + + Adding MPI Clients + + + + + +
    Skip to main content

    Adding MPI Clients

    DSF-TeamLess than 1 minute

    The Master Patient Index (MPI) client that will be used by the Business Process Engine (BPE) is determined by the property org.highmed.dsf.bpe.mpi.webservice.factory.class and loaded using a service loader, which searches for a class of type MasterPatientIndexClientFactoryopen in new window on startup of the BPE.

    The framework currently includes an MPI client using the IHE PDQ interface, also supporting client certificate authentication. To use it, add the jar of the dsf-mpi-client-pdq module to the plugin configuration folder and set the property value to org.highmed.mpi.client.pdq.MasterPatientIndexClientPdqFactory.

    To implement a new MPI client, the following has to be taken into account:

    An example of an MPI client implementation can be found in the dsf-mpi-client-pdqopen in new window module.

    Last update:
    + + + diff --git a/oldstable/code/addingANewOpenEhrClient.html b/oldstable/code/addingANewOpenEhrClient.html new file mode 100644 index 000000000..685443f62 --- /dev/null +++ b/oldstable/code/addingANewOpenEhrClient.html @@ -0,0 +1,40 @@ + + + + + + + + + + Adding openEHR Clients + + + + + +
    Skip to main content

    Adding openEHR Clients

    DSF-TeamLess than 1 minute

    The openEHR client that will be used by the Business Process Engine (BPE) is determined by the property org.highmed.dsf.bpe.openehr.webservice.factory.class and loaded using a service loader, which searches for a class of type OpenEhrClientFactoryopen in new window on startup of the BPE.

    The framework currently includes an openEHR Jersey REST client using basic authentication. To use it, add the jar of the dsf-openehr-client-impl module to the plugin configuration folder and set the property value to org.highmed.openehr.client.impl.OpenEhrClientJerseyFactory.

    To implement a new openEHR client, the following has to be taken into account:

    An example of an openEHR client implementation can be found in the dsf-openehr-client-implopen in new window module.

    Last update:
    + + + diff --git a/oldstable/code/changingBpmnProcesses.html b/oldstable/code/changingBpmnProcesses.html new file mode 100644 index 000000000..9d5585c26 --- /dev/null +++ b/oldstable/code/changingBpmnProcesses.html @@ -0,0 +1,40 @@ + + + + + + + + + + Changing BPMN Processes by Service Task Overwrites + + + + + +
    Skip to main content

    Changing BPMN Processes by Service Task Overwrites

    DSF-TeamLess than 1 minute

    DEPRECATED SINCE VERSION 0.4.0

    A service task of a process integrated in the framework can be overwritten using the plugin interface. This means that entire processes do not have to be replaced when only individual steps need adaption. An example can be found in the module dsf-bpe > dsf-bpe-process-plugin-example > dsf-bpe-process-service-overwrite.

    A plugin has as its only dependency the process module which contains the service task to be overwritten.

    For a plugin replacing one service task, two new files must be generated:

    • A new service task extending the task it overwrites. The method to be overwritten is doExecute(DelegateExecution execution).
    • A new configuration file containing a method that has as return type the service task you want to overwrite. This method then returns a Bean of your own implementation of this specific service task. The method has to be annotated with @Primary.
    Last update:
    + + + diff --git a/oldstable/code/code.html b/oldstable/code/code.html new file mode 100644 index 000000000..0993ea3a5 --- /dev/null +++ b/oldstable/code/code.html @@ -0,0 +1,40 @@ + + + + + + + + + + Writing Code + + + + + +
    Skip to main content

    Writing Code

    DSF-TeamLess than 1 minute

    Code Style

    HiGHmed DSF code-style configurations for Eclipse and IntelliJ IDEA can be found here:

    Pull Requests are only approved, if the code is formatted according to the code-style configurations above. To format the code with maven before pushing to GitHub, use mvn compile -Pformat-and-sort.

    Git Workflow

    Since Release 0.1.0, we follow git-flow as described hereopen in new window.
    New features should branch from develop and merged back if done. Hot-Fixes for the latest release will branch of master and will be merged into develop and later into master. A new release will branch of develop for a ramp down phase and will then be merged into master. The new master should merge back into develop to start a new development cycle.

    Branch Naming:

    • Features: issue/<issue-number>_<issue-name>
    • Hot-Fix: hot-fix/<issue-number>_<issue-name>
    • Release: release/<version>
    Last update:
    + + + diff --git a/oldstable/code/eclipseContent.html b/oldstable/code/eclipseContent.html new file mode 100644 index 000000000..d735709a3 --- /dev/null +++ b/oldstable/code/eclipseContent.html @@ -0,0 +1,362 @@ + + + + + + + + + + Eclipse code-style configurations + + + + + +
    Skip to main content

    Eclipse code-style configurations

    DSF-TeamAbout 7 min

    Back

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    +<profiles version="15">
    +    <profile kind="CodeFormatterProfile" name="highmed_dsf" version="15">
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
    +        <setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="120"/>
    +        <setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_method_body_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_loops" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_module_statements" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="2147483647"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
    +        <setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_code_block_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="common_lines"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line" value="one_line_never"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="next_line"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="0"/>
    +        <setting id="org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line" value="false"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="tab"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
    +        <setting id="org.eclipse.jdt.core.formatter.lineSplit" value="120"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
    +        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
    +    </profile>
    +</profiles>
    +

    Back

    Last update:
    + + + diff --git a/oldstable/code/index.html b/oldstable/code/index.html new file mode 100644 index 000000000..b16950152 --- /dev/null +++ b/oldstable/code/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Code + + + + + + + + + diff --git a/oldstable/code/intelliJContent.html b/oldstable/code/intelliJContent.html new file mode 100644 index 000000000..3ffa3e7bf --- /dev/null +++ b/oldstable/code/intelliJContent.html @@ -0,0 +1,107 @@ + + + + + + + + + + IntelliJ code-style configurations + + + + + +
    Skip to main content

    IntelliJ code-style configurations

    DSF-TeamAbout 1 min

    Back

    <code_scheme name="highmed_dsf" version="173">
    +  <option name="FORMATTER_TAGS_ENABLED" value="true" />
    +  <JavaCodeStyleSettings>
    +    <option name="ANNOTATION_PARAMETER_WRAP" value="1" />
    +    <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
    +    <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
    +    <option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
    +      <value />
    +    </option>
    +    <option name="IMPORT_LAYOUT_TABLE">
    +      <value>
    +        <package name="" withSubpackages="true" static="true" />
    +        <emptyLine />
    +        <package name="java" withSubpackages="true" static="false" />
    +        <emptyLine />
    +        <package name="javax" withSubpackages="true" static="false" />
    +        <emptyLine />
    +        <package name="org" withSubpackages="true" static="false" />
    +        <emptyLine />
    +        <package name="com" withSubpackages="true" static="false" />
    +        <emptyLine />
    +        <package name="ca" withSubpackages="true" static="false" />
    +        <emptyLine />
    +        <package name="de" withSubpackages="true" static="false" />
    +        <emptyLine />
    +        <package name="" withSubpackages="true" static="false" />
    +        <emptyLine />
    +      </value>
    +    </option>
    +  </JavaCodeStyleSettings>
    +  <codeStyleSettings language="JAVA">
    +    <option name="KEEP_LINE_BREAKS" value="false" />
    +    <option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
    +    <option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
    +    <option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" />
    +    <option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
    +    <option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" />
    +    <option name="BRACE_STYLE" value="2" />
    +    <option name="CLASS_BRACE_STYLE" value="2" />
    +    <option name="METHOD_BRACE_STYLE" value="2" />
    +    <option name="ELSE_ON_NEW_LINE" value="true" />
    +    <option name="WHILE_ON_NEW_LINE" value="true" />
    +    <option name="CATCH_ON_NEW_LINE" value="true" />
    +    <option name="FINALLY_ON_NEW_LINE" value="true" />
    +    <option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
    +    <option name="ALIGN_MULTILINE_RESOURCES" value="false" />
    +    <option name="SPACE_WITHIN_ARRAY_INITIALIZER_BRACES" value="true" />
    +    <option name="SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE" value="true" />
    +    <option name="CALL_PARAMETERS_WRAP" value="1" />
    +    <option name="METHOD_PARAMETERS_WRAP" value="1" />
    +    <option name="RESOURCE_LIST_WRAP" value="5" />
    +    <option name="EXTENDS_LIST_WRAP" value="1" />
    +    <option name="THROWS_LIST_WRAP" value="1" />
    +    <option name="EXTENDS_KEYWORD_WRAP" value="1" />
    +    <option name="THROWS_KEYWORD_WRAP" value="1" />
    +    <option name="METHOD_CALL_CHAIN_WRAP" value="1" />
    +    <option name="BINARY_OPERATION_WRAP" value="1" />
    +    <option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
    +    <option name="TERNARY_OPERATION_WRAP" value="5" />
    +    <option name="ARRAY_INITIALIZER_WRAP" value="1" />
    +    <option name="PARAMETER_ANNOTATION_WRAP" value="2" />
    +    <option name="VARIABLE_ANNOTATION_WRAP" value="2" />
    +    <indentOptions>
    +      <option name="USE_TAB_CHARACTER" value="true" />
    +    </indentOptions>
    +  </codeStyleSettings>
    +</code_scheme>
    +

    Back

    Last update:
    + + + diff --git a/oldstable/code/libraries.html b/oldstable/code/libraries.html new file mode 100644 index 000000000..e9d880809 --- /dev/null +++ b/oldstable/code/libraries.html @@ -0,0 +1,40 @@ + + + + + + + + + + Libraries + + + + + + + + + diff --git a/oldstable/code/usingTheGitHubMaven.html b/oldstable/code/usingTheGitHubMaven.html new file mode 100644 index 000000000..cf11ce10b --- /dev/null +++ b/oldstable/code/usingTheGitHubMaven.html @@ -0,0 +1,79 @@ + + + + + + + + + + Using the Github Maven Package Registry + + + + + +
    Skip to main content

    Using the Github Maven Package Registry

    DSF-TeamLess than 1 minute

    Authenticating to GitHub Packages

    For more information take a look at this GitHub documentation about authenticationopen in new window.

    In order to install the HiGHmed DSF packages using Maven in your own projects you need a personal GitHub access token. This GitHub documentationopen in new window shows you how to generate one.

    After that, add the following configuration to your local .m2/settings.xml. Replace USERNAME with your GitHub username and TOKEN with the previously generated personal GitHub access token. The token needs at least the scope read:packages.

        <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    +  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
    +                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
    +
    +  <activeProfiles>
    +    <activeProfile>github</activeProfile>
    +  </activeProfiles>
    +
    +  <profiles>
    +    <profile>
    +      <id>github</id>
    +      <repositories>
    +        <repository>
    +          <id>github</id>
    +          <name>GitHub HiGHmed Apache Maven Packages</name>
    +          <url>https://maven.pkg.github.com/highmed/highmed-dsf</url>
    +          <releases><enabled>true</enabled></releases>
    +          <snapshots><enabled>true</enabled></snapshots>
    +        </repository>
    +      </repositories>
    +    </profile>
    +  </profiles>
    +
    +  <servers>
    +    <server>
    +      <id>github</id>
    +      <username>USERNAME</username>
    +      <password>TOKEN</password>
    +    </server>
    +  </servers>
    +</settings>
    +

    Installing a Package

    For more information take a look at this GitHub documentation about package installationopen in new window.

    To install an Apache Maven package from GitHub Packages edit the element dependencies in the pom.xml file by including the package. This could look as follows to include the dsf-bpe-process-base package (replace VERSION with the package version, e.g. 0.4.0-SNAPSHOT):

    <dependencies>
    +  <dependency>
    +    <groupId>org.highmed.dsf</groupId>
    +    <artifactId>dsf-bpe-process-base</artifactId>
    +    <version>VERSION</version>
    +  </dependency>
    +<dependencies>
    +
    Last update:
    + + + diff --git a/oldstable/generalinformation/authentication.html b/oldstable/generalinformation/authentication.html new file mode 100644 index 000000000..308f4ee41 --- /dev/null +++ b/oldstable/generalinformation/authentication.html @@ -0,0 +1,40 @@ + + + + + + + + + + Authentication + + + + + +
    Skip to main content

    Authentication

    DSF-TeamLess than 1 minute

    Authentication of organizations within the DSF is handled by the use of X.509 client and server certificates. Currently the certificate authorities run by DFN-PKI Global G2open in new window, D-Trust via TMF e.V.open in new window and GÉANT TCS via DFNopen in new window are supported. All participating organizations are entered in a distributed and synchronized allow-list of valid organizations and certificates.

    A webserver certificate is needed to run the FHIR endpoint and a 802.1X client certificate is used to authenticate against other organizations endpoints and as a server certificate for the business process engine. For available certificate profiles see DFN-PKI-Zertifikatprofile_Global.pdfopen in new window

    Certificate Requests

    FHIR Endpoint

    • Purpose: Server certificate to authenticate the FHIR endpoint on the local network and against other organizations
    • Certificate profile:
      • DFN-PKI Global G2 via DFN e.V.: Web Server
      • D-Trust via TMF e.V.: Advanced SSL ID
      • GÉANT TCS via DFN e.V.: Web Server
    • Common name: FQDN of the server used while accessing from other organizations (external FQDN)
    • Subject alternative DNS entries: Use additional alternative FQDNs if a different name is used while accessing the Server from the local Network (local FQDN)

    Business Process Engine Server

    • Purpose: Client certificate to authenticate against remote FHIR endpoints (when either the BPE Server or the FHIR Endpoint Server is acting as a client), server certificate to authenticate the business process engine server on the local network
    • Certificate profile:
      • DFN-PKI Global G2 via DFN e.V.: 802.1X Client
      • D-Trust via TMF e.V.: Basic Team ID
      • GÉANT TCS via DFN e.V.: Web Server
    • Common name: FQDN of the server used while accessing from the local network (local FQDN)
    Last update:
    + + + diff --git a/oldstable/generalinformation/index.html b/oldstable/generalinformation/index.html new file mode 100644 index 000000000..f75ec22a6 --- /dev/null +++ b/oldstable/generalinformation/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + General Information + + + + + + + + + diff --git a/oldstable/generalinformation/networkSetup.html b/oldstable/generalinformation/networkSetup.html new file mode 100644 index 000000000..e8afe00d8 --- /dev/null +++ b/oldstable/generalinformation/networkSetup.html @@ -0,0 +1,76 @@ + + + + + + + + + + Network Setup and General Architecture + + + + + +
    Skip to main content

    Network Setup and General Architecture

    DSF-TeamAbout 2 min

    The Data Sharing Framework consists of two components: A FHIR Endpoint Server used to except Task resources and provide resources for download by other organizations and a Business Process Engine Server run internal and not accessible by other organization to execute and coordinate processes.

    Network Setup Diagramm
    Network Setup Diagramm
    • FHIR Reverse Proxy: The FHIR Reverse Proxy is used to terminate incoming https connections to the FHIR App Server. The Reverse Proxy needs to be accessible on port 443 from the internet. Incoming https connection will be delegate as http on a docker internal network to the FHIR App Server.
    • FHIR App Server: The FHIR App Server is used as a FHIR Endpoint for incoming Task resources and providing resources for download by other organizations. In order to validate incoming FHIR resources the server will communicate with FHIR Servers at other organizations. Access to resources and authorization for creating or updating resources is granted based on the content of the resource and/or based on the client (identified by its client certificate) being part of an allow list. JDBC connections to the FHIR DB Server
    • FHIR DB Server: PostgreSQL database for the FHIR App Server.
    • BPE App Server: The BPE App Server is executing BPMN 2.0 business processes with the included business process engine. Automatic BPMN service tasks are used for example to check resource, access the PDP- and MPI-servers as well as the MDAT repository. The calculation of record linkage bit vectors (Record Bloom Filters) is also performed using an automatic service task. As of version 0.3.0 the BPE server does not provide any webservices for modifying an server resources.
    • BPE DB Server: PostgreSQL database for the BPE App Server.
    • PDP: IHE Policy Decision Point for deciding on patient consent.
    • MDAT Repo: Repository (e.g. openEHR) for storing medical data (MDAT).
    • MPI: IHE Master Patient Index for storing identifying patient date (IDAT) e.g. first name, last name, date of birth.
    • Cohort Browser: Example for a system to trigger patient cohort size estimations across multiple organizations.

    More information on Client- and Server-Certificates are available on the dedicated wiki page: Authentication: Client/Server Certificates

    Additional Reverse Proxy in external DMZ

    In some organizations an additional reverse proxy in an external DMZ is needed. This can be accomplished by using for example nginx or haproxy as a TCP-Proxy. Example configurations routing traffic using SNI can be found below. Configuring an additional reverse proxy to terminate the incoming TLS connection early is not recommended.

    Network Setup Diagramm
    Network Setup Diagramm

    nginx

    http {
    +	# ...
    +}
    +
    +stream {
    +	map $ssl_preread_server_name $name {
    +		fhir.example.com fhir;
    +	}
    +
    +	upstream fhir {
    +		server 192.168.0.1:443;
    +	}
    +
    +	server {
    +		listen 443;
    +		proxy_pass $name;
    +		ssl_preread on;
    +	}
    +}
    +

    haproxy

    defaults
    +	timeout connect 5s
    +	timeout client 30s
    +	timeout server 30s
    +
    +frontend ingress
    +	bind :443
    +	mode tcp
    +
    +	tcp-request inspect-delay 5s
    +	tcp-request content accept if { req_ssl_hello_type 1 }
    +	use_backend fhir if { req.ssl_sni fhir.example.com }
    +
    +backend fhir
    +	mode tcp
    +
    +	server fhir 192.168.0.1:443
    +
    Last update:
    + + + diff --git a/oldstable/index.html b/oldstable/index.html new file mode 100644 index 000000000..325b707b7 --- /dev/null +++ b/oldstable/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Version 0.9.x + + + + + + + + + diff --git a/oldstable/introduction.html b/oldstable/introduction.html new file mode 100644 index 000000000..e46637fd4 --- /dev/null +++ b/oldstable/introduction.html @@ -0,0 +1,40 @@ + + + + + + + + + + Introduction + + + + + +
    Skip to main content

    Introduction

    DSF-TeamLess than 1 minute

    The Data Sharing Framework implements a distributed process engine based on the BPMN 2.0 and FHIR R4 standards. The DSF is used to support biomedical research with routine data. Every participating site runs a FHIR endpoint (dsf-fhir) accessible by other sites and a business process engine (dsf-bpe) in the local secured network. Authentication between sites is handled using X.509 client/server certificates. The process engines execute BPMN processes in order to coordinate local and remote steps necessary to enable cross-site data sharing and feasibility analyses. This includes access to local data repositories, use-and-access-committee decision support, consent filtering, and privacy preserving record-linkage and pseudonymization.

    DSF Architecture
    DSF Architecture
    Last update:
    + + + diff --git a/oldstable/releases/configBpe.html b/oldstable/releases/configBpe.html new file mode 100644 index 000000000..d70d60b90 --- /dev/null +++ b/oldstable/releases/configBpe.html @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + +
    Skip to main content

    DSF-TeamAbout 7 min

    DSF 0.9.3 Configuration Parameters - BPE Server

    Please note: Additional parameters (not listed here) are used to configure process plugins.

    • Property: org.highmed.dsf.bpe.consent.webservice.factory.class
    • Required: No
    • Description: Factory for client implementations used to connect to a consent server in order to check permissions to access patient medical data
    • Recommendation: The default value is a factory for a stub implementation, change to a factory for client implementation that matches the API of your Consent server
    • Default: org.highmed.consent.client.stub.ConsentClientStubFactory

    ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD or ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: org.highmed.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    ORG_HIGHMED_DSF_BPE_DB_URL

    • Property: org.highmed.dsf.bpe.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: org.highmed.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: org.highmed.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in ORG_HIGHMED_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    ORG_HIGHMED_DSF_BPE_DB_USER_GROUP

    • Property: org.highmed.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD or ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    ORG_HIGHMED_DSF_BPE_DB_USER_USERNAME

    • Property: org.highmed.dsf.bpe.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server
    • Default: bpe_server_user

    ORG_HIGHMED_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: org.highmed.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    ORG_HIGHMED_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: org.highmed.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    ORG_HIGHMED_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: org.highmed.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable loging bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: org.highmed.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: org.highmed.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_PASSWORD or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.fhir.client.local.proxy.password
    • Required: No
    • Description: Proxy password, set if the DSF BPE server can reach internal servers, like the DSF FHIR server, only through a proxy which requests authentication
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_PASSWORD_FILE

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_URL

    • Property: org.highmed.dsf.bpe.fhir.client.local.proxy.url
    • Required: No
    • Description: Proxy location, set if the DSF BPE server can reach internal servers, like the DSF FHIR server, only through a proxy
    • Example: http://proxy.foo:8080

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_USERNAME

    • Property: org.highmed.dsf.bpe.fhir.client.local.proxy.username
    • Required: No
    • Description: Proxy username, set if the DSF BPE server can reach internal servers, like the DSF FHIR server, only through a proxy which requests authentication

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: org.highmed.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: org.highmed.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: org.highmed.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_PASSWORD or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.fhir.client.local.websocket.proxy.password
    • Required: No
    • Description: Proxy password, set if the DSF BPE server can reach internal servers via websocket, like the getSub server, only through a proxy which requests authentication
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_PASSWORD_FILE

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_URL

    • Property: org.highmed.dsf.bpe.fhir.client.local.websocket.proxy.url
    • Required: No
    • Description: Proxy location, set if the DSF BPE server can reach internal servers via websocket, like the DSF FHIR server, only through a proxy
    • Example: http://proxy.foo:8080

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_USERNAME

    • Property: org.highmed.dsf.bpe.fhir.client.local.websocket.proxy.username
    • Required: No
    • Description: Proxy username, set if the DSF BPE server can reach internal servers via websocket, like the DSF FHIR server, only through a proxy which requests authentication

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_PASSWORD or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.fhir.client.remote.proxy.password
    • Required: No
    • Description: Proxy password, set if the the DSF FHIR server can reach the internet only through a proxy which requests authentication
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_PASSWORD_FILE

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_URL

    • Property: org.highmed.dsf.bpe.fhir.client.remote.proxy.url
    • Required: No
    • Description: Proxy location, set if the DSF BPE server can reach the internet only through a proxy
    • Example: http://proxy.foo:8080

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_USERNAME

    • Property: org.highmed.dsf.bpe.fhir.client.remote.proxy.username
    • Required: No
    • Description: Proxy username, set if the the DSF BPE server can reach the internet only through a proxy which requests authentication

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: org.highmed.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: org.highmed.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: org.highmed.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_TRUST_CERTIFICATES

    • Property: org.highmed.dsf.bpe.fhir.client.trust.certificates
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    ORG_HIGHMED_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: org.highmed.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: org.highmed.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: The base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: org.highmed.dsf.bpe.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    ORG_HIGHMED_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: org.highmed.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    ORG_HIGHMED_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: org.highmed.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    ORG_HIGHMED_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: org.highmed.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: org.highmed.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: org.highmed.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    ORG_HIGHMED_DSF_BPE_MAIL_FROMADDRESS

    • Property: org.highmed.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    ORG_HIGHMED_DSF_BPE_MAIL_HOST

    • Property: org.highmed.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    ORG_HIGHMED_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: org.highmed.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    ORG_HIGHMED_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: org.highmed.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    ORG_HIGHMED_DSF_BPE_MAIL_PASSWORD or ORG_HIGHMED_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using ORG_HIGHMED_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS

    ORG_HIGHMED_DSF_BPE_MAIL_PORT

    • Property: org.highmed.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    ORG_HIGHMED_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: org.highmed.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    ORG_HIGHMED_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: org.highmed.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    ORG_HIGHMED_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: org.highmed.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    ORG_HIGHMED_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: org.highmed.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    ORG_HIGHMED_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or ORG_HIGHMED_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: org.highmed.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    ORG_HIGHMED_DSF_BPE_MAIL_TOADDRESSES

    • Property: org.highmed.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    ORG_HIGHMED_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: org.highmed.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    ORG_HIGHMED_DSF_BPE_MAIL_TRUST_CERTIFICATES

    • Property: org.highmed.dsf.bpe.mail.trust.certificates
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    ORG_HIGHMED_DSF_BPE_MAIL_USERNAME

    • Property: org.highmed.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS

    ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS

    • Property: org.highmed.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    ORG_HIGHMED_DSF_BPE_MPI_WEBSERVICE_FACTORY_CLASS

    • Property: org.highmed.dsf.bpe.mpi.webservice.factory.class
    • Required: No
    • Description: Factory for client implementations used to connect to a Master Patient Index (MPI) server in order to read patient demographic data
    • Recommendation: The default value is a factory for a stub implementation, change to a factory for client implementation that matches the API of your MPI
    • Default: org.highmed.mpi.client.stub.MasterPatientIndexClientStubFactory

    ORG_HIGHMED_DSF_BPE_OPENEHR_WEBSERVICE_FACTORY_CLASS

    • Property: org.highmed.dsf.bpe.openehr.webservice.factory.class
    • Required: No
    • Description: Factory for client implementations used to connect to an openEHR repository in order to read patient medical data
    • Recommendation: The default value is a factory for a stub implementation, change to a factory for client implementation that matches the API of your openEHR repository
    • Default: org.highmed.openehr.client.stub.OpenEhrClientStubFactory

    ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED

    • Property: org.highmed.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List

    ORG_HIGHMED_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: org.highmed.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    ORG_HIGHMED_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: org.highmed.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    ORG_HIGHMED_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: org.highmed.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    ORG_HIGHMED_DSF_BPE_PROCESS_RETIRED

    • Property: org.highmed.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available

    ORG_HIGHMED_DSF_BPE_PSEUDONYMIZATION_WEBSERVICE_FACTORY_CLASS

    • Property: org.highmed.dsf.bpe.pseudonymization.webservice.factory.class
    • Required: No
    • Description: Factory for client implementations used to connect to a pseudonymization service in order to pseudonymize patient demographic and medical data
    • Recommendation: The default value is a factory for a stub implementation, change to a factory for client implementation that matches the API of your pseudonymization service
    • Default: org.highmed.pseudonymization.client.stub.PseudonymizationClientStubFactory
    Last update:
    + + + diff --git a/oldstable/releases/configFhir.html b/oldstable/releases/configFhir.html new file mode 100644 index 000000000..b4b779ed0 --- /dev/null +++ b/oldstable/releases/configFhir.html @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + +
    Skip to main content

    DSF-TeamAbout 3 min

    DSF 0.9.3 Configuration Parameters - FHIR Server

    Please note: Additional parameters (not listed here) are used to define elements of the external FHIR bundle.

    ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: org.highmed.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: org.highmed.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: org.highmed.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_PASSWORD or ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_PASSWORD_FILE

    • Property: org.highmed.dsf.fhir.client.proxy.password
    • Required: No
    • Description: Proxy password, set if the the DSF FHIR server can reach the internet only through a proxy which requests authentication
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_PASSWORD_FILE

    ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_URL

    • Property: org.highmed.dsf.fhir.client.proxy.url
    • Required: No
    • Description: Proxy location, set if the DSF FHIR server can reach the internet only through a proxy
    • Example: http://proxy.foo:8080

    ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_USERNAME

    • Property: org.highmed.dsf.fhir.client.proxy.username
    • Required: No
    • Description: Proxy username, set if the the DSF FHIR server can reach the internet only through a proxy which requests authentication

    ORG_HIGHMED_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: org.highmed.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    ORG_HIGHMED_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: org.highmed.dsf.fhir.client.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    ORG_HIGHMED_DSF_FHIR_CLIENT_TRUST_CERTIFICATES

    • Property: org.highmed.dsf.fhir.client.trust.certificates
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    ORG_HIGHMED_DSF_FHIR_CLIENT_VERBOSE

    • Property: org.highmed.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD or ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: org.highmed.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: org.highmed.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    ORG_HIGHMED_DSF_FHIR_DB_URL

    • Property: org.highmed.dsf.fhir.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    ORG_HIGHMED_DSF_FHIR_DB_USER_GROUP

    • Property: org.highmed.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD or ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: org.highmed.dsf.fhir.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: org.highmed.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: org.highmed.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: org.highmed.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then ORG_HIGHMED_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    ORG_HIGHMED_DSF_FHIR_DB_USER_USERNAME

    • Property: org.highmed.dsf.fhir.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server
    • Default: fhir_server_user

    ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL

    • Property: org.highmed.dsf.fhir.server.base.url
    • Required: Yes
    • Description: The base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    ORG_HIGHMED_DSF_FHIR_SERVER_CORS_ORIGINS

    • Property: org.highmed.dsf.fhir.server.cors.origins
    • Required: No
    • Description: List of allowed CORS origins, used to set the Access-Control-Allow-Origin HTTP response header, which indicates whether the response can be shared with requesting code from the given origin; comma or space separated list, YAML block scalars supported

    ORG_HIGHMED_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: org.highmed.dsf.fhir.server.init.bundle
    • Required: No
    • Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: org.highmed.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    ORG_HIGHMED_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: org.highmed.dsf.fhir.server.page.count
    • Required: No
    • Description: The page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS

    • Property: org.highmed.dsf.fhir.server.user.thumbprints
    • Required: Yes
    • Description: List of SHA512 thumbprints as hex from local client certificates that can be used to access the DSF FHIR server; comma or space separated list, YAML block scalars supported
    • Recommendation: Besides the DSF BPE client certificate thumbprint, add a second thumbprint of a personal client certificate for administration purposes

    ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE

    • Property: org.highmed.dsf.fhir.server.user.thumbprints.permanent.delete
    • Required: Yes
    • Description: List of SHA512 thumbprints as hex from local client certificates that can be used to access the DSF FHIR server for permanent deletes; comma or space separated list, YAML block scalars supported
    • Recommendation: Besides the DSF BPE client certificate thumbprint, add a second thumbprint of a personal client certificate for administration purposes
    Last update:
    + + + diff --git a/oldstable/releases/configFhirReverseProxy.html b/oldstable/releases/configFhirReverseProxy.html new file mode 100644 index 000000000..c8a1d9e0e --- /dev/null +++ b/oldstable/releases/configFhirReverseProxy.html @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + +
    Skip to main content

    DSF-TeamAbout 1 min

    DSF 0.9.3 Configuration Parameters - FHIR Reverse Proxy

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem
    Last update:
    + + + diff --git a/oldstable/releases/highmedInstall.html b/oldstable/releases/highmedInstall.html new file mode 100644 index 000000000..b45a785cf --- /dev/null +++ b/oldstable/releases/highmedInstall.html @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + +
    Skip to main content

    DSF-TeamAbout 6 min

    This setup guide uses pre-build docker images for DSF Version 0.9.3. This guide is only suitable for HiGHmed organizations.
    If you are not a member of HiGHmed, see NUM-CODEX Install.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    Both VMs need latest docker and docker-compose. For the latest install guide see https://docs.docker.com/engine/installopen in new window and https://docs.docker.com/compose/installopen in new window

    docker:

    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io
    +

    docker-compose (warning: 2.17.3open in new window might not be latestopen in new window):

    sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    +sudo chmod +x /usr/local/bin/docker-compose
    +

    Client/Server Certificates

    Two Certificates from the DFN-PKI Global G2 (via DFN e.V.), GÉANT TCS (via DFN e.V.) or D-Trust (via TMF e.V.) are needed, more infos see Authentication

    • Certificate A: Server Certificate (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    Network setup / Network access

    For additional information on the network setup see Network-and-Architecture.

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup. Connections to the fTTP, the terminology server and simplifier.netopen in new window for validating GECCO FHIR resources as well as the local GECCO FHIR server are not listed:

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (GECCO Transfer Hub)443https
    DSF FHIR (local)DSF FHIR (GECCO Transfer Hub)443https (HTTP HEAD only)
    DSF BPE (GECCO Transfer Hub)DSF FHIR (local)443https
    DSF FHIR (GECCO Transfer Hub)DSF FHIR (local)443https (HTTP HEAD only)

    On-Boarding Excel Spreadsheet

    You are required to fill out the on-boarding Excel spreadsheet, provided with the NUM-CODEX hackathon invite, and send it to the GECCO Transfer Hub. If the GECCO Transfer Hub already received and validated your On-Boarding Excel spreadsheet and you do not have to change any information, you can skip this step.

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo addgroup --gid 2101 fhir
      +sudo adduser --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download prepared DSF FHIR server config files and folder structure from

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/
        • client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L39:      - app_client_certificate_private_key.pem.password
        +...
        +L56:      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L136:  app_client_certificate_private_key.pem.password:
        +L137:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L101:  ssl_certificate_chain_file.pem:
      +L102:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL: https://TODO_DSF_FRIR_SERVER_EXTERNAL_FQDN/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir
        • ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.deopen in new window
        • ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_NAME: TODO_ORGANIZATION_NAME
          Set your Organizations official name, e.g. Hochschule Heilbronn
        • ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: TODO_CLIENT_CERTIFICATE_THUMBPRINT
          Set the SHA-512 Hash (lowercase hex) of your client certificate (certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.
        • ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS: TODO_CLIENT_CERTIFICATE_THUMBPRINTS
          Set the SHA-512 Hash (lowercase hex) of your client certificate (certificate B)
          This parameter is a comma separated list e.g. ab12...37ff,f3a2...bb22. You can add additional client certificate thumbprints for example the thumbprint of your (the admins) personal DFN PKI S/MIME certificate, to access the DSF FHIR servers REST interface.
        • ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE: TODO_CLIENT_CERTIFICATE_THUMBPRINTS
          Set the SHA-512 Hash (lowercase hex) of your client certificate (certificate B)
          This parameter is a comma separated list e.g. ab12...37ff,f3a2...bb22. Usually it is not necessary to add additional thumbprints other than your client certificate (certificate B) here. When a client uses a certificate with a thumbprint listed here, the client is allowed to permanently delete FHIR resources.
        • For additional environment variables, see DSF 0.9.3 FHIR Server configuration parameters
    8. Start the DSF FHIR Server
      Start using: docker-compose up -d && docker-compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo addgroup --gid 2202 bpe
      +sudo adduser --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download prepared DSF BPE server config files and folder structure from

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
      • /opt/bpe/psn
    4. Add certificates and keys

      • Add the client certificate (certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/
        • client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L13:      - app_client_certificate_private_key.pem.password
        +...
        +L41:      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L99:  app_client_certificate_private_key.pem.password:
        +L100:    file: ./secrets/client_certificate_private_key.pem.password
        +
      • Add the CRR public-key used for asymmetrically encrypting the GECCO FHIR Bundles to /opt/bpe/secrets/
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves the main homepage of the organization, e.g. hs-heilbronn.deopen in new window
        • ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://TODO_DSF_FRIR_SERVER_FQDN/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir
        • For additional environment variables, see DSF 0.9.3 BPE Server configuration parameters
    7. Start the DSF BPE Server (without process plugins)
      Start using: docker-compose up -d && docker-compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    9. Stop the DSF BPE Server

      • Hit Ctrl-C to close log
      • Stop using: docker-compose stop
    10. Add the following DSF BPE process plugins, for instructions on how to configure the plugin, see release notes.

      Notice: Jar-files within the folders /opt/bpe/process and /opt/bpe/plugin need to be readable by the linxux bpe user -> chown root:bpe, chmod 440

    11. Start the DSF BPE Server (with process plugins)
      Start using: docker-compose up -d && docker-compose logs -f (Ctrl-C will close log, but not stop container)

    12. Request Allow-List upload from HiGHmed TTP
      The Allow-List upload is needed in order to execute HiGHmed and NUM-CODEX processes.

    Last update:
    + + + diff --git a/oldstable/releases/index.html b/oldstable/releases/index.html new file mode 100644 index 000000000..330fb259f --- /dev/null +++ b/oldstable/releases/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Releases and Deployment + + + + + + + + + diff --git a/oldstable/releases/num-codexInstall.html b/oldstable/releases/num-codexInstall.html new file mode 100644 index 000000000..55f8cb918 --- /dev/null +++ b/oldstable/releases/num-codexInstall.html @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + +
    Skip to main content

    DSF-TeamAbout 6 min

    This setup guide uses pre-build docker images for DSF Version 0.9.3. This guide is not suitable for HiGHmed organizations.
    If you are a member of HiGHmed, see HiGHmed Install.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    Both VMs need latest docker and docker-compose. For the latest install guide see https://docs.docker.com/engine/installopen in new window and https://docs.docker.com/compose/installopen in new window

    docker:

    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io
    +

    docker-compose (warning: 2.17.3open in new window might not be latestopen in new window):

    sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    +sudo chmod +x /usr/local/bin/docker-compose
    +

    Client/Server Certificates

    Two Certificates from the DFN-PKI Global G2 (via DFN e.V.), GÉANT TCS (via DFN e.V.) or D-Trust (via TMF e.V.) are needed, more infos see Authentication

    • Certificate A: Server Certificate (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    Network setup / Network access

    For additional information on the network setup see Network-and-Architecture.

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup. Connections to the fTTP, the terminology server and simplifier.netopen in new window for validating GECCO FHIR resources as well as the local GECCO FHIR server are not listed:

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (GECCO Transfer Hub)443https
    DSF FHIR (local)DSF FHIR (GECCO Transfer Hub)443https (HTTP HEAD only)
    DSF BPE (GECCO Transfer Hub)DSF FHIR (local)443https
    DSF FHIR (GECCO Transfer Hub)DSF FHIR (local)443https (HTTP HEAD only)

    On-Boarding Excel Spreadsheet

    You are required to fill out the on-boarding Excel spreadsheet, provided with the NUM-CODEX hackathon invite, and send it to the GECCO Transfer Hub. If the GECCO Transfer Hub already received and validated your On-Boarding Excel spreadsheet and you do not have to change any information, you can skip this step.

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo addgroup --gid 2101 fhir
      +sudo adduser --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download prepared DSF FHIR server config files and folder structure from

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/
        • client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L39:      - app_client_certificate_private_key.pem.password
        +...
        +L56:      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L137:  app_client_certificate_private_key.pem.password:
        +L138:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L102:  ssl_certificate_chain_file.pem:
      +L103:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • ORG_HIGHMED_DSF_FHIR_SERVER_FQDN: TODO_DSF_FRIR_SERVER_EXTERNAL_FQDN
          Set your FHIR servers external FQDN, e.g. foo.bar.de
        • ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL: https://TODO_DSF_FRIR_SERVER_EXTERNAL_FQDN/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir
        • ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.deopen in new window
        • ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_NAME: TODO_ORGANIZATION_NAME
          Set your Organizations official name, e.g. Hochschule Heilbronn
        • ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: TODO_CLIENT_CERTIFICATE_THUMBPRINT
          Set the SHA-512 Hash (lowercase hex) of your client certificate (certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.
        • ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS: TODO_CLIENT_CERTIFICATE_THUMBPRINTS
          Set the SHA-512 Hash (lowercase hex) of your client certificate (certificate B)
          This parameter is a comma separated list e.g. ab12...37ff,f3a2...bb22. You can add additional client certificate thumbprints for example the thumbprint of your (the admins) personal DFN PKI S/MIME certificate, to access the DSF FHIR servers REST interface.
        • ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE: TODO_CLIENT_CERTIFICATE_THUMBPRINTS
          Set the SHA-512 Hash (lowercase hex) of your client certificate (certificate B)
          This parameter is a comma separated list e.g. ab12...37ff,f3a2...bb22. Usually it is not necessary to add additional thumbprints other than your client certificate (certificate B) here. When a client uses a certificate with a thumbprint listed here, the client is allowed to permanently delete FHIR resources.
        • For additional environment variables, see DSF 0.9.3 FHIR Server configuration parameters
    8. Start the DSF FHIR Server
      Start using: docker-compose up -d && docker-compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo addgroup --gid 2202 bpe
      +sudo adduser --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download prepared DSF BPE server config files and folder structure from

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/
        • client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L13:      - app_client_certificate_private_key.pem.password
        +...
        +L38:      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L92:  app_client_certificate_private_key.pem.password:
        +L93:    file: ./secrets/client_certificate_private_key.pem.password
        +
      • Add the CRR public-key used for asymmetrically encrypting the GECCO FHIR Bundles to /opt/bpe/secrets/
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves the main homepage of the organization, e.g. hs-heilbronn.deopen in new window
        • ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://TODO_DSF_FRIR_SERVER_FQDN/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir
        • For additional environment variables, see DSF 0.9.3 BPE Server configuration parameters
    7. Start the DSF BPE Server (without process plugins)
      Start using: docker-compose up -d && docker-compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    9. Stop the DSF BPE Server

      • Hit Ctrl-C to close log
      • Stop using: docker-compose stop
    10. Add the following DSF BPE process plugins, for instructions on how to configure the plugin, see release notes.

      Notice: Jar-files within the folders /opt/bpe/process and /opt/bpe/plugin need to be readable by the linxux bpe user -> chown root:bpe, chmod 440

    11. Start the DSF BPE Server (with process plugins)
      Start using: docker-compose up -d && docker-compose logs -f (Ctrl-C will close log, but not stop container)

    Last update:
    + + + diff --git a/oldstable/releases/upgradeFrom7.html b/oldstable/releases/upgradeFrom7.html new file mode 100644 index 000000000..aa05bc418 --- /dev/null +++ b/oldstable/releases/upgradeFrom7.html @@ -0,0 +1,139 @@ + + + + + + + + + + Upgrading from 0.7.0 to 0.9.0 + + + + + +
    Skip to main content

    Upgrading from 0.7.0 to 0.9.0

    DSF-TeamAbout 4 min

    Upgrading the DSF from 0.7.0 to 0.9.0 involves replacing a config file, modifying the docker-compose.yml files, replacing the process plugins and recreating the containers.

    If you are upgrading from 0.6.0 please see the Upgrade from 0.6.0 to 0.7.0 guideopen in new window first.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_0.9.0_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace 0.7.0 with 0.9.0

      @@ -1,7 +1,7 @@
      + version: '3.8'
      + services:
      +   proxy:
      +-    image: ghcr.io/highmed/fhir_proxy:0.7.0
      ++    image: ghcr.io/highmed/fhir_proxy:0.9.0
      +     restart: on-failure
      +     ports:
      +       - 127.0.0.1:80:80
      +@@ -27,7 +27,7 @@ services:
      +       - app
      + 
      +   app:
      +-    image: ghcr.io/highmed/fhir:0.7.0
      ++    image: ghcr.io/highmed/fhir:0.9.0
      +     restart: on-failure
      +     healthcheck:
      +       test: ["CMD", "java", "-cp", "dsf_fhir.jar", "org.highmed.dsf.fhir.StatusClient"]
      +
    3. Download prepared DSF FHIR server config files and extract/replace the external FHIR bundle

      The command will update the external FHIR bundle at /opt/fhir/conf/bundle.xml

      The output of the tar command should be

      fhir/conf/bundle.xml
      +
    4. Upgrade the DSF FHIR containers
      From /opt/fhir execute

      docker-compose up -d && docker-compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_0.9.0_upgrade
    2. Modify the DSF BPE docker-compose.yml file

      • NUM-CODEX (non HiGHmed) instance:
        Change the bpe container version from 0.7.0 to 0.9.0, update the process exclude config and remove a bind mount

        @@ -1,7 +1,7 @@
        + version: '3.8'
        + services:
        +   app:
        +-    image: ghcr.io/highmed/bpe:0.7.0
        ++    image: ghcr.io/highmed/bpe:0.9.0
        +     restart: on-failure
        +     healthcheck:
        +       test: ["CMD", "java", "-cp", "dsf_bpe.jar", "org.highmed.dsf.bpe.StatusClient"]
        +@@ -29,9 +29,6 @@ services:
        +       - type: bind
        +         source: ./log
        +         target: /opt/bpe/log
        +-      - type: bind
        +-        source: ./last_event
        +-        target: /opt/bpe/last_event
        +       - type: bind
        +         source: ./cache
        +         target: /opt/bpe/cache
        +@@ -48,8 +45,8 @@ services:
        +       ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER
        +       ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://TODO_DSF_FRIR_SERVER_FQDN/fhir
        +       ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED: |
        +-        wwwnetzwerk-universitaetsmedizinde_dataTranslate/0.6.0
        +-        wwwnetzwerk-universitaetsmedizinde_dataReceive/0.6.0
        ++        wwwnetzwerk-universitaetsmedizinde_dataTranslate/0.7.0
        ++        wwwnetzwerk-universitaetsmedizinde_dataReceive/0.7.0
        +
        +       #TODO modify ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED for later process versions
        +       #TODO add process specific environment variables, see process documentation
        +
      • HiGHmed instance:
        Change the bpe container version from 0.7.0 to 0.9.0, update the process exclude config, and remove a bind mount

        @@ -1,7 +1,7 @@
        + version: '3.8'
        + services:
        +   app:
        +-    image: ghcr.io/highmed/bpe:0.7.0
        ++    image: ghcr.io/highmed/bpe:0.9.0
        +     restart: on-failure
        +     healthcheck:
        +       test: ["CMD", "java", "-cp", "dsf_bpe.jar", "org.highmed.dsf.bpe.StatusClient"]
        +@@ -29,9 +29,6 @@ services:
        +       - type: bind
        +         source: ./log
        +         target: /opt/bpe/log
        +-      - type: bind
        +-        source: ./last_event
        +-        target: /opt/bpe/last_event
        +       - type: bind
        +         source: ./psn
        +         target: /opt/bpe/psn
        +@@ -51,11 +48,11 @@ services:
        +       ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER
        +       ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://TODO_DSF_FRIR_SERVER_FQDN/fhir
        +       ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED: |
        +-        highmedorg_computeFeasibility/0.6.0
        +-        highmedorg_computeDataSharing/0.6.0
        +-        highmedorg_updateAllowList/0.6.0
        +-        wwwnetzwerk-universitaetsmedizinde_dataTranslate/0.6.0
        +-        wwwnetzwerk-universitaetsmedizinde_dataReceive/0.6.0
        ++        highmedorg_computeFeasibility/0.7.0
        ++        highmedorg_computeDataSharing/0.7.0
        ++        highmedorg_updateAllowList/0.7.0
        ++        wwwnetzwerk-universitaetsmedizinde_dataTranslate/0.7.0
        ++        wwwnetzwerk-universitaetsmedizinde_dataReceive/0.7.0
        +
        +       #TODO modify ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED for later process versions
        +       #TODO add process specific environment variables, see process documentation
        +
    3. Upgrade DSF Plugins and Process-Plugins

    4. Upgrade the DSF BPE containers
      From /opt/bpe execute

      docker-compose up -d && docker-compose logs -f
      +
    5. Verify your upgrade:

      • Verify the DSF FHIR server is running in version 0.9.0. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 0.9.0, [...]
      • Verify the DSF FHIR server started without errors
      • Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/open in new window (authentication with your client-certificate)
      • Verify the DSF BPE server is running in version 0.9.0. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 0.9.0, [...]
      • Verify the DSF BPE server started without errors
      • Verify the DSF BPE server removed ActivityDefinition resources for the deleted process plugin from the DSF FHIR server and created new ActivityDefinition for the new process plugin.
      • Verify your install with a ping/pong test
        For a Task resource compatible with the 0.7.0 release of the ping process, see the Ping/Pong process wikiopen in new window.
    Last update:
    + + + diff --git a/oldstable/releases/upgradeFrom8.html b/oldstable/releases/upgradeFrom8.html new file mode 100644 index 000000000..420df94ab --- /dev/null +++ b/oldstable/releases/upgradeFrom8.html @@ -0,0 +1,91 @@ + + + + + + + + + + Upgrading from 0.8.0 to 0.9.0 + + + + + +
    Skip to main content

    Upgrading from 0.8.0 to 0.9.0

    DSF-TeamAbout 3 min

    Upgrading the DSF from 0.8.0 to 0.9.0 involves modifying the docker-compose.yml files, replacing the process plugins and recreating the containers.

    If you are upgrading from 0.6.0 please see the Upgrade from 0.6.0 to 0.7.0 guideopen in new window first and then visit the Upgrade from 0.7.0 to 0.9.0 guideopen in new window.
    If you are upgrading from 0.7.0 please see the Upgrade from 0.7.0 to 0.9.0 guide.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_0.9.0_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace 0.8.0 with 0.9.0

      @@ -1,7 +1,7 @@
      + version: '3.8'
      + services:
      +   proxy:
      +-    image: ghcr.io/highmed/fhir_proxy:0.8.0
      ++    image: ghcr.io/highmed/fhir_proxy:0.9.0
      +     restart: on-failure
      +     ports:
      +       - 127.0.0.1:80:80
      +@@ -27,7 +27,7 @@ services:
      +       - app
      + 
      +   app:
      +-    image: ghcr.io/highmed/fhir:0.8.0
      ++    image: ghcr.io/highmed/fhir:0.9.0
      +     restart: on-failure
      +     healthcheck:
      +       test: ["CMD", "java", "-cp", "dsf_fhir.jar", "org.highmed.dsf.fhir.StatusClient"]
      +
    3. Upgrade the DSF FHIR containers
      From /opt/fhir execute

      docker-compose up -d && docker-compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_0.9.0_upgrade
    2. Modify the DSF BPE docker-compose.yml file

      • NUM-CODEX (non HiGHmed) instance:
        Change the bpe container version from 0.8.0 to 0.9.0, update the process exclude config and remove a bind mount

        @@ -1,7 +1,7 @@
        + version: '3.8'
        + services:
        +   app:
        +-    image: ghcr.io/highmed/bpe:0.8.0
        ++    image: ghcr.io/highmed/bpe:0.9.0
        +     restart: on-failure
        +     healthcheck:
        +       test: ["CMD", "java", "-cp", "dsf_bpe.jar", "org.highmed.dsf.bpe.StatusClient"]
        +
      • HiGHmed instance:
        Change the bpe container version from 0.7.0 to 0.9.0, update the process exclude config, and remove a bind mount

        @@ -1,7 +1,7 @@
        + version: '3.8'
        + services:
        +   app:
        +-    image: ghcr.io/highmed/bpe:0.8.0
        ++    image: ghcr.io/highmed/bpe:0.9.0
        +     restart: on-failure
        +     healthcheck:
        +       test: ["CMD", "java", "-cp", "dsf_bpe.jar", "org.highmed.dsf.bpe.StatusClient"]
        +@@ -48,9 +48,9 @@ services:
        +       ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER
        +       ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://TODO_DSF_FRIR_SERVER_FQDN/fhir
        +       ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED: |
        +-        highmedorg_computeFeasibility/0.6.0
        +-        highmedorg_computeDataSharing/0.6.0
        +-        highmedorg_updateAllowList/0.6.0
        ++        highmedorg_computeFeasibility/0.7.0
        ++        highmedorg_computeDataSharing/0.7.0
        ++        highmedorg_updateAllowList/0.7.0
        +         wwwnetzwerk-universitaetsmedizinde_dataTranslate/0.7.0
        +         wwwnetzwerk-universitaetsmedizinde_dataReceive/0.7.0
        +
        +
    3. Upgrade DSF Plugins and Process-Plugins

    4. Upgrade the DSF BPE containers
      From /opt/bpe execute

      docker-compose up -d && docker-compose logs -f
      +
    5. Verify your upgrade:

      • Verify the DSF FHIR server is running in version 0.9.0. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 0.9.0, [...]
      • Verify the DSF FHIR server started without errors
      • Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/open in new window (authentication with your client-certificate)
      • Verify the DSF BPE server is running in version 0.9.0. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 0.9.0, [...]
      • Verify the DSF BPE server started without errors
      • Verify the DSF BPE server removed ActivityDefinition resources for the deleted process plugin from the DSF FHIR server and created new ActivityDefinition for the new process plugin.
      • Verify your install with a ping/pong test
        For a Task resource compatible with the 0.7.0 release of the ping process, see the Ping/Pong process wikiopen in new window.
    Last update:
    + + + diff --git a/oldstable/releases/upgradeFrom90.html b/oldstable/releases/upgradeFrom90.html new file mode 100644 index 000000000..963a93986 --- /dev/null +++ b/oldstable/releases/upgradeFrom90.html @@ -0,0 +1,79 @@ + + + + + + + + + + Upgrading from 0.9.0 to 0.9.1 + + + + + +
    Skip to main content

    Upgrading from 0.9.0 to 0.9.1

    DSF-TeamAbout 2 min

    Upgrading the DSF from 0.9.0 to 0.9.1 involves modifying the docker-compose.yml files, replacing the process plugins and recreating the containers.

    If you are upgrading from 0.8.0 please see the Upgrade from 0.8.0 to 0.9.0 guide.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_0.9.1_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace 0.9.0 with 0.9.1

      @@ -1,7 +1,7 @@
      + version: '3.8'
      + services:
      +   proxy:
      +-    image: ghcr.io/highmed/fhir_proxy:0.9.0
      ++    image: ghcr.io/highmed/fhir_proxy:0.9.1
      +     restart: on-failure
      +     ports:
      +       - 127.0.0.1:80:80
      +@@ -27,7 +27,7 @@ services:
      +       - app
      + 
      +   app:
      +-    image: ghcr.io/highmed/fhir:0.9.0
      ++    image: ghcr.io/highmed/fhir:0.9.1
      +     restart: on-failure
      +     healthcheck:
      +       test: ["CMD", "java", "-cp", "dsf_fhir.jar", "org.highmed.dsf.fhir.StatusClient"]
      +
    3. Upgrade the DSF FHIR containers
      From /opt/fhir execute

      docker-compose up -d && docker-compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_0.9.1_upgrade
    2. Modify the DSF BPE docker-compose.yml file

      • NUM-CODEX (non HiGHmed) instance:
        Change the bpe container version from 0.9.0 to 0.9.1

        @@ -1,7 +1,7 @@
        + version: '3.8'
        + services:
        +   app:
        +-    image: ghcr.io/highmed/bpe:0.9.0
        ++    image: ghcr.io/highmed/bpe:0.9.1
        +     restart: on-failure
        +     healthcheck:
        +       test: ["CMD", "java", "-cp", "dsf_bpe.jar", "org.highmed.dsf.bpe.StatusClient"]
        +
      • HiGHmed instance:
        Change the bpe container version from 0.9.0 to 0.9.1

        @@ -1,7 +1,7 @@
        + version: '3.8'
        + services:
        +   app:
        +-    image: ghcr.io/highmed/bpe:0.8.0
        ++    image: ghcr.io/highmed/bpe:0.9.0
        +     restart: on-failure
        +     healthcheck:
        +       test: ["CMD", "java", "-cp", "dsf_bpe.jar", "org.highmed.dsf.bpe.StatusClient"]
        +
    3. Upgrade DSF Plugins and Process-Plugins
      * Plugins in '/opt/bpe/plugin':
      1. If you are using the provided PDQ MPI Client, replace dsf-mpi-client-pdq-0.7.0.jar, hapi-base-2.3.jar and hapi-structures-v25-2.3.jar with the new files from dsf-mpi-client-pdq-0.9.1.zip, see DSF release notesopen in new window
      1. If you are using the provided openEHR Client, replace dsf-openehr-client-impl-0.7.0.jar with the new file from dsf-openehr-client-impl-0.9.1.zip, see DSF release notesopen in new window

           Make sure the plugins in `/opt/bpe/plugin` are configured with `chmod 440` and `chown root:bpe`.  
      +
    4. Upgrade the DSF BPE containers
      From /opt/bpe execute

      docker-compose up -d && docker-compose logs -f
      +
    5. Verify your upgrade:

      • Verify the DSF FHIR server is running in version 0.9.1. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 0.9.1, [...]
      • Verify the DSF FHIR server started without errors
      • Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/open in new window (authentication with your client-certificate)
      • Verify the DSF BPE server is running in version 0.9.1. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 0.9.1, [...]
      • Verify the DSF BPE server started without errors
      • Verify the DSF BPE server removed ActivityDefinition resources for the deleted process plugin from the DSF FHIR server and created new ActivityDefinition for the new process plugin.
      • Verify your install with a ping/pong test
        For a Task resource compatible with the 0.7.0 release of the ping process, see the Ping/Pong process wikiopen in new window.
    Last update:
    + + + diff --git a/oldstable/releases/upgradeFrom91.html b/oldstable/releases/upgradeFrom91.html new file mode 100644 index 000000000..0d49ced89 --- /dev/null +++ b/oldstable/releases/upgradeFrom91.html @@ -0,0 +1,69 @@ + + + + + + + + + + Upgrading from 0.9.1 + + + + + +
    Skip to main content

    Upgrading from 0.9.1

    DSF-TeamAbout 1 min

    Upgrading from 0.9.1

    Upgrading the DSF from 0.9.1 to 0.9.2 involves modifying the docker-compose.yml files and recreating the containers.

    As the upgrade from 0.9.0 to 0.9.1 does not require any changes except the change of the version numbers, you can directly follow the following instructions.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_0.9.2_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace 0.9.1 (or 0.9.0) with 0.9.2

      @@ -1,7 +1,7 @@
      + version: '3.8'
      + services:
      +   proxy:
      +-    image: ghcr.io/highmed/fhir_proxy:0.9.1
      ++    image: ghcr.io/highmed/fhir_proxy:0.9.2
      +     restart: on-failure
      +     ports:
      +       - 127.0.0.1:80:80
      +@@ -27,7 +27,7 @@ services:
      +       - app
      + 
      +   app:
      +-    image: ghcr.io/highmed/fhir:0.9.1
      ++    image: ghcr.io/highmed/fhir:0.9.2
      +     restart: on-failure
      +     healthcheck:
      +       test: ["CMD", "java", "-cp", "dsf_fhir.jar", "org.highmed.dsf.fhir.StatusClient"]
      +
    3. Upgrade the DSF FHIR containers
      From /opt/fhir execute

      docker-compose up -d && docker-compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_0.9.2_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace 0.9.1 (or 0.9.0) with 0.9.2

      @@ -1,7 +1,7 @@
      + version: '3.8'
      + services:
      +   app:
      +-    image: ghcr.io/highmed/bpe:0.9.1
      ++    image: ghcr.io/highmed/bpe:0.9.2
      +     restart: on-failure
      +     healthcheck:
      +       test: ["CMD", "java", "-cp", "dsf_bpe.jar", "org.highmed.dsf.bpe.StatusClient"]
      +
    3. Upgrade the DSF BPE containers
      From /opt/bpe execute

      docker-compose up -d && docker-compose logs -f
      +
    4. Verify your upgrade:

      • Verify the DSF FHIR server is running in version 0.9.2. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 0.9.2, [...]
      • Verify the DSF FHIR server started without errors
      • Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/open in new window (authentication with your client-certificate)
      • Verify the DSF BPE server is running in version 0.9.2. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 0.9.2, [...]
      • Verify the DSF BPE server started without errors
      • Verify your install with a ping/pong test
        For a Task resource compatible with the 0.7.0 release of the ping process, see the Ping/Pong process wikiopen in new window.
    Last update:
    + + + diff --git a/oldstable/releases/upgradeFrom92.html b/oldstable/releases/upgradeFrom92.html new file mode 100644 index 000000000..d3c54290b --- /dev/null +++ b/oldstable/releases/upgradeFrom92.html @@ -0,0 +1,69 @@ + + + + + + + + + + Upgrading from 0.9.2 + + + + + +
    Skip to main content

    Upgrading from 0.9.2

    DSF-TeamAbout 1 min

    Upgrading from 0.9.2

    Upgrading the DSF from 0.9.2 to 0.9.3 involves modifying the docker-compose.yml files and recreating the containers.

    As the upgrade from 0.9.0 to 0.9.1 and 0.9.1 to 0.9.2 does not require any changes except the change of the version numbers, you can directly follow the following instructions.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_0.9.3_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace 0.9.2 (or 0.9.0, 0.9.1) with 0.9.3

      @@ -1,7 +1,7 @@
      + version: '3.8'
      + services:
      +   proxy:
      +-    image: ghcr.io/highmed/fhir_proxy:0.9.2
      ++    image: ghcr.io/highmed/fhir_proxy:0.9.3
      +     restart: on-failure
      +     ports:
      +       - 127.0.0.1:80:80
      +@@ -27,7 +27,7 @@ services:
      +       - app
      + 
      +   app:
      +-    image: ghcr.io/highmed/fhir:0.9.2
      ++    image: ghcr.io/highmed/fhir:0.9.3
      +     restart: on-failure
      +     healthcheck:
      +       test: ["CMD", "java", "-cp", "dsf_fhir.jar", "org.highmed.dsf.fhir.StatusClient"]
      +
    3. Upgrade the DSF FHIR containers
      From /opt/fhir execute

      docker-compose up -d && docker-compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_0.9.3_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace 0.9.2 (or 0.9.0, 0.9.1) with 0.9.3

      @@ -1,7 +1,7 @@
      + version: '3.8'
      + services:
      +   app:
      +-    image: ghcr.io/highmed/bpe:0.9.2
      ++    image: ghcr.io/highmed/bpe:0.9.3
      +     restart: on-failure
      +     healthcheck:
      +       test: ["CMD", "java", "-cp", "dsf_bpe.jar", "org.highmed.dsf.bpe.StatusClient"]
      +
    3. Upgrade the DSF BPE containers
      From /opt/bpe execute

      docker-compose up -d && docker-compose logs -f
      +
    4. Verify your upgrade:

      • Verify the DSF FHIR server is running in version 0.9.3. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 0.9.3, [...]
      • Verify the DSF FHIR server started without errors
      • Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/open in new window (authentication with your client-certificate)
      • Verify the DSF BPE server is running in version 0.9.3. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 0.9.3, [...]
      • Verify the DSF BPE server started without errors
      • Verify your install with a ping/pong test
        For a Task resource compatible with the 0.7.0 release of the ping process, see the Ping/Pong process wikiopen in new window.
    Last update:
    + + + diff --git a/oldstable/tutorial/ex11-docker-composeyml.html b/oldstable/tutorial/ex11-docker-composeyml.html new file mode 100644 index 000000000..d630efd92 --- /dev/null +++ b/oldstable/tutorial/ex11-docker-composeyml.html @@ -0,0 +1,498 @@ + + + + + + + + + + Exercise 1.1 - Process Debugging + + + + + +
    Skip to main content

    Exercise 1.1 - Process Debugging

    DSF-TeamAbout 3 min

    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    docker-compose.yml

    version: '3.8'
    +services:
    +  proxy:
    +    image: nginx:1.23
    +    restart: "no"
    +    ports:
    +      - 127.0.0.1:443:443
    +    secrets:
    +      - proxy_certificate_and_int_cas.pem
    +      - proxy_certificate_private_key.pem
    +      - proxy_trusted_client_cas.pem
    +    volumes:
    +      - type: bind
    +        source: ./proxy/conf.d
    +        target: /etc/nginx/conf.d
    +        read_only: true
    +      - type: bind
    +        source: ./proxy/nginx.conf
    +        target: /etc/nginx/nginx.conf
    +        read_only: true
    +    networks:
    +      dic-fhir-frontend:
    +        ipv4_address: 172.20.0.66
    +      hrp-fhir-frontend:
    +        ipv4_address: 172.20.0.82
    +      cos-fhir-frontend:
    +        ipv4_address: 172.20.0.98
    +      internet:
    +        aliases:
    +          - cos
    +          - dic
    +          - hrp
    +    environment:
    +      TZ: Europe/Berlin
    +
    +  db:
    +    image: postgres:13
    +    restart: "no"
    +    healthcheck:
    +      test: ["CMD-SHELL", "pg_isready -U liquibase_user -d postgres"]
    +      interval: 10s
    +      timeout: 5s
    +      retries: 5
    +    environment:
    +      TZ: Europe/Berlin
    +      POSTGRES_PASSWORD_FILE: /run/secrets/db_liquibase.password
    +      POSTGRES_USER: liquibase_user
    +      POSTGRES_DB: postgres
    +    networks:
    +      - cos-fhir-backend
    +      - dic-fhir-backend
    +      - hrp-fhir-backend
    +      - cos-bpe-backend
    +      - dic-bpe-backend
    +      - hrp-bpe-backend
    +    secrets:
    +      - db_liquibase.password
    +    volumes:
    +      - type: volume
    +        source: db-data
    +        target: /var/lib/postgresql/data
    +      - type: bind
    +        source: ./db/init-db.sh
    +        target: /docker-entrypoint-initdb.d/init-db.sh
    +        read_only: true
    +
    +  cos-fhir:
    +    image: ghcr.io/highmed/fhir:0.7.0
    +    restart: "no"
    +    ports:
    +      - 127.0.0.1:5002:5002
    +    secrets:
    +      - db_liquibase.password
    +      - db_cos_fhir_user.password
    +      - db_cos_fhir_user_permanent_delete.password
    +      - app_client_trust_certificates.pem
    +      - app_cos_client_certificate.pem
    +      - app_cos_client_certificate_private_key.pem
    +      - app_client_certificate_private_key.pem.password
    +    volumes:
    +      - type: bind
    +        source: ./cos/fhir/conf/bundle.xml
    +        target: /opt/fhir/conf/bundle.xml
    +      - type: bind
    +        source: ./cos/fhir/log
    +        target: /opt/fhir/log
    +    environment:
    +      TZ: Europe/Berlin
    +      EXTRA_JVM_ARGS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5002
    +      ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE: /run/secrets/db_liquibase.password
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD_FILE: /run/secrets/db_cos_fhir_user.password
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE: /run/secrets/db_cos_fhir_user_permanent_delete.password
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_TRUST_CERTIFICATES: /run/secrets/app_client_trust_certificates.pem
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE: /run/secrets/app_cos_client_certificate.pem
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY: /run/secrets/app_cos_client_certificate_private_key.pem
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
    +      ORG_HIGHMED_DSF_FHIR_DB_URL: jdbc:postgresql://db/cos_fhir
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_GROUP: cos_fhir_users
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_USERNAME: cos_fhir_server_user
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP: cos_fhir_permanent_delete_users
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME: cos_fhir_server_permanent_delete_user
    +      ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL: https://cos/fhir
    +      ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: Test_COS
    +      ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS: ${COS_USER_THUMBPRINTS}
    +      ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE: ${COS_USER_THUMBPRINTS_PERMANENT_DELETE}
    +    networks:
    +      cos-fhir-frontend:
    +        ipv4_address: 172.20.0.99
    +      cos-fhir-backend:
    +      internet:
    +    depends_on:
    +      - db
    +      - proxy
    +  cos-bpe:
    +    image: ghcr.io/highmed/bpe:0.7.0
    +    restart: "no"
    +    ports:
    +      - 127.0.0.1:5005:5005
    +    secrets:
    +      - db_liquibase.password
    +      - db_cos_bpe_user.password
    +      - db_cos_bpe_user_camunda.password
    +      - app_client_trust_certificates.pem
    +      - app_cos_client_certificate.pem
    +      - app_cos_client_certificate_private_key.pem
    +      - app_client_certificate_private_key.pem.password
    +    volumes:
    +      - type: bind
    +        source: ./cos/bpe/plugin
    +        target: /opt/bpe/plugin
    +        read_only: true
    +      - type: bind
    +        source: ./cos/bpe/process
    +        target: /opt/bpe/process
    +        read_only: true
    +      - type: bind
    +        source: ./cos/bpe/log
    +        target: /opt/bpe/log
    +      - type: bind
    +        source: ./cos/bpe/last_event
    +        target: /opt/bpe/last_event
    +    environment:
    +      TZ: Europe/Berlin
    +      EXTRA_JVM_ARGS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
    +      ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE: /run/secrets/db_liquibase.password
    +      ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD_FILE: /run/secrets/db_cos_bpe_user.password
    +      ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE: /run/secrets/db_cos_bpe_user_camunda.password
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_TRUST_CERTIFICATES: /run/secrets/app_client_trust_certificates.pem
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE: /run/secrets/app_cos_client_certificate.pem
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY: /run/secrets/app_cos_client_certificate_private_key.pem
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
    +      ORG_HIGHMED_DSF_BPE_DB_URL: jdbc:postgresql://db/cos_bpe
    +      ORG_HIGHMED_DSF_BPE_DB_USER_GROUP: cos_bpe_users
    +      ORG_HIGHMED_DSF_BPE_DB_USER_USERNAME: cos_bpe_server_user
    +      ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_GROUP: cos_camunda_users
    +      ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_USERNAME: cos_camunda_server_user
    +      ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: Test_COS
    +      ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://cos/fhir
    +    networks:
    +      cos-bpe-frontend:
    +      cos-bpe-backend:
    +      internet:
    +    depends_on:
    +      - db
    +      - cos-fhir
    +
    +  dic-fhir:
    +    image: ghcr.io/highmed/fhir:0.7.0
    +    restart: "no"
    +    ports:
    +      - 127.0.0.1:5000:5000
    +    secrets:
    +      - db_liquibase.password
    +      - db_dic_fhir_user.password
    +      - db_dic_fhir_user_permanent_delete.password
    +      - app_client_trust_certificates.pem
    +      - app_dic_client_certificate.pem
    +      - app_dic_client_certificate_private_key.pem
    +      - app_client_certificate_private_key.pem.password
    +    volumes:
    +      - type: bind
    +        source: ./dic/fhir/conf/bundle.xml
    +        target: /opt/fhir/conf/bundle.xml
    +      - type: bind
    +        source: ./dic/fhir/log
    +        target: /opt/fhir/log
    +    environment:
    +      TZ: Europe/Berlin
    +      EXTRA_JVM_ARGS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5000
    +      ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE: /run/secrets/db_liquibase.password
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD_FILE: /run/secrets/db_dic_fhir_user.password
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE: /run/secrets/db_dic_fhir_user_permanent_delete.password
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_TRUST_CERTIFICATES: /run/secrets/app_client_trust_certificates.pem
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE: /run/secrets/app_dic_client_certificate.pem
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY: /run/secrets/app_dic_client_certificate_private_key.pem
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
    +      ORG_HIGHMED_DSF_FHIR_DB_URL: jdbc:postgresql://db/dic_fhir
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_GROUP: dic_fhir_users
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_USERNAME: dic_fhir_server_user
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP: dic_fhir_permanent_delete_users
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME: dic_fhir_server_permanent_delete_user
    +      ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL: https://dic/fhir
    +      ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: Test_DIC
    +      ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS: ${DIC_USER_THUMBPRINTS}
    +      ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE: ${DIC_USER_THUMBPRINTS_PERMANENT_DELETE}
    +    networks:
    +      dic-fhir-frontend:
    +        ipv4_address: 172.20.0.67
    +      dic-fhir-backend:
    +      internet:
    +    depends_on:
    +      - db
    +      - proxy
    +  dic-bpe:
    +    image: ghcr.io/highmed/bpe:0.7.0
    +    restart: "no"
    +    ports:
    +      - 127.0.0.1:5003:5003
    +    secrets:
    +      - db_liquibase.password
    +      - db_dic_bpe_user.password
    +      - db_dic_bpe_user_camunda.password
    +      - app_client_trust_certificates.pem
    +      - app_dic_client_certificate.pem
    +      - app_dic_client_certificate_private_key.pem
    +      - app_client_certificate_private_key.pem.password
    +    volumes:
    +      - type: bind
    +        source: ./dic/bpe/plugin
    +        target: /opt/bpe/plugin
    +        read_only: true
    +      - type: bind
    +        source: ./dic/bpe/process
    +        target: /opt/bpe/process
    +        read_only: true
    +      - type: bind
    +        source: ./dic/bpe/log
    +        target: /opt/bpe/log
    +      - type: bind
    +        source: ./dic/bpe/last_event
    +        target: /opt/bpe/last_event
    +    environment:
    +      TZ: Europe/Berlin
    +      EXTRA_JVM_ARGS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5003
    +      ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE: /run/secrets/db_liquibase.password
    +      ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD_FILE: /run/secrets/db_dic_bpe_user.password
    +      ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE: /run/secrets/db_dic_bpe_user_camunda.password
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_TRUST_CERTIFICATES: /run/secrets/app_client_trust_certificates.pem
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE: /run/secrets/app_dic_client_certificate.pem
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY: /run/secrets/app_dic_client_certificate_private_key.pem
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
    +      ORG_HIGHMED_DSF_BPE_DB_URL: jdbc:postgresql://db/dic_bpe
    +      ORG_HIGHMED_DSF_BPE_DB_USER_GROUP: dic_bpe_users
    +      ORG_HIGHMED_DSF_BPE_DB_USER_USERNAME: dic_bpe_server_user
    +      ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_GROUP: dic_camunda_users
    +      ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_USERNAME: dic_camunda_server_user
    +      ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: Test_DIC
    +      ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://dic/fhir
    +    networks:
    +      dic-bpe-frontend:
    +      dic-bpe-backend:
    +      internet:
    +    depends_on:
    +      - db
    +      - dic-fhir
    +
    +  hrp-fhir:
    +    image: ghcr.io/highmed/fhir:0.7.0
    +    restart: "no"
    +    ports:
    +      - 127.0.0.1:5001:5001
    +    secrets:
    +      - db_liquibase.password
    +      - db_hrp_fhir_user.password
    +      - db_hrp_fhir_user_permanent_delete.password
    +      - app_client_trust_certificates.pem
    +      - app_hrp_client_certificate.pem
    +      - app_hrp_client_certificate_private_key.pem
    +      - app_client_certificate_private_key.pem.password
    +    volumes:
    +      - type: bind
    +        source: ./hrp/fhir/conf/bundle.xml
    +        target: /opt/fhir/conf/bundle.xml
    +      - type: bind
    +        source: ./hrp/fhir/log
    +        target: /opt/fhir/log
    +    environment:
    +      TZ: Europe/Berlin
    +      EXTRA_JVM_ARGS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5001
    +      ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE: /run/secrets/db_liquibase.password
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD_FILE: /run/secrets/db_hrp_fhir_user.password
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE: /run/secrets/db_hrp_fhir_user_permanent_delete.password
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_TRUST_CERTIFICATES: /run/secrets/app_client_trust_certificates.pem
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE: /run/secrets/app_hrp_client_certificate.pem
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY: /run/secrets/app_hrp_client_certificate_private_key.pem
    +      ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
    +      ORG_HIGHMED_DSF_FHIR_DB_URL: jdbc:postgresql://db/hrp_fhir
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_GROUP: hrp_fhir_users
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_USERNAME: hrp_fhir_server_user
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP: hrp_fhir_permanent_delete_users
    +      ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME: hrp_fhir_server_permanent_delete_user
    +      ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL: https://hrp/fhir
    +      ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS: ${HRP_USER_THUMBPRINTS}
    +      ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE: ${HRP_USER_THUMBPRINTS_PERMANENT_DELETE}
    +      ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: Test_HRP
    +    networks:
    +      hrp-fhir-frontend:
    +        ipv4_address: 172.20.0.83
    +      hrp-fhir-backend:
    +      internet:
    +    depends_on:
    +      - db
    +      - proxy
    +  hrp-bpe:
    +    image: ghcr.io/highmed/bpe:0.7.0
    +    restart: "no"
    +    ports:
    +      - 127.0.0.1:5004:5004
    +    secrets:
    +      - db_liquibase.password
    +      - db_hrp_bpe_user.password
    +      - db_hrp_bpe_user_camunda.password
    +      - app_client_trust_certificates.pem
    +      - app_hrp_client_certificate.pem
    +      - app_hrp_client_certificate_private_key.pem
    +      - app_client_certificate_private_key.pem.password
    +    volumes:
    +      - type: bind
    +        source: ./hrp/bpe/plugin
    +        target: /opt/bpe/plugin
    +        read_only: true
    +      - type: bind
    +        source: ./hrp/bpe/process
    +        target: /opt/bpe/process
    +        read_only: true
    +      - type: bind
    +        source: ./hrp/bpe/log
    +        target: /opt/bpe/log
    +      - type: bind
    +        source: ./hrp/bpe/last_event
    +        target: /opt/bpe/last_event
    +    environment:
    +      TZ: Europe/Berlin
    +      EXTRA_JVM_ARGS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5004
    +      ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE: /run/secrets/db_liquibase.password
    +      ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD_FILE: /run/secrets/db_hrp_bpe_user.password
    +      ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE: /run/secrets/db_hrp_bpe_user_camunda.password
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_TRUST_CERTIFICATES: /run/secrets/app_client_trust_certificates.pem
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE: /run/secrets/app_hrp_client_certificate.pem
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY: /run/secrets/app_hrp_client_certificate_private_key.pem
    +      ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
    +      ORG_HIGHMED_DSF_BPE_DB_URL: jdbc:postgresql://db/hrp_bpe
    +      ORG_HIGHMED_DSF_BPE_DB_USER_GROUP: hrp_bpe_users
    +      ORG_HIGHMED_DSF_BPE_DB_USER_USERNAME: hrp_bpe_server_user
    +      ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_GROUP: hrp_camunda_users
    +      ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_USERNAME: hrp_camunda_server_user
    +      ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: Test_HRP
    +      ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://hrp/fhir
    +    networks:
    +      hrp-bpe-frontend:
    +      hrp-bpe-backend:
    +      internet:
    +    depends_on:
    +      - db
    +      - hrp-fhir
    +
    +secrets:
    +  proxy_certificate_and_int_cas.pem:
    +    file: ./secrets/proxy_certificate_and_int_cas.pem
    +  proxy_certificate_private_key.pem:
    +    file: ./secrets/proxy_certificate_private_key.pem
    +  proxy_trusted_client_cas.pem:
    +    file: ./secrets/proxy_trusted_client_cas.pem
    +
    +  db_liquibase.password:
    +    file: ./secrets/db_liquibase.password
    +
    +  db_dic_fhir_user.password:
    +    file: ./secrets/db_dic_fhir_user.password
    +  db_dic_fhir_user_permanent_delete.password:
    +    file: ./secrets/db_dic_fhir_user_permanent_delete.password
    +  db_dic_bpe_user.password:
    +    file: ./secrets/db_dic_bpe_user.password
    +  db_dic_bpe_user_camunda.password:
    +    file: ./secrets/db_dic_bpe_user_camunda.password
    +
    +  db_hrp_fhir_user.password:
    +    file: ./secrets/db_hrp_fhir_user.password
    +  db_hrp_fhir_user_permanent_delete.password:
    +    file: ./secrets/db_hrp_fhir_user_permanent_delete.password
    +  db_hrp_bpe_user.password:
    +    file: ./secrets/db_hrp_bpe_user.password
    +  db_hrp_bpe_user_camunda.password:
    +    file: ./secrets/db_hrp_bpe_user_camunda.password
    +
    +  db_cos_fhir_user.password:
    +    file: ./secrets/db_cos_fhir_user.password
    +  db_cos_fhir_user_permanent_delete.password:
    +    file: ./secrets/db_cos_fhir_user_permanent_delete.password
    +  db_cos_bpe_user.password:
    +    file: ./secrets/db_cos_bpe_user.password
    +  db_cos_bpe_user_camunda.password:
    +    file: ./secrets/db_cos_bpe_user_camunda.password
    +
    +  app_client_trust_certificates.pem:
    +    file: ./secrets/app_client_trust_certificates.pem
    +  app_client_certificate_private_key.pem.password:
    +    file: ./secrets/app_client_certificate_private_key.pem.password
    +
    +  app_dic_client_certificate.pem:
    +    file: ./secrets/app_dic_client_certificate.pem
    +  app_dic_client_certificate_private_key.pem:
    +    file: ./secrets/app_dic_client_certificate_private_key.pem
    +
    +  app_hrp_client_certificate.pem:
    +    file: ./secrets/app_hrp_client_certificate.pem
    +  app_hrp_client_certificate_private_key.pem:
    +    file: ./secrets/app_hrp_client_certificate_private_key.pem
    +
    +  app_cos_client_certificate.pem:
    +    file: ./secrets/app_cos_client_certificate.pem
    +  app_cos_client_certificate_private_key.pem:
    +    file: ./secrets/app_cos_client_certificate_private_key.pem
    +
    +networks:
    +  internet:
    +  dic-fhir-frontend:
    +    driver: bridge
    +    ipam:
    +      driver: default
    +      config:
    +        - subnet: 172.20.0.64/28
    +  dic-fhir-backend:
    +  dic-bpe-frontend:
    +  dic-bpe-backend:
    +  hrp-fhir-frontend:
    +    driver: bridge
    +    ipam:
    +      driver: default
    +      config:
    +        - subnet: 172.20.0.80/28
    +  hrp-fhir-backend:
    +  hrp-bpe-frontend:
    +  hrp-bpe-backend:
    +  cos-fhir-frontend:
    +    driver: bridge
    +    ipam:
    +      driver: default
    +      config:
    +        - subnet: 172.20.0.96/28
    +  cos-fhir-backend:
    +  cos-bpe-frontend:
    +  cos-bpe-backend:
    +
    +
    +volumes:
    +  db-data:
    +    name: dsf-process-tutorial-db
    +

    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    Last update:
    + + + diff --git a/oldstable/tutorial/exercise1-simpleProcess.html b/oldstable/tutorial/exercise1-simpleProcess.html new file mode 100644 index 000000000..eafdbd66f --- /dev/null +++ b/oldstable/tutorial/exercise1-simpleProcess.html @@ -0,0 +1,43 @@ + + + + + + + + + + Exercise 1 - Simple Process + + + + + +
    Skip to main content

    Exercise 1 - Simple Process

    DSF-TeamAbout 5 min

    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    Exercise 1 - Simple Process

    The first exercise focuses on setting up the testing environment used in this tutorial and shows how to implement and execute a simple BPMN process.

    With this exercise we will take a look at the general setup of the tutorial code base, modify a service class and execute the service within a simple demo process.

    Introduction


    Tutorial Code Base Structure and Docker Test Setup

    The tutorial project consists of three parts: A test-data-generator project used to generate X.509 certificates and FHIR resources during the maven build of the project. The certificates and FHIR resources are needed to start DSF instances simulating installations at three different organizations used for this tutorial. The DSF instances are configured using a docker-compose.yml file in the test-setup folder. The docker-compose test setup uses a single PostgreSQL database server, a single nginx reverse proxy as well as three separate DSF FHIR server- and 3 separate DSF BPE server instances. The tutorial-process project contains all resource (FHIR resources, BPMN process models and Java code) for the actual DSF process plugin.

    Java code for the tutorial-process project is located at src/main/java, FHIR resources and BPMN process models at src/main/resources as well as prepared JUnit tests to verify your solution at src/test/java.

    Process Plugin Main Components

    The most imported Java class used to specify the process plugin for the DSF BPE server is a class that implements the org.highmed.dsf.bpe.ProcessPluginDefinition interface from the DSF dsf-bpe-process-baseopen in new window module. The DSF BPE server searches for classes implementing this interface using the Java ServiceLoaderopen in new window mechanism. For this tutorial the TutorialProcessPluginDefinition class implements this interface. It is appropriately specified in the src/main/resources/META-INF/services/org.highmed.dsf.bpe.ProcessPluginDefinition file. The TutorialProcessPluginDefinition class is used to specify name and version of the process plugin, what BPMN processes are to be deployed and what FHIR resources and required by the BPMN processes. For the implementation of service task and message events of the processes a special Spring context is used for every process plugin. The TutorialProcessPluginDefinition class specifies what via Spring-Framework configuration classopen in new window with Spring Beans are used for the process plugin specific Spring Context. For this plugin the TutorialConfig cass is used to define Spring Beans.

    The business process engine used by the DSF BPE server is based on the OpenSource Camunda Process Engine 7. In order to specify what Java code should be executed for a BPMN ServiceTaskopen in new window you need to specify the fully-qualified Java class name in the ServiceTask inside the BPMN model. To be executable the Java class needs to extend the org.highmed.dsf.bpe.delegate.AbstractServiceDelegate from the DSF dsf-bpe-process-baseopen in new window module and the class needs to be defined as as Spring Bean.

    Process Execution and FHIR Task Resources

    Business process instances are started or the execution continued via FHIR Taskopen in new window resources. The Taskopen in new window resource specifies what process to instantiate or continue, what organization is requesting this action and what organization is the target for the request. When a Taskopen in new window resource starts a process we call it "leading", when it continues a process it's called "current". This differentiation is important for multi-instance use cases not covered by this tutorial. Each Java class extending the abstract class org.highmed.dsf.bpe.delegate.AbstractServiceDelegate has methods to access both types of Taskopen in new window resources.

    Process Access Control

    FHIR ActivityDefinitionopen in new window resources are used to announce what processes can be instantiated at a given DSF instance. These resources are used by the DSF to specify what profile the Taskopen in new window resource needs to conform to and what BPMN message name is used to correlate the appropriate start or intermediate event within the BPMN model. The ActivityDefinitionopen in new window also defines what kind of organization can request the instantiation or continuation of a process instance and what kind of organization are allowed to fulfill the request.

    We will take a closer look as ActivityDefinitionopen in new window resources in Exercise 3 and Exercise 5.

    Exercise Tasks


    1. Add a log message to the HelloDic#doExecute method that logs the recipient organization identifier from the "leading" Task.
    2. Register the HelloDic class as a singleton bean in the TutorialConfig class.
    3. Set the HelloDic class as the service implementation of the appropriate service task within the hello-dic.bpmn process model.
    4. Modify the ActivityDefinition for the highmedorg_helloDic process to only allow local clients to instantiate the process via a helloDic message.

    Solution Verification


    Maven Build and Automated Tests

    Execute a maven build of the dsf-process-tutorial parent module via:

    mvn clean install -Pexercise-1
    +

    Verify that the build was successful and no test failures occurred.

    Process Execution and Manual Tests

    To verify the highmedorg_helloDic process can be executed successfully, we need to deploy it into a DSF instance and execute the process. The maven install build is configured to create a process jar file with all necessary resources and to copy the jar to the appropriate locations of the docker test setup.

    1. Start the DSF FHIR server for the Test_DIC organization in a console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-fhir
    +

    Verify the DSF FHIR server started successfully. You can access the webservice of the DSF FHIR server at https://dic/fhiropen in new window.
    The DSF FHIR server uses a server certificate that was generated during the first maven install build. To authenticate yourself to the server you can use the client certificate located at .../dsf-process-tutorial/test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12 (Password: password). Add the certificate and the generated Root CA to your browser certificate store.

    Caution: If you add the generated Root CA to your browsers certificate store as a trusted Root CA, make sure you are the only one with access to the private key at .../dsf-process-tutorial/test-data-generator/cert/ca/testca_private-key.pem.

    1. Start the DSF BPE server for the Test_DIC organization in a second console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-bpe
    +

    Verify the DSF BPE server started successfully and deployed the highmedorg_helloDic process. The DSF BPE server should print a message that the process was deployed. The DSF FHIR server should now have a new ActivityDefinition resource. Go to https://dic/fhir/ActivityDefinitionopen in new window to check if the expected resource was created by the BPE while deploying the process. The returned FHIR Bundle should contain a single ActivityDefinition. Also, go to https://dic/fhir/StructureDefinition?url=http://highmed.org/fhir/StructureDefinition/task-hello-dicopen in new window to check if the expected Task profile was created.

    1. Start the highmedorg_helloDic process by posting an appropriate FHIR Taskopen in new window resource to the DSF FHIR server:

    The Taskopen in new window resource is used to tell the DSF BPE server via the DSF FHIR server that a specific organization wants to start (or continue) one process instance at a specified organization. The needed Taskopen in new window resource can be generated and posted to the DSF FHIR server by executing the main method of the org.highmed.dsf.process.tutorial.TutorialExampleStarter class. For the TutorialExampleStarter to work the location of the client certificate and its password need to be specified:

    • Either specify the location and password via program arguments: 1. location of the client certificate (.../dsf-process-tutorial/test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12), 2. password for the client certificate (password)
    • Or set the environment variables DSF_CLIENT_CERTIFICATE_PATH and DSF_CLIENT_CERTIFICATE_PASSWORD with the appropriate values.

    Verify that the FHIR Taskopen in new window resource could be created at the DSF FHIR server. The TutorialExampleStarter class should print a message HTTP 201: Created showing that the Taskopen in new window resource was created.

    Verify that the highmedorg_helloDic process was executed by the DSF BPE server. The BPE server should print a message showing that the process was started, print the log message you added to the HelloDic class and end with a message showing that the process finished.

    Continue with Exercise 1.1.


    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    Last update:
    + + + diff --git a/oldstable/tutorial/exercise11-processDebugging.html b/oldstable/tutorial/exercise11-processDebugging.html new file mode 100644 index 000000000..d4de644a6 --- /dev/null +++ b/oldstable/tutorial/exercise11-processDebugging.html @@ -0,0 +1,42 @@ + + + + + + + + + + Exercise 1.1 - Process Debugging + + + + + +
    Skip to main content

    Exercise 1.1 - Process Debugging

    DSF-TeamAbout 1 min

    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    Exercise 1.1 - Process Debugging

    This exercise looks at how to use the Java debugger of your IDE to remote debug the execution of a process plugin.

    Introduction


    The DSF FHIR server and the DSF BPE server applications are written in Java and as such are execute on a headless JRE 11 within their docker containers. Command line arguments can be passed to the JVM inside the ghcr.io/highmed/fhiropen in new window and ghcr.io/highmed/bpeopen in new window docker images by specifying the environment variable EXTRA_JVM_ARGS. This can be used for example to configure the minimum and maximum heap of the JVM; but can also be used to specify a remote debugging port, which we will use in this exercise.

    An EXTRA_JVM_ARGS environment variable is already configure for all DSF FHIR server and DSF BPE server docker containers in the tutorial docker-compose test setup. Take a look at the docker-compose.yml file to lookup the port numbers specified for the different DSF FHIR and DSF BPE servers.

    Exercise Tasks


    1. Start the DSF FHIR server for the Test_DIC organization in a console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-fhir
    +
    1. Start the DSF BPE server for the Test_DIC organization in second console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-bpe
    +
    1. Configure your Java IDE for remote debugging
    • Eclipse:
      Eclipse

    • IntelliJ:
      IntelliJ

    1. Create a debug breakpoint in the first line of the HelloDic class doExecute method.

    2. Start your previously defined remote Java debugger in your IDE.

    3. Execute the TutorialExampleStarter class to start highmed_helloDic process.

    4. User your IDE's debugger to step thru the code of the HelloDic class doExecute method.

    Continue with Exercise 2.


    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    Last update:
    + + + diff --git a/oldstable/tutorial/exercise2-inputParameters.html b/oldstable/tutorial/exercise2-inputParameters.html new file mode 100644 index 000000000..ebd9b1409 --- /dev/null +++ b/oldstable/tutorial/exercise2-inputParameters.html @@ -0,0 +1,49 @@ + + + + + + + + + + Exercise 2 - Input Parameters + + + + + +
    Skip to main content

    Exercise 2 - Input Parameters

    DSF-TeamAbout 5 min

    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    Exercise 2 - Input Parameters

    In order to configure processes that are packaged as process plugins, we will take a look at two possibilities on how to pass parameters to a process. The goal of this exercise is to enhance the highmedorg_helloDic process by trying them both.

    Introduction


    DSF process plugins can be configured with input parameters using two different approaches:

    • Static configuration using environment variables during the deployment of a process plugin.
    • Dynamic configuration by sending values as part of the Taskopen in new window resource to start or continue a process instance.

    Environment Variables

    Environment variables are the same for all running process instances and allow static configuration of processes. They can be defined by adding a member variable having the Spring-Framework @Valueopen in new window annotation to the configuration class TutorialConfig. The value of the annotation uses the ${..} notation and follows the form ${some.property:defaultValue}, where each dot in the property name corresponds to an underscore in the environment variable and environment variables are always written upper-case. The property some.property therefore corresponds to the environment variable SOME_PROPERTY.

    To create an automated documentation of environment variables during the Maven build process, the DSF provided @ProcessDocumentationopen in new window annotation from the package org.highmed.dsf.tools.generator can be used. The pom.xml of the tutorial-process submodule calls the DSF provided DocumentGeneratoropen in new window class from the same package during the prepare-package phase of the build process. The generator searches for all @ProcessDocumentationopen in new window annotations and generates a Markdown documentation based on the annotation's values in the target folder.

    Task Input Parameters

    Providing input parameters to a specific process instance allows for dynamic configuration of process instances. It can be done by sending additional values as part of the Taskopen in new window resource that starts or continues a process instance. It should be noted that a FHIR profile must be created for each Taskopen in new window resource, i.e. for each message event in a process model, which inherits from the DSF Task Base Profileopen in new window. This base profile defines three default input parameters:

    • message-name (mandatory 1..1): the name of the BPMN message event, same as in the BPMN model
    • business-key (optional 0..1): used to identify process instances
    • correlation-key(optional 0..1): used to identify multi-instance process instances used for messaging multiple targets

    A later exercise will examine these input parameters and their meaning in more detail.

    Since input parameters of Taskopen in new window resources are identified by predefined codes, they are defined via FHIR CodeSystemopen in new window and ValueSet resources. The BPMN-Message CodeSystemopen in new window and the BPMN-Message ValueSetopen in new window are used in the DSF Task Base Profileopen in new window to define the three default input parameters of Taskopen in new window resources.

    Version and Release-Date Placeholders

    To avoid the need to specify the version and release date for each CodeSystemopen in new window, StructureDefinition (Task profile)open in new window and ValueSetopen in new window resource, the placeholders #{version} and #{date} can be used. They are replaced with the values returned by the methods ProcessPluginDefinition#getVersion() and ProcessPluginDefinition#getReleaseDate() respectively during deployment of a process plugin by the DSF BPE server.

    Read Access Tag
    While writing FHIR resources on the DSF FHIR server is only allowed by the own organization (except Taskopen in new window), rules have to be defined for reading FHIR resources by external organizations (again except Taskopen in new window). The Resource.meta.tag field is used for this purpose. To allow read access for all organizations (the standard for metadata resources), the following read-access-tag value can be written into this field:

    <meta>
    +   <tag>
    +      <system value="http://highmed.org/fhir/CodeSystem/read-access-tag" />
    +      <code value="ALL" />
    +   </tag>
    +</meta>
    +

    The read access rules for Taskopen in new window resources are defined through the fields Task.requester and Task.restriction.recipient. Therefore, no read-access-tag is needed.

    It is also possible to restrict read access of FHIR resources to organizations with a specific role in a consortium or a specific identifier, but this is not covered in the tutorial.

    The write access rules for Taskopen in new window resources are defined through the ActivityDefinitionopen in new window resources belonging to the process. We will take a look at this in exercise 3 and exercise 5.

    Exercise Tasks


    1. Add an environment variable to enable/disable logging to the TutorialConfig class specify the default value as false.
    2. Inject the value of the environment variable in to HelloDic class, by modifying its constructor and using the new field of the TutorialConfig class.
    3. Use the value of the environment variable in the HelloDic class to decide whether the log message from exercise 1 should be printed.
    4. Adapt test-setup/docker-compose.yml by adding the new environment variable to the service dic-bpe and set the value to "true".
    5. Create a new CodeSystemopen in new window with url http://highmed.org/fhir/CodeSystem/tutorial having a concept with code tutorial-input.
    6. Create a new ValueSetopen in new window with url http://highmed.org/fhir/ValueSet/tutorial that includes all concepts from the CodeSystemopen in new window.
    7. Add the new CodeSystemopen in new window and ValueSet resources to the highmedorg_helloDic process in the TutorialProcessPluginDefinition class.
    8. Add a new input parameter of type string to the task-hello-dic.xml Taskopen in new window profile using the concept of the new CodeSystemopen in new window as a fixed coding.
    9. Read the new input parameter in the HelloDic class from the "leading" Taskopen in new window and add the value to the log message from exercise 1.
    10. Adapt the starter class TutorialExampleStarter by adding the new input parameter with an arbitrary string.

    Solution Verification


    Maven Build and Automated Tests

    Execute a maven build of the dsf-process-tutorial parent module via:

    mvn clean install -Pexercise-2
    +

    Verify that the build was successful and no test failures occurred.

    Process Execution and Manual Tests

    To verify the highmedorg_helloDic process can be executed successfully, we need to deploy it into a DSF instance and execute the process. The maven install build is configured to create a process jar file with all necessary resources and copy the jar to the appropriate locations of the docker test setup.

    1. Start the DSF FHIR server for the Test_DIC organization in a console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-fhir
    +

    Verify the DSF FHIR server started successfully.

    1. Start the DSF BPE server for the Test_DIC organization in second console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-bpe
    +

    Verify the DSF BPE server started successfully and deployed the highmedorg_helloDic process.

    1. Start the highmedorg_helloDic process by posting an appropriate FHIR Taskopen in new window resource to the DSF FHIR server of the Test_DIC organization: Execute the main method of the org.highmed.dsf.process.tutorial.TutorialExampleStarter class as in exercise 1 to create the Taskopen in new window resource needed to start the highmedorg_helloDic process.

    Verify that the highmedorg_helloDic process was executed by the DSF BPE server. The BPE server should:

    • Print a message showing that the process was started.
    • If logging is enabled - print the log message and the value of the input parameter you added to the HelloDic implementation.
    • Print a message showing that the process finished.

    Check that you can disable logging of you message by modifying the docker-compose.yml file and configuring your environment variable with the value "false" or removing the environment variable.
    Note: Changes to environment variable require recreating the docker container.

    Also check that modification to the Taskopen in new window input parameter specified in the TutorialExampleStarter class, have the appropriate effect on your log message.

    Continue with Exercise 3.


    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    Last update:
    + + + diff --git a/oldstable/tutorial/exercise3-messageEvents.html b/oldstable/tutorial/exercise3-messageEvents.html new file mode 100644 index 000000000..fa38eaee3 --- /dev/null +++ b/oldstable/tutorial/exercise3-messageEvents.html @@ -0,0 +1,80 @@ + + + + + + + + + + Exercise 3 - Message Events + + + + + +
    Skip to main content

    Exercise 3 - Message Events

    DSF-TeamAbout 6 min

    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    Exercise 3 - Message Events

    Communication between organizations is modeled using message flow in BPMN processes. The third exercise shows how a process at one organization can trigger a process at another organization.

    To demonstrate communication between two organizations we will configure message flow between the processes highmedorg_helloDic and highmedorg_helloCos. The processes are then to be executed at the organizations Test_DIC and Test_COS respectively in the docker test setup, with the former triggering execution of the latter by automatically sending a Taskopen in new window from organization Test_DIC to organization Test_COS.

    Introduction


    Message Flow and FHIR Task resources

    BPMN processes are instantiated and started within the DSF by creating a matching FHIR Taskopen in new window resource in the DSF FHIR server. This is true for executing a process on the local DSF BPE server by manually creating a Taskopen in new window resource, but also works by creating and starting a process instance at a remote DSF BPE server from an executing process automatically.

    In order to exchange information between different processes, for example at two different organizations, BPMN message flow is used. Typically represented by a dashed line arrow between elements with black (send) and white (receive) envelop icons. The following BPMN collaboration diagram shows two processes. The process at "Organization 1" is sending a message to "Organization 2" which results in the instantiation and execution of new process instance at the second organization.

    Message Flow
    Message Flow

    Every time message flow is used in a BPMN process for the DSF, a corresponding FHIR Taskopen in new window profile needs to be specified for every interaction. This profile specifies which process should be started or continued and what the message name is when correlating the appropriate Message Start Eventopen in new window or Intermediate Message Catch Eventopen in new window. A Business Key and a Correlation Key are specified if different process instances need to be linked to a single execution, for example to be able to send a message back.

    BPMN Process Definition Key vs. FHIR Task.instantiatesUri and ActivityDefinition.url / version

    FHIR ActivityDefinition resources are used to announce what processes can be instantiated at a given DSF instance. They also control what kind of organization can request the instantiation or continuation of a process instance and what kind of organization is allowed to fulfill the request.

    In order to link the FHIR and BPMN worlds the BPMN process definition key needs to be specified following the pattern ^[-a-zA-Z0-9]+_[-a-zA-Z0-9]+$ for example:

    domainorg_processKey
    +

    In addition the BPM process needs to specify a process version with the pattern ^\d+.\d+.\d+$ for example:

    1.0.0
    +

    This results in a canonical URL used to identify the process, for example:

    http://domain.org/bpe/Process/processKey/1.0.0
    +

    The canonical URL is used for Task.instantiatesUriopen in new window and ActivityDefinition.url / versionopen in new window.

    ActivityDefinitions for the DSF

    FHIR ActivityDefinitionopen in new window resources are used to announce what processes can be instantiated at a given DSF instance and contain the authorization rules for the specified process. ActivityDefinitionopen in new window for the DSF need to comply with the http://highmed.org/fhir/StructureDefinition/activity-definitionopen in new window profile, with authorization rules configured using the http://highmed.org/fhir/StructureDefinition/extension-process-authorizationopen in new window extension.

    The authorization extension needs to be configured at least once and has four sub extensions:

    message-name [1..1]

    String value specifying the message name of Message Start Eventopen in new window, Intermediate Message Catch Eventopen in new window or Message Receive Taskopen in new window this authorization rule should match. Can only be specified once per authorization rule extension.

    task-profile [1..1]

    Canonical URL value specifying the Taskopen in new window profile this authorization rule should match. Can only be specified once per authorization rule extension.

    requester [1..]

    Coding value matching entries from the http://highmed.org/fhir/ValueSet/process-authorization-requesteropen in new window ValueSet:

    recipient [1..]

    Coding value matching entries from the http://highmed.org/fhir/ValueSet/process-authorization-recipientopen in new window ValueSet.

    The local organization of a DSF instance is configured using the environment variables ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUEopen in new window for the DSF FHIR server and ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUEopen in new window for the DSF BPE server.

    Authorization Extension Example

    The following example specifies that process execution can only be requested by a organization with a specific identifier and only allows execution of the process in the DSF instance of an organization with a specific identifier.

    <extension url="http://highmed.org/fhir/StructureDefinition/extension-process-authorization">
    +	<extension url="message-name">
    +		<valueString value="some-message-name" />
    +	</extension>
    +	<extension url="task-profile">
    +		<valueCanonical value="http://foo.org/fhir/StructureDefinition/profile|#{version}" />
    +	</extension>
    +	<extension url="requester">
    +		<valueCoding>
    +			<extension url="http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization">
    +				<valueIdentifier>
    +					<system value="http://highmed.org/sid/organization-identifier" />
    +					<value value="identifier.remote.org" />
    +				</valueIdentifier>
    +			</extension>
    +			<system value="http://highmed.org/fhir/CodeSystem/process-authorization" />
    +			<code value="REMOTE_ORGANIZATION" />
    +		</valueCoding>
    +	</extension>
    +	<extension url="recipient">
    +		<valueCoding>
    +			<extension url="http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization">
    +				<valueIdentifier>
    +					<system value="http://highmed.org/sid/organization-identifier" />
    +					<value value="identifier.local.org" />
    +				</valueIdentifier>
    +			</extension>
    +			<system value="http://highmed.org/fhir/CodeSystem/process-authorization" />
    +			<code value="LOCAL_ORGANIZATION" />
    +		</valueCoding>
    +	</extension>
    +</extension>
    +

    Exercise Tasks


    1. Modify the highmedorg_helloDic process in the hello-dic.bpmn file and replace the End Eventopen in new window with a Message End Eventopen in new window. Configure input parameters instantiatesUri, profile and messageName in the BPMN model for the Message End Eventopen in new window. Set the message name of the Message End Eventopen in new window and configure it to be executed using the HelloCosMessage class.
      Use http://highmed.org/fhir/StructureDefinition/task-hello-cos|#{version}open in new window as the profile and helloCos as the message name. Figure out what the appropriate instantiatesUri value is, based on the name (process definition key) of the process to be triggered.
    2. Modify the highmedorg_helloCos process in the hello-cos.bpmn file and configure the message name of the Message Start Eventopen in new window with the same value as the message name of the Message End Eventopen in new window in the highmedorg_helloDic process.
    3. Create a new StructureDefinitionopen in new window with a Taskopen in new window profile for the helloCos message.
    4. Create a new ActivityDefinitionopen in new window resource for the highmedorg_helloCos process and configure the authorization extension to allow the Test_DIC organization as the requester and the Test_COS organization as the recipient.
    5. Add the highmedorg_helloCos process and its resources to the TutorialProcessPluginDefinition class.
    6. Modify HelloDic service class to set the target process variable for the Test_COS organization.
    7. Configure the HelloCosMessage class as a spring in the TutorialConfig class.

    Solution Verification


    Maven Build and Automated Tests

    Execute a maven build of the dsf-process-tutorial parent module via:

    mvn clean install -Pexercise-3
    +

    Verify that the build was successful and no test failures occurred.

    Process Execution and Manual Tests

    To verify the highmedorg_helloDic and highmedorg_helloCos processes can be executed successfully, we need to deploy them into DSF instances and execute the highmedorg_helloDic process. The maven install build is configured to create a process jar file with all necessary resources and copy the jar to the appropriate locations of the docker test setup.

    1. Start the DSF FHIR server for the Test_DIC organization in a console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-fhir
    +

    Verify the DSF FHIR server started successfully.

    1. Start the DSF BPE server for the Test_DIC organization in another console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-bpe
    +

    Verify the DSF BPE server started successfully and deployed the highmedorg_helloDic process.

    1. Start the DSF FHIR server for the Test_COS organization in a console at location .../dsf-process-tutorial/test-setup:
    docker-compose up cos-fhir
    +

    Verify the DSF FHIR server started successfully. You can access the webservice of the DSF FHIR server at https://cos/fhiropen in new window.
    The DSF FHIR server uses a server certificate that was generated during the first maven build. To authenticate yourself to the server you can use the client certificate located at .../dsf-process-tutorial/test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12 (Password: password).

    1. Start the DSF BPE server for the Test_COS organization in another console at location .../dsf-process-tutorial/test-setup:
    docker-compose up cos-bpe
    +

    Verify the DSF BPE server started successfully and deployed the highmedorg_helloCos process. The DSF BPE server should print a message that the process was deployed. The DSF FHIR server should now have a new ActivityDefinitionopen in new window resource. Go to https://cos/fhir/ActivityDefinitionopen in new window to check if the expected resource was created by the BPE while deploying the process. The returned FHIR Bundleopen in new window should contain two ActivityDefinitionopen in new window resources. Also, go to https://cos/fhir/StructureDefinition?url=http://highmed.org/fhir/StructureDefinition/task-hello-cosopen in new window to check if the expected Taskopen in new window profile was created.

    1. Start the highmedorg_helloDic process by posting a specific FHIR Taskopen in new window resource to the DSF FHIR server of the Test_DIC organization: Execute therefore the main method of the org.highmed.dsf.process.tutorial.TutorialExampleStarter class to create the Task resource needed to start the highmedorg_helloDic process.

    Verify that the FHIR Taskopen in new window resource was created at the DSF FHIR server and the highmedorg_helloDic process was executed by the DSF BPE server of the Test_DIC organization. The DSF BPE server of the Test_DIC organization should print a message showing that a Taskopen in new window resource to start the highmedorg_helloCos process was send to the Test_COS organization.
    Verify that a FHIR Taskopen in new window resource was created at the DSF FHIR server of the Test_COS organization and the highmedorg_helloCos process was then executed by the DSF BPE server of the Test_COS organization.

    Continue with exercise 4.


    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    Last update:
    + + + diff --git a/oldstable/tutorial/exercise4-exclusiveGateways.html b/oldstable/tutorial/exercise4-exclusiveGateways.html new file mode 100644 index 000000000..419c8e37b --- /dev/null +++ b/oldstable/tutorial/exercise4-exclusiveGateways.html @@ -0,0 +1,48 @@ + + + + + + + + + + Exercise 4 - Exclusive Gateways + + + + + +
    Skip to main content

    Exercise 4 - Exclusive Gateways

    DSF-TeamAbout 2 min

    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    Exercise 4 - Exclusive Gateways

    Different execution paths in a process based on the state of process variables can be achieved using Exclusive Gateways. In Exercise 4 we will examine how this can be implemented by modifying the highmedorg_helloDic process.

    Introduction


    Exclusive Gateways

    Different sequence flows during the execution of a process instance can be modeled using BPMN Exclusive Gatewaysopen in new window. For each outgoing sequence flow of the gateway, a BPMN Condition Expressionopen in new window can be added to the process model, deciding whether a sequence flow should be followed. Thereby, all condition decisions must be in an XOR relationship to each other.

    Condition Expressions

    A BPMN Condition Expressionopen in new window uses the ${..} notation. Within the curly braces all execution variables of a process instance can be accessed, e.g. the ones that were stored in a previous Java implementation of a BPMN ServiceTaskopen in new window. For example, the BPMN Condition Expressionopen in new window ${cohortSize > 100} checks whether the value in the execution variable cohortSize is greater than 100.

    Storing / Modifying Process Variables

    Via the DelegateExecution execution parameter of the doExecute method of a class extending AbstractServiceDelegate, we can write and read process variables of the current process instance. The following code listing show how to write and read a boolean variable:

    {
    +	execution.setVariable("variable-name", Variables.booleanValue(false));
    +	boolean variable = (boolean) execution.getVariable("variable-name");
    +}
    +

    For more details on process variables see the Camunda documentationopen in new window.

    Exercise Tasks


    1. In the HelloDic class, write an algorithm deciding based on the "leading" Task's input parameter tutorial-input, whether the highmedorg_helloCos process should be started.
    2. Add a boolean variable to the process instance execution variables storing the decision.
    3. Add an exclusive gateway to the highmedorg_helloDic process model and two outgoing sequence flows - the first starting process highmedorg_helloDic, the second stopping process highmedorg_helloDic without starting process highmedorg_helloCos.
    4. Add a condition expressions to each outgoing sequence flow based on the previously stored execution variable.

    Solution Verification


    Maven Build and Automated Tests

    Execute a maven build of the dsf-process-tutorial parent module via:

    mvn clean install -Pexercise-4
    +

    Verify that the build was successful and no test failures occurred.

    Process Execution and Manual Tests

    To verify the highmedorg_helloDic and highmedorg_helloCos processes can be executed successfully, we need to deploy them into DSF instances and execute the highmedorg_helloDic process. The maven install build is configured to create a process jar file with all necessary resources and copy the jar to the appropriate locations of the docker test setup.

    1. Start the DSF FHIR server for the Test_DIC organization in a console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-fhir
    +

    Verify the DSF FHIR server started successfully.

    1. Start the DSF BPE server for the Test_DIC organization in a second console at location .../dsf-process-tutorial/test-setup:
    docker-compose up cos-fhir
    +

    Verify the DSF FHIR server started successfully.

    1. Start the DSF BPE server for the Test_COS organization in a fourth console at location .../dsf-process-tutorial/test-setup:
    docker-compose up cos-bpe
    +

    Verify the DSF BPE server started successfully and deployed the highmedorg_helloCos process.

    1. Start the highmedorg_helloDic process by posting a specific FHIR Taskopen in new window resource to the DSF FHIR server of the Test_DIC organization: Execute therefore the main method of the org.highmed.dsf.process.tutorial.TutorialExampleStarter class to create the Taskopen in new window resource needed to start the highmedorg_helloDic process.

    Verify that the highmedorg_helloDic process was executed successfully by the Test_DIC DSF BPE server and possibly the highmedorg_helloCos process by the Test_COS DSF BPE server, depending on whether decision of your algorithm based on the input parameter allowed to start the highmedorg_helloDic process.

    Continue with exercise 5


    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    Last update:
    + + + diff --git a/oldstable/tutorial/exercise5-eventBasedGateways.html b/oldstable/tutorial/exercise5-eventBasedGateways.html new file mode 100644 index 000000000..637f1e4c4 --- /dev/null +++ b/oldstable/tutorial/exercise5-eventBasedGateways.html @@ -0,0 +1,95 @@ + + + + + + + + + + Exercise 5 - Event Based Gateways and Intermediate Events + + + + + +
    Skip to main content

    Exercise 5 - Event Based Gateways and Intermediate Events

    DSF-TeamAbout 7 min

    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    Exercise 5 - Event Based Gateways and Intermediate Events

    In the final exercise we will look at message flow between three organizations as well as how to continue a waiting process if no return message arrives. With this exercise we will add a third process and complete a message loop from Test_DIC to Test_COR to Test_HRP back to Test_DIC.

    Introduction


    Managing Multiple- and Missing Messages

    If an existing and started process instance is waiting for a message from another organization, the corresponding FHIR Taskopen in new window may never arrive. Either because the other organization decides to never send the "message" or because some technical problem prohibits the Taskopen in new window resource from being posted to the DSF FHIR server. This would result in stale process instances that never finish.

    In order to solve this problem we can add an Event Based Gatewayopen in new window to the process waiting for a response and then either handle a Taskopen in new window resource with the response and finish the process in a success state or fire of an Intermediate Timer Catch Eventopen in new window after a defined wait period and finish the process in an error state. The following BPMN collaboration diagram shows how the process at the first organization would look like if two different message or no message could be received:

    Timer Events

    For Timer Eventsopen in new window the duration until the timer fires is specified using the ISO 8601 Durationsopen in new window format. Examples can be found in the Camunda 7 documentationopen in new window.

    Matching Process Instances With Business Keys

    In the example above the first organization is sending a "message" to the second and waiting for a reply. In order to correlate the return message with the waiting process instance, a unique identifier needs to be exchanged between both process instances. Within the DSF this is implemented using the process instance business-key and a corresponding Task.inputopen in new window parameter. For 1:1 communication relationships this is handled by the DSF BPE servers automatically, but the corresponding Taskopen in new window profiles need to define the business-key input parameter as mandatory.

    If multiple message are send in a 1:n relationship with a n:1 return an additional correlation-key needs to be configured in order to correlate every bidirectional communication between two DSF instances.

    ActivityDefinitions for the DSF

    FHIR ActivityDefinitionopen in new window resources are used to announce what processes can be instantiated at a given DSF instance and contain the authorization rules for the specified process. ActivityDefinitionopen in new window for the DSF need to comply with the http://highmed.org/fhir/StructureDefinition/activity-definitionopen in new window profile, with authorization rules configured using the http://highmed.org/fhir/StructureDefinition/extension-process-authorizationopen in new window extension.

    The authorization extension needs to be configured at least once and has four sub extensions:

    message-name [1..1]

    String value specifying the message name of Message Start Eventopen in new window, Intermediate Message Catch Eventopen in new window or Message Receive Taskopen in new window this authorization rule should match. Can only be specified once per authorization rule extension.

    task-profile [1..1]

    Canonical URL value specifying the Taskopen in new window profile this authorization rule should match. Can only be specified once per authorization rule extension.

    requester [1..]

    Coding value matching entries from the http://highmed.org/fhir/ValueSet/process-authorization-requesteropen in new window ValueSet:

    recipient [1..]

    Coding value matching entries from the http://highmed.org/fhir/ValueSet/process-authorization-recipientopen in new window ValueSet.

    The local organization of a DSF instance is configured using the environment variables ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUEopen in new window for the DSF FHIR server and ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUEopen in new window for the DSF BPE server.

    Authorization Extension Example

    The following example specifies that process execution can only be requested by a organization with a specific identifier and only allows execution of the process in the DSF instance of an organization with a specific identifier.

    <extension url="http://highmed.org/fhir/StructureDefinition/extension-process-authorization">
    +	<extension url="message-name">
    +		<valueString value="some-message-name" />
    +	</extension>
    +	<extension url="task-profile">
    +		<valueCanonical value="http://foo.org/fhir/StructureDefinition/profile|#{version}" />
    +	</extension>
    +	<extension url="requester">
    +		<valueCoding>
    +			<extension url="http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role">
    +				<extension url="consortium">
    +					<valueIdentifier>
    +						<system value="http://highmed.org/sid/organization-identifier" />
    +						<value value="identifier.consortium.org" />
    +					</valueIdentifier>
    +				</extension>
    +				<extension url="role">
    +					<valueCoding>
    +						<system value="http://highmed.org/fhir/CodeSystem/organization-role" />
    +						<code value="SOME_ROLE" />
    +					</valueCoding>
    +				</extension>
    +			</extension>
    +			<system value="http://highmed.org/fhir/CodeSystem/process-authorization" />
    +			<code value="REMOTE_ROLE" />
    +		</valueCoding>
    +	</extension>
    +	<extension url="recipient">
    +		<valueCoding>
    +			<extension url="http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role">
    +				<extension url="consortium">
    +					<valueIdentifier>
    +						<system value="http://highmed.org/sid/organization-identifier" />
    +						<value value="identifier.consortium.org" />
    +					</valueIdentifier>
    +				</extension>
    +				<extension url="role">
    +					<valueCoding>
    +						<system value="http://highmed.org/fhir/CodeSystem/organization-role" />
    +						<code value="SOME_ROLE" />
    +					</valueCoding>
    +				</extension>
    +			</extension>
    +			<system value="http://highmed.org/fhir/CodeSystem/process-authorization" />
    +			<code value="LOCAL_ROLE" />
    +		</valueCoding>
    +	</extension>
    +</extension>
    +

    Exercise Tasks


    1. Modify the HelloCosMessage and use the value from the Task.inputopen in new window parameter of the helloDic Taskopen in new window to send it to the highmedorg_helloCos process via a Task.inputopen in new window parameter in the helloCos Task. Override the getAdditionalInputParameters to configure a Task.inputopen in new window parameter to be send.
    2. Modify the highmedorg_helloCos process to use a Message End Eventopen in new window to trigger the process in file hello-hrp.bpmn. Figure out the values for the instantiatesUri, profile and messageName input parameters of the Message End Eventopen in new window based on the AcitvityDefinitionopen in new window in file hello-hrp.xml.
    3. Modify the highmedorg_helloDic process:
    4. Modify the process in file hello-hrp.bpmn and set the process definition key and version. Figure out the appropriate values based on the AcitvityDefinitionopen in new window in file hello-hrp.xml.
    5. Add the process in file hello-hrp.bpmn to the TutorialProcessPluginDefinition and configure the FHIR resources needed for the three processes.
    6. Add the HelloCos, HelloHrpMessage , HelloHrp and GoodbyeDicMessage classes as spring beans.

    Solution Verification


    Maven Build and Automated Tests

    Execute a maven build of the dsf-process-tutorial parent module via:

    mvn clean install -Pexercise-5
    +

    Verify that the build was successful and no test failures occurred.

    Process Execution and Manual Tests

    To verify the highmedorg_helloDic, highmedorg_helloCos and highmedorg_helloHrp processes can be executed successfully, we need to deploy them into DSF instances and execute the highmedorg_helloDic process. The maven install build is configured to create a process jar file with all necessary resources and copy the jar to the appropriate locations of the docker test setup.

    1. Start the DSF FHIR server for the Test_DIC organization in a console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-fhir
    +

    Verify the DSF FHIR server started successfully.

    1. Start the DSF BPE server for the Test_DIC organization in a second console at location .../dsf-process-tutorial/test-setup:
    docker-compose up dic-bpe
    +

    Verify the DSF BPE server started successfully and deployed the highmedorg_helloDic process.

    1. Start the DSF FHIR server for the Test_COS organization in a third console at location .../dsf-process-tutorial/test-setup:
    docker-compose up cos-fhir
    +

    Verify the DSF FHIR server started successfully.

    1. Start the DSF BPE server for the Test_COS organization in a fourth console at location .../dsf-process-tutorial/test-setup:
    docker-compose up cos-bpe
    +

    Verify the DSF BPE server started successfully and deployed the highmedorg_helloDic process.

    1. Start the DSF FHIR server for the Test_HRP organization in a fifth at location .../dsf-process-tutorial/test-setup:
    docker-compose up hrp-fhir
    +

    Verify the DSF FHIR server started successfully. You can access the webservice of the DSF FHIR server at https://hrp/fhiropen in new window.
    The DSF FHIR server uses a server certificate that was generated during the first maven build. To authenticate yourself to the server you can use the client certificate located at .../dsf-process-tutorial/test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12 (Password: password).

    1. Start the DSF BPE server for the Test_HRP organization in a sixth console at location .../dsf-process-tutorial/test-setup:
    docker-compose up hrp-bpe
    +

    Verify the DSF BPE server started successfully and deployed the highmedorg_helloHrp process. The DSF BPE server should print a message that the process was deployed. The DSF FHIR server should now have a new ActivityDefinitionopen in new window resource. Go to https://hrp/fhir/ActivityDefinitionopen in new window to check if the expected resource was created by the BPE while deploying the process. The returned FHIR Bundleopen in new window should contain a three ActivityDefinitionopen in new window resources. Also, go to https://hrp/fhir/StructureDefinition?url=http://highmed.org/fhir/StructureDefinition/task-hello-hrpopen in new window to check if the expected Taskopen in new window profile was created.

    1. Start the highmedorg_helloDic process by posting a specific FHIR Taskopen in new window resource to the DSF FHIR server of the Test_DIC organization: Execute therefore the main method of the org.highmed.dsf.process.tutorial.TutorialExampleStarter class to create the Taskopen in new window resource needed to start the highmedorg_helloDic process.

    Verify that the FHIR Taskopen in new window resource was created at the DSF FHIR server and the highmedorg_helloDic process was executed by the DSF BPE server of the Test_DIC organization. The DSF BPE server of the Test_DIC organization should print a message showing that a Taskopen in new window resource to start the highmedorg_helloCos process was sent to the Test_COS organization.
    Verify that a FHIR Taskopen in new window resource was created at the DSF FHIR server of the Test_COS organization and the highmedorg_helloCos process was executed by the DSF BPE server of the Test_COS organization. The DSF BPE server of the Test_COS organization should print a message showing that a Taskopen in new window resource to start the highmedorg_helloHrp process was send to the Test_HRP organization.

    Based on the value of the Task.input parameter you send, the highmedorg_helloHrp process will either send a goodbyDic message to the Test_DIC organization or finish without sending a message.

    To trigger the goodbyDic message, use send-response as the http://highmed.org/fhir/CodeSystem/tutorial#tutorial-input input parameter.

    Verify that the highmedorg_helloDic process either finishes with the arrival of the goodbyDic message or after waiting for two minutes.


    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    Last update:
    + + + diff --git a/oldstable/tutorial/index.html b/oldstable/tutorial/index.html new file mode 100644 index 000000000..eba4fc4fe --- /dev/null +++ b/oldstable/tutorial/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF Process Plugin Tutorial + + + + + +
    Skip to main content

    DSF Process Plugin Tutorial

    DSF-TeamAbout 2 min

    Implementing BPMN Processes as DSF Process-Plugins

    This repositoryopen in new window contains exercises to learn how to implement process plugins for the Data Sharing Framework (DSF)open in new window. The tutorial is divided into several exercises that build on each other. For each exercise, a sample solution is provided in a separate branch.
    This tutorial was first executed at the GMDS / TMF 2022open in new window conference. A recording of the opening remarks by H. Hund and R. Wettstein can be found on YouTubeopen in new window. The slides of the opening remarks are available as a PDF downloadopen in new window.

    Prerequisites


    In order to be able to solve the exercises described in this tutorial a software development environment with git, Java 11, Maven 3.8, Docker, docker-compose, a Java IDE like Eclipse or IntelliJ, a BPMN Editor like the Camunda Modeler and a minimum 16GB of RAM is needed. For more details see the detailed prerequisites document.

    Exercise 1 - Simple Process


    The first exercise focuses on setting up the testing environment used in this tutorial and shows how to implement and execute a simple BPMN process. For more details see the exercise 1 description.

    Exercise 1.1 - Process Debugging


    Exercise 1.1 looks at how to use the Java debugger of your IDE to remote debug the execution of a process plugin. For more details see the exercise 1.1 description.

    Exercise 2 - Input Parameters


    In order to configure processes that are packaged as process plugins, we will take a look at two possibilities on how to pass parameters to a process. For more details see the exercise 2 description.

    Exercise 3 - Message Events


    Communication between organizations is modeled using message flow in BPMN processes. The third exercise shows how a process at one organization can trigger a process at another organization. For more details see the exercise 3 description.

    Exercise 4 - Exclusive Gateways


    Different execution paths in a process based on the state of process variables can be achieved using Exclusive Gateways. In Exercise 4 we will examine how this can be implemented. For more details see the exercise 4 description.

    Exercise 5 - Event Based Gateways and Intermediate Events


    In the final exercise we will look at message flow between three organizations as well as how to continue a waiting process if no return message arrives. For more details see the exercise 5 description.


    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    Last update:
    + + + diff --git a/oldstable/tutorial/prerequisites.html b/oldstable/tutorial/prerequisites.html new file mode 100644 index 000000000..93bd20d4e --- /dev/null +++ b/oldstable/tutorial/prerequisites.html @@ -0,0 +1,58 @@ + + + + + + + + + + Prerequisites + + + + + +
    Skip to main content

    Prerequisites

    DSF-TeamAbout 2 min

    In order to be able to solve the exercises described in this tutorial a software development environment with git, Java 11, Maven 3.8, Docker, docker-compose, a Java IDE like Eclipse or IntelliJ, a BPMN Editor like the Camunda Modeler a and minimum 16GB of RAM is needed.

    git


    gitopen in new window is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

    Java 11


    Processes for the DSF are written using the Javaopen in new window programming language in version 11. Various open source releases of the Java Developer Kit (JDK) 11 exist, you are free in your choice.

    Maven 3.8


    When implementing DSF processes, we use Maven 3.8 to manage the software project's build, reporting and documentation workflow.

    GitHub Packages

    In order to download DSF packages from the GitHub Package Registry using Maven you need a personal GitHub access token with scope read:packages. This GitHub documentationopen in new window shows you how to generate one.

    After that, add the following server configuration to your local .m2/settings.xml. Replace USERNAME with your GitHub username and TOKEN with the previously generated personal GitHub access token. The token needs at least the read:packages scope.

    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    +  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
    +                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
    +
    +  ...
    +
    +  <servers>
    +    <server>
    +      <id>github</id>
    +      <username>USERNAME</username>
    +      <password>TOKEN</password>
    +    </server>
    +  </servers>
    +</settings>
    +

    Docker and docker-compose


    To be able to test the implemented processes, we use a test-setup based on Docker and docker-compose. This allows us to simulate multiple organizations with different roles and run the processes across "organizational boundaries".

    Host entries for test-setup

    The following entries are required in the hosts file of your computer so that the FHIR servers of the simulated organizations can be accessed in your web browser. On Linux and Mac this file is located at /etc/hosts. On Windows you can find it at C:\Windows\System32\drivers\etc\hosts

    127.0.0.1	dic
    +127.0.0.1	cos
    +127.0.0.1	hrp
    +

    Java IDE


    For the development of the processes we recommend the use of an IDE, e.g. Eclipse or IntelliJ:

    BPMN Editor


    To simplify modeling of BPMN processes, we recommend a graphical editor, e.g. the Camunda Modeler:

    Hardware


    The minimum hardware requirements to run all simulated organizations as part of the Docker test-setup is 16 GB of RAM.


    Prerequisites | Exercise 1 | Exercise 1.1 | Exercise 2 | Exercise 3 | Exercise 4 | Exercise 5

    Last update:
    + + + diff --git a/photos/guideline/generalInformation/highmed_dsf_network_setup.svg b/photos/guideline/generalInformation/highmed_dsf_network_setup.svg new file mode 100644 index 000000000..4fd39c049 --- /dev/null +++ b/photos/guideline/generalInformation/highmed_dsf_network_setup.svg @@ -0,0 +1,3254 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/photos/guideline/generalInformation/highmed_dsf_network_setup_ext_dmz.svg b/photos/guideline/generalInformation/highmed_dsf_network_setup_ext_dmz.svg new file mode 100644 index 000000000..be40e75e7 --- /dev/null +++ b/photos/guideline/generalInformation/highmed_dsf_network_setup_ext_dmz.svg @@ -0,0 +1,3490 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/photos/guideline/introduction/architecture-dark.svg b/photos/guideline/introduction/architecture-dark.svg new file mode 100644 index 000000000..6d02e2d47 --- /dev/null +++ b/photos/guideline/introduction/architecture-dark.svg @@ -0,0 +1,4 @@ + + + +
    FHIR Endpoint
    FHIR Endpoint
    Business Process Engine
    Business Process Engi...
    DMZ Network
    DMZ Network
    Internal Network
    Internal Network
    Firewall
    Firewall
    Text is not SVG - cannot display
    \ No newline at end of file diff --git a/photos/guideline/introduction/dsf_architecture.svg b/photos/guideline/introduction/dsf_architecture.svg new file mode 100644 index 000000000..8cec37a42 --- /dev/null +++ b/photos/guideline/introduction/dsf_architecture.svg @@ -0,0 +1,3 @@ + + +
    FHIR Endpoint
    FHIR Endpoint
    Business Process Engine
    Business Process Engi...
    DMZ Network
    DMZ Network
    Internal Network
    Internal Network
    Firewall
    Firewall
    Text is not SVG - cannot display
    \ No newline at end of file diff --git a/photos/guideline/tutorial/eclipse.png b/photos/guideline/tutorial/eclipse.png new file mode 100644 index 000000000..6be09fc29 Binary files /dev/null and b/photos/guideline/tutorial/eclipse.png differ diff --git a/photos/guideline/tutorial/ex3.png b/photos/guideline/tutorial/ex3.png new file mode 100644 index 000000000..6edcb2cfa Binary files /dev/null and b/photos/guideline/tutorial/ex3.png differ diff --git a/photos/guideline/tutorial/ex5.png b/photos/guideline/tutorial/ex5.png new file mode 100644 index 000000000..efc78928f Binary files /dev/null and b/photos/guideline/tutorial/ex5.png differ diff --git a/photos/guideline/tutorial/intelliJ.png b/photos/guideline/tutorial/intelliJ.png new file mode 100644 index 000000000..27c813b85 Binary files /dev/null and b/photos/guideline/tutorial/intelliJ.png differ diff --git a/photos/home/logo-small.svg b/photos/home/logo-small.svg new file mode 100644 index 000000000..fd1015a48 --- /dev/null +++ b/photos/home/logo-small.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/photos/home/logo.svg b/photos/home/logo.svg new file mode 100644 index 000000000..fa093d64f --- /dev/null +++ b/photos/home/logo.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/photos/info/allowList/allowList-architecture.png b/photos/info/allowList/allowList-architecture.png new file mode 100644 index 000000000..d1bf28984 Binary files /dev/null and b/photos/info/allowList/allowList-architecture.png differ diff --git a/photos/info/allowList/org-resource.png b/photos/info/allowList/org-resource.png new file mode 100644 index 000000000..0b9640049 Binary files /dev/null and b/photos/info/allowList/org-resource.png differ diff --git a/photos/info/architecture/architecture-dark.svg b/photos/info/architecture/architecture-dark.svg new file mode 100644 index 000000000..ee844249d --- /dev/null +++ b/photos/info/architecture/architecture-dark.svg @@ -0,0 +1,4 @@ + + + +
    https
    https
    https
    https
    wss
    wss
    wss
    wss
    https
    https
    https
    https
    BPE
    BPE
    FHIR
    FHIR
    wss
    wss
    https
    https
    https
    https
    https
    https
    BPE
    BPE
    https (HEAD)
    https (HEAD)
    FHIR
    FHIR
    https
    https
    https
    https
    wss
    wss
    https
    https
    https
    https
    BPE
    BPE
    FHIR
    FHIR
    Local Systems
    Local Sy...
    Local Systems
    Local Sy...
    Local Systems
    Local Sy...
    DMZ
    DMZ
    Intranet
    Intra...
    Text is not SVG - cannot display
    \ No newline at end of file diff --git a/photos/info/architecture/architecture.svg b/photos/info/architecture/architecture.svg new file mode 100644 index 000000000..f7149857e --- /dev/null +++ b/photos/info/architecture/architecture.svg @@ -0,0 +1,4 @@ + + + +
    https
    https
    https
    https
    wss
    wss
    wss
    wss
    https
    https
    https
    https
    BPE
    BPE
    FHIR
    FHIR
    wss
    wss
    https
    https
    https
    https
    https
    https
    BPE
    BPE
    https (HEAD)
    https (HEAD)
    FHIR
    FHIR
    https
    https
    https
    https
    wss
    wss
    https
    https
    https
    https
    BPE
    BPE
    FHIR
    FHIR
    Local Systems
    Local Sy...
    Local Systems
    Local Sy...
    Local Systems
    Local Sy...
    DMZ
    DMZ
    Intranet
    Intra...
    Text is not SVG - cannot display
    \ No newline at end of file diff --git a/photos/info/architecture/architecture1.png b/photos/info/architecture/architecture1.png new file mode 100644 index 000000000..c15499c4e Binary files /dev/null and b/photos/info/architecture/architecture1.png differ diff --git a/photos/info/architecture/bpe-dark.svg b/photos/info/architecture/bpe-dark.svg new file mode 100644 index 000000000..804b4bdd5 --- /dev/null +++ b/photos/info/architecture/bpe-dark.svg @@ -0,0 +1,4 @@ + + + +
    wss
    wss
    https
    https
    BPE
    BPE
    FHIR
    FHIR
    Local Systems
    Local Sy...
    DMZ
    DMZ
    Intranet
    Intra...
    Text is not SVG - cannot display
    \ No newline at end of file diff --git a/photos/info/architecture/bpe-light.svg b/photos/info/architecture/bpe-light.svg new file mode 100644 index 000000000..40cba11e8 --- /dev/null +++ b/photos/info/architecture/bpe-light.svg @@ -0,0 +1,4 @@ + + + +
    wss
    wss
    https
    https
    BPE
    BPE
    FHIR
    FHIR
    Local Systems
    Local Sy...
    DMZ
    DMZ
    Intranet
    Intra...
    Text is not SVG - cannot display
    \ No newline at end of file diff --git a/photos/info/architecture/fhir-server-dark.svg b/photos/info/architecture/fhir-server-dark.svg new file mode 100644 index 000000000..dd28565aa --- /dev/null +++ b/photos/info/architecture/fhir-server-dark.svg @@ -0,0 +1,4 @@ + + + +
    wss
    wss
    https
    https
    BPE
    BPE
    FHIR
    FHIR
    Local Systems
    Local Sy...
    DMZ
    DMZ
    Intranet
    Intra...
    Text is not SVG - cannot display
    \ No newline at end of file diff --git a/photos/info/architecture/fhir-server.svg b/photos/info/architecture/fhir-server.svg new file mode 100644 index 000000000..4d0aeb83d --- /dev/null +++ b/photos/info/architecture/fhir-server.svg @@ -0,0 +1,4 @@ + + + +
    wss
    wss
    https
    https
    BPE
    BPE
    FHIR
    FHIR
    Local Systems
    Local Sy...
    DMZ
    DMZ
    Intranet
    Intra...
    Text is not SVG - cannot display
    \ No newline at end of file diff --git a/photos/info/architecture/mesh.png b/photos/info/architecture/mesh.png new file mode 100644 index 000000000..96e5eeeec Binary files /dev/null and b/photos/info/architecture/mesh.png differ diff --git a/photos/info/architecture/star.png b/photos/info/architecture/star.png new file mode 100644 index 000000000..123c3218b Binary files /dev/null and b/photos/info/architecture/star.png differ diff --git a/photos/info/basics/bpmn1.png b/photos/info/basics/bpmn1.png new file mode 100644 index 000000000..a72b38b75 Binary files /dev/null and b/photos/info/basics/bpmn1.png differ diff --git a/photos/info/basics/bpmn2.png b/photos/info/basics/bpmn2.png new file mode 100644 index 000000000..50afecfe5 Binary files /dev/null and b/photos/info/basics/bpmn2.png differ diff --git a/photos/info/basics/interoperability.png b/photos/info/basics/interoperability.png new file mode 100644 index 000000000..4643733d6 Binary files /dev/null and b/photos/info/basics/interoperability.png differ diff --git a/photos/info/introduction/dic-structure.png b/photos/info/introduction/dic-structure.png new file mode 100644 index 000000000..eb4c6a8cb Binary files /dev/null and b/photos/info/introduction/dic-structure.png differ diff --git a/photos/info/introduction/dsf-concept.png b/photos/info/introduction/dsf-concept.png new file mode 100644 index 000000000..01f14cebc Binary files /dev/null and b/photos/info/introduction/dsf-concept.png differ diff --git a/photos/info/introduction/dsf-structure1.png b/photos/info/introduction/dsf-structure1.png new file mode 100644 index 000000000..8dbfda7e5 Binary files /dev/null and b/photos/info/introduction/dsf-structure1.png differ diff --git a/photos/info/plugins/bpmn-communicate.png b/photos/info/plugins/bpmn-communicate.png new file mode 100644 index 000000000..96d225b1c Binary files /dev/null and b/photos/info/plugins/bpmn-communicate.png differ diff --git a/photos/info/plugins/bpmn-event-based-gateway.png b/photos/info/plugins/bpmn-event-based-gateway.png new file mode 100644 index 000000000..d54e0f423 Binary files /dev/null and b/photos/info/plugins/bpmn-event-based-gateway.png differ diff --git a/photos/info/plugins/bpmn-example.png b/photos/info/plugins/bpmn-example.png new file mode 100644 index 000000000..fb98431ae Binary files /dev/null and b/photos/info/plugins/bpmn-example.png differ diff --git a/photos/info/plugins/bpmn-intermediate.png b/photos/info/plugins/bpmn-intermediate.png new file mode 100644 index 000000000..b8cf0a8ae Binary files /dev/null and b/photos/info/plugins/bpmn-intermediate.png differ diff --git a/photos/info/plugins/plugin.png b/photos/info/plugins/plugin.png new file mode 100644 index 000000000..6db966e35 Binary files /dev/null and b/photos/info/plugins/plugin.png differ diff --git a/photos/info/security/certificates-dark.svg b/photos/info/security/certificates-dark.svg new file mode 100644 index 000000000..1e4f49f3c --- /dev/null +++ b/photos/info/security/certificates-dark.svg @@ -0,0 +1,4 @@ + + + +
    wss
    wss
    https
    https
    BPE
    BPE
    FHIR
    FHIR
    Local Systems
    Local Sy...
    DMZ
    DMZ
    Intranet
    Intra...
    wss
    wss
    https
    https
    Local Systems
    Local Sy...
    DMZ
    DMZ
    Intranet
    Intra...
    FHIR
    FHIR
    BPE
    BPE
    Text is not SVG - cannot display
    \ No newline at end of file diff --git a/photos/info/security/certificates-light.svg b/photos/info/security/certificates-light.svg new file mode 100644 index 000000000..9ad1cb495 --- /dev/null +++ b/photos/info/security/certificates-light.svg @@ -0,0 +1,4 @@ + + + +
    wss
    wss
    https
    https
    BPE
    BPE
    FHIR
    FHIR
    Local Systems
    Local Sy...
    DMZ
    DMZ
    Intranet
    Intra...
    wss
    wss
    https
    https
    Local Systems
    Local Sy...
    DMZ
    DMZ
    Intranet
    Intra...
    FHIR
    FHIR
    BPE
    BPE
    Text is not SVG - cannot display
    \ No newline at end of file diff --git a/photos/info/security/certificates.png b/photos/info/security/certificates.png new file mode 100644 index 000000000..03d0507b3 Binary files /dev/null and b/photos/info/security/certificates.png differ diff --git a/photos/info/use-cases/ping-pong.png b/photos/info/use-cases/ping-pong.png new file mode 100644 index 000000000..167d4b3a5 Binary files /dev/null and b/photos/info/use-cases/ping-pong.png differ diff --git a/photos/learnmore/contact/email.png b/photos/learnmore/contact/email.png new file mode 100644 index 000000000..b7b3d6e2c Binary files /dev/null and b/photos/learnmore/contact/email.png differ diff --git a/photos/learnmore/contact/map.png b/photos/learnmore/contact/map.png new file mode 100644 index 000000000..3c60ed5ad Binary files /dev/null and b/photos/learnmore/contact/map.png differ diff --git a/photos/learnmore/contributors/fegeler.jpg b/photos/learnmore/contributors/fegeler.jpg new file mode 100644 index 000000000..12de5c6a1 Binary files /dev/null and b/photos/learnmore/contributors/fegeler.jpg differ diff --git a/photos/learnmore/contributors/hund.jpg b/photos/learnmore/contributors/hund.jpg new file mode 100644 index 000000000..77374d60c Binary files /dev/null and b/photos/learnmore/contributors/hund.jpg differ diff --git a/photos/learnmore/contributors/kiel.jpg b/photos/learnmore/contributors/kiel.jpg new file mode 100644 index 000000000..66dcb1a43 Binary files /dev/null and b/photos/learnmore/contributors/kiel.jpg differ diff --git a/photos/learnmore/contributors/kurscheidt.jpg b/photos/learnmore/contributors/kurscheidt.jpg new file mode 100644 index 000000000..b53042cf6 Binary files /dev/null and b/photos/learnmore/contributors/kurscheidt.jpg differ diff --git a/photos/learnmore/contributors/moedinger.jpg b/photos/learnmore/contributors/moedinger.jpg new file mode 100644 index 000000000..ed274abaf Binary files /dev/null and b/photos/learnmore/contributors/moedinger.jpg differ diff --git a/photos/learnmore/contributors/schweizer.png b/photos/learnmore/contributors/schweizer.png new file mode 100644 index 000000000..f30f39949 Binary files /dev/null and b/photos/learnmore/contributors/schweizer.png differ diff --git a/photos/learnmore/contributors/wettstein.jpg b/photos/learnmore/contributors/wettstein.jpg new file mode 100644 index 000000000..0e52c3ef2 Binary files /dev/null and b/photos/learnmore/contributors/wettstein.jpg differ diff --git a/photos/learnmore/contributors/zilske.jpg b/photos/learnmore/contributors/zilske.jpg new file mode 100644 index 000000000..92e628d28 Binary files /dev/null and b/photos/learnmore/contributors/zilske.jpg differ diff --git a/photos/learnmore/funding/bmbf-mii.png b/photos/learnmore/funding/bmbf-mii.png new file mode 100644 index 000000000..e4d34792c Binary files /dev/null and b/photos/learnmore/funding/bmbf-mii.png differ diff --git a/photos/learnmore/funding/bmbf.png b/photos/learnmore/funding/bmbf.png new file mode 100644 index 000000000..ff3b4021d Binary files /dev/null and b/photos/learnmore/funding/bmbf.png differ diff --git a/photos/learnmore/funding/hd.jpg b/photos/learnmore/funding/hd.jpg new file mode 100644 index 000000000..97b881663 Binary files /dev/null and b/photos/learnmore/funding/hd.jpg differ diff --git a/photos/learnmore/funding/highmed.jpg b/photos/learnmore/funding/highmed.jpg new file mode 100644 index 000000000..5d0536ad8 Binary files /dev/null and b/photos/learnmore/funding/highmed.jpg differ diff --git a/photos/learnmore/funding/leipzig.png b/photos/learnmore/funding/leipzig.png new file mode 100644 index 000000000..72fdd9f52 Binary files /dev/null and b/photos/learnmore/funding/leipzig.png differ diff --git a/photos/learnmore/funding/mii.png b/photos/learnmore/funding/mii.png new file mode 100644 index 000000000..a2b4346ed Binary files /dev/null and b/photos/learnmore/funding/mii.png differ diff --git a/photos/learnmore/partners/hhn-logo.png b/photos/learnmore/partners/hhn-logo.png new file mode 100644 index 000000000..2bc6ac9c8 Binary files /dev/null and b/photos/learnmore/partners/hhn-logo.png differ diff --git a/photos/learnmore/partners/imi.png b/photos/learnmore/partners/imi.png new file mode 100644 index 000000000..3160e8640 Binary files /dev/null and b/photos/learnmore/partners/imi.png differ diff --git a/photos/learnmore/partners/life.png b/photos/learnmore/partners/life.png new file mode 100644 index 000000000..c6ead91a8 Binary files /dev/null and b/photos/learnmore/partners/life.png differ diff --git a/photos/learnmore/partners/logo-gecko.png b/photos/learnmore/partners/logo-gecko.png new file mode 100644 index 000000000..75909ca1c Binary files /dev/null and b/photos/learnmore/partners/logo-gecko.png differ diff --git a/photos/learnmore/projects/ap1.png b/photos/learnmore/projects/ap1.png new file mode 100644 index 000000000..1c595476e Binary files /dev/null and b/photos/learnmore/projects/ap1.png differ diff --git a/photos/learnmore/projects/num.png b/photos/learnmore/projects/num.png new file mode 100644 index 000000000..9d404c7b5 Binary files /dev/null and b/photos/learnmore/projects/num.png differ diff --git a/photos/tutorials/dsf-architecture.svg b/photos/tutorials/dsf-architecture.svg new file mode 100644 index 000000000..f56973def --- /dev/null +++ b/photos/tutorials/dsf-architecture.svg @@ -0,0 +1,690 @@ + +image/svg+xmlhttpshttpswsswsshttpshttpsBPEFHIRwsshttpshttpshttpsBPEhttps (HEAD)FHIRhttpshttpswsshttpshttpsBPEFHIRLocalSystemsLocalSystemsLocalSystemsDMZIntranet diff --git a/search-pro.worker.js b/search-pro.worker.js new file mode 100644 index 000000000..619a81510 --- /dev/null +++ b/search-pro.worker.js @@ -0,0 +1,2 @@ +const V=Object.entries,et=Object.fromEntries,st="ENTRIES",L="KEYS",T="VALUES",_="";class D{set;_type;_path;constructor(t,s){const n=t._tree,o=Array.from(n.keys());this.set=t,this._type=s,this._path=o.length>0?[{node:n,keys:o}]:[]}next(){const t=this.dive();return this.backtrack(),t}dive(){if(this._path.length===0)return{done:!0,value:void 0};const{node:t,keys:s}=E(this._path);if(E(s)===_)return{done:!1,value:this.result()};const n=t.get(E(s));return this._path.push({node:n,keys:Array.from(n.keys())}),this.dive()}backtrack(){if(this._path.length===0)return;const t=E(this._path).keys;t.pop(),!(t.length>0)&&(this._path.pop(),this.backtrack())}key(){return this.set._prefix+this._path.map(({keys:t})=>E(t)).filter(t=>t!==_).join("")}value(){return E(this._path).node.get(_)}result(){switch(this._type){case T:return this.value();case L:return this.key();default:return[this.key(),this.value()]}}[Symbol.iterator](){return this}}const E=e=>e[e.length-1],nt=(e,t,s)=>{const n=new Map;if(t===void 0)return n;const o=t.length+1,u=o+s,i=new Uint8Array(u*o).fill(s+1);for(let r=0;r{const d=u*i;t:for(const c of e.keys())if(c===_){const a=o[d-1];a<=s&&n.set(r,[e.get(c),a])}else{let a=u;for(let h=0;hs)continue t}R(e.get(c),t,s,n,o,a,i,r+c)}};class C{_tree;_prefix;_size=void 0;constructor(t=new Map,s=""){this._tree=t,this._prefix=s}atPrefix(t){if(!t.startsWith(this._prefix))throw new Error("Mismatched prefix");const[s,n]=x(this._tree,t.slice(this._prefix.length));if(s===void 0){const[o,u]=O(n);for(const i of o.keys())if(i!==_&&i.startsWith(u)){const r=new Map;return r.set(i.slice(u.length),o.get(i)),new C(r,t)}}return new C(s,t)}clear(){this._size=void 0,this._tree.clear()}delete(t){return this._size=void 0,ot(this._tree,t)}entries(){return new D(this,st)}forEach(t){for(const[s,n]of this)t(s,n,this)}fuzzyGet(t,s){return nt(this._tree,t,s)}get(t){const s=k(this._tree,t);return s!==void 0?s.get(_):void 0}has(t){const s=k(this._tree,t);return s!==void 0&&s.has(_)}keys(){return new D(this,L)}set(t,s){if(typeof t!="string")throw new Error("key must be a string");return this._size=void 0,I(this._tree,t).set(_,s),this}get size(){if(this._size)return this._size;this._size=0;const t=this.entries();for(;!t.next().done;)this._size+=1;return this._size}update(t,s){if(typeof t!="string")throw new Error("key must be a string");this._size=void 0;const n=I(this._tree,t);return n.set(_,s(n.get(_))),this}fetch(t,s){if(typeof t!="string")throw new Error("key must be a string");this._size=void 0;const n=I(this._tree,t);let o=n.get(_);return o===void 0&&n.set(_,o=s()),o}values(){return new D(this,T)}[Symbol.iterator](){return this.entries()}static from(t){const s=new C;for(const[n,o]of t)s.set(n,o);return s}static fromObject(t){return C.from(Object.entries(t))}}const x=(e,t,s=[])=>{if(t.length===0||e==null)return[e,s];for(const n of e.keys())if(n!==_&&t.startsWith(n))return s.push([e,n]),x(e.get(n),t.slice(n.length),s);return s.push([e,t]),x(void 0,"",s)},k=(e,t)=>{if(t.length===0||e==null)return e;for(const s of e.keys())if(s!==_&&t.startsWith(s))return k(e.get(s),t.slice(s.length))},I=(e,t)=>{const s=t.length;t:for(let n=0;e&&n{const[s,n]=x(e,t);if(s!==void 0){if(s.delete(_),s.size===0)W(n);else if(s.size===1){const[o,u]=s.entries().next().value;q(n,o,u)}}},W=e=>{if(e.length===0)return;const[t,s]=O(e);if(t.delete(s),t.size===0)W(e.slice(0,-1));else if(t.size===1){const[n,o]=t.entries().next().value;n!==_&&q(e.slice(0,-1),n,o)}},q=(e,t,s)=>{if(e.length===0)return;const[n,o]=O(e);n.set(o+t,s),n.delete(o)},O=e=>e[e.length-1],ut=(e,t)=>{const s=e._idToShortId.get(t);if(s!=null)return e._storedFields.get(s)},it=/[\n\r -#%-*,-/:;?@[-\]_{}\u00A0\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u1680\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2000-\u200A\u2010-\u2029\u202F-\u2043\u2045-\u2051\u2053-\u205F\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u3000-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]+/u,M="or",$="and",rt="and_not",ct=(e,t)=>{e.includes(t)||e.push(t)},N=(e,t)=>{for(const s of t)e.includes(s)||e.push(s)},P=({score:e},{score:t})=>t-e,lt=()=>new Map,b=e=>{const t=new Map;for(const s of Object.keys(e))t.set(parseInt(s,10),e[s]);return t},G=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0,ht={[M]:(e,t)=>{for(const s of t.keys()){const n=e.get(s);if(n==null)e.set(s,t.get(s));else{const{score:o,terms:u,match:i}=t.get(s);n.score=n.score+o,n.match=Object.assign(n.match,i),N(n.terms,u)}}return e},[$]:(e,t)=>{const s=new Map;for(const n of t.keys()){const o=e.get(n);if(o==null)continue;const{score:u,terms:i,match:r}=t.get(n);N(o.terms,i),s.set(n,{score:o.score+u,terms:o.terms,match:Object.assign(o.match,r)})}return s},[rt]:(e,t)=>{for(const s of t.keys())e.delete(s);return e}},dt=(e,t,s,n,o,u)=>{const{k:i,b:r,d}=u;return Math.log(1+(s-t+.5)/(t+.5))*(d+e*(i+1)/(e+i*(1-r+r*n/o)))},at=e=>(t,s,n)=>{const o=typeof e.fuzzy=="function"?e.fuzzy(t,s,n):e.fuzzy||!1,u=typeof e.prefix=="function"?e.prefix(t,s,n):e.prefix===!0;return{term:t,fuzzy:o,prefix:u}},H=(e,t,s,n)=>{for(const o of Object.keys(e._fieldIds))if(e._fieldIds[o]===s){e._options.logger("warn",`SlimSearch: document with ID ${e._documentIds.get(t)} has changed before removal: term "${n}" was not present in field "${o}". Removing a document after it has changed can corrupt the index!`,"version_conflict");return}},ft=(e,t,s,n)=>{if(!e._index.has(n)){H(e,s,t,n);return}const o=e._index.fetch(n,lt),u=o.get(t);u==null||u.get(s)==null?H(e,s,t,n):u.get(s)<=1?u.size<=1?o.delete(t):u.delete(s):u.set(s,u.get(s)-1),e._index.get(n).size===0&&e._index.delete(n)},gt={k:1.2,b:.7,d:.5},mt={idField:"id",extractField:(e,t)=>e[t],tokenize:e=>e.split(it),processTerm:e=>e.toLowerCase(),fields:void 0,searchOptions:void 0,storeFields:[],logger:(e,t)=>{typeof console?.[e]=="function"&&console[e](t)},autoVacuum:!0},J={combineWith:M,prefix:!1,fuzzy:!1,maxFuzzy:6,boost:{},weights:{fuzzy:.45,prefix:.375},bm25:gt},pt={combineWith:$,prefix:(e,t,s)=>t===s.length-1},Ft={batchSize:1e3,batchWait:10},U={minDirtFactor:.1,minDirtCount:20},_t={...Ft,...U},K=Symbol("*"),yt=(e,t)=>{const s=new Map,n={...e._options.searchOptions,...t};for(const[o,u]of e._documentIds){const i=n.boostDocument?n.boostDocument(u,"",e._storedFields.get(o)):1;s.set(o,{score:i,terms:[],match:{}})}return s},X=(e,t=M)=>{if(e.length===0)return new Map;const s=t.toLowerCase(),n=ht[s];if(!n)throw new Error(`Invalid combination operator: ${t}`);return e.reduce(n)||new Map},S=(e,t,s,n,o,u,i,r,d=new Map)=>{if(o==null)return d;for(const c of Object.keys(u)){const a=u[c],h=e._fieldIds[c],g=o.get(h);if(g==null)continue;let m=g.size;const p=e._avgFieldLength[h];for(const l of g.keys()){if(!e._documentIds.has(l)){ft(e,h,l,s),m-=1;continue}const f=i?i(e._documentIds.get(l),s,e._storedFields.get(l)):1;if(!f)continue;const y=g.get(l),F=e._fieldLength.get(l)[h],v=dt(y,m,e._documentCount,F,p,r),z=n*a*f*v,A=d.get(l);if(A){A.score+=z,ct(A.terms,t);const w=G(A.match,s);w?w.push(c):A.match[s]=[c]}else d.set(l,{score:z,terms:[t],match:{[s]:[c]}})}}return d},At=(e,t,s)=>{const n={...e._options.searchOptions,...s},o=(n.fields||e._options.fields).reduce((l,f)=>({...l,[f]:G(n.boost,f)||1}),{}),{boostDocument:u,weights:i,maxFuzzy:r,bm25:d}=n,{fuzzy:c,prefix:a}={...J.weights,...i},h=e._index.get(t.term),g=S(e,t.term,t.term,1,h,o,u,d);let m,p;if(t.prefix&&(m=e._index.atPrefix(t.term)),t.fuzzy){const l=t.fuzzy===!0?.2:t.fuzzy,f=l<1?Math.min(r,Math.round(t.term.length*l)):l;f&&(p=e._index.fuzzyGet(t.term,f))}if(m)for(const[l,f]of m){const y=l.length-t.term.length;if(!y)continue;p?.delete(l);const F=a*l.length/(l.length+.3*y);S(e,t.term,l,F,f,o,u,d,g)}if(p)for(const l of p.keys()){const[f,y]=p.get(l);if(!y)continue;const F=c*l.length/(l.length+y);S(e,t.term,l,F,f,o,u,d,g)}return g},Y=(e,t,s={})=>{if(t===K)return yt(e,s);if(typeof t!="string"){const a={...s,...t,queries:void 0},h=t.queries.map(g=>Y(e,g,a));return X(h,a.combineWith)}const{tokenize:n,processTerm:o,searchOptions:u}=e._options,i={tokenize:n,processTerm:o,...u,...s},{tokenize:r,processTerm:d}=i,c=r(t).flatMap(a=>d(a)).filter(a=>!!a).map(at(i)).map(a=>At(e,a,i));return X(c,i.combineWith)},Q=(e,t,s={})=>{const n=Y(e,t,s),o=[];for(const[u,{score:i,terms:r,match:d}]of n){const c=r.length||1,a={id:e._documentIds.get(u),score:i*c,terms:Object.keys(d),queryTerms:r,match:d};Object.assign(a,e._storedFields.get(u)),(s.filter==null||s.filter(a))&&o.push(a)}return t===K&&s.boostDocument==null&&e._options.searchOptions.boostDocument==null||o.sort(P),o},Ct=(e,t,s={})=>{s={...e._options.autoSuggestOptions,...s};const n=new Map;for(const{score:u,terms:i}of Q(e,t,s)){const r=i.join(" "),d=n.get(r);d!=null?(d.score+=u,d.count+=1):n.set(r,{score:u,terms:i,count:1})}const o=[];for(const[u,{score:i,terms:r,count:d}]of n)o.push({suggestion:u,terms:r,score:i/d});return o.sort(P),o};class Et{_options;_index;_documentCount;_documentIds;_idToShortId;_fieldIds;_fieldLength;_avgFieldLength;_nextId;_storedFields;_dirtCount;_currentVacuum;_enqueuedVacuum;_enqueuedVacuumConditions;constructor(t){if(t?.fields==null)throw new Error('SlimSearch: option "fields" must be provided');const s=t.autoVacuum==null||t.autoVacuum===!0?_t:t.autoVacuum;this._options={...mt,...t,autoVacuum:s,searchOptions:{...J,...t.searchOptions||{}},autoSuggestOptions:{...pt,...t.autoSuggestOptions||{}}},this._index=new C,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldIds={},this._fieldLength=new Map,this._avgFieldLength=[],this._nextId=0,this._storedFields=new Map,this._dirtCount=0,this._currentVacuum=null,this._enqueuedVacuum=null,this._enqueuedVacuumConditions=U,this.addFields(this._options.fields)}get isVacuuming(){return this._currentVacuum!=null}get dirtCount(){return this._dirtCount}get dirtFactor(){return this._dirtCount/(1+this._documentCount+this._dirtCount)}get documentCount(){return this._documentCount}get termCount(){return this._index.size}toJSON(){const t=[];for(const[s,n]of this._index){const o={};for(const[u,i]of n)o[u]=Object.fromEntries(i);t.push([s,o])}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:t,serializationVersion:2}}addFields(t){for(let s=0;s{if(c!==1&&c!==2)throw new Error("SlimSearch: cannot deserialize an index created with an incompatible version");const h=new Et(a);h._documentCount=t,h._nextId=s,h._documentIds=b(n),h._idToShortId=new Map,h._fieldIds=o,h._fieldLength=b(u),h._avgFieldLength=i,h._storedFields=b(r),h._dirtCount=d||0,h._index=new C;for(const[g,m]of h._documentIds)h._idToShortId.set(m,g);for(const[g,m]of e){const p=new Map;for(const l of Object.keys(m)){let f=m[l];c===1&&(f=f.ds),p.set(parseInt(l,10),b(f))}h._index.set(g,p)}return h},B=(e,t)=>{const s=e.toLowerCase(),n=t.toLowerCase(),o=[];let u=0,i=0;const r=(c,a=!1)=>{let h="";i===0?h=c.length>20?`… ${c.slice(-20)}`:c:a?h=c.length+i>100?`${c.slice(0,100-i)}… `:c:h=c.length>20?`${c.slice(0,20)} … ${c.slice(-20)}`:c,h&&o.push(h),i+=h.length,a||(o.push(["mark",t]),i+=t.length,i>=100&&o.push(" …"))};let d=s.indexOf(n,u);if(d===-1)return null;for(;d>=0;){const c=d+n.length;if(r(e.slice(u,d)),u=c,i>100)break;d=s.indexOf(n,u)}return i<100&&r(e.slice(u),!0),o},wt=(e,t)=>t.contents.reduce((s,[,n])=>s+n,0)-e.contents.reduce((s,[,n])=>s+n,0),xt=(e,t)=>Math.max(...t.contents.map(([,s])=>s))-Math.max(...e.contents.map(([,s])=>s)),Z=(e,t,s={})=>{const n={};return Q(t,e,{boost:{h:2,t:1,c:4},prefix:!0,...s}).forEach(o=>{const{id:u,terms:i,score:r}=o,d=u.includes("@"),c=u.includes("#"),[a,h]=u.split(/[#@]/),g=Number(a),m=i.sort((l,f)=>l.length-f.length).filter((l,f)=>i.slice(f+1).every(y=>!y.includes(l))),{contents:p}=n[g]??={title:"",contents:[]};if(d)p.push([{type:"customField",id:g,index:h,display:m.map(l=>o.c.map(f=>B(f,l))).flat().filter(l=>l!==null)},r]);else{const l=m.map(f=>B(o.h,f)).filter(f=>f!==null);if(l.length&&p.push([{type:c?"heading":"title",id:g,...c&&{anchor:h},display:l},r]),"t"in o)for(const f of o.t){const y=m.map(F=>B(f,F)).filter(F=>F!==null);y.length&&p.push([{type:"text",id:g,...c&&{anchor:h},display:y},r])}}}),V(n).sort(([,o],[,u])=>"max"==="total"?wt(o,u):xt(o,u)).map(([o,{title:u,contents:i}])=>{if(!u){const r=ut(t,o);r&&(u=r.h)}return{title:u,contents:i.map(([r])=>r)}})},tt=(e,t,s={})=>Ct(t,e,{fuzzy:.2,maxFuzzy:3,...s}).map(({suggestion:n})=>n),bt=et(V(JSON.parse("{\"/\":{\"documentCount\":2857,\"nextId\":2857,\"documentIds\":{\"0\":\"0\",\"1\":\"0#rolf-hansen-memorial-award-2023-goes-to-hauke-hund\",\"2\":\"0#feel-free-to-contact-us-via-dsf-gecko-hs-heilbronn-de-and-we-will-take-care-of-your-request-as-soon-as-possible\",\"3\":\"1\",\"4\":\"1#overview\",\"5\":\"2\",\"6\":\"2#overview-of-dsf\",\"7\":\"2#key-features-and-benefits\",\"8\":\"2#distributed-data-sharing-processes\",\"9\":\"2#flexibility-with-data-standards\",\"10\":\"2#security-and-access-control\",\"11\":\"2#deployment-in-clinical-environments\",\"12\":\"2#getting-started-with-the-dsf\",\"13\":\"3\",\"14\":\"4\",\"15\":\"4#vorbereitung\",\"16\":\"4#netzwerkfreigaben\",\"17\":\"4#fhir-store\",\"18\":\"4#installationshinweise\",\"19\":\"4#dsf\",\"20\":\"4#prozessplugins\",\"21\":\"4#weitere-anwendungen\",\"22\":\"4#data-sharing-demodaten\",\"23\":\"5\",\"24\":\"5#overview\",\"25\":\"6\",\"26\":\"6#publications\",\"27\":\"6#recorded-talks\",\"28\":\"6#gmds-conference-2022\",\"29\":\"6#gmds-conference-2020\",\"30\":\"7\",\"31\":\"7#overview-v-0-9-x\",\"32\":\"8\",\"33\":\"9\",\"34\":\"9#security-vulnerability-disclosure-policy\",\"35\":\"9#our-commitment-to-security\",\"36\":\"9#responsible-disclosure\",\"37\":\"9#how-to-report-a-vulnerability\",\"38\":\"9#our-promise\",\"39\":\"9#legal-protection\",\"40\":\"9#questions\",\"41\":\"10\",\"42\":\"12\",\"43\":\"12#new-features\",\"44\":\"15\",\"45\":\"15#new-features\",\"46\":\"18\",\"47\":\"18#new-features\",\"48\":\"21\",\"49\":\"21#new-features\",\"50\":\"24\",\"51\":\"24#new-features\",\"52\":\"27\",\"53\":\"27#new-features\",\"54\":\"30\",\"55\":\"30#new-features\",\"56\":\"33\",\"57\":\"33#new-features\",\"58\":\"36\",\"59\":\"36#new-features\",\"60\":\"39\",\"61\":\"39#new-features\",\"62\":\"42\",\"63\":\"42#new-features\",\"64\":\"44\",\"65\":\"44#overview\",\"66\":\"45\",\"67\":\"45#e-mail\",\"68\":\"45#community\",\"69\":\"45#stay-up-to-date\",\"70\":\"45#contribute-code\",\"71\":\"45#share-your-experience-get-support\",\"72\":\"46\",\"73\":\"46#heilbronn-university-of-applied-sciences-gecko-institute\",\"74\":\"46#university-of-heidelberg-institute-of-medical-informatics\",\"75\":\"46#university-of-leipzig-life-institute\",\"76\":\"47\",\"77\":\"47#dsf-medical-informatics-structure-data-sharing-framework-community-2023-2026\",\"78\":\"47#development-of-the-dsf-in-the-highmed-consortium-contribution-heilbronn-university-and-heidelberg-university-2018-2022\",\"79\":\"48\",\"80\":\"49\",\"81\":\"49#goal\",\"82\":\"49#allow-list-managment\",\"83\":\"49#feel-free-to-contact-us-via-e-mail-dsf-gecko-hs-heilbronn-de-and-we-will-take-care-of-your-request-as-soon-as-possible\",\"84\":\"50\",\"85\":\"50#dsf-fhir-server\",\"86\":\"50#business-process-engine-bpe\",\"87\":\"50#flexible-deployment\",\"88\":\"50#network-setup-additional-reverse-proxy-in-external-dmz\",\"89\":\"51\",\"90\":\"51#interoperability\",\"91\":\"51#hl7-fhir\",\"92\":\"51#bpmn\",\"93\":\"51#why-are-we-using-fhir-and-bpmn\",\"94\":\"52\",\"95\":\"53\",\"96\":\"53#additional-reverse-proxy-in-external-dmz\",\"97\":\"54\",\"98\":\"54#overview\",\"99\":\"54#bpmn-example\",\"100\":\"54#ping-pong-process\",\"101\":\"54#autostart-ping-process\",\"102\":\"54#ping-process\",\"103\":\"54#pong-process\",\"104\":\"55\",\"105\":\"55#basics-security\",\"106\":\"55#authentication\",\"107\":\"55#certificate-requests\",\"108\":\"55#fhir-endpoint\",\"109\":\"55#business-process-engine-server\",\"110\":\"56\",\"111\":\"57\",\"112\":\"57#abstract\",\"113\":\"57#topic\",\"114\":\"57#target-group\",\"115\":\"57#what-you-need\",\"116\":\"57#what-you-will-learn\",\"117\":\"58\",\"118\":\"59\",\"119\":\"60\",\"120\":\"60#overview\",\"121\":\"61\",\"122\":\"61#overview\",\"123\":\"61#the-feasibility-process\",\"124\":\"61#technical-information\",\"125\":\"62\",\"126\":\"62#the-data-transfer-process\",\"127\":\"63\",\"128\":\"64\",\"129\":\"64#build-project\",\"130\":\"64#manual-integration-testing-without-docker\",\"131\":\"64#manual-integration-testing-local-with-docker\",\"132\":\"64#troubleshooting\",\"133\":\"64#manual-integration-testing-vms-for-docker-registry-3-medics-ttp\",\"134\":\"64#starting-the-processes\",\"135\":\"65\",\"136\":\"66\",\"137\":\"66#release-a-new-final-version\",\"138\":\"66#release-a-new-candidate-version\",\"139\":\"67\",\"140\":\"68\",\"141\":\"68#database\",\"142\":\"68#json-xml-adapter\",\"143\":\"68#dao\",\"144\":\"68#resolve-resource-references-if-needed\",\"145\":\"68#authorization\",\"146\":\"68#webservice\",\"147\":\"68#test\",\"148\":\"69\",\"149\":\"70\",\"150\":\"71\",\"151\":\"72\",\"152\":\"72#code-style\",\"153\":\"72#git-workflow\",\"154\":\"72#branch-naming\",\"155\":\"73\",\"156\":\"74\",\"157\":\"76\",\"158\":\"76#authenticating-to-github-packages\",\"159\":\"76#installing-a-package\",\"160\":\"77\",\"161\":\"78\",\"162\":\"78#certificate-requests\",\"163\":\"78#fhir-endpoint\",\"164\":\"78#business-process-engine-server\",\"165\":\"79\",\"166\":\"79#additional-reverse-proxy-in-external-dmz\",\"167\":\"80\",\"168\":\"81\",\"169\":\"81#dsf-0-9-3-configuration-parameters-bpe-server\",\"170\":\"81#org-highmed-dsf-bpe-consent-webservice-factory-class\",\"171\":\"81#org-highmed-dsf-bpe-db-liquibase-password-or-org-highmed-dsf-bpe-db-liquibase-password-file\",\"172\":\"81#org-highmed-dsf-bpe-db-liquibase-username\",\"173\":\"81#org-highmed-dsf-bpe-db-url\",\"174\":\"81#org-highmed-dsf-bpe-db-user-camunda-group\",\"175\":\"81#org-highmed-dsf-bpe-db-user-camunda-password-or-org-highmed-dsf-bpe-db-user-camunda-password-file\",\"176\":\"81#org-highmed-dsf-bpe-db-user-camunda-username\",\"177\":\"81#org-highmed-dsf-bpe-db-user-group\",\"178\":\"81#org-highmed-dsf-bpe-db-user-password-or-org-highmed-dsf-bpe-db-user-password-file\",\"179\":\"81#org-highmed-dsf-bpe-db-user-username\",\"180\":\"81#org-highmed-dsf-bpe-debug-log-message-onactivityend\",\"181\":\"81#org-highmed-dsf-bpe-debug-log-message-onactivitystart\",\"182\":\"81#org-highmed-dsf-bpe-debug-log-message-variables\",\"183\":\"81#org-highmed-dsf-bpe-fhir-client-certificate\",\"184\":\"81#org-highmed-dsf-bpe-fhir-client-certificate-private-key\",\"185\":\"81#org-highmed-dsf-bpe-fhir-client-certificate-private-key-password-or-org-highmed-dsf-bpe-fhir-client-certificate-private-key-password-file\",\"186\":\"81#org-highmed-dsf-bpe-fhir-client-local-proxy-password-or-org-highmed-dsf-bpe-fhir-client-local-proxy-password-file\",\"187\":\"81#org-highmed-dsf-bpe-fhir-client-local-proxy-url\",\"188\":\"81#org-highmed-dsf-bpe-fhir-client-local-proxy-username\",\"189\":\"81#org-highmed-dsf-bpe-fhir-client-local-timeout-connect\",\"190\":\"81#org-highmed-dsf-bpe-fhir-client-local-timeout-read\",\"191\":\"81#org-highmed-dsf-bpe-fhir-client-local-verbose\",\"192\":\"81#org-highmed-dsf-bpe-fhir-client-local-websocket-proxy-password-or-org-highmed-dsf-bpe-fhir-client-local-websocket-proxy-password-file\",\"193\":\"81#org-highmed-dsf-bpe-fhir-client-local-websocket-proxy-url\",\"194\":\"81#org-highmed-dsf-bpe-fhir-client-local-websocket-proxy-username\",\"195\":\"81#org-highmed-dsf-bpe-fhir-client-remote-proxy-password-or-org-highmed-dsf-bpe-fhir-client-remote-proxy-password-file\",\"196\":\"81#org-highmed-dsf-bpe-fhir-client-remote-proxy-url\",\"197\":\"81#org-highmed-dsf-bpe-fhir-client-remote-proxy-username\",\"198\":\"81#org-highmed-dsf-bpe-fhir-client-remote-timeout-connect\",\"199\":\"81#org-highmed-dsf-bpe-fhir-client-remote-timeout-read\",\"200\":\"81#org-highmed-dsf-bpe-fhir-client-remote-verbose\",\"201\":\"81#org-highmed-dsf-bpe-fhir-client-trust-certificates\",\"202\":\"81#org-highmed-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter\",\"203\":\"81#org-highmed-dsf-bpe-fhir-server-base-url\",\"204\":\"81#org-highmed-dsf-bpe-fhir-server-organization-identifier-value\",\"205\":\"81#org-highmed-dsf-bpe-fhir-task-subscription-retry-max\",\"206\":\"81#org-highmed-dsf-bpe-fhir-task-subscription-retry-sleep\",\"207\":\"81#org-highmed-dsf-bpe-fhir-task-subscription-search-parameter\",\"208\":\"81#org-highmed-dsf-bpe-mail-client-certificate\",\"209\":\"81#org-highmed-dsf-bpe-mail-client-certificate-private-key\",\"210\":\"81#org-highmed-dsf-bpe-mail-client-certificate-private-key-password-or-org-highmed-dsf-bpe-mail-client-certificate-private-key-password-file\",\"211\":\"81#org-highmed-dsf-bpe-mail-fromaddress\",\"212\":\"81#org-highmed-dsf-bpe-mail-host\",\"213\":\"81#org-highmed-dsf-bpe-mail-mailonerrorlogeventbuffersize\",\"214\":\"81#org-highmed-dsf-bpe-mail-mailonerrorlogeventdebugloglocation\",\"215\":\"81#org-highmed-dsf-bpe-mail-password-or-org-highmed-dsf-bpe-mail-password-file\",\"216\":\"81#org-highmed-dsf-bpe-mail-port\",\"217\":\"81#org-highmed-dsf-bpe-mail-replytoaddresses\",\"218\":\"81#org-highmed-dsf-bpe-mail-sendmailonerrorlogevent\",\"219\":\"81#org-highmed-dsf-bpe-mail-sendtestmailonstartup\",\"220\":\"81#org-highmed-dsf-bpe-mail-smime-p12keystore\",\"221\":\"81#org-highmed-dsf-bpe-mail-smime-p12keystore-password-or-org-highmed-dsf-bpe-mail-smime-p12keystore-password-file\",\"222\":\"81#org-highmed-dsf-bpe-mail-toaddresses\",\"223\":\"81#org-highmed-dsf-bpe-mail-toaddressescc\",\"224\":\"81#org-highmed-dsf-bpe-mail-trust-certificates\",\"225\":\"81#org-highmed-dsf-bpe-mail-username\",\"226\":\"81#org-highmed-dsf-bpe-mail-usesmtps\",\"227\":\"81#org-highmed-dsf-bpe-mpi-webservice-factory-class\",\"228\":\"81#org-highmed-dsf-bpe-openehr-webservice-factory-class\",\"229\":\"81#org-highmed-dsf-bpe-process-excluded\",\"230\":\"81#org-highmed-dsf-bpe-process-fhir-server-retry-max\",\"231\":\"81#org-highmed-dsf-bpe-process-fhir-server-retry-sleep\",\"232\":\"81#org-highmed-dsf-bpe-process-plugin-directroy\",\"233\":\"81#org-highmed-dsf-bpe-process-retired\",\"234\":\"81#org-highmed-dsf-bpe-pseudonymization-webservice-factory-class\",\"235\":\"82\",\"236\":\"82#dsf-0-9-3-configuration-parameters-fhir-server\",\"237\":\"82#org-highmed-dsf-fhir-client-certificate\",\"238\":\"82#org-highmed-dsf-fhir-client-certificate-private-key\",\"239\":\"82#org-highmed-dsf-fhir-client-certificate-private-key-password-or-org-highmed-dsf-fhir-client-certificate-private-key-password-file\",\"240\":\"82#org-highmed-dsf-fhir-client-proxy-password-or-org-highmed-dsf-fhir-client-proxy-password-file\",\"241\":\"82#org-highmed-dsf-fhir-client-proxy-url\",\"242\":\"82#org-highmed-dsf-fhir-client-proxy-username\",\"243\":\"82#org-highmed-dsf-fhir-client-timeout-connect\",\"244\":\"82#org-highmed-dsf-fhir-client-timeout-read\",\"245\":\"82#org-highmed-dsf-fhir-client-trust-certificates\",\"246\":\"82#org-highmed-dsf-fhir-client-verbose\",\"247\":\"82#org-highmed-dsf-fhir-db-liquibase-password-or-org-highmed-dsf-fhir-db-liquibase-password-file\",\"248\":\"82#org-highmed-dsf-fhir-db-liquibase-username\",\"249\":\"82#org-highmed-dsf-fhir-db-url\",\"250\":\"82#org-highmed-dsf-fhir-db-user-group\",\"251\":\"82#org-highmed-dsf-fhir-db-user-password-or-org-highmed-dsf-fhir-db-user-password-file\",\"252\":\"82#org-highmed-dsf-fhir-db-user-permanent-delete-group\",\"253\":\"82#org-highmed-dsf-fhir-db-user-permanent-delete-password-or-org-highmed-dsf-fhir-db-user-permanent-delete-password-file\",\"254\":\"82#org-highmed-dsf-fhir-db-user-permanent-delete-username\",\"255\":\"82#org-highmed-dsf-fhir-db-user-username\",\"256\":\"82#org-highmed-dsf-fhir-server-base-url\",\"257\":\"82#org-highmed-dsf-fhir-server-cors-origins\",\"258\":\"82#org-highmed-dsf-fhir-server-init-bundle\",\"259\":\"82#org-highmed-dsf-fhir-server-organization-identifier-value\",\"260\":\"82#org-highmed-dsf-fhir-server-page-count\",\"261\":\"82#org-highmed-dsf-fhir-server-user-thumbprints\",\"262\":\"82#org-highmed-dsf-fhir-server-user-thumbprints-permanent-delete\",\"263\":\"83\",\"264\":\"83#dsf-0-9-3-configuration-parameters-fhir-reverse-proxy\",\"265\":\"83#app-server-ip\",\"266\":\"83#https-server-name-port\",\"267\":\"83#proxy-pass-connection-timeout-http\",\"268\":\"83#proxy-pass-connection-timeout-ws\",\"269\":\"83#proxy-pass-timeout-http\",\"270\":\"83#proxy-pass-timeout-ws\",\"271\":\"83#ssl-ca-certificate-file\",\"272\":\"83#ssl-ca-dn-request-file\",\"273\":\"83#ssl-certificate-chain-file\",\"274\":\"83#ssl-certificate-file\",\"275\":\"83#ssl-certificate-key-file\",\"276\":\"84\",\"277\":\"84#prerequisites\",\"278\":\"84#virtual-machines\",\"279\":\"84#docker-docker-compose\",\"280\":\"84#client-server-certificates\",\"281\":\"84#network-setup-network-access\",\"282\":\"84#on-boarding-excel-spreadsheet\",\"283\":\"84#setup\",\"284\":\"84#prepare-certificates\",\"285\":\"84#dsf-fhir-server\",\"286\":\"84#dsf-bpe-server\",\"287\":\"85\",\"288\":\"85#prerequisites\",\"289\":\"85#virtual-machines\",\"290\":\"85#docker-docker-compose\",\"291\":\"85#client-server-certificates\",\"292\":\"85#network-setup-network-access\",\"293\":\"85#on-boarding-excel-spreadsheet\",\"294\":\"85#setup\",\"295\":\"85#prepare-certificates\",\"296\":\"85#dsf-fhir-server\",\"297\":\"85#dsf-bpe-server\",\"298\":\"86\",\"299\":\"86#modify-dsf-fhir-server-setup\",\"300\":\"86#modify-dsf-bpe-server-setup\",\"301\":\"87\",\"302\":\"87#modify-dsf-fhir-server-setup\",\"303\":\"87#modify-dsf-bpe-server-setup\",\"304\":\"88\",\"305\":\"88#modify-dsf-fhir-server-setup\",\"306\":\"88#modify-dsf-bpe-server-setup\",\"307\":\"89\",\"308\":\"89#modify-dsf-fhir-server-setup\",\"309\":\"89#modify-dsf-bpe-server-setup\",\"310\":\"90\",\"311\":\"90#modify-dsf-fhir-server-setup\",\"312\":\"90#modify-dsf-bpe-server-setup\",\"313\":\"91\",\"314\":\"91#implementing-bpmn-processes-as-dsf-process-plugins\",\"315\":\"91#prerequisites\",\"316\":\"91#exercise-1-simple-process\",\"317\":\"91#exercise-1-1-process-debugging\",\"318\":\"91#exercise-2-input-parameters\",\"319\":\"91#exercise-3-message-events\",\"320\":\"91#exercise-4-exclusive-gateways\",\"321\":\"91#exercise-5-event-based-gateways-and-intermediate-events\",\"322\":\"92\",\"323\":\"92#docker-compose-yml\",\"324\":\"93\",\"325\":\"93#exercise-1-simple-process\",\"326\":\"93#introduction\",\"327\":\"93#tutorial-code-base-structure-and-docker-test-setup\",\"328\":\"93#process-plugin-main-components\",\"329\":\"93#process-execution-and-fhir-task-resources\",\"330\":\"93#process-access-control\",\"331\":\"93#exercise-tasks\",\"332\":\"93#solution-verification\",\"333\":\"93#maven-build-and-automated-tests\",\"334\":\"93#process-execution-and-manual-tests\",\"335\":\"94\",\"336\":\"94#exercise-1-1-process-debugging\",\"337\":\"94#introduction\",\"338\":\"94#exercise-tasks\",\"339\":\"95\",\"340\":\"95#exercise-2-input-parameters\",\"341\":\"95#introduction\",\"342\":\"95#environment-variables\",\"343\":\"95#task-input-parameters\",\"344\":\"95#version-and-release-date-placeholders\",\"345\":\"95#exercise-tasks\",\"346\":\"95#solution-verification\",\"347\":\"95#maven-build-and-automated-tests\",\"348\":\"95#process-execution-and-manual-tests\",\"349\":\"96\",\"350\":\"96#exercise-3-message-events\",\"351\":\"96#introduction\",\"352\":\"96#message-flow-and-fhir-task-resources\",\"353\":\"96#bpmn-process-definition-key-vs-fhir-task-instantiatesuri-and-activitydefinition-url-version\",\"354\":\"96#activitydefinitions-for-the-dsf\",\"355\":\"96#message-name-1-1\",\"356\":\"96#task-profile-1-1\",\"357\":\"96#requester-1\",\"358\":\"96#recipient-1\",\"359\":\"96#authorization-extension-example\",\"360\":\"96#exercise-tasks\",\"361\":\"96#solution-verification\",\"362\":\"96#maven-build-and-automated-tests\",\"363\":\"96#process-execution-and-manual-tests\",\"364\":\"97\",\"365\":\"97#exercise-4-exclusive-gateways\",\"366\":\"97#introduction\",\"367\":\"97#exclusive-gateways\",\"368\":\"97#condition-expressions\",\"369\":\"97#storing-modifying-process-variables\",\"370\":\"97#exercise-tasks\",\"371\":\"97#solution-verification\",\"372\":\"97#maven-build-and-automated-tests\",\"373\":\"97#process-execution-and-manual-tests\",\"374\":\"98\",\"375\":\"98#exercise-5-event-based-gateways-and-intermediate-events\",\"376\":\"98#introduction\",\"377\":\"98#managing-multiple-and-missing-messages\",\"378\":\"98#timer-events\",\"379\":\"98#matching-process-instances-with-business-keys\",\"380\":\"98#activitydefinitions-for-the-dsf\",\"381\":\"98#message-name-1-1\",\"382\":\"98#task-profile-1-1\",\"383\":\"98#requester-1\",\"384\":\"98#recipient-1\",\"385\":\"98#authorization-extension-example\",\"386\":\"98#exercise-tasks\",\"387\":\"98#solution-verification\",\"388\":\"98#maven-build-and-automated-tests\",\"389\":\"98#process-execution-and-manual-tests\",\"390\":\"99\",\"391\":\"99#git\",\"392\":\"99#java-11\",\"393\":\"99#maven-3-8\",\"394\":\"99#github-packages\",\"395\":\"99#docker-and-docker-compose\",\"396\":\"99#host-entries-for-test-setup\",\"397\":\"99#java-ide\",\"398\":\"99#bpmn-editor\",\"399\":\"99#hardware\",\"400\":\"100\",\"401\":\"100#benefits-of-contributing\",\"402\":\"100#general\",\"403\":\"100#code-style\",\"404\":\"100#branching-strategy\",\"405\":\"100#branch-naming\",\"406\":\"100#setting-up-the-project\",\"407\":\"100#java\",\"408\":\"100#docker\",\"409\":\"100#maven\",\"410\":\"100#workflow\",\"411\":\"100#pull-request-process\",\"412\":\"100#data-security-in-dsf-development\",\"413\":\"101\",\"414\":\"102\",\"415\":\"102#ways-you-can-contribute\",\"416\":\"103\",\"417\":\"103#overview\",\"418\":\"104\",\"419\":\"105\",\"420\":\"106\",\"421\":\"106#overview\",\"422\":\"107\",\"423\":\"107#overview\",\"424\":\"107#prerequisites\",\"425\":\"107#start-here\",\"426\":\"108\",\"427\":\"108#overview\",\"428\":\"108#prerequisites\",\"429\":\"108#deployment\",\"430\":\"109\",\"431\":\"109#prerequisites\",\"432\":\"109#virtual-machines\",\"433\":\"109#docker-docker-compose\",\"434\":\"109#client-server-certificates\",\"435\":\"109#network-setup-network-access\",\"436\":\"109#setup\",\"437\":\"109#prepare-certificates\",\"438\":\"109#dsf-fhir-server\",\"439\":\"109#dsf-bpe-server\",\"440\":\"109#logs\",\"441\":\"109#on-boarding\",\"442\":\"110\",\"443\":\"111\",\"444\":\"111#modify-dsf-fhir-server-setup\",\"445\":\"111#modify-dsf-bpe-server-setup\",\"446\":\"112\",\"447\":\"112#overview\",\"448\":\"113\",\"449\":\"114\",\"450\":\"115\",\"451\":\"115#overview\",\"452\":\"116\",\"453\":\"116#overview\",\"454\":\"116#prerequisites\",\"455\":\"116#start-here\",\"456\":\"117\",\"457\":\"117#prerequisites\",\"458\":\"117#virtual-machines\",\"459\":\"117#docker-docker-compose\",\"460\":\"117#client-server-certificates\",\"461\":\"117#network-setup-network-access\",\"462\":\"117#setup\",\"463\":\"117#prepare-certificates\",\"464\":\"117#dsf-fhir-server\",\"465\":\"117#dsf-bpe-server\",\"466\":\"117#logs\",\"467\":\"117#on-boarding\",\"468\":\"118\",\"469\":\"119\",\"470\":\"119#overview\",\"471\":\"120\",\"472\":\"121\",\"473\":\"122\",\"474\":\"122#overview\",\"475\":\"123\",\"476\":\"123#overview\",\"477\":\"123#prerequisites\",\"478\":\"123#start-here\",\"479\":\"124\",\"480\":\"124#prerequisites\",\"481\":\"124#virtual-machines\",\"482\":\"124#docker-docker-compose\",\"483\":\"124#client-server-certificates\",\"484\":\"124#network-setup-network-access\",\"485\":\"124#setup\",\"486\":\"124#prepare-certificates\",\"487\":\"124#dsf-fhir-server\",\"488\":\"124#dsf-bpe-server\",\"489\":\"124#logs\",\"490\":\"124#on-boarding\",\"491\":\"125\",\"492\":\"126\",\"493\":\"126#modify-dsf-fhir-server-setup\",\"494\":\"126#modify-dsf-bpe-server-setup\",\"495\":\"127\",\"496\":\"127#overview\",\"497\":\"128\",\"498\":\"129\",\"499\":\"130\",\"500\":\"130#overview\",\"501\":\"131\",\"502\":\"131#overview\",\"503\":\"131#prerequisites\",\"504\":\"131#start-here\",\"505\":\"132\",\"506\":\"132#prerequisites\",\"507\":\"132#virtual-machines\",\"508\":\"132#docker-docker-compose\",\"509\":\"132#client-server-certificates\",\"510\":\"132#network-setup-network-access\",\"511\":\"132#setup\",\"512\":\"132#prepare-certificates\",\"513\":\"132#dsf-fhir-server\",\"514\":\"132#dsf-bpe-server\",\"515\":\"132#logs\",\"516\":\"132#on-boarding\",\"517\":\"133\",\"518\":\"134\",\"519\":\"134#modify-dsf-fhir-server-setup\",\"520\":\"134#modify-dsf-bpe-server-setup\",\"521\":\"135\",\"522\":\"135#overview\",\"523\":\"136\",\"524\":\"137\",\"525\":\"138\",\"526\":\"138#overview\",\"527\":\"139\",\"528\":\"139#overview\",\"529\":\"139#prerequisites\",\"530\":\"139#start-here\",\"531\":\"140\",\"532\":\"140#common-processes\",\"533\":\"140#mii-processes\",\"534\":\"140#num-processes\",\"535\":\"141\",\"536\":\"141#prerequisites\",\"537\":\"141#virtual-machines\",\"538\":\"141#docker-docker-compose\",\"539\":\"141#client-server-certificates\",\"540\":\"141#network-setup-network-access\",\"541\":\"141#setup\",\"542\":\"141#prepare-certificates\",\"543\":\"141#dsf-fhir-server\",\"544\":\"141#dsf-bpe-server\",\"545\":\"141#logs\",\"546\":\"141#on-boarding\",\"547\":\"142\",\"548\":\"143\",\"549\":\"143#modify-dsf-fhir-server-setup\",\"550\":\"143#modify-dsf-bpe-server-setup\",\"551\":\"144\",\"552\":\"144#overview\",\"553\":\"145\",\"554\":\"146\",\"555\":\"147\",\"556\":\"147#overview\",\"557\":\"148\",\"558\":\"148#overview\",\"559\":\"148#prerequisites\",\"560\":\"148#start-here\",\"561\":\"149\",\"562\":\"149#common-processes\",\"563\":\"149#mii-processes\",\"564\":\"149#num-processes\",\"565\":\"150\",\"566\":\"150#prerequisites\",\"567\":\"150#virtual-machines\",\"568\":\"150#docker-docker-compose\",\"569\":\"150#client-server-certificates\",\"570\":\"150#network-setup-network-access\",\"571\":\"150#setup\",\"572\":\"150#prepare-certificates\",\"573\":\"150#dsf-fhir-server\",\"574\":\"150#dsf-bpe-server\",\"575\":\"150#logs\",\"576\":\"150#on-boarding\",\"577\":\"151\",\"578\":\"152\",\"579\":\"152#modify-dsf-fhir-server-setup\",\"580\":\"152#modify-dsf-bpe-server-setup\",\"581\":\"153\",\"582\":\"153#overview\",\"583\":\"154\",\"584\":\"155\",\"585\":\"156\",\"586\":\"156#overview\",\"587\":\"157\",\"588\":\"157#overview\",\"589\":\"157#prerequisites\",\"590\":\"157#start-here\",\"591\":\"158\",\"592\":\"158#common-processes\",\"593\":\"158#mii-processes\",\"594\":\"158#num-processes\",\"595\":\"159\",\"596\":\"159#prerequisites\",\"597\":\"159#virtual-machines\",\"598\":\"159#docker-docker-compose\",\"599\":\"159#client-server-certificates\",\"600\":\"159#network-setup-network-access\",\"601\":\"159#setup\",\"602\":\"159#prepare-certificates\",\"603\":\"159#dsf-fhir-server\",\"604\":\"159#dsf-bpe-server\",\"605\":\"159#logs\",\"606\":\"159#on-boarding\",\"607\":\"160\",\"608\":\"161\",\"609\":\"161#modify-dsf-fhir-server-setup\",\"610\":\"161#modify-dsf-bpe-server-setup\",\"611\":\"162\",\"612\":\"162#benefits-of-contributing\",\"613\":\"162#general\",\"614\":\"162#code-style\",\"615\":\"162#branching-strategy\",\"616\":\"162#branch-naming\",\"617\":\"162#setting-up-the-project\",\"618\":\"162#java\",\"619\":\"162#docker\",\"620\":\"162#maven\",\"621\":\"162#workflow\",\"622\":\"162#pull-request-process\",\"623\":\"162#data-security-in-dsf-development\",\"624\":\"163\",\"625\":\"164\",\"626\":\"164#ways-you-can-contribute\",\"627\":\"165\",\"628\":\"165#overview\",\"629\":\"166\",\"630\":\"167\",\"631\":\"168\",\"632\":\"168#overview\",\"633\":\"169\",\"634\":\"169#overview\",\"635\":\"169#prerequisites\",\"636\":\"169#start-here\",\"637\":\"170\",\"638\":\"170#common-processes\",\"639\":\"170#mii-processes\",\"640\":\"170#num-processes\",\"641\":\"171\",\"642\":\"171#prerequisites\",\"643\":\"171#virtual-machines\",\"644\":\"171#docker-docker-compose\",\"645\":\"171#client-server-certificates\",\"646\":\"171#network-setup-network-access\",\"647\":\"171#setup\",\"648\":\"171#prepare-certificates\",\"649\":\"171#dsf-fhir-server\",\"650\":\"171#dsf-bpe-server\",\"651\":\"171#logs\",\"652\":\"171#on-boarding\",\"653\":\"172\",\"654\":\"173\",\"655\":\"173#modify-dsf-fhir-server-setup\",\"656\":\"173#modify-dsf-bpe-server-setup\",\"657\":\"174\",\"658\":\"174#benefits-of-contributing\",\"659\":\"174#general\",\"660\":\"174#code-style\",\"661\":\"174#branching-strategy\",\"662\":\"174#branch-naming\",\"663\":\"174#setting-up-the-project\",\"664\":\"174#java\",\"665\":\"174#docker\",\"666\":\"174#maven\",\"667\":\"174#workflow\",\"668\":\"174#pull-request-process\",\"669\":\"174#data-security-in-dsf-development\",\"670\":\"175\",\"671\":\"176\",\"672\":\"176#ways-you-can-contribute\",\"673\":\"177\",\"674\":\"177#overview\",\"675\":\"178\",\"676\":\"179\",\"677\":\"180\",\"678\":\"180#overview\",\"679\":\"181\",\"680\":\"181#overview\",\"681\":\"181#prerequisites\",\"682\":\"181#start-here\",\"683\":\"182\",\"684\":\"182#common-processes\",\"685\":\"182#mii-processes\",\"686\":\"182#num-processes\",\"687\":\"183\",\"688\":\"183#prerequisites\",\"689\":\"183#virtual-machines\",\"690\":\"183#docker-docker-compose\",\"691\":\"183#client-server-certificates\",\"692\":\"183#network-setup-network-access\",\"693\":\"183#setup\",\"694\":\"183#prepare-certificates\",\"695\":\"183#dsf-fhir-server\",\"696\":\"183#dsf-bpe-server\",\"697\":\"183#logs\",\"698\":\"183#on-boarding\",\"699\":\"184\",\"700\":\"185\",\"701\":\"185#modify-dsf-fhir-server-setup\",\"702\":\"185#modify-dsf-bpe-server-setup\",\"703\":\"186\",\"704\":\"186#benefits-of-contributing\",\"705\":\"186#general\",\"706\":\"186#code-style\",\"707\":\"186#branching-strategy\",\"708\":\"186#branch-naming\",\"709\":\"186#setting-up-the-project\",\"710\":\"186#java\",\"711\":\"186#docker\",\"712\":\"186#maven\",\"713\":\"186#workflow\",\"714\":\"186#pull-request-process\",\"715\":\"186#data-security-in-dsf-development\",\"716\":\"187\",\"717\":\"188\",\"718\":\"188#ways-you-can-contribute\",\"719\":\"189\",\"720\":\"189#overview\",\"721\":\"190\",\"722\":\"191\",\"723\":\"192\",\"724\":\"192#overview\",\"725\":\"193\",\"726\":\"193#overview\",\"727\":\"193#prerequisites\",\"728\":\"193#start-here\",\"729\":\"194\",\"730\":\"194#common-processes\",\"731\":\"194#mii-processes\",\"732\":\"194#num-processes\",\"733\":\"195\",\"734\":\"195#prerequisites\",\"735\":\"195#virtual-machines\",\"736\":\"195#docker-docker-compose\",\"737\":\"195#client-server-certificates\",\"738\":\"195#network-setup-network-access\",\"739\":\"195#setup\",\"740\":\"195#prepare-certificates\",\"741\":\"195#dsf-fhir-server\",\"742\":\"195#dsf-bpe-server\",\"743\":\"195#logs\",\"744\":\"195#on-boarding\",\"745\":\"196\",\"746\":\"197\",\"747\":\"197#modify-dsf-fhir-server-setup\",\"748\":\"197#modify-dsf-bpe-server-setup\",\"749\":\"198\",\"750\":\"198#benefits-of-contributing\",\"751\":\"198#general\",\"752\":\"198#code-style\",\"753\":\"198#branching-strategy\",\"754\":\"198#branch-naming\",\"755\":\"198#setting-up-the-project\",\"756\":\"198#java\",\"757\":\"198#docker\",\"758\":\"198#maven\",\"759\":\"198#workflow\",\"760\":\"198#pull-request-process\",\"761\":\"198#data-security-in-dsf-development\",\"762\":\"199\",\"763\":\"200\",\"764\":\"200#ways-you-can-contribute\",\"765\":\"201\",\"766\":\"201#overview\",\"767\":\"202\",\"768\":\"203\",\"769\":\"204\",\"770\":\"204#overview\",\"771\":\"205\",\"772\":\"205#overview\",\"773\":\"205#prerequisites\",\"774\":\"205#start-here\",\"775\":\"206\",\"776\":\"206#overview\",\"777\":\"206#prerequisites\",\"778\":\"206#deployment\",\"779\":\"207\",\"780\":\"207#prerequisites\",\"781\":\"207#virtual-machines\",\"782\":\"207#docker-docker-compose\",\"783\":\"207#client-server-certificates\",\"784\":\"207#network-setup-network-access\",\"785\":\"207#setup\",\"786\":\"207#prepare-certificates\",\"787\":\"207#dsf-fhir-server\",\"788\":\"207#dsf-bpe-server\",\"789\":\"207#logs\",\"790\":\"207#on-boarding\",\"791\":\"208\",\"792\":\"209\",\"793\":\"209#modify-dsf-fhir-server-setup\",\"794\":\"209#modify-dsf-bpe-server-setup\",\"795\":\"210\",\"796\":\"210#overview\",\"797\":\"211\",\"798\":\"211#overview\",\"799\":\"211#matching-users\",\"800\":\"211#thumbprint\",\"801\":\"211#email\",\"802\":\"211#token-role-and-token-group\",\"803\":\"211#dsf-and-practitioner-roles\",\"804\":\"211#dsf-role\",\"805\":\"211#practitioner-role\",\"806\":\"211#examples\",\"807\":\"212\",\"808\":\"212#dev-dsf-server-api-host\",\"809\":\"212#dev-dsf-server-api-port\",\"810\":\"212#dev-dsf-server-auth-client-certificate-header\",\"811\":\"212#dev-dsf-server-auth-oidc-authorization-code-flow\",\"812\":\"212#dev-dsf-server-auth-oidc-back-channel-logout\",\"813\":\"212#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"814\":\"212#dev-dsf-server-auth-oidc-bearer-token\",\"815\":\"212#dev-dsf-server-auth-oidc-client-id\",\"816\":\"212#dev-dsf-server-auth-oidc-client-secret\",\"817\":\"212#dev-dsf-server-auth-oidc-provider-client-certificate\",\"818\":\"212#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"819\":\"212#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"820\":\"212#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"821\":\"212#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"822\":\"212#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"823\":\"212#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"824\":\"212#dev-dsf-server-auth-trust-client-certificate-cas\",\"825\":\"212#dev-dsf-server-certificate\",\"826\":\"212#dev-dsf-server-certificate-chain\",\"827\":\"212#dev-dsf-server-certificate-key\",\"828\":\"212#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"829\":\"212#dev-dsf-server-context-path\",\"830\":\"212#dev-dsf-server-status-host\",\"831\":\"212#dev-dsf-server-status-port\",\"832\":\"212#dev-dsf-bpe-db-liquibase-forceunlock\",\"833\":\"212#dev-dsf-bpe-db-liquibase-lockwaittime\",\"834\":\"212#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file\",\"835\":\"212#dev-dsf-bpe-db-liquibase-username\",\"836\":\"212#dev-dsf-bpe-db-url\",\"837\":\"212#dev-dsf-bpe-db-user-camunda-group\",\"838\":\"212#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file\",\"839\":\"212#dev-dsf-bpe-db-user-camunda-username\",\"840\":\"212#dev-dsf-bpe-db-user-group\",\"841\":\"212#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file\",\"842\":\"212#dev-dsf-bpe-db-user-username\",\"843\":\"212#dev-dsf-bpe-debug-log-message-currentuser\",\"844\":\"212#dev-dsf-bpe-debug-log-message-dbstatement\",\"845\":\"212#dev-dsf-bpe-debug-log-message-onactivityend\",\"846\":\"212#dev-dsf-bpe-debug-log-message-onactivitystart\",\"847\":\"212#dev-dsf-bpe-debug-log-message-variables\",\"848\":\"212#dev-dsf-bpe-debug-log-message-variableslocal\",\"849\":\"212#dev-dsf-bpe-debug-log-message-webservicerequest\",\"850\":\"212#dev-dsf-bpe-fhir-client-certificate\",\"851\":\"212#dev-dsf-bpe-fhir-client-certificate-private-key\",\"852\":\"212#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file\",\"853\":\"212#dev-dsf-bpe-fhir-client-local-timeout-connect\",\"854\":\"212#dev-dsf-bpe-fhir-client-local-timeout-read\",\"855\":\"212#dev-dsf-bpe-fhir-client-local-verbose\",\"856\":\"212#dev-dsf-bpe-fhir-client-remote-timeout-connect\",\"857\":\"212#dev-dsf-bpe-fhir-client-remote-timeout-read\",\"858\":\"212#dev-dsf-bpe-fhir-client-remote-verbose\",\"859\":\"212#dev-dsf-bpe-fhir-client-trust-server-certificate-cas\",\"860\":\"212#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter\",\"861\":\"212#dev-dsf-bpe-fhir-server-base-url\",\"862\":\"212#dev-dsf-bpe-fhir-task-subscription-retry-max\",\"863\":\"212#dev-dsf-bpe-fhir-task-subscription-retry-sleep\",\"864\":\"212#dev-dsf-bpe-fhir-task-subscription-search-parameter\",\"865\":\"212#dev-dsf-bpe-mail-client-certificate\",\"866\":\"212#dev-dsf-bpe-mail-client-certificate-private-key\",\"867\":\"212#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file\",\"868\":\"212#dev-dsf-bpe-mail-fromaddress\",\"869\":\"212#dev-dsf-bpe-mail-host\",\"870\":\"212#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize\",\"871\":\"212#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation\",\"872\":\"212#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file\",\"873\":\"212#dev-dsf-bpe-mail-port\",\"874\":\"212#dev-dsf-bpe-mail-replytoaddresses\",\"875\":\"212#dev-dsf-bpe-mail-sendmailonerrorlogevent\",\"876\":\"212#dev-dsf-bpe-mail-sendtestmailonstartup\",\"877\":\"212#dev-dsf-bpe-mail-smime-p12keystore\",\"878\":\"212#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file\",\"879\":\"212#dev-dsf-bpe-mail-toaddresses\",\"880\":\"212#dev-dsf-bpe-mail-toaddressescc\",\"881\":\"212#dev-dsf-bpe-mail-trust-server-certificate-cas\",\"882\":\"212#dev-dsf-bpe-mail-username\",\"883\":\"212#dev-dsf-bpe-mail-usesmtps\",\"884\":\"212#dev-dsf-bpe-process-engine-corepoolsize\",\"885\":\"212#dev-dsf-bpe-process-engine-maxpoolsize\",\"886\":\"212#dev-dsf-bpe-process-engine-queuesize\",\"887\":\"212#dev-dsf-bpe-process-excluded\",\"888\":\"212#dev-dsf-bpe-process-fhir-server-retry-max\",\"889\":\"212#dev-dsf-bpe-process-fhir-server-retry-sleep\",\"890\":\"212#dev-dsf-bpe-process-plugin-directroy\",\"891\":\"212#dev-dsf-bpe-process-retired\",\"892\":\"212#dev-dsf-bpe-process-threads\",\"893\":\"212#dev-dsf-bpe-server-base-url\",\"894\":\"212#dev-dsf-bpe-server-roleconfig\",\"895\":\"212#dev-dsf-bpe-server-static-resource-cache\",\"896\":\"212#dev-dsf-bpe-server-ui-theme\",\"897\":\"212#dev-dsf-proxy-noproxy\",\"898\":\"212#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"899\":\"212#dev-dsf-proxy-url\",\"900\":\"212#dev-dsf-proxy-username\",\"901\":\"213\",\"902\":\"213#overview\",\"903\":\"213#authorization-code-flow\",\"904\":\"213#additional-odic-configuration-parameter\",\"905\":\"213#example\",\"906\":\"214\",\"907\":\"214#overview\",\"908\":\"215\",\"909\":\"215#app-server-ip\",\"910\":\"215#https-server-name-port\",\"911\":\"215#proxy-pass-connection-timeout-http\",\"912\":\"215#proxy-pass-connection-timeout-ws\",\"913\":\"215#proxy-pass-timeout-http\",\"914\":\"215#proxy-pass-timeout-ws\",\"915\":\"215#server-context-path\",\"916\":\"215#ssl-ca-certificate-file\",\"917\":\"215#ssl-ca-dn-request-file\",\"918\":\"215#ssl-certificate-chain-file\",\"919\":\"215#ssl-certificate-file\",\"920\":\"215#ssl-certificate-key-file\",\"921\":\"215#ssl-verify-client\",\"922\":\"216\",\"923\":\"216#overview\",\"924\":\"217\",\"925\":\"217#overview\",\"926\":\"217#matching-users\",\"927\":\"217#thumbprint\",\"928\":\"217#email\",\"929\":\"217#token-role-and-token-group\",\"930\":\"217#dsf-and-practitioner-roles\",\"931\":\"217#dsf-role\",\"932\":\"217#practitioner-role\",\"933\":\"217#examples\",\"934\":\"218\",\"935\":\"218#dev-dsf-fhir-client-certificate\",\"936\":\"218#dev-dsf-fhir-client-certificate-private-key\",\"937\":\"218#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file\",\"938\":\"218#dev-dsf-fhir-client-timeout-connect\",\"939\":\"218#dev-dsf-fhir-client-timeout-read\",\"940\":\"218#dev-dsf-fhir-client-trust-server-certificate-cas\",\"941\":\"218#dev-dsf-fhir-client-verbose\",\"942\":\"218#dev-dsf-fhir-db-liquibase-forceunlock\",\"943\":\"218#dev-dsf-fhir-db-liquibase-lockwaittime\",\"944\":\"218#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file\",\"945\":\"218#dev-dsf-fhir-db-liquibase-username\",\"946\":\"218#dev-dsf-fhir-db-url\",\"947\":\"218#dev-dsf-fhir-db-user-group\",\"948\":\"218#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file\",\"949\":\"218#dev-dsf-fhir-db-user-permanent-delete-group\",\"950\":\"218#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file\",\"951\":\"218#dev-dsf-fhir-db-user-permanent-delete-username\",\"952\":\"218#dev-dsf-fhir-db-user-username\",\"953\":\"218#dev-dsf-fhir-debug-log-message-currentuser\",\"954\":\"218#dev-dsf-fhir-debug-log-message-dbstatement\",\"955\":\"218#dev-dsf-fhir-debug-log-message-webservicerequest\",\"956\":\"218#dev-dsf-fhir-server-base-url\",\"957\":\"218#dev-dsf-fhir-server-init-bundle\",\"958\":\"218#dev-dsf-fhir-server-organization-identifier-value\",\"959\":\"218#dev-dsf-fhir-server-organization-thumbprint\",\"960\":\"218#dev-dsf-fhir-server-page-count\",\"961\":\"218#dev-dsf-fhir-server-roleconfig\",\"962\":\"218#dev-dsf-fhir-server-static-resource-cache\",\"963\":\"218#dev-dsf-fhir-server-ui-theme\",\"964\":\"218#dev-dsf-proxy-noproxy\",\"965\":\"218#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"966\":\"218#dev-dsf-proxy-url\",\"967\":\"218#dev-dsf-proxy-username\",\"968\":\"218#dev-dsf-server-api-host\",\"969\":\"218#dev-dsf-server-api-port\",\"970\":\"218#dev-dsf-server-auth-client-certificate-header\",\"971\":\"218#dev-dsf-server-auth-oidc-authorization-code-flow\",\"972\":\"218#dev-dsf-server-auth-oidc-back-channel-logout\",\"973\":\"218#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"974\":\"218#dev-dsf-server-auth-oidc-bearer-token\",\"975\":\"218#dev-dsf-server-auth-oidc-client-id\",\"976\":\"218#dev-dsf-server-auth-oidc-client-secret\",\"977\":\"218#dev-dsf-server-auth-oidc-provider-client-certificate\",\"978\":\"218#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"979\":\"218#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"980\":\"218#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"981\":\"218#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"982\":\"218#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"983\":\"218#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"984\":\"218#dev-dsf-server-auth-trust-client-certificate-cas\",\"985\":\"218#dev-dsf-server-certificate\",\"986\":\"218#dev-dsf-server-certificate-chain\",\"987\":\"218#dev-dsf-server-certificate-key\",\"988\":\"218#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"989\":\"218#dev-dsf-server-context-path\",\"990\":\"218#dev-dsf-server-status-host\",\"991\":\"218#dev-dsf-server-status-port\",\"992\":\"219\",\"993\":\"219#overview\",\"994\":\"219#authorization-code-flow\",\"995\":\"219#bearer-token-authentication\",\"996\":\"219#additional-odic-configuration-parameter\",\"997\":\"219#example\",\"998\":\"220\",\"999\":\"220#overview\",\"1000\":\"221\",\"1001\":\"221#app-server-ip\",\"1002\":\"221#https-server-name-port\",\"1003\":\"221#proxy-pass-connection-timeout-http\",\"1004\":\"221#proxy-pass-connection-timeout-ws\",\"1005\":\"221#proxy-pass-timeout-http\",\"1006\":\"221#proxy-pass-timeout-ws\",\"1007\":\"221#server-context-path\",\"1008\":\"221#ssl-ca-certificate-file\",\"1009\":\"221#ssl-ca-dn-request-file\",\"1010\":\"221#ssl-certificate-chain-file\",\"1011\":\"221#ssl-certificate-file\",\"1012\":\"221#ssl-certificate-key-file\",\"1013\":\"221#ssl-verify-client\",\"1014\":\"222\",\"1015\":\"222#overview\",\"1016\":\"223\",\"1017\":\"223#dev-dsf-bpe-db-liquibase-forceunlock\",\"1018\":\"223#dev-dsf-bpe-db-liquibase-lockwaittime\",\"1019\":\"223#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file\",\"1020\":\"223#dev-dsf-bpe-db-liquibase-username\",\"1021\":\"223#dev-dsf-bpe-db-url\",\"1022\":\"223#dev-dsf-bpe-db-user-camunda-group\",\"1023\":\"223#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file\",\"1024\":\"223#dev-dsf-bpe-db-user-camunda-username\",\"1025\":\"223#dev-dsf-bpe-db-user-group\",\"1026\":\"223#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file\",\"1027\":\"223#dev-dsf-bpe-db-user-username\",\"1028\":\"223#dev-dsf-bpe-debug-log-message-onactivityend\",\"1029\":\"223#dev-dsf-bpe-debug-log-message-onactivitystart\",\"1030\":\"223#dev-dsf-bpe-debug-log-message-variables\",\"1031\":\"223#dev-dsf-bpe-fhir-client-certificate\",\"1032\":\"223#dev-dsf-bpe-fhir-client-certificate-private-key\",\"1033\":\"223#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file\",\"1034\":\"223#dev-dsf-bpe-fhir-client-local-timeout-connect\",\"1035\":\"223#dev-dsf-bpe-fhir-client-local-timeout-read\",\"1036\":\"223#dev-dsf-bpe-fhir-client-local-verbose\",\"1037\":\"223#dev-dsf-bpe-fhir-client-remote-timeout-connect\",\"1038\":\"223#dev-dsf-bpe-fhir-client-remote-timeout-read\",\"1039\":\"223#dev-dsf-bpe-fhir-client-remote-verbose\",\"1040\":\"223#dev-dsf-bpe-fhir-client-trust-server-certificate-cas\",\"1041\":\"223#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter\",\"1042\":\"223#dev-dsf-bpe-fhir-server-base-url\",\"1043\":\"223#dev-dsf-bpe-fhir-server-organization-identifier-value\",\"1044\":\"223#dev-dsf-bpe-fhir-task-subscription-retry-max\",\"1045\":\"223#dev-dsf-bpe-fhir-task-subscription-retry-sleep\",\"1046\":\"223#dev-dsf-bpe-fhir-task-subscription-search-parameter\",\"1047\":\"223#dev-dsf-bpe-mail-client-certificate\",\"1048\":\"223#dev-dsf-bpe-mail-client-certificate-private-key\",\"1049\":\"223#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file\",\"1050\":\"223#dev-dsf-bpe-mail-fromaddress\",\"1051\":\"223#dev-dsf-bpe-mail-host\",\"1052\":\"223#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize\",\"1053\":\"223#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation\",\"1054\":\"223#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file\",\"1055\":\"223#dev-dsf-bpe-mail-port\",\"1056\":\"223#dev-dsf-bpe-mail-replytoaddresses\",\"1057\":\"223#dev-dsf-bpe-mail-sendmailonerrorlogevent\",\"1058\":\"223#dev-dsf-bpe-mail-sendtestmailonstartup\",\"1059\":\"223#dev-dsf-bpe-mail-smime-p12keystore\",\"1060\":\"223#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file\",\"1061\":\"223#dev-dsf-bpe-mail-toaddresses\",\"1062\":\"223#dev-dsf-bpe-mail-toaddressescc\",\"1063\":\"223#dev-dsf-bpe-mail-trust-server-certificate-cas\",\"1064\":\"223#dev-dsf-bpe-mail-username\",\"1065\":\"223#dev-dsf-bpe-mail-usesmtps\",\"1066\":\"223#dev-dsf-bpe-process-excluded\",\"1067\":\"223#dev-dsf-bpe-process-fhir-server-retry-max\",\"1068\":\"223#dev-dsf-bpe-process-fhir-server-retry-sleep\",\"1069\":\"223#dev-dsf-bpe-process-plugin-directroy\",\"1070\":\"223#dev-dsf-bpe-process-retired\",\"1071\":\"223#dev-dsf-proxy-noproxy\",\"1072\":\"223#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"1073\":\"223#dev-dsf-proxy-url\",\"1074\":\"223#dev-dsf-proxy-username\",\"1075\":\"224\",\"1076\":\"224#dev-dsf-server-api-host\",\"1077\":\"224#dev-dsf-server-api-port\",\"1078\":\"224#dev-dsf-server-auth-client-certificate-header\",\"1079\":\"224#dev-dsf-server-auth-oidc-authorization-code-flow\",\"1080\":\"224#dev-dsf-server-auth-oidc-back-channel-logout\",\"1081\":\"224#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"1082\":\"224#dev-dsf-server-auth-oidc-bearer-token\",\"1083\":\"224#dev-dsf-server-auth-oidc-client-id\",\"1084\":\"224#dev-dsf-server-auth-oidc-client-secret\",\"1085\":\"224#dev-dsf-server-auth-oidc-provider-client-certificate\",\"1086\":\"224#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"1087\":\"224#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"1088\":\"224#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"1089\":\"224#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"1090\":\"224#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"1091\":\"224#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"1092\":\"224#dev-dsf-server-auth-trust-client-certificate-cas\",\"1093\":\"224#dev-dsf-server-certificate\",\"1094\":\"224#dev-dsf-server-certificate-chain\",\"1095\":\"224#dev-dsf-server-certificate-key\",\"1096\":\"224#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"1097\":\"224#dev-dsf-server-context-path\",\"1098\":\"224#dev-dsf-server-status-host\",\"1099\":\"224#dev-dsf-server-status-port\",\"1100\":\"225\",\"1101\":\"225#dev-dsf-fhir-client-certificate\",\"1102\":\"225#dev-dsf-fhir-client-certificate-private-key\",\"1103\":\"225#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file\",\"1104\":\"225#dev-dsf-fhir-client-timeout-connect\",\"1105\":\"225#dev-dsf-fhir-client-timeout-read\",\"1106\":\"225#dev-dsf-fhir-client-trust-server-certificate-cas\",\"1107\":\"225#dev-dsf-fhir-client-verbose\",\"1108\":\"225#dev-dsf-fhir-db-liquibase-forceunlock\",\"1109\":\"225#dev-dsf-fhir-db-liquibase-lockwaittime\",\"1110\":\"225#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file\",\"1111\":\"225#dev-dsf-fhir-db-liquibase-username\",\"1112\":\"225#dev-dsf-fhir-db-url\",\"1113\":\"225#dev-dsf-fhir-db-user-group\",\"1114\":\"225#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file\",\"1115\":\"225#dev-dsf-fhir-db-user-permanent-delete-group\",\"1116\":\"225#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file\",\"1117\":\"225#dev-dsf-fhir-db-user-permanent-delete-username\",\"1118\":\"225#dev-dsf-fhir-db-user-username\",\"1119\":\"225#dev-dsf-fhir-server-base-url\",\"1120\":\"225#dev-dsf-fhir-server-init-bundle\",\"1121\":\"225#dev-dsf-fhir-server-organization-identifier-value\",\"1122\":\"225#dev-dsf-fhir-server-page-count\",\"1123\":\"225#dev-dsf-fhir-server-roleconfig\",\"1124\":\"225#dev-dsf-fhir-server-static-resource-cache\",\"1125\":\"225#dev-dsf-proxy-noproxy\",\"1126\":\"225#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"1127\":\"225#dev-dsf-proxy-url\",\"1128\":\"225#dev-dsf-proxy-username\",\"1129\":\"226\",\"1130\":\"226#app-server-ip\",\"1131\":\"226#https-server-name-port\",\"1132\":\"226#proxy-pass-connection-timeout-http\",\"1133\":\"226#proxy-pass-connection-timeout-ws\",\"1134\":\"226#proxy-pass-timeout-http\",\"1135\":\"226#proxy-pass-timeout-ws\",\"1136\":\"226#ssl-ca-certificate-file\",\"1137\":\"226#ssl-ca-dn-request-file\",\"1138\":\"226#ssl-certificate-chain-file\",\"1139\":\"226#ssl-certificate-file\",\"1140\":\"226#ssl-certificate-key-file\",\"1141\":\"227\",\"1142\":\"227#overview\",\"1143\":\"228\",\"1144\":\"228#dev-dsf-server-api-host\",\"1145\":\"228#dev-dsf-server-api-port\",\"1146\":\"228#dev-dsf-server-auth-client-certificate-header\",\"1147\":\"228#dev-dsf-server-auth-oidc-authorization-code-flow\",\"1148\":\"228#dev-dsf-server-auth-oidc-back-channel-logout\",\"1149\":\"228#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"1150\":\"228#dev-dsf-server-auth-oidc-bearer-token\",\"1151\":\"228#dev-dsf-server-auth-oidc-client-id\",\"1152\":\"228#dev-dsf-server-auth-oidc-client-secret\",\"1153\":\"228#dev-dsf-server-auth-oidc-provider-client-certificate\",\"1154\":\"228#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"1155\":\"228#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"1156\":\"228#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"1157\":\"228#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"1158\":\"228#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"1159\":\"228#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"1160\":\"228#dev-dsf-server-auth-trust-client-certificate-cas\",\"1161\":\"228#dev-dsf-server-certificate\",\"1162\":\"228#dev-dsf-server-certificate-chain\",\"1163\":\"228#dev-dsf-server-certificate-key\",\"1164\":\"228#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"1165\":\"228#dev-dsf-server-context-path\",\"1166\":\"228#dev-dsf-server-status-host\",\"1167\":\"228#dev-dsf-server-status-port\",\"1168\":\"228#dev-dsf-bpe-db-liquibase-forceunlock\",\"1169\":\"228#dev-dsf-bpe-db-liquibase-lockwaittime\",\"1170\":\"228#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file\",\"1171\":\"228#dev-dsf-bpe-db-liquibase-username\",\"1172\":\"228#dev-dsf-bpe-db-url\",\"1173\":\"228#dev-dsf-bpe-db-user-camunda-group\",\"1174\":\"228#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file\",\"1175\":\"228#dev-dsf-bpe-db-user-camunda-username\",\"1176\":\"228#dev-dsf-bpe-db-user-group\",\"1177\":\"228#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file\",\"1178\":\"228#dev-dsf-bpe-db-user-username\",\"1179\":\"228#dev-dsf-bpe-debug-log-message-onactivityend\",\"1180\":\"228#dev-dsf-bpe-debug-log-message-onactivitystart\",\"1181\":\"228#dev-dsf-bpe-debug-log-message-variables\",\"1182\":\"228#dev-dsf-bpe-fhir-client-certificate\",\"1183\":\"228#dev-dsf-bpe-fhir-client-certificate-private-key\",\"1184\":\"228#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file\",\"1185\":\"228#dev-dsf-bpe-fhir-client-local-timeout-connect\",\"1186\":\"228#dev-dsf-bpe-fhir-client-local-timeout-read\",\"1187\":\"228#dev-dsf-bpe-fhir-client-local-verbose\",\"1188\":\"228#dev-dsf-bpe-fhir-client-remote-timeout-connect\",\"1189\":\"228#dev-dsf-bpe-fhir-client-remote-timeout-read\",\"1190\":\"228#dev-dsf-bpe-fhir-client-remote-verbose\",\"1191\":\"228#dev-dsf-bpe-fhir-client-trust-server-certificate-cas\",\"1192\":\"228#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter\",\"1193\":\"228#dev-dsf-bpe-fhir-server-base-url\",\"1194\":\"228#dev-dsf-bpe-fhir-server-organization-identifier-value\",\"1195\":\"228#dev-dsf-bpe-fhir-task-subscription-retry-max\",\"1196\":\"228#dev-dsf-bpe-fhir-task-subscription-retry-sleep\",\"1197\":\"228#dev-dsf-bpe-fhir-task-subscription-search-parameter\",\"1198\":\"228#dev-dsf-bpe-mail-client-certificate\",\"1199\":\"228#dev-dsf-bpe-mail-client-certificate-private-key\",\"1200\":\"228#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file\",\"1201\":\"228#dev-dsf-bpe-mail-fromaddress\",\"1202\":\"228#dev-dsf-bpe-mail-host\",\"1203\":\"228#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize\",\"1204\":\"228#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation\",\"1205\":\"228#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file\",\"1206\":\"228#dev-dsf-bpe-mail-port\",\"1207\":\"228#dev-dsf-bpe-mail-replytoaddresses\",\"1208\":\"228#dev-dsf-bpe-mail-sendmailonerrorlogevent\",\"1209\":\"228#dev-dsf-bpe-mail-sendtestmailonstartup\",\"1210\":\"228#dev-dsf-bpe-mail-smime-p12keystore\",\"1211\":\"228#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file\",\"1212\":\"228#dev-dsf-bpe-mail-toaddresses\",\"1213\":\"228#dev-dsf-bpe-mail-toaddressescc\",\"1214\":\"228#dev-dsf-bpe-mail-trust-server-certificate-cas\",\"1215\":\"228#dev-dsf-bpe-mail-username\",\"1216\":\"228#dev-dsf-bpe-mail-usesmtps\",\"1217\":\"228#dev-dsf-bpe-process-excluded\",\"1218\":\"228#dev-dsf-bpe-process-fhir-server-retry-max\",\"1219\":\"228#dev-dsf-bpe-process-fhir-server-retry-sleep\",\"1220\":\"228#dev-dsf-bpe-process-plugin-directroy\",\"1221\":\"228#dev-dsf-bpe-process-retired\",\"1222\":\"228#dev-dsf-proxy-noproxy\",\"1223\":\"228#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"1224\":\"228#dev-dsf-proxy-url\",\"1225\":\"228#dev-dsf-proxy-username\",\"1226\":\"229\",\"1227\":\"229#overview\",\"1228\":\"230\",\"1229\":\"230#overview\",\"1230\":\"230#matching-users\",\"1231\":\"230#thumbprint\",\"1232\":\"230#email\",\"1233\":\"230#token-role-and-token-group\",\"1234\":\"230#dsf-and-practitioner-roles\",\"1235\":\"230#dsf-role\",\"1236\":\"230#practitioner-role\",\"1237\":\"230#examples\",\"1238\":\"231\",\"1239\":\"231#dev-dsf-fhir-client-certificate\",\"1240\":\"231#dev-dsf-fhir-client-certificate-private-key\",\"1241\":\"231#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file\",\"1242\":\"231#dev-dsf-fhir-client-timeout-connect\",\"1243\":\"231#dev-dsf-fhir-client-timeout-read\",\"1244\":\"231#dev-dsf-fhir-client-trust-server-certificate-cas\",\"1245\":\"231#dev-dsf-fhir-client-verbose\",\"1246\":\"231#dev-dsf-fhir-db-liquibase-forceunlock\",\"1247\":\"231#dev-dsf-fhir-db-liquibase-lockwaittime\",\"1248\":\"231#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file\",\"1249\":\"231#dev-dsf-fhir-db-liquibase-username\",\"1250\":\"231#dev-dsf-fhir-db-url\",\"1251\":\"231#dev-dsf-fhir-db-user-group\",\"1252\":\"231#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file\",\"1253\":\"231#dev-dsf-fhir-db-user-permanent-delete-group\",\"1254\":\"231#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file\",\"1255\":\"231#dev-dsf-fhir-db-user-permanent-delete-username\",\"1256\":\"231#dev-dsf-fhir-db-user-username\",\"1257\":\"231#dev-dsf-fhir-server-base-url\",\"1258\":\"231#dev-dsf-fhir-server-init-bundle\",\"1259\":\"231#dev-dsf-fhir-server-organization-identifier-value\",\"1260\":\"231#dev-dsf-fhir-server-organization-thumbprint\",\"1261\":\"231#dev-dsf-fhir-server-page-count\",\"1262\":\"231#dev-dsf-fhir-server-roleconfig\",\"1263\":\"231#dev-dsf-fhir-server-static-resource-cache\",\"1264\":\"231#dev-dsf-proxy-noproxy\",\"1265\":\"231#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"1266\":\"231#dev-dsf-proxy-url\",\"1267\":\"231#dev-dsf-proxy-username\",\"1268\":\"231#dev-dsf-server-api-host\",\"1269\":\"231#dev-dsf-server-api-port\",\"1270\":\"231#dev-dsf-server-auth-client-certificate-header\",\"1271\":\"231#dev-dsf-server-auth-oidc-authorization-code-flow\",\"1272\":\"231#dev-dsf-server-auth-oidc-back-channel-logout\",\"1273\":\"231#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"1274\":\"231#dev-dsf-server-auth-oidc-bearer-token\",\"1275\":\"231#dev-dsf-server-auth-oidc-client-id\",\"1276\":\"231#dev-dsf-server-auth-oidc-client-secret\",\"1277\":\"231#dev-dsf-server-auth-oidc-provider-client-certificate\",\"1278\":\"231#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"1279\":\"231#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"1280\":\"231#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"1281\":\"231#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"1282\":\"231#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"1283\":\"231#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"1284\":\"231#dev-dsf-server-auth-trust-client-certificate-cas\",\"1285\":\"231#dev-dsf-server-certificate\",\"1286\":\"231#dev-dsf-server-certificate-chain\",\"1287\":\"231#dev-dsf-server-certificate-key\",\"1288\":\"231#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"1289\":\"231#dev-dsf-server-context-path\",\"1290\":\"231#dev-dsf-server-status-host\",\"1291\":\"231#dev-dsf-server-status-port\",\"1292\":\"232\",\"1293\":\"232#overview\",\"1294\":\"232#authorization-code-flow\",\"1295\":\"232#bearer-token-authentication\",\"1296\":\"232#additional-odic-configuration-parameter\",\"1297\":\"232#example\",\"1298\":\"233\",\"1299\":\"233#overview\",\"1300\":\"234\",\"1301\":\"234#app-server-ip\",\"1302\":\"234#https-server-name-port\",\"1303\":\"234#proxy-pass-connection-timeout-http\",\"1304\":\"234#proxy-pass-connection-timeout-ws\",\"1305\":\"234#proxy-pass-timeout-http\",\"1306\":\"234#proxy-pass-timeout-ws\",\"1307\":\"234#ssl-ca-certificate-file\",\"1308\":\"234#ssl-ca-dn-request-file\",\"1309\":\"234#ssl-certificate-chain-file\",\"1310\":\"234#ssl-certificate-file\",\"1311\":\"234#ssl-certificate-key-file\",\"1312\":\"234#ssl-verify-client\",\"1313\":\"235\",\"1314\":\"235#overview\",\"1315\":\"236\",\"1316\":\"236#dev-dsf-server-api-host\",\"1317\":\"236#dev-dsf-server-api-port\",\"1318\":\"236#dev-dsf-server-auth-client-certificate-header\",\"1319\":\"236#dev-dsf-server-auth-oidc-authorization-code-flow\",\"1320\":\"236#dev-dsf-server-auth-oidc-back-channel-logout\",\"1321\":\"236#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"1322\":\"236#dev-dsf-server-auth-oidc-bearer-token\",\"1323\":\"236#dev-dsf-server-auth-oidc-client-id\",\"1324\":\"236#dev-dsf-server-auth-oidc-client-secret\",\"1325\":\"236#dev-dsf-server-auth-oidc-provider-client-certificate\",\"1326\":\"236#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"1327\":\"236#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"1328\":\"236#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"1329\":\"236#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"1330\":\"236#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"1331\":\"236#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"1332\":\"236#dev-dsf-server-auth-trust-client-certificate-cas\",\"1333\":\"236#dev-dsf-server-certificate\",\"1334\":\"236#dev-dsf-server-certificate-chain\",\"1335\":\"236#dev-dsf-server-certificate-key\",\"1336\":\"236#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"1337\":\"236#dev-dsf-server-context-path\",\"1338\":\"236#dev-dsf-server-status-host\",\"1339\":\"236#dev-dsf-server-status-port\",\"1340\":\"236#dev-dsf-bpe-db-liquibase-forceunlock\",\"1341\":\"236#dev-dsf-bpe-db-liquibase-lockwaittime\",\"1342\":\"236#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file\",\"1343\":\"236#dev-dsf-bpe-db-liquibase-username\",\"1344\":\"236#dev-dsf-bpe-db-url\",\"1345\":\"236#dev-dsf-bpe-db-user-camunda-group\",\"1346\":\"236#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file\",\"1347\":\"236#dev-dsf-bpe-db-user-camunda-username\",\"1348\":\"236#dev-dsf-bpe-db-user-group\",\"1349\":\"236#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file\",\"1350\":\"236#dev-dsf-bpe-db-user-username\",\"1351\":\"236#dev-dsf-bpe-debug-log-message-onactivityend\",\"1352\":\"236#dev-dsf-bpe-debug-log-message-onactivitystart\",\"1353\":\"236#dev-dsf-bpe-debug-log-message-variables\",\"1354\":\"236#dev-dsf-bpe-debug-log-message-variableslocal\",\"1355\":\"236#dev-dsf-bpe-fhir-client-certificate\",\"1356\":\"236#dev-dsf-bpe-fhir-client-certificate-private-key\",\"1357\":\"236#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file\",\"1358\":\"236#dev-dsf-bpe-fhir-client-local-timeout-connect\",\"1359\":\"236#dev-dsf-bpe-fhir-client-local-timeout-read\",\"1360\":\"236#dev-dsf-bpe-fhir-client-local-verbose\",\"1361\":\"236#dev-dsf-bpe-fhir-client-remote-timeout-connect\",\"1362\":\"236#dev-dsf-bpe-fhir-client-remote-timeout-read\",\"1363\":\"236#dev-dsf-bpe-fhir-client-remote-verbose\",\"1364\":\"236#dev-dsf-bpe-fhir-client-trust-server-certificate-cas\",\"1365\":\"236#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter\",\"1366\":\"236#dev-dsf-bpe-fhir-server-base-url\",\"1367\":\"236#dev-dsf-bpe-fhir-task-subscription-retry-max\",\"1368\":\"236#dev-dsf-bpe-fhir-task-subscription-retry-sleep\",\"1369\":\"236#dev-dsf-bpe-fhir-task-subscription-search-parameter\",\"1370\":\"236#dev-dsf-bpe-mail-client-certificate\",\"1371\":\"236#dev-dsf-bpe-mail-client-certificate-private-key\",\"1372\":\"236#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file\",\"1373\":\"236#dev-dsf-bpe-mail-fromaddress\",\"1374\":\"236#dev-dsf-bpe-mail-host\",\"1375\":\"236#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize\",\"1376\":\"236#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation\",\"1377\":\"236#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file\",\"1378\":\"236#dev-dsf-bpe-mail-port\",\"1379\":\"236#dev-dsf-bpe-mail-replytoaddresses\",\"1380\":\"236#dev-dsf-bpe-mail-sendmailonerrorlogevent\",\"1381\":\"236#dev-dsf-bpe-mail-sendtestmailonstartup\",\"1382\":\"236#dev-dsf-bpe-mail-smime-p12keystore\",\"1383\":\"236#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file\",\"1384\":\"236#dev-dsf-bpe-mail-toaddresses\",\"1385\":\"236#dev-dsf-bpe-mail-toaddressescc\",\"1386\":\"236#dev-dsf-bpe-mail-trust-server-certificate-cas\",\"1387\":\"236#dev-dsf-bpe-mail-username\",\"1388\":\"236#dev-dsf-bpe-mail-usesmtps\",\"1389\":\"236#dev-dsf-bpe-process-engine-corepoolsize\",\"1390\":\"236#dev-dsf-bpe-process-engine-maxpoolsize\",\"1391\":\"236#dev-dsf-bpe-process-engine-queuesize\",\"1392\":\"236#dev-dsf-bpe-process-excluded\",\"1393\":\"236#dev-dsf-bpe-process-fhir-server-retry-max\",\"1394\":\"236#dev-dsf-bpe-process-fhir-server-retry-sleep\",\"1395\":\"236#dev-dsf-bpe-process-plugin-directroy\",\"1396\":\"236#dev-dsf-bpe-process-retired\",\"1397\":\"236#dev-dsf-bpe-process-threads\",\"1398\":\"236#dev-dsf-proxy-noproxy\",\"1399\":\"236#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"1400\":\"236#dev-dsf-proxy-url\",\"1401\":\"236#dev-dsf-proxy-username\",\"1402\":\"237\",\"1403\":\"237#overview\",\"1404\":\"238\",\"1405\":\"238#overview\",\"1406\":\"238#matching-users\",\"1407\":\"238#thumbprint\",\"1408\":\"238#email\",\"1409\":\"238#token-role-and-token-group\",\"1410\":\"238#dsf-and-practitioner-roles\",\"1411\":\"238#dsf-role\",\"1412\":\"238#practitioner-role\",\"1413\":\"238#examples\",\"1414\":\"239\",\"1415\":\"239#dev-dsf-fhir-client-certificate\",\"1416\":\"239#dev-dsf-fhir-client-certificate-private-key\",\"1417\":\"239#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file\",\"1418\":\"239#dev-dsf-fhir-client-timeout-connect\",\"1419\":\"239#dev-dsf-fhir-client-timeout-read\",\"1420\":\"239#dev-dsf-fhir-client-trust-server-certificate-cas\",\"1421\":\"239#dev-dsf-fhir-client-verbose\",\"1422\":\"239#dev-dsf-fhir-db-liquibase-forceunlock\",\"1423\":\"239#dev-dsf-fhir-db-liquibase-lockwaittime\",\"1424\":\"239#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file\",\"1425\":\"239#dev-dsf-fhir-db-liquibase-username\",\"1426\":\"239#dev-dsf-fhir-db-url\",\"1427\":\"239#dev-dsf-fhir-db-user-group\",\"1428\":\"239#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file\",\"1429\":\"239#dev-dsf-fhir-db-user-permanent-delete-group\",\"1430\":\"239#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file\",\"1431\":\"239#dev-dsf-fhir-db-user-permanent-delete-username\",\"1432\":\"239#dev-dsf-fhir-db-user-username\",\"1433\":\"239#dev-dsf-fhir-server-base-url\",\"1434\":\"239#dev-dsf-fhir-server-init-bundle\",\"1435\":\"239#dev-dsf-fhir-server-organization-identifier-value\",\"1436\":\"239#dev-dsf-fhir-server-organization-thumbprint\",\"1437\":\"239#dev-dsf-fhir-server-page-count\",\"1438\":\"239#dev-dsf-fhir-server-roleconfig\",\"1439\":\"239#dev-dsf-fhir-server-static-resource-cache\",\"1440\":\"239#dev-dsf-proxy-noproxy\",\"1441\":\"239#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"1442\":\"239#dev-dsf-proxy-url\",\"1443\":\"239#dev-dsf-proxy-username\",\"1444\":\"239#dev-dsf-server-api-host\",\"1445\":\"239#dev-dsf-server-api-port\",\"1446\":\"239#dev-dsf-server-auth-client-certificate-header\",\"1447\":\"239#dev-dsf-server-auth-oidc-authorization-code-flow\",\"1448\":\"239#dev-dsf-server-auth-oidc-back-channel-logout\",\"1449\":\"239#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"1450\":\"239#dev-dsf-server-auth-oidc-bearer-token\",\"1451\":\"239#dev-dsf-server-auth-oidc-client-id\",\"1452\":\"239#dev-dsf-server-auth-oidc-client-secret\",\"1453\":\"239#dev-dsf-server-auth-oidc-provider-client-certificate\",\"1454\":\"239#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"1455\":\"239#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"1456\":\"239#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"1457\":\"239#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"1458\":\"239#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"1459\":\"239#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"1460\":\"239#dev-dsf-server-auth-trust-client-certificate-cas\",\"1461\":\"239#dev-dsf-server-certificate\",\"1462\":\"239#dev-dsf-server-certificate-chain\",\"1463\":\"239#dev-dsf-server-certificate-key\",\"1464\":\"239#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"1465\":\"239#dev-dsf-server-context-path\",\"1466\":\"239#dev-dsf-server-status-host\",\"1467\":\"239#dev-dsf-server-status-port\",\"1468\":\"240\",\"1469\":\"240#overview\",\"1470\":\"240#authorization-code-flow\",\"1471\":\"240#bearer-token-authentication\",\"1472\":\"240#additional-odic-configuration-parameter\",\"1473\":\"240#example\",\"1474\":\"241\",\"1475\":\"241#overview\",\"1476\":\"242\",\"1477\":\"242#app-server-ip\",\"1478\":\"242#https-server-name-port\",\"1479\":\"242#proxy-pass-connection-timeout-http\",\"1480\":\"242#proxy-pass-connection-timeout-ws\",\"1481\":\"242#proxy-pass-timeout-http\",\"1482\":\"242#proxy-pass-timeout-ws\",\"1483\":\"242#server-context-path\",\"1484\":\"242#ssl-ca-certificate-file\",\"1485\":\"242#ssl-ca-dn-request-file\",\"1486\":\"242#ssl-certificate-chain-file\",\"1487\":\"242#ssl-certificate-file\",\"1488\":\"242#ssl-certificate-key-file\",\"1489\":\"242#ssl-verify-client\",\"1490\":\"243\",\"1491\":\"243#overview\",\"1492\":\"244\",\"1493\":\"244#dev-dsf-server-api-host\",\"1494\":\"244#dev-dsf-server-api-port\",\"1495\":\"244#dev-dsf-server-auth-client-certificate-header\",\"1496\":\"244#dev-dsf-server-auth-oidc-authorization-code-flow\",\"1497\":\"244#dev-dsf-server-auth-oidc-back-channel-logout\",\"1498\":\"244#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"1499\":\"244#dev-dsf-server-auth-oidc-bearer-token\",\"1500\":\"244#dev-dsf-server-auth-oidc-client-id\",\"1501\":\"244#dev-dsf-server-auth-oidc-client-secret\",\"1502\":\"244#dev-dsf-server-auth-oidc-provider-client-certificate\",\"1503\":\"244#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"1504\":\"244#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"1505\":\"244#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"1506\":\"244#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"1507\":\"244#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"1508\":\"244#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"1509\":\"244#dev-dsf-server-auth-trust-client-certificate-cas\",\"1510\":\"244#dev-dsf-server-certificate\",\"1511\":\"244#dev-dsf-server-certificate-chain\",\"1512\":\"244#dev-dsf-server-certificate-key\",\"1513\":\"244#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"1514\":\"244#dev-dsf-server-context-path\",\"1515\":\"244#dev-dsf-server-status-host\",\"1516\":\"244#dev-dsf-server-status-port\",\"1517\":\"244#dev-dsf-bpe-db-liquibase-forceunlock\",\"1518\":\"244#dev-dsf-bpe-db-liquibase-lockwaittime\",\"1519\":\"244#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file\",\"1520\":\"244#dev-dsf-bpe-db-liquibase-username\",\"1521\":\"244#dev-dsf-bpe-db-url\",\"1522\":\"244#dev-dsf-bpe-db-user-camunda-group\",\"1523\":\"244#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file\",\"1524\":\"244#dev-dsf-bpe-db-user-camunda-username\",\"1525\":\"244#dev-dsf-bpe-db-user-group\",\"1526\":\"244#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file\",\"1527\":\"244#dev-dsf-bpe-db-user-username\",\"1528\":\"244#dev-dsf-bpe-debug-log-message-onactivityend\",\"1529\":\"244#dev-dsf-bpe-debug-log-message-onactivitystart\",\"1530\":\"244#dev-dsf-bpe-debug-log-message-variables\",\"1531\":\"244#dev-dsf-bpe-debug-log-message-variableslocal\",\"1532\":\"244#dev-dsf-bpe-fhir-client-certificate\",\"1533\":\"244#dev-dsf-bpe-fhir-client-certificate-private-key\",\"1534\":\"244#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file\",\"1535\":\"244#dev-dsf-bpe-fhir-client-local-timeout-connect\",\"1536\":\"244#dev-dsf-bpe-fhir-client-local-timeout-read\",\"1537\":\"244#dev-dsf-bpe-fhir-client-local-verbose\",\"1538\":\"244#dev-dsf-bpe-fhir-client-remote-timeout-connect\",\"1539\":\"244#dev-dsf-bpe-fhir-client-remote-timeout-read\",\"1540\":\"244#dev-dsf-bpe-fhir-client-remote-verbose\",\"1541\":\"244#dev-dsf-bpe-fhir-client-trust-server-certificate-cas\",\"1542\":\"244#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter\",\"1543\":\"244#dev-dsf-bpe-fhir-server-base-url\",\"1544\":\"244#dev-dsf-bpe-fhir-task-subscription-retry-max\",\"1545\":\"244#dev-dsf-bpe-fhir-task-subscription-retry-sleep\",\"1546\":\"244#dev-dsf-bpe-fhir-task-subscription-search-parameter\",\"1547\":\"244#dev-dsf-bpe-mail-client-certificate\",\"1548\":\"244#dev-dsf-bpe-mail-client-certificate-private-key\",\"1549\":\"244#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file\",\"1550\":\"244#dev-dsf-bpe-mail-fromaddress\",\"1551\":\"244#dev-dsf-bpe-mail-host\",\"1552\":\"244#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize\",\"1553\":\"244#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation\",\"1554\":\"244#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file\",\"1555\":\"244#dev-dsf-bpe-mail-port\",\"1556\":\"244#dev-dsf-bpe-mail-replytoaddresses\",\"1557\":\"244#dev-dsf-bpe-mail-sendmailonerrorlogevent\",\"1558\":\"244#dev-dsf-bpe-mail-sendtestmailonstartup\",\"1559\":\"244#dev-dsf-bpe-mail-smime-p12keystore\",\"1560\":\"244#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file\",\"1561\":\"244#dev-dsf-bpe-mail-toaddresses\",\"1562\":\"244#dev-dsf-bpe-mail-toaddressescc\",\"1563\":\"244#dev-dsf-bpe-mail-trust-server-certificate-cas\",\"1564\":\"244#dev-dsf-bpe-mail-username\",\"1565\":\"244#dev-dsf-bpe-mail-usesmtps\",\"1566\":\"244#dev-dsf-bpe-process-engine-corepoolsize\",\"1567\":\"244#dev-dsf-bpe-process-engine-maxpoolsize\",\"1568\":\"244#dev-dsf-bpe-process-engine-queuesize\",\"1569\":\"244#dev-dsf-bpe-process-excluded\",\"1570\":\"244#dev-dsf-bpe-process-fhir-server-retry-max\",\"1571\":\"244#dev-dsf-bpe-process-fhir-server-retry-sleep\",\"1572\":\"244#dev-dsf-bpe-process-plugin-directroy\",\"1573\":\"244#dev-dsf-bpe-process-retired\",\"1574\":\"244#dev-dsf-bpe-process-threads\",\"1575\":\"244#dev-dsf-proxy-noproxy\",\"1576\":\"244#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"1577\":\"244#dev-dsf-proxy-url\",\"1578\":\"244#dev-dsf-proxy-username\",\"1579\":\"245\",\"1580\":\"245#overview\",\"1581\":\"246\",\"1582\":\"246#overview\",\"1583\":\"246#matching-users\",\"1584\":\"246#thumbprint\",\"1585\":\"246#email\",\"1586\":\"246#token-role-and-token-group\",\"1587\":\"246#dsf-and-practitioner-roles\",\"1588\":\"246#dsf-role\",\"1589\":\"246#practitioner-role\",\"1590\":\"246#examples\",\"1591\":\"247\",\"1592\":\"247#dev-dsf-fhir-client-certificate\",\"1593\":\"247#dev-dsf-fhir-client-certificate-private-key\",\"1594\":\"247#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file\",\"1595\":\"247#dev-dsf-fhir-client-timeout-connect\",\"1596\":\"247#dev-dsf-fhir-client-timeout-read\",\"1597\":\"247#dev-dsf-fhir-client-trust-server-certificate-cas\",\"1598\":\"247#dev-dsf-fhir-client-verbose\",\"1599\":\"247#dev-dsf-fhir-db-liquibase-forceunlock\",\"1600\":\"247#dev-dsf-fhir-db-liquibase-lockwaittime\",\"1601\":\"247#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file\",\"1602\":\"247#dev-dsf-fhir-db-liquibase-username\",\"1603\":\"247#dev-dsf-fhir-db-url\",\"1604\":\"247#dev-dsf-fhir-db-user-group\",\"1605\":\"247#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file\",\"1606\":\"247#dev-dsf-fhir-db-user-permanent-delete-group\",\"1607\":\"247#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file\",\"1608\":\"247#dev-dsf-fhir-db-user-permanent-delete-username\",\"1609\":\"247#dev-dsf-fhir-db-user-username\",\"1610\":\"247#dev-dsf-fhir-server-base-url\",\"1611\":\"247#dev-dsf-fhir-server-init-bundle\",\"1612\":\"247#dev-dsf-fhir-server-organization-identifier-value\",\"1613\":\"247#dev-dsf-fhir-server-organization-thumbprint\",\"1614\":\"247#dev-dsf-fhir-server-page-count\",\"1615\":\"247#dev-dsf-fhir-server-roleconfig\",\"1616\":\"247#dev-dsf-fhir-server-static-resource-cache\",\"1617\":\"247#dev-dsf-proxy-noproxy\",\"1618\":\"247#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"1619\":\"247#dev-dsf-proxy-url\",\"1620\":\"247#dev-dsf-proxy-username\",\"1621\":\"247#dev-dsf-server-api-host\",\"1622\":\"247#dev-dsf-server-api-port\",\"1623\":\"247#dev-dsf-server-auth-client-certificate-header\",\"1624\":\"247#dev-dsf-server-auth-oidc-authorization-code-flow\",\"1625\":\"247#dev-dsf-server-auth-oidc-back-channel-logout\",\"1626\":\"247#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"1627\":\"247#dev-dsf-server-auth-oidc-bearer-token\",\"1628\":\"247#dev-dsf-server-auth-oidc-client-id\",\"1629\":\"247#dev-dsf-server-auth-oidc-client-secret\",\"1630\":\"247#dev-dsf-server-auth-oidc-provider-client-certificate\",\"1631\":\"247#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"1632\":\"247#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"1633\":\"247#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"1634\":\"247#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"1635\":\"247#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"1636\":\"247#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"1637\":\"247#dev-dsf-server-auth-trust-client-certificate-cas\",\"1638\":\"247#dev-dsf-server-certificate\",\"1639\":\"247#dev-dsf-server-certificate-chain\",\"1640\":\"247#dev-dsf-server-certificate-key\",\"1641\":\"247#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"1642\":\"247#dev-dsf-server-context-path\",\"1643\":\"247#dev-dsf-server-status-host\",\"1644\":\"247#dev-dsf-server-status-port\",\"1645\":\"248\",\"1646\":\"248#overview\",\"1647\":\"248#authorization-code-flow\",\"1648\":\"248#bearer-token-authentication\",\"1649\":\"248#additional-odic-configuration-parameter\",\"1650\":\"248#example\",\"1651\":\"249\",\"1652\":\"249#overview\",\"1653\":\"250\",\"1654\":\"250#app-server-ip\",\"1655\":\"250#https-server-name-port\",\"1656\":\"250#proxy-pass-connection-timeout-http\",\"1657\":\"250#proxy-pass-connection-timeout-ws\",\"1658\":\"250#proxy-pass-timeout-http\",\"1659\":\"250#proxy-pass-timeout-ws\",\"1660\":\"250#server-context-path\",\"1661\":\"250#ssl-ca-certificate-file\",\"1662\":\"250#ssl-ca-dn-request-file\",\"1663\":\"250#ssl-certificate-chain-file\",\"1664\":\"250#ssl-certificate-file\",\"1665\":\"250#ssl-certificate-key-file\",\"1666\":\"250#ssl-verify-client\",\"1667\":\"251\",\"1668\":\"251#overview\",\"1669\":\"252\",\"1670\":\"252#dev-dsf-server-api-host\",\"1671\":\"252#dev-dsf-server-api-port\",\"1672\":\"252#dev-dsf-server-auth-client-certificate-header\",\"1673\":\"252#dev-dsf-server-auth-oidc-authorization-code-flow\",\"1674\":\"252#dev-dsf-server-auth-oidc-back-channel-logout\",\"1675\":\"252#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"1676\":\"252#dev-dsf-server-auth-oidc-bearer-token\",\"1677\":\"252#dev-dsf-server-auth-oidc-client-id\",\"1678\":\"252#dev-dsf-server-auth-oidc-client-secret\",\"1679\":\"252#dev-dsf-server-auth-oidc-provider-client-certificate\",\"1680\":\"252#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"1681\":\"252#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"1682\":\"252#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"1683\":\"252#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"1684\":\"252#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"1685\":\"252#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"1686\":\"252#dev-dsf-server-auth-trust-client-certificate-cas\",\"1687\":\"252#dev-dsf-server-certificate\",\"1688\":\"252#dev-dsf-server-certificate-chain\",\"1689\":\"252#dev-dsf-server-certificate-key\",\"1690\":\"252#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"1691\":\"252#dev-dsf-server-context-path\",\"1692\":\"252#dev-dsf-server-status-host\",\"1693\":\"252#dev-dsf-server-status-port\",\"1694\":\"252#dev-dsf-bpe-db-liquibase-forceunlock\",\"1695\":\"252#dev-dsf-bpe-db-liquibase-lockwaittime\",\"1696\":\"252#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file\",\"1697\":\"252#dev-dsf-bpe-db-liquibase-username\",\"1698\":\"252#dev-dsf-bpe-db-url\",\"1699\":\"252#dev-dsf-bpe-db-user-camunda-group\",\"1700\":\"252#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file\",\"1701\":\"252#dev-dsf-bpe-db-user-camunda-username\",\"1702\":\"252#dev-dsf-bpe-db-user-group\",\"1703\":\"252#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file\",\"1704\":\"252#dev-dsf-bpe-db-user-username\",\"1705\":\"252#dev-dsf-bpe-debug-log-message-onactivityend\",\"1706\":\"252#dev-dsf-bpe-debug-log-message-onactivitystart\",\"1707\":\"252#dev-dsf-bpe-debug-log-message-variables\",\"1708\":\"252#dev-dsf-bpe-debug-log-message-variableslocal\",\"1709\":\"252#dev-dsf-bpe-fhir-client-certificate\",\"1710\":\"252#dev-dsf-bpe-fhir-client-certificate-private-key\",\"1711\":\"252#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file\",\"1712\":\"252#dev-dsf-bpe-fhir-client-local-timeout-connect\",\"1713\":\"252#dev-dsf-bpe-fhir-client-local-timeout-read\",\"1714\":\"252#dev-dsf-bpe-fhir-client-local-verbose\",\"1715\":\"252#dev-dsf-bpe-fhir-client-remote-timeout-connect\",\"1716\":\"252#dev-dsf-bpe-fhir-client-remote-timeout-read\",\"1717\":\"252#dev-dsf-bpe-fhir-client-remote-verbose\",\"1718\":\"252#dev-dsf-bpe-fhir-client-trust-server-certificate-cas\",\"1719\":\"252#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter\",\"1720\":\"252#dev-dsf-bpe-fhir-server-base-url\",\"1721\":\"252#dev-dsf-bpe-fhir-task-subscription-retry-max\",\"1722\":\"252#dev-dsf-bpe-fhir-task-subscription-retry-sleep\",\"1723\":\"252#dev-dsf-bpe-fhir-task-subscription-search-parameter\",\"1724\":\"252#dev-dsf-bpe-mail-client-certificate\",\"1725\":\"252#dev-dsf-bpe-mail-client-certificate-private-key\",\"1726\":\"252#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file\",\"1727\":\"252#dev-dsf-bpe-mail-fromaddress\",\"1728\":\"252#dev-dsf-bpe-mail-host\",\"1729\":\"252#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize\",\"1730\":\"252#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation\",\"1731\":\"252#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file\",\"1732\":\"252#dev-dsf-bpe-mail-port\",\"1733\":\"252#dev-dsf-bpe-mail-replytoaddresses\",\"1734\":\"252#dev-dsf-bpe-mail-sendmailonerrorlogevent\",\"1735\":\"252#dev-dsf-bpe-mail-sendtestmailonstartup\",\"1736\":\"252#dev-dsf-bpe-mail-smime-p12keystore\",\"1737\":\"252#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file\",\"1738\":\"252#dev-dsf-bpe-mail-toaddresses\",\"1739\":\"252#dev-dsf-bpe-mail-toaddressescc\",\"1740\":\"252#dev-dsf-bpe-mail-trust-server-certificate-cas\",\"1741\":\"252#dev-dsf-bpe-mail-username\",\"1742\":\"252#dev-dsf-bpe-mail-usesmtps\",\"1743\":\"252#dev-dsf-bpe-process-engine-corepoolsize\",\"1744\":\"252#dev-dsf-bpe-process-engine-maxpoolsize\",\"1745\":\"252#dev-dsf-bpe-process-engine-queuesize\",\"1746\":\"252#dev-dsf-bpe-process-excluded\",\"1747\":\"252#dev-dsf-bpe-process-fhir-server-retry-max\",\"1748\":\"252#dev-dsf-bpe-process-fhir-server-retry-sleep\",\"1749\":\"252#dev-dsf-bpe-process-plugin-directroy\",\"1750\":\"252#dev-dsf-bpe-process-retired\",\"1751\":\"252#dev-dsf-bpe-process-threads\",\"1752\":\"252#dev-dsf-proxy-noproxy\",\"1753\":\"252#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"1754\":\"252#dev-dsf-proxy-url\",\"1755\":\"252#dev-dsf-proxy-username\",\"1756\":\"253\",\"1757\":\"253#overview\",\"1758\":\"254\",\"1759\":\"254#overview\",\"1760\":\"254#matching-users\",\"1761\":\"254#thumbprint\",\"1762\":\"254#email\",\"1763\":\"254#token-role-and-token-group\",\"1764\":\"254#dsf-and-practitioner-roles\",\"1765\":\"254#dsf-role\",\"1766\":\"254#practitioner-role\",\"1767\":\"254#examples\",\"1768\":\"255\",\"1769\":\"255#dev-dsf-fhir-client-certificate\",\"1770\":\"255#dev-dsf-fhir-client-certificate-private-key\",\"1771\":\"255#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file\",\"1772\":\"255#dev-dsf-fhir-client-timeout-connect\",\"1773\":\"255#dev-dsf-fhir-client-timeout-read\",\"1774\":\"255#dev-dsf-fhir-client-trust-server-certificate-cas\",\"1775\":\"255#dev-dsf-fhir-client-verbose\",\"1776\":\"255#dev-dsf-fhir-db-liquibase-forceunlock\",\"1777\":\"255#dev-dsf-fhir-db-liquibase-lockwaittime\",\"1778\":\"255#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file\",\"1779\":\"255#dev-dsf-fhir-db-liquibase-username\",\"1780\":\"255#dev-dsf-fhir-db-url\",\"1781\":\"255#dev-dsf-fhir-db-user-group\",\"1782\":\"255#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file\",\"1783\":\"255#dev-dsf-fhir-db-user-permanent-delete-group\",\"1784\":\"255#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file\",\"1785\":\"255#dev-dsf-fhir-db-user-permanent-delete-username\",\"1786\":\"255#dev-dsf-fhir-db-user-username\",\"1787\":\"255#dev-dsf-fhir-server-base-url\",\"1788\":\"255#dev-dsf-fhir-server-init-bundle\",\"1789\":\"255#dev-dsf-fhir-server-organization-identifier-value\",\"1790\":\"255#dev-dsf-fhir-server-organization-thumbprint\",\"1791\":\"255#dev-dsf-fhir-server-page-count\",\"1792\":\"255#dev-dsf-fhir-server-roleconfig\",\"1793\":\"255#dev-dsf-fhir-server-static-resource-cache\",\"1794\":\"255#dev-dsf-proxy-noproxy\",\"1795\":\"255#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"1796\":\"255#dev-dsf-proxy-url\",\"1797\":\"255#dev-dsf-proxy-username\",\"1798\":\"255#dev-dsf-server-api-host\",\"1799\":\"255#dev-dsf-server-api-port\",\"1800\":\"255#dev-dsf-server-auth-client-certificate-header\",\"1801\":\"255#dev-dsf-server-auth-oidc-authorization-code-flow\",\"1802\":\"255#dev-dsf-server-auth-oidc-back-channel-logout\",\"1803\":\"255#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"1804\":\"255#dev-dsf-server-auth-oidc-bearer-token\",\"1805\":\"255#dev-dsf-server-auth-oidc-client-id\",\"1806\":\"255#dev-dsf-server-auth-oidc-client-secret\",\"1807\":\"255#dev-dsf-server-auth-oidc-provider-client-certificate\",\"1808\":\"255#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"1809\":\"255#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"1810\":\"255#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"1811\":\"255#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"1812\":\"255#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"1813\":\"255#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"1814\":\"255#dev-dsf-server-auth-trust-client-certificate-cas\",\"1815\":\"255#dev-dsf-server-certificate\",\"1816\":\"255#dev-dsf-server-certificate-chain\",\"1817\":\"255#dev-dsf-server-certificate-key\",\"1818\":\"255#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"1819\":\"255#dev-dsf-server-context-path\",\"1820\":\"255#dev-dsf-server-status-host\",\"1821\":\"255#dev-dsf-server-status-port\",\"1822\":\"256\",\"1823\":\"256#overview\",\"1824\":\"256#authorization-code-flow\",\"1825\":\"256#bearer-token-authentication\",\"1826\":\"256#additional-odic-configuration-parameter\",\"1827\":\"256#example\",\"1828\":\"257\",\"1829\":\"257#overview\",\"1830\":\"258\",\"1831\":\"258#app-server-ip\",\"1832\":\"258#https-server-name-port\",\"1833\":\"258#proxy-pass-connection-timeout-http\",\"1834\":\"258#proxy-pass-connection-timeout-ws\",\"1835\":\"258#proxy-pass-timeout-http\",\"1836\":\"258#proxy-pass-timeout-ws\",\"1837\":\"258#server-context-path\",\"1838\":\"258#ssl-ca-certificate-file\",\"1839\":\"258#ssl-ca-dn-request-file\",\"1840\":\"258#ssl-certificate-chain-file\",\"1841\":\"258#ssl-certificate-file\",\"1842\":\"258#ssl-certificate-key-file\",\"1843\":\"258#ssl-verify-client\",\"1844\":\"259\",\"1845\":\"259#overview\",\"1846\":\"260\",\"1847\":\"260#dev-dsf-server-api-host\",\"1848\":\"260#dev-dsf-server-api-port\",\"1849\":\"260#dev-dsf-server-auth-client-certificate-header\",\"1850\":\"260#dev-dsf-server-auth-oidc-authorization-code-flow\",\"1851\":\"260#dev-dsf-server-auth-oidc-back-channel-logout\",\"1852\":\"260#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"1853\":\"260#dev-dsf-server-auth-oidc-bearer-token\",\"1854\":\"260#dev-dsf-server-auth-oidc-client-id\",\"1855\":\"260#dev-dsf-server-auth-oidc-client-secret\",\"1856\":\"260#dev-dsf-server-auth-oidc-provider-client-certificate\",\"1857\":\"260#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"1858\":\"260#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"1859\":\"260#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"1860\":\"260#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"1861\":\"260#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"1862\":\"260#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"1863\":\"260#dev-dsf-server-auth-trust-client-certificate-cas\",\"1864\":\"260#dev-dsf-server-certificate\",\"1865\":\"260#dev-dsf-server-certificate-chain\",\"1866\":\"260#dev-dsf-server-certificate-key\",\"1867\":\"260#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"1868\":\"260#dev-dsf-server-context-path\",\"1869\":\"260#dev-dsf-server-status-host\",\"1870\":\"260#dev-dsf-server-status-port\",\"1871\":\"260#dev-dsf-bpe-db-liquibase-forceunlock\",\"1872\":\"260#dev-dsf-bpe-db-liquibase-lockwaittime\",\"1873\":\"260#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file\",\"1874\":\"260#dev-dsf-bpe-db-liquibase-username\",\"1875\":\"260#dev-dsf-bpe-db-url\",\"1876\":\"260#dev-dsf-bpe-db-user-camunda-group\",\"1877\":\"260#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file\",\"1878\":\"260#dev-dsf-bpe-db-user-camunda-username\",\"1879\":\"260#dev-dsf-bpe-db-user-group\",\"1880\":\"260#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file\",\"1881\":\"260#dev-dsf-bpe-db-user-username\",\"1882\":\"260#dev-dsf-bpe-debug-log-message-onactivityend\",\"1883\":\"260#dev-dsf-bpe-debug-log-message-onactivitystart\",\"1884\":\"260#dev-dsf-bpe-debug-log-message-variables\",\"1885\":\"260#dev-dsf-bpe-debug-log-message-variableslocal\",\"1886\":\"260#dev-dsf-bpe-fhir-client-certificate\",\"1887\":\"260#dev-dsf-bpe-fhir-client-certificate-private-key\",\"1888\":\"260#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file\",\"1889\":\"260#dev-dsf-bpe-fhir-client-local-timeout-connect\",\"1890\":\"260#dev-dsf-bpe-fhir-client-local-timeout-read\",\"1891\":\"260#dev-dsf-bpe-fhir-client-local-verbose\",\"1892\":\"260#dev-dsf-bpe-fhir-client-remote-timeout-connect\",\"1893\":\"260#dev-dsf-bpe-fhir-client-remote-timeout-read\",\"1894\":\"260#dev-dsf-bpe-fhir-client-remote-verbose\",\"1895\":\"260#dev-dsf-bpe-fhir-client-trust-server-certificate-cas\",\"1896\":\"260#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter\",\"1897\":\"260#dev-dsf-bpe-fhir-server-base-url\",\"1898\":\"260#dev-dsf-bpe-fhir-task-subscription-retry-max\",\"1899\":\"260#dev-dsf-bpe-fhir-task-subscription-retry-sleep\",\"1900\":\"260#dev-dsf-bpe-fhir-task-subscription-search-parameter\",\"1901\":\"260#dev-dsf-bpe-mail-client-certificate\",\"1902\":\"260#dev-dsf-bpe-mail-client-certificate-private-key\",\"1903\":\"260#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file\",\"1904\":\"260#dev-dsf-bpe-mail-fromaddress\",\"1905\":\"260#dev-dsf-bpe-mail-host\",\"1906\":\"260#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize\",\"1907\":\"260#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation\",\"1908\":\"260#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file\",\"1909\":\"260#dev-dsf-bpe-mail-port\",\"1910\":\"260#dev-dsf-bpe-mail-replytoaddresses\",\"1911\":\"260#dev-dsf-bpe-mail-sendmailonerrorlogevent\",\"1912\":\"260#dev-dsf-bpe-mail-sendtestmailonstartup\",\"1913\":\"260#dev-dsf-bpe-mail-smime-p12keystore\",\"1914\":\"260#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file\",\"1915\":\"260#dev-dsf-bpe-mail-toaddresses\",\"1916\":\"260#dev-dsf-bpe-mail-toaddressescc\",\"1917\":\"260#dev-dsf-bpe-mail-trust-server-certificate-cas\",\"1918\":\"260#dev-dsf-bpe-mail-username\",\"1919\":\"260#dev-dsf-bpe-mail-usesmtps\",\"1920\":\"260#dev-dsf-bpe-process-engine-corepoolsize\",\"1921\":\"260#dev-dsf-bpe-process-engine-maxpoolsize\",\"1922\":\"260#dev-dsf-bpe-process-engine-queuesize\",\"1923\":\"260#dev-dsf-bpe-process-excluded\",\"1924\":\"260#dev-dsf-bpe-process-fhir-server-retry-max\",\"1925\":\"260#dev-dsf-bpe-process-fhir-server-retry-sleep\",\"1926\":\"260#dev-dsf-bpe-process-plugin-directroy\",\"1927\":\"260#dev-dsf-bpe-process-retired\",\"1928\":\"260#dev-dsf-bpe-process-threads\",\"1929\":\"260#dev-dsf-proxy-noproxy\",\"1930\":\"260#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"1931\":\"260#dev-dsf-proxy-url\",\"1932\":\"260#dev-dsf-proxy-username\",\"1933\":\"261\",\"1934\":\"261#overview\",\"1935\":\"262\",\"1936\":\"262#overview\",\"1937\":\"262#matching-users\",\"1938\":\"262#thumbprint\",\"1939\":\"262#email\",\"1940\":\"262#token-role-and-token-group\",\"1941\":\"262#dsf-and-practitioner-roles\",\"1942\":\"262#dsf-role\",\"1943\":\"262#practitioner-role\",\"1944\":\"262#examples\",\"1945\":\"263\",\"1946\":\"263#dev-dsf-fhir-client-certificate\",\"1947\":\"263#dev-dsf-fhir-client-certificate-private-key\",\"1948\":\"263#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file\",\"1949\":\"263#dev-dsf-fhir-client-timeout-connect\",\"1950\":\"263#dev-dsf-fhir-client-timeout-read\",\"1951\":\"263#dev-dsf-fhir-client-trust-server-certificate-cas\",\"1952\":\"263#dev-dsf-fhir-client-verbose\",\"1953\":\"263#dev-dsf-fhir-db-liquibase-forceunlock\",\"1954\":\"263#dev-dsf-fhir-db-liquibase-lockwaittime\",\"1955\":\"263#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file\",\"1956\":\"263#dev-dsf-fhir-db-liquibase-username\",\"1957\":\"263#dev-dsf-fhir-db-url\",\"1958\":\"263#dev-dsf-fhir-db-user-group\",\"1959\":\"263#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file\",\"1960\":\"263#dev-dsf-fhir-db-user-permanent-delete-group\",\"1961\":\"263#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file\",\"1962\":\"263#dev-dsf-fhir-db-user-permanent-delete-username\",\"1963\":\"263#dev-dsf-fhir-db-user-username\",\"1964\":\"263#dev-dsf-fhir-server-base-url\",\"1965\":\"263#dev-dsf-fhir-server-init-bundle\",\"1966\":\"263#dev-dsf-fhir-server-organization-identifier-value\",\"1967\":\"263#dev-dsf-fhir-server-organization-thumbprint\",\"1968\":\"263#dev-dsf-fhir-server-page-count\",\"1969\":\"263#dev-dsf-fhir-server-roleconfig\",\"1970\":\"263#dev-dsf-fhir-server-static-resource-cache\",\"1971\":\"263#dev-dsf-proxy-noproxy\",\"1972\":\"263#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"1973\":\"263#dev-dsf-proxy-url\",\"1974\":\"263#dev-dsf-proxy-username\",\"1975\":\"263#dev-dsf-server-api-host\",\"1976\":\"263#dev-dsf-server-api-port\",\"1977\":\"263#dev-dsf-server-auth-client-certificate-header\",\"1978\":\"263#dev-dsf-server-auth-oidc-authorization-code-flow\",\"1979\":\"263#dev-dsf-server-auth-oidc-back-channel-logout\",\"1980\":\"263#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"1981\":\"263#dev-dsf-server-auth-oidc-bearer-token\",\"1982\":\"263#dev-dsf-server-auth-oidc-client-id\",\"1983\":\"263#dev-dsf-server-auth-oidc-client-secret\",\"1984\":\"263#dev-dsf-server-auth-oidc-provider-client-certificate\",\"1985\":\"263#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"1986\":\"263#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"1987\":\"263#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"1988\":\"263#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"1989\":\"263#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"1990\":\"263#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"1991\":\"263#dev-dsf-server-auth-trust-client-certificate-cas\",\"1992\":\"263#dev-dsf-server-certificate\",\"1993\":\"263#dev-dsf-server-certificate-chain\",\"1994\":\"263#dev-dsf-server-certificate-key\",\"1995\":\"263#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"1996\":\"263#dev-dsf-server-context-path\",\"1997\":\"263#dev-dsf-server-status-host\",\"1998\":\"263#dev-dsf-server-status-port\",\"1999\":\"264\",\"2000\":\"264#overview\",\"2001\":\"264#authorization-code-flow\",\"2002\":\"264#bearer-token-authentication\",\"2003\":\"264#additional-odic-configuration-parameter\",\"2004\":\"264#example\",\"2005\":\"265\",\"2006\":\"265#overview\",\"2007\":\"266\",\"2008\":\"266#app-server-ip\",\"2009\":\"266#https-server-name-port\",\"2010\":\"266#proxy-pass-connection-timeout-http\",\"2011\":\"266#proxy-pass-connection-timeout-ws\",\"2012\":\"266#proxy-pass-timeout-http\",\"2013\":\"266#proxy-pass-timeout-ws\",\"2014\":\"266#server-context-path\",\"2015\":\"266#ssl-ca-certificate-file\",\"2016\":\"266#ssl-ca-dn-request-file\",\"2017\":\"266#ssl-certificate-chain-file\",\"2018\":\"266#ssl-certificate-file\",\"2019\":\"266#ssl-certificate-key-file\",\"2020\":\"266#ssl-verify-client\",\"2021\":\"267\",\"2022\":\"267#overview\",\"2023\":\"268\",\"2024\":\"268#dev-dsf-server-api-host\",\"2025\":\"268#dev-dsf-server-api-port\",\"2026\":\"268#dev-dsf-server-auth-client-certificate-header\",\"2027\":\"268#dev-dsf-server-auth-oidc-authorization-code-flow\",\"2028\":\"268#dev-dsf-server-auth-oidc-back-channel-logout\",\"2029\":\"268#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"2030\":\"268#dev-dsf-server-auth-oidc-bearer-token\",\"2031\":\"268#dev-dsf-server-auth-oidc-client-id\",\"2032\":\"268#dev-dsf-server-auth-oidc-client-secret\",\"2033\":\"268#dev-dsf-server-auth-oidc-provider-client-certificate\",\"2034\":\"268#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"2035\":\"268#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"2036\":\"268#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"2037\":\"268#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"2038\":\"268#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"2039\":\"268#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"2040\":\"268#dev-dsf-server-auth-trust-client-certificate-cas\",\"2041\":\"268#dev-dsf-server-certificate\",\"2042\":\"268#dev-dsf-server-certificate-chain\",\"2043\":\"268#dev-dsf-server-certificate-key\",\"2044\":\"268#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"2045\":\"268#dev-dsf-server-context-path\",\"2046\":\"268#dev-dsf-server-status-host\",\"2047\":\"268#dev-dsf-server-status-port\",\"2048\":\"268#dev-dsf-bpe-db-liquibase-forceunlock\",\"2049\":\"268#dev-dsf-bpe-db-liquibase-lockwaittime\",\"2050\":\"268#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file\",\"2051\":\"268#dev-dsf-bpe-db-liquibase-username\",\"2052\":\"268#dev-dsf-bpe-db-url\",\"2053\":\"268#dev-dsf-bpe-db-user-camunda-group\",\"2054\":\"268#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file\",\"2055\":\"268#dev-dsf-bpe-db-user-camunda-username\",\"2056\":\"268#dev-dsf-bpe-db-user-group\",\"2057\":\"268#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file\",\"2058\":\"268#dev-dsf-bpe-db-user-username\",\"2059\":\"268#dev-dsf-bpe-debug-log-message-onactivityend\",\"2060\":\"268#dev-dsf-bpe-debug-log-message-onactivitystart\",\"2061\":\"268#dev-dsf-bpe-debug-log-message-variables\",\"2062\":\"268#dev-dsf-bpe-debug-log-message-variableslocal\",\"2063\":\"268#dev-dsf-bpe-fhir-client-certificate\",\"2064\":\"268#dev-dsf-bpe-fhir-client-certificate-private-key\",\"2065\":\"268#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file\",\"2066\":\"268#dev-dsf-bpe-fhir-client-local-timeout-connect\",\"2067\":\"268#dev-dsf-bpe-fhir-client-local-timeout-read\",\"2068\":\"268#dev-dsf-bpe-fhir-client-local-verbose\",\"2069\":\"268#dev-dsf-bpe-fhir-client-remote-timeout-connect\",\"2070\":\"268#dev-dsf-bpe-fhir-client-remote-timeout-read\",\"2071\":\"268#dev-dsf-bpe-fhir-client-remote-verbose\",\"2072\":\"268#dev-dsf-bpe-fhir-client-trust-server-certificate-cas\",\"2073\":\"268#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter\",\"2074\":\"268#dev-dsf-bpe-fhir-server-base-url\",\"2075\":\"268#dev-dsf-bpe-fhir-task-subscription-retry-max\",\"2076\":\"268#dev-dsf-bpe-fhir-task-subscription-retry-sleep\",\"2077\":\"268#dev-dsf-bpe-fhir-task-subscription-search-parameter\",\"2078\":\"268#dev-dsf-bpe-mail-client-certificate\",\"2079\":\"268#dev-dsf-bpe-mail-client-certificate-private-key\",\"2080\":\"268#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file\",\"2081\":\"268#dev-dsf-bpe-mail-fromaddress\",\"2082\":\"268#dev-dsf-bpe-mail-host\",\"2083\":\"268#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize\",\"2084\":\"268#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation\",\"2085\":\"268#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file\",\"2086\":\"268#dev-dsf-bpe-mail-port\",\"2087\":\"268#dev-dsf-bpe-mail-replytoaddresses\",\"2088\":\"268#dev-dsf-bpe-mail-sendmailonerrorlogevent\",\"2089\":\"268#dev-dsf-bpe-mail-sendtestmailonstartup\",\"2090\":\"268#dev-dsf-bpe-mail-smime-p12keystore\",\"2091\":\"268#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file\",\"2092\":\"268#dev-dsf-bpe-mail-toaddresses\",\"2093\":\"268#dev-dsf-bpe-mail-toaddressescc\",\"2094\":\"268#dev-dsf-bpe-mail-trust-server-certificate-cas\",\"2095\":\"268#dev-dsf-bpe-mail-username\",\"2096\":\"268#dev-dsf-bpe-mail-usesmtps\",\"2097\":\"268#dev-dsf-bpe-process-engine-corepoolsize\",\"2098\":\"268#dev-dsf-bpe-process-engine-maxpoolsize\",\"2099\":\"268#dev-dsf-bpe-process-engine-queuesize\",\"2100\":\"268#dev-dsf-bpe-process-excluded\",\"2101\":\"268#dev-dsf-bpe-process-fhir-server-retry-max\",\"2102\":\"268#dev-dsf-bpe-process-fhir-server-retry-sleep\",\"2103\":\"268#dev-dsf-bpe-process-plugin-directroy\",\"2104\":\"268#dev-dsf-bpe-process-retired\",\"2105\":\"268#dev-dsf-bpe-process-threads\",\"2106\":\"268#dev-dsf-proxy-noproxy\",\"2107\":\"268#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"2108\":\"268#dev-dsf-proxy-url\",\"2109\":\"268#dev-dsf-proxy-username\",\"2110\":\"269\",\"2111\":\"269#overview\",\"2112\":\"270\",\"2113\":\"270#overview\",\"2114\":\"270#matching-users\",\"2115\":\"270#thumbprint\",\"2116\":\"270#email\",\"2117\":\"270#token-role-and-token-group\",\"2118\":\"270#dsf-and-practitioner-roles\",\"2119\":\"270#dsf-role\",\"2120\":\"270#practitioner-role\",\"2121\":\"270#examples\",\"2122\":\"271\",\"2123\":\"271#dev-dsf-fhir-client-certificate\",\"2124\":\"271#dev-dsf-fhir-client-certificate-private-key\",\"2125\":\"271#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file\",\"2126\":\"271#dev-dsf-fhir-client-timeout-connect\",\"2127\":\"271#dev-dsf-fhir-client-timeout-read\",\"2128\":\"271#dev-dsf-fhir-client-trust-server-certificate-cas\",\"2129\":\"271#dev-dsf-fhir-client-verbose\",\"2130\":\"271#dev-dsf-fhir-db-liquibase-forceunlock\",\"2131\":\"271#dev-dsf-fhir-db-liquibase-lockwaittime\",\"2132\":\"271#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file\",\"2133\":\"271#dev-dsf-fhir-db-liquibase-username\",\"2134\":\"271#dev-dsf-fhir-db-url\",\"2135\":\"271#dev-dsf-fhir-db-user-group\",\"2136\":\"271#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file\",\"2137\":\"271#dev-dsf-fhir-db-user-permanent-delete-group\",\"2138\":\"271#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file\",\"2139\":\"271#dev-dsf-fhir-db-user-permanent-delete-username\",\"2140\":\"271#dev-dsf-fhir-db-user-username\",\"2141\":\"271#dev-dsf-fhir-server-base-url\",\"2142\":\"271#dev-dsf-fhir-server-init-bundle\",\"2143\":\"271#dev-dsf-fhir-server-organization-identifier-value\",\"2144\":\"271#dev-dsf-fhir-server-organization-thumbprint\",\"2145\":\"271#dev-dsf-fhir-server-page-count\",\"2146\":\"271#dev-dsf-fhir-server-roleconfig\",\"2147\":\"271#dev-dsf-fhir-server-static-resource-cache\",\"2148\":\"271#dev-dsf-proxy-noproxy\",\"2149\":\"271#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"2150\":\"271#dev-dsf-proxy-url\",\"2151\":\"271#dev-dsf-proxy-username\",\"2152\":\"271#dev-dsf-server-api-host\",\"2153\":\"271#dev-dsf-server-api-port\",\"2154\":\"271#dev-dsf-server-auth-client-certificate-header\",\"2155\":\"271#dev-dsf-server-auth-oidc-authorization-code-flow\",\"2156\":\"271#dev-dsf-server-auth-oidc-back-channel-logout\",\"2157\":\"271#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"2158\":\"271#dev-dsf-server-auth-oidc-bearer-token\",\"2159\":\"271#dev-dsf-server-auth-oidc-client-id\",\"2160\":\"271#dev-dsf-server-auth-oidc-client-secret\",\"2161\":\"271#dev-dsf-server-auth-oidc-provider-client-certificate\",\"2162\":\"271#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"2163\":\"271#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"2164\":\"271#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"2165\":\"271#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"2166\":\"271#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"2167\":\"271#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"2168\":\"271#dev-dsf-server-auth-trust-client-certificate-cas\",\"2169\":\"271#dev-dsf-server-certificate\",\"2170\":\"271#dev-dsf-server-certificate-chain\",\"2171\":\"271#dev-dsf-server-certificate-key\",\"2172\":\"271#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"2173\":\"271#dev-dsf-server-context-path\",\"2174\":\"271#dev-dsf-server-status-host\",\"2175\":\"271#dev-dsf-server-status-port\",\"2176\":\"272\",\"2177\":\"272#overview\",\"2178\":\"272#authorization-code-flow\",\"2179\":\"272#bearer-token-authentication\",\"2180\":\"272#additional-odic-configuration-parameter\",\"2181\":\"272#example\",\"2182\":\"273\",\"2183\":\"273#overview\",\"2184\":\"274\",\"2185\":\"274#app-server-ip\",\"2186\":\"274#https-server-name-port\",\"2187\":\"274#proxy-pass-connection-timeout-http\",\"2188\":\"274#proxy-pass-connection-timeout-ws\",\"2189\":\"274#proxy-pass-timeout-http\",\"2190\":\"274#proxy-pass-timeout-ws\",\"2191\":\"274#server-context-path\",\"2192\":\"274#ssl-ca-certificate-file\",\"2193\":\"274#ssl-ca-dn-request-file\",\"2194\":\"274#ssl-certificate-chain-file\",\"2195\":\"274#ssl-certificate-file\",\"2196\":\"274#ssl-certificate-key-file\",\"2197\":\"274#ssl-verify-client\",\"2198\":\"275\",\"2199\":\"275#overview\",\"2200\":\"276\",\"2201\":\"276#overview\",\"2202\":\"276#matching-users\",\"2203\":\"276#thumbprint\",\"2204\":\"276#email\",\"2205\":\"276#token-role-and-token-group\",\"2206\":\"276#dsf-and-practitioner-roles\",\"2207\":\"276#dsf-role\",\"2208\":\"276#practitioner-role\",\"2209\":\"276#examples\",\"2210\":\"277\",\"2211\":\"277#dev-dsf-server-api-host\",\"2212\":\"277#dev-dsf-server-api-port\",\"2213\":\"277#dev-dsf-server-auth-client-certificate-header\",\"2214\":\"277#dev-dsf-server-auth-oidc-authorization-code-flow\",\"2215\":\"277#dev-dsf-server-auth-oidc-back-channel-logout\",\"2216\":\"277#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"2217\":\"277#dev-dsf-server-auth-oidc-bearer-token\",\"2218\":\"277#dev-dsf-server-auth-oidc-client-id\",\"2219\":\"277#dev-dsf-server-auth-oidc-client-secret\",\"2220\":\"277#dev-dsf-server-auth-oidc-provider-client-certificate\",\"2221\":\"277#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"2222\":\"277#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"2223\":\"277#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"2224\":\"277#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"2225\":\"277#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"2226\":\"277#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"2227\":\"277#dev-dsf-server-auth-trust-client-certificate-cas\",\"2228\":\"277#dev-dsf-server-certificate\",\"2229\":\"277#dev-dsf-server-certificate-chain\",\"2230\":\"277#dev-dsf-server-certificate-key\",\"2231\":\"277#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"2232\":\"277#dev-dsf-server-context-path\",\"2233\":\"277#dev-dsf-server-status-host\",\"2234\":\"277#dev-dsf-server-status-port\",\"2235\":\"277#dev-dsf-bpe-db-liquibase-forceunlock\",\"2236\":\"277#dev-dsf-bpe-db-liquibase-lockwaittime\",\"2237\":\"277#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file\",\"2238\":\"277#dev-dsf-bpe-db-liquibase-username\",\"2239\":\"277#dev-dsf-bpe-db-url\",\"2240\":\"277#dev-dsf-bpe-db-user-camunda-group\",\"2241\":\"277#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file\",\"2242\":\"277#dev-dsf-bpe-db-user-camunda-username\",\"2243\":\"277#dev-dsf-bpe-db-user-group\",\"2244\":\"277#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file\",\"2245\":\"277#dev-dsf-bpe-db-user-username\",\"2246\":\"277#dev-dsf-bpe-debug-log-message-currentuser\",\"2247\":\"277#dev-dsf-bpe-debug-log-message-dbstatement\",\"2248\":\"277#dev-dsf-bpe-debug-log-message-onactivityend\",\"2249\":\"277#dev-dsf-bpe-debug-log-message-onactivitystart\",\"2250\":\"277#dev-dsf-bpe-debug-log-message-variables\",\"2251\":\"277#dev-dsf-bpe-debug-log-message-variableslocal\",\"2252\":\"277#dev-dsf-bpe-debug-log-message-webservicerequest\",\"2253\":\"277#dev-dsf-bpe-fhir-client-certificate\",\"2254\":\"277#dev-dsf-bpe-fhir-client-certificate-private-key\",\"2255\":\"277#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file\",\"2256\":\"277#dev-dsf-bpe-fhir-client-local-timeout-connect\",\"2257\":\"277#dev-dsf-bpe-fhir-client-local-timeout-read\",\"2258\":\"277#dev-dsf-bpe-fhir-client-local-verbose\",\"2259\":\"277#dev-dsf-bpe-fhir-client-remote-timeout-connect\",\"2260\":\"277#dev-dsf-bpe-fhir-client-remote-timeout-read\",\"2261\":\"277#dev-dsf-bpe-fhir-client-remote-verbose\",\"2262\":\"277#dev-dsf-bpe-fhir-client-trust-server-certificate-cas\",\"2263\":\"277#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter\",\"2264\":\"277#dev-dsf-bpe-fhir-server-base-url\",\"2265\":\"277#dev-dsf-bpe-fhir-task-subscription-retry-max\",\"2266\":\"277#dev-dsf-bpe-fhir-task-subscription-retry-sleep\",\"2267\":\"277#dev-dsf-bpe-fhir-task-subscription-search-parameter\",\"2268\":\"277#dev-dsf-bpe-mail-client-certificate\",\"2269\":\"277#dev-dsf-bpe-mail-client-certificate-private-key\",\"2270\":\"277#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file\",\"2271\":\"277#dev-dsf-bpe-mail-fromaddress\",\"2272\":\"277#dev-dsf-bpe-mail-host\",\"2273\":\"277#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize\",\"2274\":\"277#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation\",\"2275\":\"277#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file\",\"2276\":\"277#dev-dsf-bpe-mail-port\",\"2277\":\"277#dev-dsf-bpe-mail-replytoaddresses\",\"2278\":\"277#dev-dsf-bpe-mail-sendmailonerrorlogevent\",\"2279\":\"277#dev-dsf-bpe-mail-sendtestmailonstartup\",\"2280\":\"277#dev-dsf-bpe-mail-smime-p12keystore\",\"2281\":\"277#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file\",\"2282\":\"277#dev-dsf-bpe-mail-toaddresses\",\"2283\":\"277#dev-dsf-bpe-mail-toaddressescc\",\"2284\":\"277#dev-dsf-bpe-mail-trust-server-certificate-cas\",\"2285\":\"277#dev-dsf-bpe-mail-username\",\"2286\":\"277#dev-dsf-bpe-mail-usesmtps\",\"2287\":\"277#dev-dsf-bpe-process-engine-corepoolsize\",\"2288\":\"277#dev-dsf-bpe-process-engine-maxpoolsize\",\"2289\":\"277#dev-dsf-bpe-process-engine-queuesize\",\"2290\":\"277#dev-dsf-bpe-process-excluded\",\"2291\":\"277#dev-dsf-bpe-process-fhir-server-retry-max\",\"2292\":\"277#dev-dsf-bpe-process-fhir-server-retry-sleep\",\"2293\":\"277#dev-dsf-bpe-process-plugin-directroy\",\"2294\":\"277#dev-dsf-bpe-process-retired\",\"2295\":\"277#dev-dsf-bpe-process-threads\",\"2296\":\"277#dev-dsf-bpe-server-base-url\",\"2297\":\"277#dev-dsf-bpe-server-roleconfig\",\"2298\":\"277#dev-dsf-bpe-server-static-resource-cache\",\"2299\":\"277#dev-dsf-bpe-server-ui-theme\",\"2300\":\"277#dev-dsf-proxy-noproxy\",\"2301\":\"277#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"2302\":\"277#dev-dsf-proxy-url\",\"2303\":\"277#dev-dsf-proxy-username\",\"2304\":\"278\",\"2305\":\"278#overview\",\"2306\":\"278#authorization-code-flow\",\"2307\":\"278#additional-odic-configuration-parameter\",\"2308\":\"278#example\",\"2309\":\"279\",\"2310\":\"279#overview\",\"2311\":\"280\",\"2312\":\"280#app-server-ip\",\"2313\":\"280#https-server-name-port\",\"2314\":\"280#proxy-pass-connection-timeout-http\",\"2315\":\"280#proxy-pass-connection-timeout-ws\",\"2316\":\"280#proxy-pass-timeout-http\",\"2317\":\"280#proxy-pass-timeout-ws\",\"2318\":\"280#server-context-path\",\"2319\":\"280#ssl-ca-certificate-file\",\"2320\":\"280#ssl-ca-dn-request-file\",\"2321\":\"280#ssl-certificate-chain-file\",\"2322\":\"280#ssl-certificate-file\",\"2323\":\"280#ssl-certificate-key-file\",\"2324\":\"280#ssl-verify-client\",\"2325\":\"281\",\"2326\":\"281#overview\",\"2327\":\"282\",\"2328\":\"282#overview\",\"2329\":\"282#matching-users\",\"2330\":\"282#thumbprint\",\"2331\":\"282#email\",\"2332\":\"282#token-role-and-token-group\",\"2333\":\"282#dsf-and-practitioner-roles\",\"2334\":\"282#dsf-role\",\"2335\":\"282#practitioner-role\",\"2336\":\"282#examples\",\"2337\":\"283\",\"2338\":\"283#dev-dsf-fhir-client-certificate\",\"2339\":\"283#dev-dsf-fhir-client-certificate-private-key\",\"2340\":\"283#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file\",\"2341\":\"283#dev-dsf-fhir-client-timeout-connect\",\"2342\":\"283#dev-dsf-fhir-client-timeout-read\",\"2343\":\"283#dev-dsf-fhir-client-trust-server-certificate-cas\",\"2344\":\"283#dev-dsf-fhir-client-verbose\",\"2345\":\"283#dev-dsf-fhir-db-liquibase-forceunlock\",\"2346\":\"283#dev-dsf-fhir-db-liquibase-lockwaittime\",\"2347\":\"283#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file\",\"2348\":\"283#dev-dsf-fhir-db-liquibase-username\",\"2349\":\"283#dev-dsf-fhir-db-url\",\"2350\":\"283#dev-dsf-fhir-db-user-group\",\"2351\":\"283#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file\",\"2352\":\"283#dev-dsf-fhir-db-user-permanent-delete-group\",\"2353\":\"283#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file\",\"2354\":\"283#dev-dsf-fhir-db-user-permanent-delete-username\",\"2355\":\"283#dev-dsf-fhir-db-user-username\",\"2356\":\"283#dev-dsf-fhir-debug-log-message-currentuser\",\"2357\":\"283#dev-dsf-fhir-debug-log-message-dbstatement\",\"2358\":\"283#dev-dsf-fhir-debug-log-message-webservicerequest\",\"2359\":\"283#dev-dsf-fhir-server-base-url\",\"2360\":\"283#dev-dsf-fhir-server-init-bundle\",\"2361\":\"283#dev-dsf-fhir-server-organization-identifier-value\",\"2362\":\"283#dev-dsf-fhir-server-organization-thumbprint\",\"2363\":\"283#dev-dsf-fhir-server-page-count\",\"2364\":\"283#dev-dsf-fhir-server-roleconfig\",\"2365\":\"283#dev-dsf-fhir-server-static-resource-cache\",\"2366\":\"283#dev-dsf-fhir-server-ui-theme\",\"2367\":\"283#dev-dsf-proxy-noproxy\",\"2368\":\"283#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"2369\":\"283#dev-dsf-proxy-url\",\"2370\":\"283#dev-dsf-proxy-username\",\"2371\":\"283#dev-dsf-server-api-host\",\"2372\":\"283#dev-dsf-server-api-port\",\"2373\":\"283#dev-dsf-server-auth-client-certificate-header\",\"2374\":\"283#dev-dsf-server-auth-oidc-authorization-code-flow\",\"2375\":\"283#dev-dsf-server-auth-oidc-back-channel-logout\",\"2376\":\"283#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"2377\":\"283#dev-dsf-server-auth-oidc-bearer-token\",\"2378\":\"283#dev-dsf-server-auth-oidc-client-id\",\"2379\":\"283#dev-dsf-server-auth-oidc-client-secret\",\"2380\":\"283#dev-dsf-server-auth-oidc-provider-client-certificate\",\"2381\":\"283#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"2382\":\"283#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"2383\":\"283#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"2384\":\"283#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"2385\":\"283#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"2386\":\"283#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"2387\":\"283#dev-dsf-server-auth-trust-client-certificate-cas\",\"2388\":\"283#dev-dsf-server-certificate\",\"2389\":\"283#dev-dsf-server-certificate-chain\",\"2390\":\"283#dev-dsf-server-certificate-key\",\"2391\":\"283#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"2392\":\"283#dev-dsf-server-context-path\",\"2393\":\"283#dev-dsf-server-status-host\",\"2394\":\"283#dev-dsf-server-status-port\",\"2395\":\"284\",\"2396\":\"284#overview\",\"2397\":\"284#authorization-code-flow\",\"2398\":\"284#bearer-token-authentication\",\"2399\":\"284#additional-odic-configuration-parameter\",\"2400\":\"284#example\",\"2401\":\"285\",\"2402\":\"285#overview\",\"2403\":\"286\",\"2404\":\"286#app-server-ip\",\"2405\":\"286#https-server-name-port\",\"2406\":\"286#proxy-pass-connection-timeout-http\",\"2407\":\"286#proxy-pass-connection-timeout-ws\",\"2408\":\"286#proxy-pass-timeout-http\",\"2409\":\"286#proxy-pass-timeout-ws\",\"2410\":\"286#server-context-path\",\"2411\":\"286#ssl-ca-certificate-file\",\"2412\":\"286#ssl-ca-dn-request-file\",\"2413\":\"286#ssl-certificate-chain-file\",\"2414\":\"286#ssl-certificate-file\",\"2415\":\"286#ssl-certificate-key-file\",\"2416\":\"286#ssl-verify-client\",\"2417\":\"287\",\"2418\":\"287#overview\",\"2419\":\"288\",\"2420\":\"288#overview\",\"2421\":\"288#matching-users\",\"2422\":\"288#thumbprint\",\"2423\":\"288#email\",\"2424\":\"288#token-role-and-token-group\",\"2425\":\"288#dsf-and-practitioner-roles\",\"2426\":\"288#dsf-role\",\"2427\":\"288#practitioner-role\",\"2428\":\"288#examples\",\"2429\":\"289\",\"2430\":\"289#dev-dsf-server-api-host\",\"2431\":\"289#dev-dsf-server-api-port\",\"2432\":\"289#dev-dsf-server-auth-client-certificate-header\",\"2433\":\"289#dev-dsf-server-auth-oidc-authorization-code-flow\",\"2434\":\"289#dev-dsf-server-auth-oidc-back-channel-logout\",\"2435\":\"289#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"2436\":\"289#dev-dsf-server-auth-oidc-bearer-token\",\"2437\":\"289#dev-dsf-server-auth-oidc-client-id\",\"2438\":\"289#dev-dsf-server-auth-oidc-client-secret\",\"2439\":\"289#dev-dsf-server-auth-oidc-provider-client-certificate\",\"2440\":\"289#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"2441\":\"289#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"2442\":\"289#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"2443\":\"289#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"2444\":\"289#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"2445\":\"289#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"2446\":\"289#dev-dsf-server-auth-trust-client-certificate-cas\",\"2447\":\"289#dev-dsf-server-certificate\",\"2448\":\"289#dev-dsf-server-certificate-chain\",\"2449\":\"289#dev-dsf-server-certificate-key\",\"2450\":\"289#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"2451\":\"289#dev-dsf-server-context-path\",\"2452\":\"289#dev-dsf-server-status-host\",\"2453\":\"289#dev-dsf-server-status-port\",\"2454\":\"289#dev-dsf-bpe-db-liquibase-forceunlock\",\"2455\":\"289#dev-dsf-bpe-db-liquibase-lockwaittime\",\"2456\":\"289#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file\",\"2457\":\"289#dev-dsf-bpe-db-liquibase-username\",\"2458\":\"289#dev-dsf-bpe-db-url\",\"2459\":\"289#dev-dsf-bpe-db-user-camunda-group\",\"2460\":\"289#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file\",\"2461\":\"289#dev-dsf-bpe-db-user-camunda-username\",\"2462\":\"289#dev-dsf-bpe-db-user-group\",\"2463\":\"289#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file\",\"2464\":\"289#dev-dsf-bpe-db-user-username\",\"2465\":\"289#dev-dsf-bpe-debug-log-message-currentuser\",\"2466\":\"289#dev-dsf-bpe-debug-log-message-dbstatement\",\"2467\":\"289#dev-dsf-bpe-debug-log-message-onactivityend\",\"2468\":\"289#dev-dsf-bpe-debug-log-message-onactivitystart\",\"2469\":\"289#dev-dsf-bpe-debug-log-message-variables\",\"2470\":\"289#dev-dsf-bpe-debug-log-message-variableslocal\",\"2471\":\"289#dev-dsf-bpe-debug-log-message-webservicerequest\",\"2472\":\"289#dev-dsf-bpe-fhir-client-certificate\",\"2473\":\"289#dev-dsf-bpe-fhir-client-certificate-private-key\",\"2474\":\"289#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file\",\"2475\":\"289#dev-dsf-bpe-fhir-client-local-timeout-connect\",\"2476\":\"289#dev-dsf-bpe-fhir-client-local-timeout-read\",\"2477\":\"289#dev-dsf-bpe-fhir-client-local-verbose\",\"2478\":\"289#dev-dsf-bpe-fhir-client-remote-timeout-connect\",\"2479\":\"289#dev-dsf-bpe-fhir-client-remote-timeout-read\",\"2480\":\"289#dev-dsf-bpe-fhir-client-remote-verbose\",\"2481\":\"289#dev-dsf-bpe-fhir-client-trust-server-certificate-cas\",\"2482\":\"289#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter\",\"2483\":\"289#dev-dsf-bpe-fhir-server-base-url\",\"2484\":\"289#dev-dsf-bpe-fhir-task-subscription-retry-max\",\"2485\":\"289#dev-dsf-bpe-fhir-task-subscription-retry-sleep\",\"2486\":\"289#dev-dsf-bpe-fhir-task-subscription-search-parameter\",\"2487\":\"289#dev-dsf-bpe-mail-client-certificate\",\"2488\":\"289#dev-dsf-bpe-mail-client-certificate-private-key\",\"2489\":\"289#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file\",\"2490\":\"289#dev-dsf-bpe-mail-fromaddress\",\"2491\":\"289#dev-dsf-bpe-mail-host\",\"2492\":\"289#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize\",\"2493\":\"289#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation\",\"2494\":\"289#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file\",\"2495\":\"289#dev-dsf-bpe-mail-port\",\"2496\":\"289#dev-dsf-bpe-mail-replytoaddresses\",\"2497\":\"289#dev-dsf-bpe-mail-sendmailonerrorlogevent\",\"2498\":\"289#dev-dsf-bpe-mail-sendtestmailonstartup\",\"2499\":\"289#dev-dsf-bpe-mail-smime-p12keystore\",\"2500\":\"289#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file\",\"2501\":\"289#dev-dsf-bpe-mail-toaddresses\",\"2502\":\"289#dev-dsf-bpe-mail-toaddressescc\",\"2503\":\"289#dev-dsf-bpe-mail-trust-server-certificate-cas\",\"2504\":\"289#dev-dsf-bpe-mail-username\",\"2505\":\"289#dev-dsf-bpe-mail-usesmtps\",\"2506\":\"289#dev-dsf-bpe-process-engine-corepoolsize\",\"2507\":\"289#dev-dsf-bpe-process-engine-maxpoolsize\",\"2508\":\"289#dev-dsf-bpe-process-engine-queuesize\",\"2509\":\"289#dev-dsf-bpe-process-excluded\",\"2510\":\"289#dev-dsf-bpe-process-fhir-server-retry-max\",\"2511\":\"289#dev-dsf-bpe-process-fhir-server-retry-sleep\",\"2512\":\"289#dev-dsf-bpe-process-plugin-directroy\",\"2513\":\"289#dev-dsf-bpe-process-retired\",\"2514\":\"289#dev-dsf-bpe-process-threads\",\"2515\":\"289#dev-dsf-bpe-server-base-url\",\"2516\":\"289#dev-dsf-bpe-server-roleconfig\",\"2517\":\"289#dev-dsf-bpe-server-static-resource-cache\",\"2518\":\"289#dev-dsf-bpe-server-ui-theme\",\"2519\":\"289#dev-dsf-proxy-noproxy\",\"2520\":\"289#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"2521\":\"289#dev-dsf-proxy-url\",\"2522\":\"289#dev-dsf-proxy-username\",\"2523\":\"290\",\"2524\":\"290#overview\",\"2525\":\"290#authorization-code-flow\",\"2526\":\"290#additional-odic-configuration-parameter\",\"2527\":\"290#example\",\"2528\":\"291\",\"2529\":\"291#overview\",\"2530\":\"292\",\"2531\":\"292#app-server-ip\",\"2532\":\"292#https-server-name-port\",\"2533\":\"292#proxy-pass-connection-timeout-http\",\"2534\":\"292#proxy-pass-connection-timeout-ws\",\"2535\":\"292#proxy-pass-timeout-http\",\"2536\":\"292#proxy-pass-timeout-ws\",\"2537\":\"292#server-context-path\",\"2538\":\"292#ssl-ca-certificate-file\",\"2539\":\"292#ssl-ca-dn-request-file\",\"2540\":\"292#ssl-certificate-chain-file\",\"2541\":\"292#ssl-certificate-file\",\"2542\":\"292#ssl-certificate-key-file\",\"2543\":\"292#ssl-verify-client\",\"2544\":\"293\",\"2545\":\"293#overview\",\"2546\":\"294\",\"2547\":\"294#overview\",\"2548\":\"294#matching-users\",\"2549\":\"294#thumbprint\",\"2550\":\"294#email\",\"2551\":\"294#token-role-and-token-group\",\"2552\":\"294#dsf-and-practitioner-roles\",\"2553\":\"294#dsf-role\",\"2554\":\"294#practitioner-role\",\"2555\":\"294#examples\",\"2556\":\"295\",\"2557\":\"295#dev-dsf-fhir-client-certificate\",\"2558\":\"295#dev-dsf-fhir-client-certificate-private-key\",\"2559\":\"295#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file\",\"2560\":\"295#dev-dsf-fhir-client-timeout-connect\",\"2561\":\"295#dev-dsf-fhir-client-timeout-read\",\"2562\":\"295#dev-dsf-fhir-client-trust-server-certificate-cas\",\"2563\":\"295#dev-dsf-fhir-client-verbose\",\"2564\":\"295#dev-dsf-fhir-db-liquibase-forceunlock\",\"2565\":\"295#dev-dsf-fhir-db-liquibase-lockwaittime\",\"2566\":\"295#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file\",\"2567\":\"295#dev-dsf-fhir-db-liquibase-username\",\"2568\":\"295#dev-dsf-fhir-db-url\",\"2569\":\"295#dev-dsf-fhir-db-user-group\",\"2570\":\"295#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file\",\"2571\":\"295#dev-dsf-fhir-db-user-permanent-delete-group\",\"2572\":\"295#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file\",\"2573\":\"295#dev-dsf-fhir-db-user-permanent-delete-username\",\"2574\":\"295#dev-dsf-fhir-db-user-username\",\"2575\":\"295#dev-dsf-fhir-debug-log-message-currentuser\",\"2576\":\"295#dev-dsf-fhir-debug-log-message-dbstatement\",\"2577\":\"295#dev-dsf-fhir-debug-log-message-webservicerequest\",\"2578\":\"295#dev-dsf-fhir-server-base-url\",\"2579\":\"295#dev-dsf-fhir-server-init-bundle\",\"2580\":\"295#dev-dsf-fhir-server-organization-identifier-value\",\"2581\":\"295#dev-dsf-fhir-server-organization-thumbprint\",\"2582\":\"295#dev-dsf-fhir-server-page-count\",\"2583\":\"295#dev-dsf-fhir-server-roleconfig\",\"2584\":\"295#dev-dsf-fhir-server-static-resource-cache\",\"2585\":\"295#dev-dsf-fhir-server-ui-theme\",\"2586\":\"295#dev-dsf-proxy-noproxy\",\"2587\":\"295#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"2588\":\"295#dev-dsf-proxy-url\",\"2589\":\"295#dev-dsf-proxy-username\",\"2590\":\"295#dev-dsf-server-api-host\",\"2591\":\"295#dev-dsf-server-api-port\",\"2592\":\"295#dev-dsf-server-auth-client-certificate-header\",\"2593\":\"295#dev-dsf-server-auth-oidc-authorization-code-flow\",\"2594\":\"295#dev-dsf-server-auth-oidc-back-channel-logout\",\"2595\":\"295#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"2596\":\"295#dev-dsf-server-auth-oidc-bearer-token\",\"2597\":\"295#dev-dsf-server-auth-oidc-client-id\",\"2598\":\"295#dev-dsf-server-auth-oidc-client-secret\",\"2599\":\"295#dev-dsf-server-auth-oidc-provider-client-certificate\",\"2600\":\"295#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"2601\":\"295#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"2602\":\"295#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"2603\":\"295#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"2604\":\"295#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"2605\":\"295#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"2606\":\"295#dev-dsf-server-auth-trust-client-certificate-cas\",\"2607\":\"295#dev-dsf-server-certificate\",\"2608\":\"295#dev-dsf-server-certificate-chain\",\"2609\":\"295#dev-dsf-server-certificate-key\",\"2610\":\"295#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"2611\":\"295#dev-dsf-server-context-path\",\"2612\":\"295#dev-dsf-server-status-host\",\"2613\":\"295#dev-dsf-server-status-port\",\"2614\":\"296\",\"2615\":\"296#overview\",\"2616\":\"296#authorization-code-flow\",\"2617\":\"296#bearer-token-authentication\",\"2618\":\"296#additional-odic-configuration-parameter\",\"2619\":\"296#example\",\"2620\":\"297\",\"2621\":\"297#overview\",\"2622\":\"298\",\"2623\":\"298#app-server-ip\",\"2624\":\"298#https-server-name-port\",\"2625\":\"298#proxy-pass-connection-timeout-http\",\"2626\":\"298#proxy-pass-connection-timeout-ws\",\"2627\":\"298#proxy-pass-timeout-http\",\"2628\":\"298#proxy-pass-timeout-ws\",\"2629\":\"298#server-context-path\",\"2630\":\"298#ssl-ca-certificate-file\",\"2631\":\"298#ssl-ca-dn-request-file\",\"2632\":\"298#ssl-certificate-chain-file\",\"2633\":\"298#ssl-certificate-file\",\"2634\":\"298#ssl-certificate-key-file\",\"2635\":\"298#ssl-verify-client\",\"2636\":\"299\",\"2637\":\"299#overview\",\"2638\":\"300\",\"2639\":\"300#overview\",\"2640\":\"300#matching-users\",\"2641\":\"300#thumbprint\",\"2642\":\"300#email\",\"2643\":\"300#token-role-and-token-group\",\"2644\":\"300#dsf-and-practitioner-roles\",\"2645\":\"300#dsf-role\",\"2646\":\"300#practitioner-role\",\"2647\":\"300#examples\",\"2648\":\"301\",\"2649\":\"301#dev-dsf-server-api-host\",\"2650\":\"301#dev-dsf-server-api-port\",\"2651\":\"301#dev-dsf-server-auth-client-certificate-header\",\"2652\":\"301#dev-dsf-server-auth-oidc-authorization-code-flow\",\"2653\":\"301#dev-dsf-server-auth-oidc-back-channel-logout\",\"2654\":\"301#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"2655\":\"301#dev-dsf-server-auth-oidc-bearer-token\",\"2656\":\"301#dev-dsf-server-auth-oidc-client-id\",\"2657\":\"301#dev-dsf-server-auth-oidc-client-secret\",\"2658\":\"301#dev-dsf-server-auth-oidc-provider-client-certificate\",\"2659\":\"301#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"2660\":\"301#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"2661\":\"301#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"2662\":\"301#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"2663\":\"301#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"2664\":\"301#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"2665\":\"301#dev-dsf-server-auth-trust-client-certificate-cas\",\"2666\":\"301#dev-dsf-server-certificate\",\"2667\":\"301#dev-dsf-server-certificate-chain\",\"2668\":\"301#dev-dsf-server-certificate-key\",\"2669\":\"301#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"2670\":\"301#dev-dsf-server-context-path\",\"2671\":\"301#dev-dsf-server-status-host\",\"2672\":\"301#dev-dsf-server-status-port\",\"2673\":\"301#dev-dsf-bpe-db-liquibase-forceunlock\",\"2674\":\"301#dev-dsf-bpe-db-liquibase-lockwaittime\",\"2675\":\"301#dev-dsf-bpe-db-liquibase-password-or-dev-dsf-bpe-db-liquibase-password-file\",\"2676\":\"301#dev-dsf-bpe-db-liquibase-username\",\"2677\":\"301#dev-dsf-bpe-db-url\",\"2678\":\"301#dev-dsf-bpe-db-user-camunda-group\",\"2679\":\"301#dev-dsf-bpe-db-user-camunda-password-or-dev-dsf-bpe-db-user-camunda-password-file\",\"2680\":\"301#dev-dsf-bpe-db-user-camunda-username\",\"2681\":\"301#dev-dsf-bpe-db-user-group\",\"2682\":\"301#dev-dsf-bpe-db-user-password-or-dev-dsf-bpe-db-user-password-file\",\"2683\":\"301#dev-dsf-bpe-db-user-username\",\"2684\":\"301#dev-dsf-bpe-debug-log-message-currentuser\",\"2685\":\"301#dev-dsf-bpe-debug-log-message-dbstatement\",\"2686\":\"301#dev-dsf-bpe-debug-log-message-onactivityend\",\"2687\":\"301#dev-dsf-bpe-debug-log-message-onactivitystart\",\"2688\":\"301#dev-dsf-bpe-debug-log-message-variables\",\"2689\":\"301#dev-dsf-bpe-debug-log-message-variableslocal\",\"2690\":\"301#dev-dsf-bpe-debug-log-message-webservicerequest\",\"2691\":\"301#dev-dsf-bpe-fhir-client-certificate\",\"2692\":\"301#dev-dsf-bpe-fhir-client-certificate-private-key\",\"2693\":\"301#dev-dsf-bpe-fhir-client-certificate-private-key-password-or-dev-dsf-bpe-fhir-client-certificate-private-key-password-file\",\"2694\":\"301#dev-dsf-bpe-fhir-client-local-timeout-connect\",\"2695\":\"301#dev-dsf-bpe-fhir-client-local-timeout-read\",\"2696\":\"301#dev-dsf-bpe-fhir-client-local-verbose\",\"2697\":\"301#dev-dsf-bpe-fhir-client-remote-timeout-connect\",\"2698\":\"301#dev-dsf-bpe-fhir-client-remote-timeout-read\",\"2699\":\"301#dev-dsf-bpe-fhir-client-remote-verbose\",\"2700\":\"301#dev-dsf-bpe-fhir-client-trust-server-certificate-cas\",\"2701\":\"301#dev-dsf-bpe-fhir-questionnaire-response-subscription-search-parameter\",\"2702\":\"301#dev-dsf-bpe-fhir-server-base-url\",\"2703\":\"301#dev-dsf-bpe-fhir-task-subscription-retry-max\",\"2704\":\"301#dev-dsf-bpe-fhir-task-subscription-retry-sleep\",\"2705\":\"301#dev-dsf-bpe-fhir-task-subscription-search-parameter\",\"2706\":\"301#dev-dsf-bpe-mail-client-certificate\",\"2707\":\"301#dev-dsf-bpe-mail-client-certificate-private-key\",\"2708\":\"301#dev-dsf-bpe-mail-client-certificate-private-key-password-or-dev-dsf-bpe-mail-client-certificate-private-key-password-file\",\"2709\":\"301#dev-dsf-bpe-mail-fromaddress\",\"2710\":\"301#dev-dsf-bpe-mail-host\",\"2711\":\"301#dev-dsf-bpe-mail-mailonerrorlogeventbuffersize\",\"2712\":\"301#dev-dsf-bpe-mail-mailonerrorlogeventdebugloglocation\",\"2713\":\"301#dev-dsf-bpe-mail-password-or-dev-dsf-bpe-mail-password-file\",\"2714\":\"301#dev-dsf-bpe-mail-port\",\"2715\":\"301#dev-dsf-bpe-mail-replytoaddresses\",\"2716\":\"301#dev-dsf-bpe-mail-sendmailonerrorlogevent\",\"2717\":\"301#dev-dsf-bpe-mail-sendtestmailonstartup\",\"2718\":\"301#dev-dsf-bpe-mail-smime-p12keystore\",\"2719\":\"301#dev-dsf-bpe-mail-smime-p12keystore-password-or-dev-dsf-bpe-mail-smime-p12keystore-password-file\",\"2720\":\"301#dev-dsf-bpe-mail-toaddresses\",\"2721\":\"301#dev-dsf-bpe-mail-toaddressescc\",\"2722\":\"301#dev-dsf-bpe-mail-trust-server-certificate-cas\",\"2723\":\"301#dev-dsf-bpe-mail-username\",\"2724\":\"301#dev-dsf-bpe-mail-usesmtps\",\"2725\":\"301#dev-dsf-bpe-process-engine-corepoolsize\",\"2726\":\"301#dev-dsf-bpe-process-engine-maxpoolsize\",\"2727\":\"301#dev-dsf-bpe-process-engine-queuesize\",\"2728\":\"301#dev-dsf-bpe-process-excluded\",\"2729\":\"301#dev-dsf-bpe-process-fhir-server-retry-max\",\"2730\":\"301#dev-dsf-bpe-process-fhir-server-retry-sleep\",\"2731\":\"301#dev-dsf-bpe-process-plugin-directroy\",\"2732\":\"301#dev-dsf-bpe-process-retired\",\"2733\":\"301#dev-dsf-bpe-process-threads\",\"2734\":\"301#dev-dsf-bpe-server-base-url\",\"2735\":\"301#dev-dsf-bpe-server-roleconfig\",\"2736\":\"301#dev-dsf-bpe-server-static-resource-cache\",\"2737\":\"301#dev-dsf-bpe-server-ui-theme\",\"2738\":\"301#dev-dsf-proxy-noproxy\",\"2739\":\"301#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"2740\":\"301#dev-dsf-proxy-url\",\"2741\":\"301#dev-dsf-proxy-username\",\"2742\":\"302\",\"2743\":\"302#overview\",\"2744\":\"302#authorization-code-flow\",\"2745\":\"302#additional-odic-configuration-parameter\",\"2746\":\"302#example\",\"2747\":\"303\",\"2748\":\"303#overview\",\"2749\":\"304\",\"2750\":\"304#app-server-ip\",\"2751\":\"304#https-server-name-port\",\"2752\":\"304#proxy-pass-connection-timeout-http\",\"2753\":\"304#proxy-pass-connection-timeout-ws\",\"2754\":\"304#proxy-pass-timeout-http\",\"2755\":\"304#proxy-pass-timeout-ws\",\"2756\":\"304#server-context-path\",\"2757\":\"304#ssl-ca-certificate-file\",\"2758\":\"304#ssl-ca-dn-request-file\",\"2759\":\"304#ssl-certificate-chain-file\",\"2760\":\"304#ssl-certificate-file\",\"2761\":\"304#ssl-certificate-key-file\",\"2762\":\"304#ssl-verify-client\",\"2763\":\"305\",\"2764\":\"305#overview\",\"2765\":\"306\",\"2766\":\"306#overview\",\"2767\":\"306#matching-users\",\"2768\":\"306#thumbprint\",\"2769\":\"306#email\",\"2770\":\"306#token-role-and-token-group\",\"2771\":\"306#dsf-and-practitioner-roles\",\"2772\":\"306#dsf-role\",\"2773\":\"306#practitioner-role\",\"2774\":\"306#examples\",\"2775\":\"307\",\"2776\":\"307#dev-dsf-fhir-client-certificate\",\"2777\":\"307#dev-dsf-fhir-client-certificate-private-key\",\"2778\":\"307#dev-dsf-fhir-client-certificate-private-key-password-or-dev-dsf-fhir-client-certificate-private-key-password-file\",\"2779\":\"307#dev-dsf-fhir-client-timeout-connect\",\"2780\":\"307#dev-dsf-fhir-client-timeout-read\",\"2781\":\"307#dev-dsf-fhir-client-trust-server-certificate-cas\",\"2782\":\"307#dev-dsf-fhir-client-verbose\",\"2783\":\"307#dev-dsf-fhir-db-liquibase-forceunlock\",\"2784\":\"307#dev-dsf-fhir-db-liquibase-lockwaittime\",\"2785\":\"307#dev-dsf-fhir-db-liquibase-password-or-dev-dsf-fhir-db-liquibase-password-file\",\"2786\":\"307#dev-dsf-fhir-db-liquibase-username\",\"2787\":\"307#dev-dsf-fhir-db-url\",\"2788\":\"307#dev-dsf-fhir-db-user-group\",\"2789\":\"307#dev-dsf-fhir-db-user-password-or-dev-dsf-fhir-db-user-password-file\",\"2790\":\"307#dev-dsf-fhir-db-user-permanent-delete-group\",\"2791\":\"307#dev-dsf-fhir-db-user-permanent-delete-password-or-dev-dsf-fhir-db-user-permanent-delete-password-file\",\"2792\":\"307#dev-dsf-fhir-db-user-permanent-delete-username\",\"2793\":\"307#dev-dsf-fhir-db-user-username\",\"2794\":\"307#dev-dsf-fhir-debug-log-message-currentuser\",\"2795\":\"307#dev-dsf-fhir-debug-log-message-dbstatement\",\"2796\":\"307#dev-dsf-fhir-debug-log-message-webservicerequest\",\"2797\":\"307#dev-dsf-fhir-server-base-url\",\"2798\":\"307#dev-dsf-fhir-server-init-bundle\",\"2799\":\"307#dev-dsf-fhir-server-organization-identifier-value\",\"2800\":\"307#dev-dsf-fhir-server-organization-thumbprint\",\"2801\":\"307#dev-dsf-fhir-server-page-count\",\"2802\":\"307#dev-dsf-fhir-server-roleconfig\",\"2803\":\"307#dev-dsf-fhir-server-static-resource-cache\",\"2804\":\"307#dev-dsf-fhir-server-ui-theme\",\"2805\":\"307#dev-dsf-proxy-noproxy\",\"2806\":\"307#dev-dsf-proxy-password-or-dev-dsf-proxy-password-file\",\"2807\":\"307#dev-dsf-proxy-url\",\"2808\":\"307#dev-dsf-proxy-username\",\"2809\":\"307#dev-dsf-server-api-host\",\"2810\":\"307#dev-dsf-server-api-port\",\"2811\":\"307#dev-dsf-server-auth-client-certificate-header\",\"2812\":\"307#dev-dsf-server-auth-oidc-authorization-code-flow\",\"2813\":\"307#dev-dsf-server-auth-oidc-back-channel-logout\",\"2814\":\"307#dev-dsf-server-auth-oidc-back-channel-logout-path\",\"2815\":\"307#dev-dsf-server-auth-oidc-bearer-token\",\"2816\":\"307#dev-dsf-server-auth-oidc-client-id\",\"2817\":\"307#dev-dsf-server-auth-oidc-client-secret\",\"2818\":\"307#dev-dsf-server-auth-oidc-provider-client-certificate\",\"2819\":\"307#dev-dsf-server-auth-oidc-provider-client-certificate-private-key\",\"2820\":\"307#dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-or-dev-dsf-server-auth-oidc-provider-client-certificate-private-key-password-file\",\"2821\":\"307#dev-dsf-server-auth-oidc-provider-client-connecttimeout\",\"2822\":\"307#dev-dsf-server-auth-oidc-provider-client-idletimeout\",\"2823\":\"307#dev-dsf-server-auth-oidc-provider-client-trust-server-certificate-cas\",\"2824\":\"307#dev-dsf-server-auth-oidc-provider-realm-base-url\",\"2825\":\"307#dev-dsf-server-auth-trust-client-certificate-cas\",\"2826\":\"307#dev-dsf-server-certificate\",\"2827\":\"307#dev-dsf-server-certificate-chain\",\"2828\":\"307#dev-dsf-server-certificate-key\",\"2829\":\"307#dev-dsf-server-certificate-key-password-or-dev-dsf-server-certificate-key-password-file\",\"2830\":\"307#dev-dsf-server-context-path\",\"2831\":\"307#dev-dsf-server-status-host\",\"2832\":\"307#dev-dsf-server-status-port\",\"2833\":\"308\",\"2834\":\"308#overview\",\"2835\":\"308#authorization-code-flow\",\"2836\":\"308#bearer-token-authentication\",\"2837\":\"308#additional-odic-configuration-parameter\",\"2838\":\"308#example\",\"2839\":\"309\",\"2840\":\"309#overview\",\"2841\":\"310\",\"2842\":\"310#app-server-ip\",\"2843\":\"310#https-server-name-port\",\"2844\":\"310#proxy-pass-connection-timeout-http\",\"2845\":\"310#proxy-pass-connection-timeout-ws\",\"2846\":\"310#proxy-pass-timeout-http\",\"2847\":\"310#proxy-pass-timeout-ws\",\"2848\":\"310#server-context-path\",\"2849\":\"310#ssl-ca-certificate-file\",\"2850\":\"310#ssl-ca-dn-request-file\",\"2851\":\"310#ssl-certificate-chain-file\",\"2852\":\"310#ssl-certificate-file\",\"2853\":\"310#ssl-certificate-key-file\",\"2854\":\"310#ssl-verify-client\",\"2855\":\"311\",\"2856\":\"312\"},\"fieldIds\":{\"h\":0,\"t\":1,\"c\":2},\"fieldLength\":{\"0\":[3,106],\"1\":[1,69],\"2\":[12],\"3\":[1],\"4\":[1,7],\"5\":[4,72],\"6\":[3,58],\"7\":[4],\"8\":[4,35],\"9\":[4,37],\"10\":[4,30],\"11\":[4,24],\"12\":[5,65],\"13\":[6,27],\"14\":[1,114],\"15\":[1,32],\"16\":[1,87],\"17\":[2,70],\"18\":[1],\"19\":[1,3],\"20\":[1,26],\"21\":[2,6],\"22\":[3,44],\"23\":[1],\"24\":[1,2],\"25\":[3],\"26\":[1,131],\"27\":[2],\"28\":[3,14],\"29\":[3,25],\"30\":[4,22],\"31\":[6],\"32\":[1,83],\"33\":[1,76],\"34\":[4],\"35\":[4,36],\"36\":[2,35],\"37\":[5,105],\"38\":[2,63],\"39\":[2,30],\"40\":[2,42],\"41\":[1,25],\"42\":[4,48],\"43\":[2,45],\"44\":[3,46],\"45\":[2,39],\"46\":[3,46],\"47\":[2,45],\"48\":[4,47],\"49\":[2,45],\"50\":[4,47],\"51\":[2,45],\"52\":[3,47],\"53\":[2,45],\"54\":[4,48],\"55\":[2,45],\"56\":[4,49],\"57\":[2,45],\"58\":[4,48],\"59\":[2,45],\"60\":[3,47],\"61\":[2,45],\"62\":[4,48],\"63\":[2,45],\"64\":[2],\"65\":[1],\"66\":[2],\"67\":[1,25],\"68\":[2,15],\"69\":[4,19],\"70\":[2,30],\"71\":[5,26],\"72\":[1,11],\"73\":[8,43],\"74\":[7,36],\"75\":[6,22],\"76\":[2],\"77\":[11,110],\"78\":[15,68],\"79\":[1,31],\"80\":[2],\"81\":[1,84],\"82\":[3,16],\"83\":[12],\"84\":[1,91],\"85\":[4,55],\"86\":[5,93],\"87\":[2,78],\"88\":[8,10],\"89\":[3,42],\"90\":[1,106],\"91\":[3,96],\"92\":[1,62],\"93\":[8,147],\"94\":[1,169],\"95\":[5,180],\"96\":[6,47],\"97\":[2],\"98\":[1,82],\"99\":[2,48],\"100\":[3,37],\"101\":[3,32],\"102\":[2,41],\"103\":[2,33],\"104\":[3],\"105\":[2,97],\"106\":[1,76],\"107\":[3],\"108\":[2,58],\"109\":[4,59],\"110\":[3,3],\"111\":[3],\"112\":[1,113],\"113\":[1,167],\"114\":[2,32],\"115\":[3,15],\"116\":[4,62],\"117\":[1],\"118\":[2,3],\"119\":[2],\"120\":[1,4],\"121\":[1],\"122\":[1,71],\"123\":[3,101],\"124\":[2,56],\"125\":[3,63],\"126\":[4,55],\"127\":[3],\"128\":[3],\"129\":[2,10],\"130\":[6,120],\"131\":[7,108],\"132\":[1,41],\"133\":[11,28],\"134\":[3,66],\"135\":[3,55],\"136\":[4],\"137\":[5,78],\"138\":[5,65],\"139\":[1],\"140\":[3,14],\"141\":[1,45],\"142\":[3,33],\"143\":[1,71],\"144\":[5,18],\"145\":[1,36],\"146\":[1,45],\"147\":[1,21],\"148\":[3,109],\"149\":[3,100],\"150\":[7,87],\"151\":[2],\"152\":[2,39],\"153\":[2,48],\"154\":[3,12],\"155\":[4,236],\"156\":[4,108],\"157\":[6],\"158\":[4,119],\"159\":[3,63],\"160\":[2],\"161\":[1,68],\"162\":[2],\"163\":[2,56],\"164\":[4,57],\"165\":[5,180],\"166\":[6,91],\"167\":[3,2],\"168\":[1],\"169\":[8,14],\"170\":[8,46],\"171\":[9,39],\"172\":[7,25],\"173\":[6,44],\"174\":[8,27],\"175\":[10,40],\"176\":[8,36],\"177\":[7,24],\"178\":[9,36],\"179\":[7,22],\"180\":[8,36],\"181\":[8,36],\"182\":[8,52],\"183\":[7,35],\"184\":[9,47],\"185\":[12,43],\"186\":[11,47],\"187\":[9,34],\"188\":[9,32],\"189\":[9,36],\"190\":[9,37],\"191\":[8,29],\"192\":[12,51],\"193\":[10,36],\"194\":[10,34],\"195\":[11,45],\"196\":[9,31],\"197\":[9,29],\"198\":[9,35],\"199\":[9,36],\"200\":[8,28],\"201\":[8,43],\"202\":[10,33],\"203\":[8,27],\"204\":[9,33],\"205\":[9,33],\"206\":[9,29],\"207\":[9,32],\"208\":[7,44],\"209\":[9,55],\"210\":[12,44],\"211\":[6,16],\"212\":[6,16],\"213\":[6,35],\"214\":[6,41],\"215\":[8,38],\"216\":[6,16],\"217\":[6,26],\"218\":[6,29],\"219\":[6,31],\"220\":[7,37],\"221\":[10,41],\"222\":[6,29],\"223\":[6,27],\"224\":[7,49],\"225\":[6,29],\"226\":[6,21],\"227\":[8,47],\"228\":[8,45],\"229\":[6,47],\"230\":[9,34],\"231\":[9,30],\"232\":[7,43],\"233\":[6,43],\"234\":[8,45],\"235\":[1],\"236\":[8,18],\"237\":[6,33],\"238\":[8,45],\"239\":[11,41],\"240\":[9,41],\"241\":[7,29],\"242\":[7,27],\"243\":[7,36],\"244\":[7,35],\"245\":[7,40],\"246\":[6,27],\"247\":[9,39],\"248\":[7,25],\"249\":[6,44],\"250\":[7,24],\"251\":[9,36],\"252\":[9,28],\"253\":[11,42],\"254\":[9,36],\"255\":[7,22],\"256\":[7,25],\"257\":[7,47],\"258\":[7,48],\"259\":[8,32],\"260\":[7,24],\"261\":[7,50],\"262\":[9,53],\"263\":[1],\"264\":[9],\"265\":[3,23],\"266\":[4,18],\"267\":[5,22],\"268\":[5,22],\"269\":[4,20],\"270\":[4,20],\"271\":[4,36],\"272\":[5,51],\"273\":[4,53],\"274\":[3,25],\"275\":[4,28],\"276\":[1,31],\"277\":[1],\"278\":[2,11],\"279\":[2,79],\"280\":[3,42],\"281\":[3,69],\"282\":[4,42],\"283\":[1],\"284\":[2,31],\"285\":[3,279],\"286\":[3,306],\"287\":[1,28],\"288\":[1],\"289\":[2,11],\"290\":[2,79],\"291\":[3,42],\"292\":[3,69],\"293\":[4,42],\"294\":[1],\"295\":[2,31],\"296\":[3,281],\"297\":[3,288],\"298\":[6,34],\"299\":[5,113],\"300\":[5,222],\"301\":[6,34],\"302\":[5,73],\"303\":[5,202],\"304\":[6,28],\"305\":[5,73],\"306\":[5,163],\"307\":[5,37],\"308\":[5,75],\"309\":[5,116],\"310\":[5,38],\"311\":[5,75],\"312\":[5,116],\"313\":[4],\"314\":[7,66],\"315\":[1,47],\"316\":[4,29],\"317\":[4,24],\"318\":[4,29],\"319\":[4,30],\"320\":[4,32],\"321\":[8,31],\"322\":[4,2],\"323\":[3,179],\"324\":[4,4],\"325\":[4,41],\"326\":[1],\"327\":[8,81],\"328\":[4,113],\"329\":[6,70],\"330\":[3,59],\"331\":[2,48],\"332\":[2],\"333\":[5,27],\"334\":[5,191],\"335\":[4,4],\"336\":[4,20],\"337\":[1,84],\"338\":[2,65],\"339\":[4,4],\"340\":[4,38],\"341\":[1,37],\"342\":[2,96],\"343\":[3,97],\"344\":[5,126],\"345\":[2,92],\"346\":[2],\"347\":[5,27],\"348\":[5,126],\"349\":[4,4],\"350\":[4,60],\"351\":[1],\"352\":[6,117],\"353\":[12,79],\"354\":[4,48],\"355\":[4,28],\"356\":[4,20],\"357\":[3,52],\"358\":[3,65],\"359\":[3,65],\"360\":[2,89],\"361\":[2],\"362\":[5,27],\"363\":[5,141],\"364\":[4,4],\"365\":[4,32],\"366\":[1],\"367\":[2,42],\"368\":[2,46],\"369\":[4,45],\"370\":[2,54],\"371\":[2],\"372\":[5,27],\"373\":[5,102],\"374\":[8,4],\"375\":[8,39],\"376\":[1],\"377\":[5,92],\"378\":[2,24],\"379\":[6,71],\"380\":[4,48],\"381\":[4,28],\"382\":[4,20],\"383\":[3,52],\"384\":[3,65],\"385\":[3,66],\"386\":[2,98],\"387\":[2],\"388\":[5,27],\"389\":[5,169],\"390\":[1,43],\"391\":[1,41],\"392\":[2,27],\"393\":[3,35],\"394\":[2,83],\"395\":[4,46],\"396\":[5,46],\"397\":[2,23],\"398\":[2,24],\"399\":[1,23],\"400\":[2,35],\"401\":[4,39],\"402\":[1],\"403\":[2,55],\"404\":[2,41],\"405\":[2,15],\"406\":[4,15],\"407\":[1,17],\"408\":[1,16],\"409\":[1,46],\"410\":[1,54],\"411\":[3,118],\"412\":[5,66],\"413\":[2,134],\"414\":[1,44],\"415\":[1,210],\"416\":[3],\"417\":[1,11],\"418\":[5,44],\"419\":[6,40],\"420\":[4],\"421\":[1,24],\"422\":[3,11],\"423\":[1,71],\"424\":[1,53],\"425\":[2,81],\"426\":[2,19],\"427\":[1,65],\"428\":[1,17],\"429\":[1,57],\"430\":[5,58],\"431\":[1],\"432\":[2,11],\"433\":[2,75],\"434\":[3,59],\"435\":[3,74],\"436\":[1],\"437\":[2,31],\"438\":[3,259],\"439\":[3,220],\"440\":[1,85],\"441\":[2,40],\"442\":[6,142],\"443\":[5,28],\"444\":[5,59],\"445\":[5,97],\"446\":[3],\"447\":[1,11],\"448\":[5,40],\"449\":[6,40],\"450\":[4],\"451\":[1,11],\"452\":[3,27],\"453\":[1,87],\"454\":[1,46],\"455\":[2,63],\"456\":[4,72],\"457\":[1],\"458\":[2,11],\"459\":[2,75],\"460\":[3,59],\"461\":[3,74],\"462\":[1],\"463\":[2,31],\"464\":[3,266],\"465\":[3,229],\"466\":[1,92],\"467\":[2,40],\"468\":[6,69],\"469\":[3],\"470\":[1,11],\"471\":[5,40],\"472\":[6,40],\"473\":[4],\"474\":[1,22],\"475\":[3,27],\"476\":[1,87],\"477\":[1,47],\"478\":[2,63],\"479\":[4,72],\"480\":[1],\"481\":[2,11],\"482\":[2,75],\"483\":[3,59],\"484\":[3,74],\"485\":[1],\"486\":[2,31],\"487\":[3,257],\"488\":[3,231],\"489\":[1,92],\"490\":[2,40],\"491\":[6,69],\"492\":[5,28],\"493\":[5,58],\"494\":[5,96],\"495\":[3],\"496\":[1,11],\"497\":[5,40],\"498\":[6,40],\"499\":[4],\"500\":[1,23],\"501\":[3,27],\"502\":[1,87],\"503\":[1,47],\"504\":[2,63],\"505\":[5,72],\"506\":[1],\"507\":[2,11],\"508\":[2,75],\"509\":[3,59],\"510\":[3,74],\"511\":[1],\"512\":[2,31],\"513\":[3,259],\"514\":[3,232],\"515\":[1,92],\"516\":[2,40],\"517\":[6,69],\"518\":[5,29],\"519\":[5,122],\"520\":[5,142],\"521\":[3],\"522\":[1,11],\"523\":[5,40],\"524\":[6,40],\"525\":[4],\"526\":[1,23],\"527\":[3,11],\"528\":[1,77],\"529\":[1,52],\"530\":[2,80],\"531\":[2,11],\"532\":[2,15],\"533\":[2,14],\"534\":[2,10],\"535\":[5,58],\"536\":[1],\"537\":[2,11],\"538\":[2,75],\"539\":[3,59],\"540\":[3,74],\"541\":[1],\"542\":[2,31],\"543\":[3,259],\"544\":[3,232],\"545\":[1,92],\"546\":[2,40],\"547\":[6,142],\"548\":[6,38],\"549\":[5,59],\"550\":[5,97],\"551\":[3],\"552\":[1,11],\"553\":[5,40],\"554\":[6,40],\"555\":[4],\"556\":[1,23],\"557\":[3,11],\"558\":[1,71],\"559\":[1,53],\"560\":[2,81],\"561\":[2,11],\"562\":[2,15],\"563\":[2,14],\"564\":[2,10],\"565\":[4,58],\"566\":[1],\"567\":[2,11],\"568\":[2,75],\"569\":[3,59],\"570\":[3,74],\"571\":[1],\"572\":[2,31],\"573\":[3,258],\"574\":[3,219],\"575\":[1,92],\"576\":[2,40],\"577\":[6,142],\"578\":[6,28],\"579\":[5,58],\"580\":[5,96],\"581\":[3],\"582\":[1,11],\"583\":[5,40],\"584\":[6,40],\"585\":[4],\"586\":[1,23],\"587\":[3,11],\"588\":[1,71],\"589\":[1,53],\"590\":[2,81],\"591\":[2,11],\"592\":[2,15],\"593\":[2,19],\"594\":[2,10],\"595\":[5,58],\"596\":[1],\"597\":[2,11],\"598\":[2,75],\"599\":[3,59],\"600\":[3,74],\"601\":[1],\"602\":[2,31],\"603\":[3,259],\"604\":[3,220],\"605\":[1,92],\"606\":[2,40],\"607\":[6,142],\"608\":[5,28],\"609\":[5,58],\"610\":[5,96],\"611\":[2,35],\"612\":[4,39],\"613\":[1],\"614\":[2,55],\"615\":[2,41],\"616\":[2,15],\"617\":[4,15],\"618\":[1,17],\"619\":[1,16],\"620\":[1,46],\"621\":[1,54],\"622\":[3,118],\"623\":[5,66],\"624\":[2,134],\"625\":[1,44],\"626\":[1,210],\"627\":[3],\"628\":[1,11],\"629\":[5,44],\"630\":[6,40],\"631\":[4],\"632\":[1,23],\"633\":[3,11],\"634\":[1,71],\"635\":[1,53],\"636\":[2,81],\"637\":[2,11],\"638\":[2,15],\"639\":[2,18],\"640\":[2,10],\"641\":[5,58],\"642\":[1],\"643\":[2,11],\"644\":[2,75],\"645\":[3,59],\"646\":[3,74],\"647\":[1],\"648\":[2,31],\"649\":[3,259],\"650\":[3,220],\"651\":[1,92],\"652\":[2,40],\"653\":[6,142],\"654\":[6,29],\"655\":[5,60],\"656\":[5,98],\"657\":[2,35],\"658\":[4,39],\"659\":[1],\"660\":[2,55],\"661\":[2,41],\"662\":[2,15],\"663\":[4,15],\"664\":[1,17],\"665\":[1,16],\"666\":[1,46],\"667\":[1,54],\"668\":[3,118],\"669\":[5,66],\"670\":[2,134],\"671\":[1,44],\"672\":[1,210],\"673\":[3],\"674\":[1,11],\"675\":[5,44],\"676\":[6,40],\"677\":[4],\"678\":[1,23],\"679\":[3,11],\"680\":[1,71],\"681\":[1,53],\"682\":[2,81],\"683\":[2,11],\"684\":[2,15],\"685\":[2,18],\"686\":[2,10],\"687\":[5,58],\"688\":[1],\"689\":[2,11],\"690\":[2,75],\"691\":[3,59],\"692\":[3,74],\"693\":[1],\"694\":[2,31],\"695\":[3,259],\"696\":[3,220],\"697\":[1,92],\"698\":[2,40],\"699\":[6,142],\"700\":[6,29],\"701\":[5,60],\"702\":[5,98],\"703\":[2,35],\"704\":[4,39],\"705\":[1],\"706\":[2,55],\"707\":[2,41],\"708\":[2,15],\"709\":[4,15],\"710\":[1,17],\"711\":[1,16],\"712\":[1,46],\"713\":[1,54],\"714\":[3,118],\"715\":[5,66],\"716\":[2,134],\"717\":[1,44],\"718\":[1,210],\"719\":[3],\"720\":[1,11],\"721\":[5,44],\"722\":[6,40],\"723\":[4],\"724\":[1,23],\"725\":[3,11],\"726\":[1,71],\"727\":[1,53],\"728\":[2,81],\"729\":[2,11],\"730\":[2,15],\"731\":[2,20],\"732\":[2,10],\"733\":[4,58],\"734\":[1],\"735\":[2,11],\"736\":[2,75],\"737\":[3,59],\"738\":[3,74],\"739\":[1],\"740\":[2,31],\"741\":[3,258],\"742\":[3,219],\"743\":[1,85],\"744\":[2,40],\"745\":[6,142],\"746\":[6,28],\"747\":[5,59],\"748\":[5,97],\"749\":[2,35],\"750\":[4,39],\"751\":[1],\"752\":[2,55],\"753\":[2,41],\"754\":[2,15],\"755\":[4,15],\"756\":[1,17],\"757\":[1,16],\"758\":[1,46],\"759\":[1,54],\"760\":[3,118],\"761\":[5,66],\"762\":[2,134],\"763\":[1,44],\"764\":[1,210],\"765\":[3],\"766\":[1,11],\"767\":[5,44],\"768\":[6,40],\"769\":[4],\"770\":[1,24],\"771\":[3,11],\"772\":[1,71],\"773\":[1,53],\"774\":[2,81],\"775\":[2,19],\"776\":[1,65],\"777\":[1,17],\"778\":[1,57],\"779\":[5,58],\"780\":[1],\"781\":[2,11],\"782\":[2,75],\"783\":[3,59],\"784\":[3,74],\"785\":[1],\"786\":[2,31],\"787\":[3,259],\"788\":[3,220],\"789\":[1,85],\"790\":[2,40],\"791\":[6,142],\"792\":[5,28],\"793\":[5,59],\"794\":[5,97],\"795\":[2],\"796\":[1,6],\"797\":[2],\"798\":[1,126],\"799\":[2,25],\"800\":[1,28],\"801\":[1,51],\"802\":[4,22],\"803\":[4,11],\"804\":[2,19],\"805\":[2,11],\"806\":[1,61],\"807\":[2],\"808\":[5,19],\"809\":[5,16],\"810\":[7,21],\"811\":[8,35],\"812\":[8,39],\"813\":[9,22],\"814\":[7,31],\"815\":[7,26],\"816\":[7,26],\"817\":[8,31],\"818\":[10,48],\"819\":[13,44],\"820\":[8,19],\"821\":[8,19],\"822\":[10,40],\"823\":[9,23],\"824\":[8,42],\"825\":[4,21],\"826\":[5,22],\"827\":[5,23],\"828\":[8,24],\"829\":[5,22],\"830\":[5,15],\"831\":[5,16],\"832\":[6,31],\"833\":[6,20],\"834\":[8,37],\"835\":[6,24],\"836\":[5,42],\"837\":[7,26],\"838\":[9,38],\"839\":[7,33],\"840\":[6,23],\"841\":[8,34],\"842\":[6,20],\"843\":[7,39],\"844\":[7,38],\"845\":[7,35],\"846\":[7,35],\"847\":[7,50],\"848\":[7,52],\"849\":[7,38],\"850\":[6,34],\"851\":[8,45],\"852\":[11,41],\"853\":[8,35],\"854\":[8,36],\"855\":[7,28],\"856\":[8,34],\"857\":[8,35],\"858\":[7,27],\"859\":[9,44],\"860\":[9,32],\"861\":[7,26],\"862\":[8,32],\"863\":[8,28],\"864\":[8,31],\"865\":[6,42],\"866\":[8,53],\"867\":[11,42],\"868\":[5,15],\"869\":[5,15],\"870\":[5,34],\"871\":[5,40],\"872\":[7,36],\"873\":[5,15],\"874\":[5,25],\"875\":[5,28],\"876\":[5,30],\"877\":[6,36],\"878\":[9,39],\"879\":[5,28],\"880\":[5,26],\"881\":[8,48],\"882\":[5,27],\"883\":[5,20],\"884\":[6,18],\"885\":[6,28],\"886\":[6,28],\"887\":[5,53],\"888\":[8,33],\"889\":[8,29],\"890\":[6,42],\"891\":[5,46],\"892\":[5,31],\"893\":[6,25],\"894\":[5,20],\"895\":[7,23],\"896\":[6,27],\"897\":[4,42],\"898\":[6,27],\"899\":[4,29],\"900\":[4,14],\"901\":[2],\"902\":[1,61],\"903\":[3,57],\"904\":[4,50],\"905\":[1,51],\"906\":[3],\"907\":[1,2],\"908\":[2],\"909\":[3,23],\"910\":[4,18],\"911\":[5,22],\"912\":[5,22],\"913\":[4,20],\"914\":[4,20],\"915\":[3,26],\"916\":[4,36],\"917\":[5,51],\"918\":[4,53],\"919\":[3,25],\"920\":[4,28],\"921\":[3,21],\"922\":[2],\"923\":[1,6],\"924\":[2],\"925\":[1,138],\"926\":[2,25],\"927\":[1,28],\"928\":[1,51],\"929\":[4,22],\"930\":[4,11],\"931\":[2,29],\"932\":[2,80],\"933\":[1,74],\"934\":[2],\"935\":[5,32],\"936\":[7,43],\"937\":[10,39],\"938\":[6,35],\"939\":[6,34],\"940\":[8,41],\"941\":[5,26],\"942\":[6,31],\"943\":[6,20],\"944\":[8,37],\"945\":[6,24],\"946\":[5,42],\"947\":[6,23],\"948\":[8,34],\"949\":[8,27],\"950\":[10,40],\"951\":[8,33],\"952\":[6,20],\"953\":[7,39],\"954\":[7,38],\"955\":[7,38],\"956\":[6,24],\"957\":[6,47],\"958\":[7,31],\"959\":[6,28],\"960\":[6,23],\"961\":[5,20],\"962\":[7,23],\"963\":[6,27],\"964\":[4,42],\"965\":[6,27],\"966\":[4,29],\"967\":[4,14],\"968\":[5,19],\"969\":[5,16],\"970\":[7,21],\"971\":[8,35],\"972\":[8,39],\"973\":[9,22],\"974\":[7,31],\"975\":[7,26],\"976\":[7,26],\"977\":[8,31],\"978\":[10,48],\"979\":[13,44],\"980\":[8,19],\"981\":[8,19],\"982\":[10,40],\"983\":[9,23],\"984\":[8,42],\"985\":[4,21],\"986\":[5,22],\"987\":[5,23],\"988\":[8,24],\"989\":[5,22],\"990\":[5,15],\"991\":[5,16],\"992\":[2],\"993\":[1,69],\"994\":[3,57],\"995\":[3,25],\"996\":[4,50],\"997\":[1,51],\"998\":[3],\"999\":[1,2],\"1000\":[2],\"1001\":[3,23],\"1002\":[4,18],\"1003\":[5,22],\"1004\":[5,22],\"1005\":[4,20],\"1006\":[4,20],\"1007\":[3,26],\"1008\":[4,36],\"1009\":[5,51],\"1010\":[4,53],\"1011\":[3,25],\"1012\":[4,28],\"1013\":[3,21],\"1014\":[2],\"1015\":[1,7],\"1016\":[3,10],\"1017\":[6,31],\"1018\":[6,20],\"1019\":[8,37],\"1020\":[6,24],\"1021\":[5,43],\"1022\":[7,26],\"1023\":[9,38],\"1024\":[7,34],\"1025\":[6,23],\"1026\":[8,34],\"1027\":[6,21],\"1028\":[7,35],\"1029\":[7,35],\"1030\":[7,51],\"1031\":[6,34],\"1032\":[8,45],\"1033\":[11,41],\"1034\":[8,35],\"1035\":[8,36],\"1036\":[7,28],\"1037\":[8,34],\"1038\":[8,35],\"1039\":[7,27],\"1040\":[9,44],\"1041\":[9,32],\"1042\":[7,26],\"1043\":[8,32],\"1044\":[8,32],\"1045\":[8,28],\"1046\":[8,31],\"1047\":[6,42],\"1048\":[8,53],\"1049\":[11,42],\"1050\":[5,15],\"1051\":[5,15],\"1052\":[5,34],\"1053\":[5,40],\"1054\":[7,36],\"1055\":[5,15],\"1056\":[5,25],\"1057\":[5,28],\"1058\":[5,30],\"1059\":[6,36],\"1060\":[9,39],\"1061\":[5,28],\"1062\":[5,26],\"1063\":[8,48],\"1064\":[5,27],\"1065\":[5,20],\"1066\":[5,46],\"1067\":[8,33],\"1068\":[8,29],\"1069\":[6,42],\"1070\":[5,42],\"1071\":[4,42],\"1072\":[6,27],\"1073\":[4,29],\"1074\":[4,14],\"1075\":[2],\"1076\":[5,19],\"1077\":[5,16],\"1078\":[7,21],\"1079\":[8,35],\"1080\":[8,39],\"1081\":[9,22],\"1082\":[7,31],\"1083\":[7,26],\"1084\":[7,26],\"1085\":[8,31],\"1086\":[10,48],\"1087\":[13,44],\"1088\":[8,19],\"1089\":[8,19],\"1090\":[10,40],\"1091\":[9,23],\"1092\":[8,42],\"1093\":[4,21],\"1094\":[5,22],\"1095\":[5,23],\"1096\":[8,24],\"1097\":[5,22],\"1098\":[5,15],\"1099\":[5,16],\"1100\":[3,10],\"1101\":[5,32],\"1102\":[7,43],\"1103\":[10,39],\"1104\":[6,35],\"1105\":[6,34],\"1106\":[8,41],\"1107\":[5,26],\"1108\":[6,31],\"1109\":[6,20],\"1110\":[8,37],\"1111\":[6,24],\"1112\":[5,43],\"1113\":[6,23],\"1114\":[8,34],\"1115\":[8,27],\"1116\":[10,40],\"1117\":[8,34],\"1118\":[6,21],\"1119\":[6,24],\"1120\":[6,47],\"1121\":[7,31],\"1122\":[6,23],\"1123\":[5,12],\"1124\":[7,23],\"1125\":[4,42],\"1126\":[6,27],\"1127\":[4,29],\"1128\":[4,14],\"1129\":[4],\"1130\":[3,23],\"1131\":[4,18],\"1132\":[5,22],\"1133\":[5,22],\"1134\":[4,20],\"1135\":[4,20],\"1136\":[4,36],\"1137\":[5,51],\"1138\":[4,53],\"1139\":[3,25],\"1140\":[4,28],\"1141\":[2],\"1142\":[1,2],\"1143\":[2],\"1144\":[5,19],\"1145\":[5,16],\"1146\":[7,21],\"1147\":[8,35],\"1148\":[8,39],\"1149\":[9,22],\"1150\":[7,31],\"1151\":[7,26],\"1152\":[7,26],\"1153\":[8,31],\"1154\":[10,48],\"1155\":[13,44],\"1156\":[8,19],\"1157\":[8,19],\"1158\":[10,40],\"1159\":[9,23],\"1160\":[8,42],\"1161\":[4,21],\"1162\":[5,22],\"1163\":[5,23],\"1164\":[8,24],\"1165\":[5,22],\"1166\":[5,15],\"1167\":[5,16],\"1168\":[6,31],\"1169\":[6,20],\"1170\":[8,37],\"1171\":[6,24],\"1172\":[5,43],\"1173\":[7,26],\"1174\":[9,38],\"1175\":[7,34],\"1176\":[6,23],\"1177\":[8,34],\"1178\":[6,21],\"1179\":[7,35],\"1180\":[7,35],\"1181\":[7,51],\"1182\":[6,34],\"1183\":[8,45],\"1184\":[11,41],\"1185\":[8,35],\"1186\":[8,36],\"1187\":[7,28],\"1188\":[8,34],\"1189\":[8,35],\"1190\":[7,27],\"1191\":[9,44],\"1192\":[9,32],\"1193\":[7,26],\"1194\":[8,32],\"1195\":[8,32],\"1196\":[8,28],\"1197\":[8,31],\"1198\":[6,42],\"1199\":[8,53],\"1200\":[11,42],\"1201\":[5,15],\"1202\":[5,15],\"1203\":[5,34],\"1204\":[5,40],\"1205\":[7,36],\"1206\":[5,15],\"1207\":[5,25],\"1208\":[5,28],\"1209\":[5,30],\"1210\":[6,36],\"1211\":[9,39],\"1212\":[5,28],\"1213\":[5,26],\"1214\":[8,48],\"1215\":[5,27],\"1216\":[5,20],\"1217\":[5,46],\"1218\":[8,33],\"1219\":[8,29],\"1220\":[6,42],\"1221\":[5,42],\"1222\":[4,42],\"1223\":[6,27],\"1224\":[4,29],\"1225\":[4,14],\"1226\":[2],\"1227\":[1,6],\"1228\":[2],\"1229\":[1,133],\"1230\":[2,25],\"1231\":[1,28],\"1232\":[1,51],\"1233\":[4,22],\"1234\":[4,11],\"1235\":[2,29],\"1236\":[2,80],\"1237\":[1,74],\"1238\":[2],\"1239\":[5,32],\"1240\":[7,43],\"1241\":[10,39],\"1242\":[6,35],\"1243\":[6,34],\"1244\":[8,41],\"1245\":[5,26],\"1246\":[6,31],\"1247\":[6,20],\"1248\":[8,37],\"1249\":[6,24],\"1250\":[5,43],\"1251\":[6,23],\"1252\":[8,34],\"1253\":[8,27],\"1254\":[10,40],\"1255\":[8,34],\"1256\":[6,21],\"1257\":[6,24],\"1258\":[6,47],\"1259\":[7,31],\"1260\":[6,28],\"1261\":[6,23],\"1262\":[5,37],\"1263\":[7,23],\"1264\":[4,42],\"1265\":[6,27],\"1266\":[4,29],\"1267\":[4,14],\"1268\":[5,19],\"1269\":[5,16],\"1270\":[7,21],\"1271\":[8,35],\"1272\":[8,39],\"1273\":[9,22],\"1274\":[7,31],\"1275\":[7,26],\"1276\":[7,26],\"1277\":[8,31],\"1278\":[10,48],\"1279\":[13,44],\"1280\":[8,19],\"1281\":[8,19],\"1282\":[10,40],\"1283\":[9,23],\"1284\":[8,42],\"1285\":[4,21],\"1286\":[5,22],\"1287\":[5,23],\"1288\":[8,24],\"1289\":[5,22],\"1290\":[5,15],\"1291\":[5,16],\"1292\":[2],\"1293\":[1,68],\"1294\":[3,57],\"1295\":[3,25],\"1296\":[4,50],\"1297\":[1,50],\"1298\":[3],\"1299\":[1,2],\"1300\":[2],\"1301\":[3,23],\"1302\":[4,18],\"1303\":[5,22],\"1304\":[5,22],\"1305\":[4,20],\"1306\":[4,20],\"1307\":[4,36],\"1308\":[5,51],\"1309\":[4,53],\"1310\":[3,25],\"1311\":[4,28],\"1312\":[3,21],\"1313\":[2],\"1314\":[1,2],\"1315\":[2],\"1316\":[5,19],\"1317\":[5,16],\"1318\":[7,21],\"1319\":[8,35],\"1320\":[8,39],\"1321\":[9,22],\"1322\":[7,31],\"1323\":[7,26],\"1324\":[7,26],\"1325\":[8,31],\"1326\":[10,48],\"1327\":[13,44],\"1328\":[8,19],\"1329\":[8,19],\"1330\":[10,40],\"1331\":[9,23],\"1332\":[8,42],\"1333\":[4,21],\"1334\":[5,22],\"1335\":[5,23],\"1336\":[8,24],\"1337\":[5,22],\"1338\":[5,15],\"1339\":[5,16],\"1340\":[6,31],\"1341\":[6,20],\"1342\":[8,37],\"1343\":[6,24],\"1344\":[5,43],\"1345\":[7,26],\"1346\":[9,38],\"1347\":[7,34],\"1348\":[6,23],\"1349\":[8,34],\"1350\":[6,21],\"1351\":[7,35],\"1352\":[7,35],\"1353\":[7,50],\"1354\":[7,52],\"1355\":[6,34],\"1356\":[8,45],\"1357\":[11,41],\"1358\":[8,35],\"1359\":[8,36],\"1360\":[7,28],\"1361\":[8,34],\"1362\":[8,35],\"1363\":[7,27],\"1364\":[9,44],\"1365\":[9,32],\"1366\":[7,26],\"1367\":[8,32],\"1368\":[8,28],\"1369\":[8,31],\"1370\":[6,42],\"1371\":[8,53],\"1372\":[11,42],\"1373\":[5,15],\"1374\":[5,15],\"1375\":[5,34],\"1376\":[5,40],\"1377\":[7,36],\"1378\":[5,15],\"1379\":[5,25],\"1380\":[5,28],\"1381\":[5,30],\"1382\":[6,36],\"1383\":[9,39],\"1384\":[5,28],\"1385\":[5,26],\"1386\":[8,48],\"1387\":[5,27],\"1388\":[5,20],\"1389\":[6,18],\"1390\":[6,28],\"1391\":[6,28],\"1392\":[5,53],\"1393\":[8,33],\"1394\":[8,29],\"1395\":[6,42],\"1396\":[5,46],\"1397\":[5,31],\"1398\":[4,42],\"1399\":[6,27],\"1400\":[4,29],\"1401\":[4,14],\"1402\":[2],\"1403\":[1,6],\"1404\":[2],\"1405\":[1,133],\"1406\":[2,25],\"1407\":[1,28],\"1408\":[1,51],\"1409\":[4,22],\"1410\":[4,11],\"1411\":[2,29],\"1412\":[2,80],\"1413\":[1,74],\"1414\":[2],\"1415\":[5,32],\"1416\":[7,43],\"1417\":[10,39],\"1418\":[6,35],\"1419\":[6,34],\"1420\":[8,41],\"1421\":[5,26],\"1422\":[6,31],\"1423\":[6,20],\"1424\":[8,37],\"1425\":[6,24],\"1426\":[5,43],\"1427\":[6,23],\"1428\":[8,34],\"1429\":[8,27],\"1430\":[10,40],\"1431\":[8,34],\"1432\":[6,21],\"1433\":[6,24],\"1434\":[6,47],\"1435\":[7,31],\"1436\":[6,28],\"1437\":[6,23],\"1438\":[5,20],\"1439\":[7,23],\"1440\":[4,42],\"1441\":[6,27],\"1442\":[4,29],\"1443\":[4,14],\"1444\":[5,19],\"1445\":[5,16],\"1446\":[7,21],\"1447\":[8,35],\"1448\":[8,39],\"1449\":[9,22],\"1450\":[7,31],\"1451\":[7,26],\"1452\":[7,26],\"1453\":[8,31],\"1454\":[10,48],\"1455\":[13,44],\"1456\":[8,19],\"1457\":[8,19],\"1458\":[10,40],\"1459\":[9,23],\"1460\":[8,42],\"1461\":[4,21],\"1462\":[5,22],\"1463\":[5,23],\"1464\":[8,24],\"1465\":[5,22],\"1466\":[5,15],\"1467\":[5,16],\"1468\":[2],\"1469\":[1,68],\"1470\":[3,57],\"1471\":[3,25],\"1472\":[4,50],\"1473\":[1,51],\"1474\":[3],\"1475\":[1,2],\"1476\":[2],\"1477\":[3,23],\"1478\":[4,18],\"1479\":[5,22],\"1480\":[5,22],\"1481\":[4,20],\"1482\":[4,20],\"1483\":[3,26],\"1484\":[4,36],\"1485\":[5,51],\"1486\":[4,53],\"1487\":[3,25],\"1488\":[4,28],\"1489\":[3,21],\"1490\":[2],\"1491\":[1,2],\"1492\":[2],\"1493\":[5,19],\"1494\":[5,16],\"1495\":[7,21],\"1496\":[8,35],\"1497\":[8,39],\"1498\":[9,22],\"1499\":[7,31],\"1500\":[7,26],\"1501\":[7,26],\"1502\":[8,31],\"1503\":[10,48],\"1504\":[13,44],\"1505\":[8,19],\"1506\":[8,19],\"1507\":[10,40],\"1508\":[9,23],\"1509\":[8,42],\"1510\":[4,21],\"1511\":[5,22],\"1512\":[5,23],\"1513\":[8,24],\"1514\":[5,22],\"1515\":[5,15],\"1516\":[5,16],\"1517\":[6,31],\"1518\":[6,20],\"1519\":[8,37],\"1520\":[6,24],\"1521\":[5,43],\"1522\":[7,26],\"1523\":[9,38],\"1524\":[7,34],\"1525\":[6,23],\"1526\":[8,34],\"1527\":[6,21],\"1528\":[7,35],\"1529\":[7,35],\"1530\":[7,50],\"1531\":[7,52],\"1532\":[6,34],\"1533\":[8,45],\"1534\":[11,41],\"1535\":[8,35],\"1536\":[8,36],\"1537\":[7,28],\"1538\":[8,34],\"1539\":[8,35],\"1540\":[7,27],\"1541\":[9,44],\"1542\":[9,32],\"1543\":[7,26],\"1544\":[8,32],\"1545\":[8,28],\"1546\":[8,31],\"1547\":[6,42],\"1548\":[8,53],\"1549\":[11,42],\"1550\":[5,15],\"1551\":[5,15],\"1552\":[5,34],\"1553\":[5,40],\"1554\":[7,36],\"1555\":[5,15],\"1556\":[5,25],\"1557\":[5,28],\"1558\":[5,30],\"1559\":[6,36],\"1560\":[9,39],\"1561\":[5,28],\"1562\":[5,26],\"1563\":[8,48],\"1564\":[5,27],\"1565\":[5,20],\"1566\":[6,18],\"1567\":[6,28],\"1568\":[6,28],\"1569\":[5,53],\"1570\":[8,33],\"1571\":[8,29],\"1572\":[6,42],\"1573\":[5,46],\"1574\":[5,31],\"1575\":[4,42],\"1576\":[6,27],\"1577\":[4,29],\"1578\":[4,14],\"1579\":[2],\"1580\":[1,6],\"1581\":[2],\"1582\":[1,133],\"1583\":[2,25],\"1584\":[1,28],\"1585\":[1,51],\"1586\":[4,22],\"1587\":[4,11],\"1588\":[2,29],\"1589\":[2,80],\"1590\":[1,74],\"1591\":[2],\"1592\":[5,32],\"1593\":[7,43],\"1594\":[10,39],\"1595\":[6,35],\"1596\":[6,34],\"1597\":[8,41],\"1598\":[5,26],\"1599\":[6,31],\"1600\":[6,20],\"1601\":[8,37],\"1602\":[6,24],\"1603\":[5,43],\"1604\":[6,23],\"1605\":[8,34],\"1606\":[8,27],\"1607\":[10,40],\"1608\":[8,34],\"1609\":[6,21],\"1610\":[6,24],\"1611\":[6,47],\"1612\":[7,31],\"1613\":[6,28],\"1614\":[6,23],\"1615\":[5,20],\"1616\":[7,23],\"1617\":[4,42],\"1618\":[6,27],\"1619\":[4,29],\"1620\":[4,14],\"1621\":[5,19],\"1622\":[5,16],\"1623\":[7,21],\"1624\":[8,35],\"1625\":[8,39],\"1626\":[9,22],\"1627\":[7,31],\"1628\":[7,26],\"1629\":[7,26],\"1630\":[8,31],\"1631\":[10,48],\"1632\":[13,44],\"1633\":[8,19],\"1634\":[8,19],\"1635\":[10,40],\"1636\":[9,23],\"1637\":[8,42],\"1638\":[4,21],\"1639\":[5,22],\"1640\":[5,23],\"1641\":[8,24],\"1642\":[5,22],\"1643\":[5,15],\"1644\":[5,16],\"1645\":[2],\"1646\":[1,68],\"1647\":[3,57],\"1648\":[3,25],\"1649\":[4,50],\"1650\":[1,51],\"1651\":[3],\"1652\":[1,2],\"1653\":[2],\"1654\":[3,23],\"1655\":[4,18],\"1656\":[5,22],\"1657\":[5,22],\"1658\":[4,20],\"1659\":[4,20],\"1660\":[3,26],\"1661\":[4,36],\"1662\":[5,51],\"1663\":[4,53],\"1664\":[3,25],\"1665\":[4,28],\"1666\":[3,21],\"1667\":[2],\"1668\":[1,2],\"1669\":[2],\"1670\":[5,19],\"1671\":[5,16],\"1672\":[7,21],\"1673\":[8,35],\"1674\":[8,39],\"1675\":[9,22],\"1676\":[7,31],\"1677\":[7,26],\"1678\":[7,26],\"1679\":[8,31],\"1680\":[10,48],\"1681\":[13,44],\"1682\":[8,19],\"1683\":[8,19],\"1684\":[10,40],\"1685\":[9,23],\"1686\":[8,42],\"1687\":[4,21],\"1688\":[5,22],\"1689\":[5,23],\"1690\":[8,24],\"1691\":[5,22],\"1692\":[5,15],\"1693\":[5,16],\"1694\":[6,31],\"1695\":[6,20],\"1696\":[8,37],\"1697\":[6,24],\"1698\":[5,43],\"1699\":[7,26],\"1700\":[9,38],\"1701\":[7,34],\"1702\":[6,23],\"1703\":[8,34],\"1704\":[6,21],\"1705\":[7,35],\"1706\":[7,35],\"1707\":[7,50],\"1708\":[7,52],\"1709\":[6,34],\"1710\":[8,45],\"1711\":[11,41],\"1712\":[8,35],\"1713\":[8,36],\"1714\":[7,28],\"1715\":[8,34],\"1716\":[8,35],\"1717\":[7,27],\"1718\":[9,44],\"1719\":[9,32],\"1720\":[7,26],\"1721\":[8,32],\"1722\":[8,28],\"1723\":[8,31],\"1724\":[6,42],\"1725\":[8,53],\"1726\":[11,42],\"1727\":[5,15],\"1728\":[5,15],\"1729\":[5,34],\"1730\":[5,40],\"1731\":[7,36],\"1732\":[5,15],\"1733\":[5,25],\"1734\":[5,28],\"1735\":[5,30],\"1736\":[6,36],\"1737\":[9,39],\"1738\":[5,28],\"1739\":[5,26],\"1740\":[8,48],\"1741\":[5,27],\"1742\":[5,20],\"1743\":[6,18],\"1744\":[6,28],\"1745\":[6,28],\"1746\":[5,53],\"1747\":[8,33],\"1748\":[8,29],\"1749\":[6,42],\"1750\":[5,46],\"1751\":[5,31],\"1752\":[4,42],\"1753\":[6,27],\"1754\":[4,29],\"1755\":[4,14],\"1756\":[2],\"1757\":[1,6],\"1758\":[2],\"1759\":[1,133],\"1760\":[2,25],\"1761\":[1,28],\"1762\":[1,51],\"1763\":[4,22],\"1764\":[4,11],\"1765\":[2,29],\"1766\":[2,80],\"1767\":[1,74],\"1768\":[2],\"1769\":[5,32],\"1770\":[7,43],\"1771\":[10,39],\"1772\":[6,35],\"1773\":[6,34],\"1774\":[8,41],\"1775\":[5,26],\"1776\":[6,31],\"1777\":[6,20],\"1778\":[8,37],\"1779\":[6,24],\"1780\":[5,43],\"1781\":[6,23],\"1782\":[8,34],\"1783\":[8,27],\"1784\":[10,40],\"1785\":[8,34],\"1786\":[6,21],\"1787\":[6,24],\"1788\":[6,47],\"1789\":[7,31],\"1790\":[6,28],\"1791\":[6,23],\"1792\":[5,20],\"1793\":[7,23],\"1794\":[4,42],\"1795\":[6,27],\"1796\":[4,29],\"1797\":[4,14],\"1798\":[5,19],\"1799\":[5,16],\"1800\":[7,21],\"1801\":[8,35],\"1802\":[8,39],\"1803\":[9,22],\"1804\":[7,31],\"1805\":[7,26],\"1806\":[7,26],\"1807\":[8,31],\"1808\":[10,48],\"1809\":[13,44],\"1810\":[8,19],\"1811\":[8,19],\"1812\":[10,40],\"1813\":[9,23],\"1814\":[8,42],\"1815\":[4,21],\"1816\":[5,22],\"1817\":[5,23],\"1818\":[8,24],\"1819\":[5,22],\"1820\":[5,15],\"1821\":[5,16],\"1822\":[2],\"1823\":[1,68],\"1824\":[3,57],\"1825\":[3,25],\"1826\":[4,50],\"1827\":[1,50],\"1828\":[3],\"1829\":[1,2],\"1830\":[2],\"1831\":[3,23],\"1832\":[4,18],\"1833\":[5,22],\"1834\":[5,22],\"1835\":[4,20],\"1836\":[4,20],\"1837\":[3,26],\"1838\":[4,36],\"1839\":[5,51],\"1840\":[4,53],\"1841\":[3,25],\"1842\":[4,28],\"1843\":[3,21],\"1844\":[2],\"1845\":[1,2],\"1846\":[2],\"1847\":[5,19],\"1848\":[5,16],\"1849\":[7,21],\"1850\":[8,35],\"1851\":[8,39],\"1852\":[9,22],\"1853\":[7,31],\"1854\":[7,26],\"1855\":[7,26],\"1856\":[8,31],\"1857\":[10,48],\"1858\":[13,44],\"1859\":[8,19],\"1860\":[8,19],\"1861\":[10,40],\"1862\":[9,23],\"1863\":[8,42],\"1864\":[4,21],\"1865\":[5,22],\"1866\":[5,23],\"1867\":[8,24],\"1868\":[5,22],\"1869\":[5,15],\"1870\":[5,16],\"1871\":[6,31],\"1872\":[6,20],\"1873\":[8,37],\"1874\":[6,24],\"1875\":[5,43],\"1876\":[7,26],\"1877\":[9,38],\"1878\":[7,34],\"1879\":[6,23],\"1880\":[8,34],\"1881\":[6,21],\"1882\":[7,35],\"1883\":[7,35],\"1884\":[7,50],\"1885\":[7,52],\"1886\":[6,34],\"1887\":[8,45],\"1888\":[11,41],\"1889\":[8,35],\"1890\":[8,36],\"1891\":[7,28],\"1892\":[8,34],\"1893\":[8,35],\"1894\":[7,27],\"1895\":[9,44],\"1896\":[9,32],\"1897\":[7,26],\"1898\":[8,32],\"1899\":[8,28],\"1900\":[8,31],\"1901\":[6,42],\"1902\":[8,53],\"1903\":[11,42],\"1904\":[5,15],\"1905\":[5,15],\"1906\":[5,34],\"1907\":[5,40],\"1908\":[7,36],\"1909\":[5,15],\"1910\":[5,25],\"1911\":[5,28],\"1912\":[5,30],\"1913\":[6,36],\"1914\":[9,39],\"1915\":[5,28],\"1916\":[5,26],\"1917\":[8,48],\"1918\":[5,27],\"1919\":[5,20],\"1920\":[6,18],\"1921\":[6,28],\"1922\":[6,28],\"1923\":[5,53],\"1924\":[8,33],\"1925\":[8,29],\"1926\":[6,42],\"1927\":[5,46],\"1928\":[5,31],\"1929\":[4,42],\"1930\":[6,27],\"1931\":[4,29],\"1932\":[4,14],\"1933\":[2],\"1934\":[1,6],\"1935\":[2],\"1936\":[1,133],\"1937\":[2,25],\"1938\":[1,28],\"1939\":[1,51],\"1940\":[4,22],\"1941\":[4,11],\"1942\":[2,29],\"1943\":[2,80],\"1944\":[1,74],\"1945\":[2],\"1946\":[5,32],\"1947\":[7,43],\"1948\":[10,39],\"1949\":[6,35],\"1950\":[6,34],\"1951\":[8,41],\"1952\":[5,26],\"1953\":[6,31],\"1954\":[6,20],\"1955\":[8,37],\"1956\":[6,24],\"1957\":[5,43],\"1958\":[6,23],\"1959\":[8,34],\"1960\":[8,27],\"1961\":[10,40],\"1962\":[8,34],\"1963\":[6,21],\"1964\":[6,24],\"1965\":[6,47],\"1966\":[7,31],\"1967\":[6,28],\"1968\":[6,23],\"1969\":[5,20],\"1970\":[7,23],\"1971\":[4,42],\"1972\":[6,27],\"1973\":[4,29],\"1974\":[4,14],\"1975\":[5,19],\"1976\":[5,16],\"1977\":[7,21],\"1978\":[8,35],\"1979\":[8,39],\"1980\":[9,22],\"1981\":[7,31],\"1982\":[7,26],\"1983\":[7,26],\"1984\":[8,31],\"1985\":[10,48],\"1986\":[13,44],\"1987\":[8,19],\"1988\":[8,19],\"1989\":[10,40],\"1990\":[9,23],\"1991\":[8,42],\"1992\":[4,21],\"1993\":[5,22],\"1994\":[5,23],\"1995\":[8,24],\"1996\":[5,22],\"1997\":[5,15],\"1998\":[5,16],\"1999\":[2],\"2000\":[1,68],\"2001\":[3,57],\"2002\":[3,25],\"2003\":[4,50],\"2004\":[1,51],\"2005\":[3],\"2006\":[1,2],\"2007\":[2],\"2008\":[3,23],\"2009\":[4,18],\"2010\":[5,22],\"2011\":[5,22],\"2012\":[4,20],\"2013\":[4,20],\"2014\":[3,26],\"2015\":[4,36],\"2016\":[5,51],\"2017\":[4,53],\"2018\":[3,25],\"2019\":[4,28],\"2020\":[3,21],\"2021\":[2],\"2022\":[1,2],\"2023\":[2],\"2024\":[5,19],\"2025\":[5,16],\"2026\":[7,21],\"2027\":[8,35],\"2028\":[8,39],\"2029\":[9,22],\"2030\":[7,31],\"2031\":[7,26],\"2032\":[7,26],\"2033\":[8,31],\"2034\":[10,48],\"2035\":[13,44],\"2036\":[8,19],\"2037\":[8,19],\"2038\":[10,40],\"2039\":[9,23],\"2040\":[8,42],\"2041\":[4,21],\"2042\":[5,22],\"2043\":[5,23],\"2044\":[8,24],\"2045\":[5,22],\"2046\":[5,15],\"2047\":[5,16],\"2048\":[6,31],\"2049\":[6,20],\"2050\":[8,37],\"2051\":[6,24],\"2052\":[5,43],\"2053\":[7,26],\"2054\":[9,38],\"2055\":[7,34],\"2056\":[6,23],\"2057\":[8,34],\"2058\":[6,21],\"2059\":[7,35],\"2060\":[7,35],\"2061\":[7,50],\"2062\":[7,52],\"2063\":[6,34],\"2064\":[8,45],\"2065\":[11,41],\"2066\":[8,35],\"2067\":[8,36],\"2068\":[7,28],\"2069\":[8,34],\"2070\":[8,35],\"2071\":[7,27],\"2072\":[9,44],\"2073\":[9,32],\"2074\":[7,26],\"2075\":[8,32],\"2076\":[8,28],\"2077\":[8,31],\"2078\":[6,42],\"2079\":[8,53],\"2080\":[11,42],\"2081\":[5,15],\"2082\":[5,15],\"2083\":[5,34],\"2084\":[5,40],\"2085\":[7,36],\"2086\":[5,15],\"2087\":[5,25],\"2088\":[5,28],\"2089\":[5,30],\"2090\":[6,36],\"2091\":[9,39],\"2092\":[5,28],\"2093\":[5,26],\"2094\":[8,48],\"2095\":[5,27],\"2096\":[5,20],\"2097\":[6,18],\"2098\":[6,28],\"2099\":[6,28],\"2100\":[5,53],\"2101\":[8,33],\"2102\":[8,29],\"2103\":[6,42],\"2104\":[5,46],\"2105\":[5,31],\"2106\":[4,42],\"2107\":[6,27],\"2108\":[4,29],\"2109\":[4,14],\"2110\":[2],\"2111\":[1,6],\"2112\":[2],\"2113\":[1,133],\"2114\":[2,25],\"2115\":[1,28],\"2116\":[1,51],\"2117\":[4,22],\"2118\":[4,11],\"2119\":[2,29],\"2120\":[2,80],\"2121\":[1,74],\"2122\":[2],\"2123\":[5,32],\"2124\":[7,43],\"2125\":[10,39],\"2126\":[6,35],\"2127\":[6,34],\"2128\":[8,41],\"2129\":[5,26],\"2130\":[6,31],\"2131\":[6,20],\"2132\":[8,37],\"2133\":[6,24],\"2134\":[5,43],\"2135\":[6,23],\"2136\":[8,34],\"2137\":[8,27],\"2138\":[10,40],\"2139\":[8,34],\"2140\":[6,21],\"2141\":[6,24],\"2142\":[6,47],\"2143\":[7,31],\"2144\":[6,28],\"2145\":[6,23],\"2146\":[5,20],\"2147\":[7,23],\"2148\":[4,42],\"2149\":[6,27],\"2150\":[4,29],\"2151\":[4,14],\"2152\":[5,19],\"2153\":[5,16],\"2154\":[7,21],\"2155\":[8,35],\"2156\":[8,39],\"2157\":[9,22],\"2158\":[7,31],\"2159\":[7,26],\"2160\":[7,26],\"2161\":[8,31],\"2162\":[10,48],\"2163\":[13,44],\"2164\":[8,19],\"2165\":[8,19],\"2166\":[10,40],\"2167\":[9,23],\"2168\":[8,42],\"2169\":[4,21],\"2170\":[5,22],\"2171\":[5,23],\"2172\":[8,24],\"2173\":[5,22],\"2174\":[5,15],\"2175\":[5,16],\"2176\":[2],\"2177\":[1,68],\"2178\":[3,57],\"2179\":[3,25],\"2180\":[4,50],\"2181\":[1,51],\"2182\":[3],\"2183\":[1,2],\"2184\":[2],\"2185\":[3,23],\"2186\":[4,18],\"2187\":[5,22],\"2188\":[5,22],\"2189\":[4,20],\"2190\":[4,20],\"2191\":[3,26],\"2192\":[4,36],\"2193\":[5,51],\"2194\":[4,53],\"2195\":[3,25],\"2196\":[4,28],\"2197\":[3,21],\"2198\":[2],\"2199\":[1,6],\"2200\":[2],\"2201\":[1,126],\"2202\":[2,25],\"2203\":[1,28],\"2204\":[1,51],\"2205\":[4,22],\"2206\":[4,11],\"2207\":[2,19],\"2208\":[2,11],\"2209\":[1,61],\"2210\":[2],\"2211\":[5,19],\"2212\":[5,16],\"2213\":[7,21],\"2214\":[8,35],\"2215\":[8,39],\"2216\":[9,22],\"2217\":[7,31],\"2218\":[7,26],\"2219\":[7,26],\"2220\":[8,31],\"2221\":[10,48],\"2222\":[13,44],\"2223\":[8,19],\"2224\":[8,19],\"2225\":[10,40],\"2226\":[9,23],\"2227\":[8,42],\"2228\":[4,21],\"2229\":[5,22],\"2230\":[5,23],\"2231\":[8,24],\"2232\":[5,22],\"2233\":[5,15],\"2234\":[5,16],\"2235\":[6,31],\"2236\":[6,20],\"2237\":[8,37],\"2238\":[6,24],\"2239\":[5,42],\"2240\":[7,26],\"2241\":[9,38],\"2242\":[7,33],\"2243\":[6,23],\"2244\":[8,34],\"2245\":[6,20],\"2246\":[7,39],\"2247\":[7,38],\"2248\":[7,35],\"2249\":[7,35],\"2250\":[7,50],\"2251\":[7,52],\"2252\":[7,38],\"2253\":[6,34],\"2254\":[8,45],\"2255\":[11,41],\"2256\":[8,35],\"2257\":[8,36],\"2258\":[7,28],\"2259\":[8,34],\"2260\":[8,35],\"2261\":[7,27],\"2262\":[9,44],\"2263\":[9,32],\"2264\":[7,26],\"2265\":[8,32],\"2266\":[8,28],\"2267\":[8,31],\"2268\":[6,42],\"2269\":[8,53],\"2270\":[11,42],\"2271\":[5,15],\"2272\":[5,15],\"2273\":[5,34],\"2274\":[5,40],\"2275\":[7,36],\"2276\":[5,15],\"2277\":[5,25],\"2278\":[5,28],\"2279\":[5,30],\"2280\":[6,36],\"2281\":[9,39],\"2282\":[5,28],\"2283\":[5,26],\"2284\":[8,48],\"2285\":[5,27],\"2286\":[5,20],\"2287\":[6,18],\"2288\":[6,28],\"2289\":[6,28],\"2290\":[5,53],\"2291\":[8,33],\"2292\":[8,29],\"2293\":[6,42],\"2294\":[5,46],\"2295\":[5,31],\"2296\":[6,25],\"2297\":[5,20],\"2298\":[7,23],\"2299\":[6,27],\"2300\":[4,42],\"2301\":[6,27],\"2302\":[4,29],\"2303\":[4,14],\"2304\":[2],\"2305\":[1,61],\"2306\":[3,57],\"2307\":[4,50],\"2308\":[1,51],\"2309\":[3],\"2310\":[1,2],\"2311\":[2],\"2312\":[3,23],\"2313\":[4,18],\"2314\":[5,22],\"2315\":[5,22],\"2316\":[4,20],\"2317\":[4,20],\"2318\":[3,26],\"2319\":[4,36],\"2320\":[5,51],\"2321\":[4,53],\"2322\":[3,25],\"2323\":[4,28],\"2324\":[3,21],\"2325\":[2],\"2326\":[1,6],\"2327\":[2],\"2328\":[1,138],\"2329\":[2,25],\"2330\":[1,28],\"2331\":[1,51],\"2332\":[4,22],\"2333\":[4,11],\"2334\":[2,29],\"2335\":[2,80],\"2336\":[1,74],\"2337\":[2],\"2338\":[5,32],\"2339\":[7,43],\"2340\":[10,39],\"2341\":[6,35],\"2342\":[6,34],\"2343\":[8,41],\"2344\":[5,26],\"2345\":[6,31],\"2346\":[6,20],\"2347\":[8,37],\"2348\":[6,24],\"2349\":[5,42],\"2350\":[6,23],\"2351\":[8,34],\"2352\":[8,27],\"2353\":[10,40],\"2354\":[8,33],\"2355\":[6,20],\"2356\":[7,39],\"2357\":[7,38],\"2358\":[7,38],\"2359\":[6,24],\"2360\":[6,47],\"2361\":[7,31],\"2362\":[6,28],\"2363\":[6,23],\"2364\":[5,20],\"2365\":[7,23],\"2366\":[6,27],\"2367\":[4,42],\"2368\":[6,27],\"2369\":[4,29],\"2370\":[4,14],\"2371\":[5,19],\"2372\":[5,16],\"2373\":[7,21],\"2374\":[8,35],\"2375\":[8,39],\"2376\":[9,22],\"2377\":[7,31],\"2378\":[7,26],\"2379\":[7,26],\"2380\":[8,31],\"2381\":[10,48],\"2382\":[13,44],\"2383\":[8,19],\"2384\":[8,19],\"2385\":[10,40],\"2386\":[9,23],\"2387\":[8,42],\"2388\":[4,21],\"2389\":[5,22],\"2390\":[5,23],\"2391\":[8,24],\"2392\":[5,22],\"2393\":[5,15],\"2394\":[5,16],\"2395\":[2],\"2396\":[1,69],\"2397\":[3,57],\"2398\":[3,25],\"2399\":[4,50],\"2400\":[1,51],\"2401\":[3],\"2402\":[1,2],\"2403\":[2],\"2404\":[3,23],\"2405\":[4,18],\"2406\":[5,22],\"2407\":[5,22],\"2408\":[4,20],\"2409\":[4,20],\"2410\":[3,26],\"2411\":[4,36],\"2412\":[5,51],\"2413\":[4,53],\"2414\":[3,25],\"2415\":[4,28],\"2416\":[3,21],\"2417\":[2],\"2418\":[1,6],\"2419\":[2],\"2420\":[1,126],\"2421\":[2,25],\"2422\":[1,28],\"2423\":[1,51],\"2424\":[4,22],\"2425\":[4,11],\"2426\":[2,19],\"2427\":[2,11],\"2428\":[1,61],\"2429\":[2],\"2430\":[5,19],\"2431\":[5,16],\"2432\":[7,21],\"2433\":[8,35],\"2434\":[8,39],\"2435\":[9,22],\"2436\":[7,31],\"2437\":[7,26],\"2438\":[7,26],\"2439\":[8,31],\"2440\":[10,48],\"2441\":[13,44],\"2442\":[8,19],\"2443\":[8,19],\"2444\":[10,40],\"2445\":[9,23],\"2446\":[8,42],\"2447\":[4,21],\"2448\":[5,22],\"2449\":[5,23],\"2450\":[8,24],\"2451\":[5,22],\"2452\":[5,15],\"2453\":[5,16],\"2454\":[6,31],\"2455\":[6,20],\"2456\":[8,37],\"2457\":[6,24],\"2458\":[5,42],\"2459\":[7,26],\"2460\":[9,38],\"2461\":[7,33],\"2462\":[6,23],\"2463\":[8,34],\"2464\":[6,20],\"2465\":[7,39],\"2466\":[7,38],\"2467\":[7,35],\"2468\":[7,35],\"2469\":[7,50],\"2470\":[7,52],\"2471\":[7,38],\"2472\":[6,34],\"2473\":[8,45],\"2474\":[11,41],\"2475\":[8,35],\"2476\":[8,36],\"2477\":[7,28],\"2478\":[8,34],\"2479\":[8,35],\"2480\":[7,27],\"2481\":[9,44],\"2482\":[9,32],\"2483\":[7,26],\"2484\":[8,32],\"2485\":[8,28],\"2486\":[8,31],\"2487\":[6,42],\"2488\":[8,53],\"2489\":[11,42],\"2490\":[5,15],\"2491\":[5,15],\"2492\":[5,34],\"2493\":[5,40],\"2494\":[7,36],\"2495\":[5,15],\"2496\":[5,25],\"2497\":[5,28],\"2498\":[5,30],\"2499\":[6,36],\"2500\":[9,39],\"2501\":[5,28],\"2502\":[5,26],\"2503\":[8,48],\"2504\":[5,27],\"2505\":[5,20],\"2506\":[6,18],\"2507\":[6,28],\"2508\":[6,28],\"2509\":[5,53],\"2510\":[8,33],\"2511\":[8,29],\"2512\":[6,42],\"2513\":[5,46],\"2514\":[5,31],\"2515\":[6,25],\"2516\":[5,20],\"2517\":[7,23],\"2518\":[6,27],\"2519\":[4,42],\"2520\":[6,27],\"2521\":[4,29],\"2522\":[4,14],\"2523\":[2],\"2524\":[1,61],\"2525\":[3,57],\"2526\":[4,50],\"2527\":[1,50],\"2528\":[3],\"2529\":[1,2],\"2530\":[2],\"2531\":[3,23],\"2532\":[4,18],\"2533\":[5,22],\"2534\":[5,22],\"2535\":[4,20],\"2536\":[4,20],\"2537\":[3,26],\"2538\":[4,36],\"2539\":[5,51],\"2540\":[4,53],\"2541\":[3,25],\"2542\":[4,28],\"2543\":[3,21],\"2544\":[2],\"2545\":[1,6],\"2546\":[2],\"2547\":[1,138],\"2548\":[2,25],\"2549\":[1,28],\"2550\":[1,51],\"2551\":[4,22],\"2552\":[4,11],\"2553\":[2,29],\"2554\":[2,80],\"2555\":[1,74],\"2556\":[2],\"2557\":[5,32],\"2558\":[7,43],\"2559\":[10,39],\"2560\":[6,35],\"2561\":[6,34],\"2562\":[8,41],\"2563\":[5,26],\"2564\":[6,31],\"2565\":[6,20],\"2566\":[8,37],\"2567\":[6,24],\"2568\":[5,42],\"2569\":[6,23],\"2570\":[8,34],\"2571\":[8,27],\"2572\":[10,40],\"2573\":[8,33],\"2574\":[6,20],\"2575\":[7,39],\"2576\":[7,38],\"2577\":[7,38],\"2578\":[6,24],\"2579\":[6,47],\"2580\":[7,31],\"2581\":[6,28],\"2582\":[6,23],\"2583\":[5,20],\"2584\":[7,23],\"2585\":[6,27],\"2586\":[4,42],\"2587\":[6,27],\"2588\":[4,29],\"2589\":[4,14],\"2590\":[5,19],\"2591\":[5,16],\"2592\":[7,21],\"2593\":[8,35],\"2594\":[8,39],\"2595\":[9,22],\"2596\":[7,31],\"2597\":[7,26],\"2598\":[7,26],\"2599\":[8,31],\"2600\":[10,48],\"2601\":[13,44],\"2602\":[8,19],\"2603\":[8,19],\"2604\":[10,40],\"2605\":[9,23],\"2606\":[8,42],\"2607\":[4,21],\"2608\":[5,22],\"2609\":[5,23],\"2610\":[8,24],\"2611\":[5,22],\"2612\":[5,15],\"2613\":[5,16],\"2614\":[2],\"2615\":[1,69],\"2616\":[3,57],\"2617\":[3,25],\"2618\":[4,50],\"2619\":[1,50],\"2620\":[3],\"2621\":[1,2],\"2622\":[2],\"2623\":[3,23],\"2624\":[4,18],\"2625\":[5,22],\"2626\":[5,22],\"2627\":[4,20],\"2628\":[4,20],\"2629\":[3,26],\"2630\":[4,36],\"2631\":[5,51],\"2632\":[4,53],\"2633\":[3,25],\"2634\":[4,28],\"2635\":[3,21],\"2636\":[2],\"2637\":[1,6],\"2638\":[2],\"2639\":[1,126],\"2640\":[2,25],\"2641\":[1,28],\"2642\":[1,51],\"2643\":[4,22],\"2644\":[4,11],\"2645\":[2,19],\"2646\":[2,11],\"2647\":[1,61],\"2648\":[2],\"2649\":[5,19],\"2650\":[5,16],\"2651\":[7,21],\"2652\":[8,35],\"2653\":[8,39],\"2654\":[9,22],\"2655\":[7,31],\"2656\":[7,26],\"2657\":[7,26],\"2658\":[8,31],\"2659\":[10,48],\"2660\":[13,44],\"2661\":[8,19],\"2662\":[8,19],\"2663\":[10,40],\"2664\":[9,23],\"2665\":[8,42],\"2666\":[4,21],\"2667\":[5,22],\"2668\":[5,23],\"2669\":[8,24],\"2670\":[5,22],\"2671\":[5,15],\"2672\":[5,16],\"2673\":[6,31],\"2674\":[6,20],\"2675\":[8,37],\"2676\":[6,24],\"2677\":[5,42],\"2678\":[7,26],\"2679\":[9,38],\"2680\":[7,33],\"2681\":[6,23],\"2682\":[8,34],\"2683\":[6,20],\"2684\":[7,39],\"2685\":[7,38],\"2686\":[7,35],\"2687\":[7,35],\"2688\":[7,50],\"2689\":[7,52],\"2690\":[7,38],\"2691\":[6,34],\"2692\":[8,45],\"2693\":[11,41],\"2694\":[8,35],\"2695\":[8,36],\"2696\":[7,28],\"2697\":[8,34],\"2698\":[8,35],\"2699\":[7,27],\"2700\":[9,44],\"2701\":[9,32],\"2702\":[7,26],\"2703\":[8,32],\"2704\":[8,28],\"2705\":[8,31],\"2706\":[6,42],\"2707\":[8,53],\"2708\":[11,42],\"2709\":[5,15],\"2710\":[5,15],\"2711\":[5,34],\"2712\":[5,40],\"2713\":[7,36],\"2714\":[5,15],\"2715\":[5,25],\"2716\":[5,28],\"2717\":[5,30],\"2718\":[6,36],\"2719\":[9,39],\"2720\":[5,28],\"2721\":[5,26],\"2722\":[8,48],\"2723\":[5,27],\"2724\":[5,20],\"2725\":[6,18],\"2726\":[6,28],\"2727\":[6,28],\"2728\":[5,53],\"2729\":[8,33],\"2730\":[8,29],\"2731\":[6,42],\"2732\":[5,46],\"2733\":[5,31],\"2734\":[6,25],\"2735\":[5,20],\"2736\":[7,23],\"2737\":[6,27],\"2738\":[4,42],\"2739\":[6,27],\"2740\":[4,29],\"2741\":[4,14],\"2742\":[2],\"2743\":[1,61],\"2744\":[3,57],\"2745\":[4,50],\"2746\":[1,51],\"2747\":[3],\"2748\":[1,2],\"2749\":[2],\"2750\":[3,23],\"2751\":[4,18],\"2752\":[5,22],\"2753\":[5,22],\"2754\":[4,20],\"2755\":[4,20],\"2756\":[3,26],\"2757\":[4,36],\"2758\":[5,51],\"2759\":[4,53],\"2760\":[3,25],\"2761\":[4,28],\"2762\":[3,21],\"2763\":[2],\"2764\":[1,6],\"2765\":[2],\"2766\":[1,138],\"2767\":[2,25],\"2768\":[1,28],\"2769\":[1,51],\"2770\":[4,22],\"2771\":[4,11],\"2772\":[2,29],\"2773\":[2,80],\"2774\":[1,74],\"2775\":[2],\"2776\":[5,32],\"2777\":[7,43],\"2778\":[10,39],\"2779\":[6,35],\"2780\":[6,34],\"2781\":[8,41],\"2782\":[5,26],\"2783\":[6,31],\"2784\":[6,20],\"2785\":[8,37],\"2786\":[6,24],\"2787\":[5,42],\"2788\":[6,23],\"2789\":[8,34],\"2790\":[8,27],\"2791\":[10,40],\"2792\":[8,33],\"2793\":[6,20],\"2794\":[7,39],\"2795\":[7,38],\"2796\":[7,38],\"2797\":[6,24],\"2798\":[6,47],\"2799\":[7,31],\"2800\":[6,28],\"2801\":[6,23],\"2802\":[5,20],\"2803\":[7,23],\"2804\":[6,27],\"2805\":[4,42],\"2806\":[6,27],\"2807\":[4,29],\"2808\":[4,14],\"2809\":[5,19],\"2810\":[5,16],\"2811\":[7,21],\"2812\":[8,35],\"2813\":[8,39],\"2814\":[9,22],\"2815\":[7,31],\"2816\":[7,26],\"2817\":[7,26],\"2818\":[8,31],\"2819\":[10,48],\"2820\":[13,44],\"2821\":[8,19],\"2822\":[8,19],\"2823\":[10,40],\"2824\":[9,23],\"2825\":[8,42],\"2826\":[4,21],\"2827\":[5,22],\"2828\":[5,23],\"2829\":[8,24],\"2830\":[5,22],\"2831\":[5,15],\"2832\":[5,16],\"2833\":[2],\"2834\":[1,69],\"2835\":[3,57],\"2836\":[3,25],\"2837\":[4,50],\"2838\":[1,51],\"2839\":[3],\"2840\":[1,2],\"2841\":[2],\"2842\":[3,23],\"2843\":[4,18],\"2844\":[5,22],\"2845\":[5,22],\"2846\":[4,20],\"2847\":[4,20],\"2848\":[3,26],\"2849\":[4,36],\"2850\":[5,51],\"2851\":[4,53],\"2852\":[3,25],\"2853\":[4,28],\"2854\":[3,21],\"2855\":[1,3],\"2856\":[1]},\"averageFieldLength\":[5.134406720336022,39.44864635230549],\"storedFields\":{\"0\":{\"h\":\"Data Sharing Framework\",\"t\":[\"The Data Sharing Framework (DSF) is a concept for a secure middleware to distribute data sharing processes based on the BPMN 2.0 and FHIR R4 standards. The DSF is used to support biomedical research with routine data, aiming to extract, merge, pseudonymize and provide data stored in multiple distributed organizations. Every participating site runs a FHIR endpoint accessible by other sites and a business process engine in the local secured network. The process engines execute BPMN processes in order to coordinate local and remote steps necessary to enable cross-site data sharing or feasibility analyses. This includes access to local data repositories, use-and-access-committee decision support, consent filtering, and privacy preserving record-linkage and pseudonymization. The aim is to enable secure and syntactically-, semantically- and process-interoperable data exchange across organizational boundaries. The secure communication infrastructure is funded by the German Federal Ministry of Education and Research within the Medical Informatics structure as DSF Community.\",\"DSF concept\"]},\"1\":{\"h\":\"\",\"t\":[\"We are very pleased to have won the Rolf Hansen Memorial Award at EFMI MIE 2023 in Gothenburg. The Rolf Hansen Memorial Award is presented annually by the European Federation for Medical Informatics (EFMI) for an outstanding paper as well as for an excellent presentation. It is named after Rolf Hansen (1931-1993), a well-known Norwegian medical informatician and former president of EFMI. Hauke Hund presented his Paper: No Transfer Without Validation: A Data Sharing Framework Use Case in May at the EFMI MIE. doi:10.3233/SHTI230066 \"]},\"2\":{\"h\":\"and we will take care of your request as soon as possible.\"},\"3\":{\"h\":\"About\"},\"4\":{\"h\":\"Overview\",\"t\":[\"Contact & Community Guide\",\"Contributors\",\"Partners\",\"Public Funding\"]},\"5\":{\"h\":\"DSF for your project\",\"t\":[\"Summary\",\"Use case agnostic middleware: DSF is adaptable to any distributed process, leveraging BPMN 2.0 and FHIR R4 for secure, efficient data sharing across various biomedical research scenarios.\",\"Security: DSF prioritizes security through stringent authentication and authorization protocols, ensuring data is accessed and shared only by authorized organizations to maintain data confidentiality and integrity.\",\"Proven in clinical research: Deployed in German university hospitals, DSF's effectiveness and reliability are validated in real-world settings.\",\"Implementation guidance: DSF offers resources on how to implement new process plugins.\"]},\"6\":{\"h\":\"Overview of DSF\",\"t\":[\"The Data Sharing Framework (DSF) is a secure middleware solution designed to facilitate data sharing across different organizations for biomedical research. It utilizes BPMN 2.0 and FHIR R4 standards to support processes such as data extraction, merging, pseudonymization, and provisioning. Funded by the German Federal Ministry of Education and Research as part of the Medical Informatics initiative, the DSF aims to improve data interoperability and security across institutional boundaries.\"]},\"7\":{\"h\":\"Key features and benefits\"},\"8\":{\"h\":\"Distributed data sharing processes\",\"t\":[\"DSF enables distributed data sharing by providing each participating site with a FHIR endpoint and a business process engine. This setup ensures that data can be securely shared and processed across different sites, facilitating cross-site data sharing and feasibility analyses.\"]},\"9\":{\"h\":\"Flexibility with data standards\",\"t\":[\"While DSF primarily uses the FHIR R4 standard to ensure high-quality data exchange, it is designed to be open and adaptable to other data formats. This flexibility allows for a wide range of data types to be incorporated into research projects.\"]},\"10\":{\"h\":\"Security and access control\",\"t\":[\"Security is a critical component of DSF, which includes robust authentication and authorization protocols. These protocols ensure that data access and sharing are restricted to authorized organizations, maintaining the confidentiality and integrity of the data.\"]},\"11\":{\"h\":\"Deployment in clinical environments\",\"t\":[\"DSF is already deployed and operational in Data Integration Centers at German university hospitals, demonstrating its applicability and reliability in real-world clinical research settings.\"]},\"12\":{\"h\":\"Getting started with the DSF\",\"t\":[\"If you're looking to leverage the DSF for your research or you're interested in exploring how it can enhance your data sharing needs, we're here to support you. Visit the page to start your journey towards integrating the DSF into your research project.\",\"Should you have any questions or need personalized assistance, don't hesitate to reach out to the DSF core team directly at dsf-gecko@hs-heilbronn.de.\",\"Embark on your DSF journey today and committed to advancing biomedical research through secure, interoperable data sharing.\"]},\"13\":{\"h\":\"How to implement your use-case\",\"t\":[\"Work in progress\",\"This site is work in progress, please come back later.\",\"If you want further information about the DSF and how to implement use cases, please visit:\"]},\"14\":{\"h\":\"Hackathon\",\"t\":[\"Gemeinsame technische Sprechstunde der DSF-Community und des FDPG+\",\"Montags, 13:00-14:00 Uhr\",\"Ort: https://dsf.dev/sprechstunde\",\"Zusammenfassung\",\"Konferenz: https://audimax.heiconf.uni-heidelberg.de/jxh4-jxx2-tm6c-d37q\",\"Vorbereitung\",\"Installationshinweise\",\"Wir laden Sie herzlich zu unserem kommenden Hackathon am 18.06. von 10:00 Uhr bis 15:30 Uhr ein. Diese Veranstaltung bietet die Gelegenheit, sich mit den neuesten Updates und Funktionen unserer Komponenten vertraut zu machen.\",\"Agenda:\",\"Einführung in Neuerungen (10:00 - 11:00 Uhr): \",\"Begrüßung und Einführung in die neuen Funktionen und Verbesserungen des DSFs\",\"Präsentation der Änderungen der MII DSF-Prozessplugins, sowie von Blaze und Flare\",\"Updates MII-Komponenten (ab 11:00 Uhr bis verlängerter Pause, um NUM-DIZ-Meeting besuchen zu können): \",\"DSF\",\"Feasibility\",\"Data Sharing\",\"Data Transfer\",\"KDS Report\",\"Blaze\",\"Flare mit neuer KDS Ontologie\",\"Testen des Prozessplugins \\\"Data Sharing\\\" (ab 14:15 Uhr): \",\"Praktische Anwendung des \\\"Data Sharing\\\"-Prozessplugins auf unserer Testinfrastruktur.\",\"Ziel der Veranstaltung ist es die Test- und Produktivsysteme möglichst aller Standorte auf den neusten Stand zu patchen.\"]},\"15\":{\"h\":\"Vorbereitung\",\"t\":[\"In diesem Hackathon ist das Aktualisieren der Systeme ein aktiver Bestandteil und bedarf keiner speziellen Vorbereitung. Für das Testen der Data Sharing Prozesse sollten jedoch einige Voraussetzungen bereits vor dem Termin erfüllt sein.\"]},\"16\":{\"h\":\"Netzwerkfreigaben\",\"t\":[\"Für den Hackathon werden wir primär die Test-DMS aus Heilbronn verwenden, dafür muss neben der Freigabe zur FDPG auch die Freigabe zum und vom MII-Test-System der HHN vorhanden sein (mii-test.gecko.hs-heilbronn.de).\",\"In diesem Kontext bietet es sich an, auch die Freigaben für weitere Test-DMSen zu beantragen. Weitere Details dazu befinden sich in der Liste der Firewallregeln im Test-Allowlist-Management-Tool (allowlist-test.gecko.hs-heilbronn.de) unter dem Punkt “Download Allowlist”. Wir planen während des Termins auch mit ausgewählten DIZen erste Funktionstests der Test-DMSen durchzuführen.\",\"Wir empfehlen auch sicherzustellen, dass Sie Zugriff auf die Weboberfläche Ihres DSF-FHIR-Servers haben.\"]},\"17\":{\"h\":\"FHIR-Store\",\"t\":[\"Zur Datenausleitung im Kontext des Data Sharing Prozesses werden wir FHIR Bundles mit Testdaten zur Verfügung stellen, die in Form eines FHIR Bundles auf einem FHIR Store gespeichert werden müssen. Dabei kann ein beliebiger FHIR Server (z.B. HAPI FHIR oder Blaze) verwendet werden. Es kann auch der FHIR Server verwendet werden, der z.B. für Feasibility im Testsystem genutzt wird.\",\"Weitere Details zum Data Sharing Prozess sind hier zu finden:\",\"https://github.com/medizininformatik-initiative/mii-process-data-sharing/wiki\",\"Eine Installation kann vor oder während des Hackathons durchgeführt werden.\"]},\"18\":{\"h\":\"Installationshinweise\"},\"19\":{\"h\":\"DSF\",\"t\":[\"Installation oder Update\"]},\"20\":{\"h\":\"Prozessplugins\",\"t\":[\"DSF Ping Pong 1.0.1.0 Release Notes\",\"DSF Allowlist Plugin 1.0.0.1 Release Notes\",\"MII Feasibility 1.0.0.5 Instructions\",\"MII Process Report 1.1.0.0 for Test Infrastructure Instructions. Please use 1.0.x.x for Prod for now Instructions\",\"MII Process Data Transfer 1.0.1.0 Instructions\",\"MII Process Data Sharing 1.0.0.1 Instructions\"]},\"21\":{\"h\":\"Weitere Anwendungen\",\"t\":[\"Flare Instructions\",\"Blaze 0.27.1 Instructions\"]},\"22\":{\"h\":\"Data Sharing Demodaten\",\"t\":[\"https://github.com/medizininformatik-initiative/mii-process-data-sharing/blob/develop/src/test/resources/fhir/Bundle/Dic1FhirStore_Demo_Bundle.xml\",\"Falls Sie Fragen zum Hackathon oder der Installation des DSF haben, melden Sie sich gerne über den DSF-Community Zulip-Channel oder dsf-gecko@hs-heilbronn.de.\"]},\"23\":{\"h\":\"Documentation\"},\"24\":{\"h\":\"Overview\",\"t\":[\"Documentation \"]},\"25\":{\"h\":\"Publications and Talks\"},\"26\":{\"h\":\"Publications\",\"t\":[\"H. Hund, R. Wettstein, C.M. Heidt, C. Fegeler, Executing Distributed Healthcare and Research Processes – The HiGHmed Data Sharing Framework, Stud Health Technol Inform, 278 (2021) 126-133, doi:10.3233/SHTI210060\",\"R. Wettstein, H. Hund, I. Kobylinski, C. Fegeler, O. Heinze, Feasibility Queries in Distributed Architectures – Concept and Implementation in HiGHmed, Stud Health Technol Inform, 278 (2021) 134-141, doi:10.3233/SHTI210061\",\"C.M. Heidt, H. Hund, C. Fegeler, A Federated Record Linkage Algorithm for Secure Medical Data Sharing, Stud Health Technol Inform, 278 (2021) 142-149, doi:10.3233/SHTI210062\",\"R. Wettstein, H. Hund, C. Fegeler, O. Heinze, Data Sharing in Distributed Architectures – Concept and Implementation in HiGHmed, Stud Health Technol Inform, 283 (2021) 111-118, doi:10.3233/SHTI210548\",\"H.-U. Prokosch, T. Bahls, M. Bialke, J. Eils, C. Fegeler, J. Gruendner, B. Haarbrandt, C. Hampf, W. Hoffmann, H. Hund, et al. The COVID-19 Data Exchange Platform of the German University Medicine, Stud Health Technol Inform, 294 (2022) 674-678, doi:10.3233/SHTI220554\",\"R. Wettstein, T. Kussel, H. Hund, C. Fegeler, M. Dugas, K. Hamacher, Secure Multi-Party Computation Based Distributed Feasibility Queries – A HiGHmed Use Case, Stud Health Technol Inform, 296 (2022) 41-49, doi:10.3233/SHTI220802\",\"C. Zilske, M. Kurscheidt, S.T. Schweizer, H. Hund, S. Mödinger, C. Fegeler, Monitoring Distributed Business Processes in Biomedical Research, Stud Health Technol Inform, 302 (2023) 252-256, doi:10.3233/SHTI230113\",\"H. Hund, R. Wettstein, C. Hampf, M. Bialke, M. Kurscheidt, S.T. Schweizer, C. Zilske, S. Mödinger, C. Fegeler, No Transfer Without Validation: A Data Sharing Framework Use Case, Stud Health Technol Inform, 302 (2023) 68-72, doi:10.3233/SHTI230066\",\"H. Hund, R. Wettstein, M. Kurscheidt, S.T. Schweizer, C. Zilske, C. Fegeler, Interoperability Is a Process- The Data Sharing Framework, Stud Health Technol Inform, 310 (2024) 28-32, doi:10.3233/SHTI230921\"]},\"27\":{\"h\":\"Recorded Talks\"},\"28\":{\"h\":\"GMDS Conference 2022\",\"t\":[\"Hands On! - Introduction to the Data Sharing Framework from a User Perspective \",\"Tutorial: \"]},\"29\":{\"h\":\"GMDS Conference 2020\",\"t\":[\"Executing Distributed Healthcare and Research Processes – the HiGHmed Data Sharing Framework\",\"Feasibility Queries in Distributed Architectures – Concept and Implementation in HiGHmed\",\"A Federated Record Linkage Algorithm for Secure Medical Data Sharing\"]},\"30\":{\"h\":\"Version 0.9.x\",\"t\":[\"Data Sharing Framework 0.9.x is an old version of the Data Sharing Framework. Click to find more information about the DSF in general.\"]},\"31\":{\"h\":\"Overview (v 0.9.x)\"},\"32\":{\"h\":\"Introduction\",\"t\":[\"The Data Sharing Framework implements a distributed process engine based on the BPMN 2.0 and FHIR R4 standards. The DSF is used to support biomedical research with routine data. Every participating site runs a FHIR endpoint (dsf-fhir) accessible by other sites and a business process engine (dsf-bpe) in the local secured network. Authentication between sites is handled using X.509 client/server certificates. The process engines execute BPMN processes in order to coordinate local and remote steps necessary to enable cross-site data sharing and feasibility analyses. This includes access to local data repositories, use-and-access-committee decision support, consent filtering, and privacy preserving record-linkage and pseudonymization.\",\"DSF Architecture\"]},\"33\":{\"h\":\"Security\",\"t\":[\"We take security of the DSF, its process plugins, services and tools we operate very seriously.\",\"We describe the security mechanisms used by the DSF to implement secure communication on the pages Architecture, Security and Allow List.\",\"To ensure a high level of security, you should always install the latest DSF version and use the latest versions of the process plugins. Use the instructions to install the latest version of the DSF or to upgrade on the latest version. The instructions described there implement the security configuration recommended by us.\",\"It is also important that you ensure a secure operating environment in which you verify firewall configurations, keep the operating systems on which the DSF is running up to date and harden it according to the latest state of the art.\"]},\"34\":{\"h\":\"Security vulnerability disclosure policy\"},\"35\":{\"h\":\"Our commitment to security\",\"t\":[\"We as the DSF development team take security of our software, services and data very seriously. We understand that despite our best efforts, vulnerabilities can exist. To address this, we encourage responsible reporting of any security vulnerabilities discovered in our software and systems.\"]},\"36\":{\"h\":\"Responsible disclosure\",\"t\":[\"We kindly ask security researchers and the general public to follow the principles of Coordinated Vulnerability Disclosure (CVD) or Responsible Disclosure when reporting vulnerabilities to us. This approach helps us to mitigate potential risks and protect our users' data effectively.\"]},\"37\":{\"h\":\"How to Report a Vulnerability\",\"t\":[\"If you believe you have found a security vulnerability in our system, please email us at dsf-security@hs-heilbronn.de. If you want to use end-to-end-encryption, you can send us mails using s-mime with the certificate chain provided here. We kindly request the following:\",\"Provide a detailed description of the vulnerability, including if possible the potential impact and how it can be exploited.\",\"Include steps to reproduce the vulnerability or proof-of-concept code, if possible.\",\"Avoid accessing or modifying user data without permission, and do not exploit a security issue for any reason other than testing.\",\"Maintain confidentiality and do not publicly disclose the vulnerability, until we have had the opportunity to investigate and address it.\",\"Please do not file an issue on a security-related topic and use the e-mail address provided. You can verify the address both in the application repository and at the homepage (this page).\"]},\"38\":{\"h\":\"Our promise\",\"t\":[\"Acknowledgement: We usually will acknowledge receipt of your vulnerability report within 48 hours.\",\"Investigation: Our security team will investigate the issue and work diligently to verify and reproduce the vulnerability.\",\"Communication: We will keep you informed of our progress as we work to resolve the issue.\",\"Resolution: We will strive to resolve security issues in a timely manner and release updates, patches, or remediations as needed.\",\"Recognition: We value your effort in making our systems more secure and will recognize your contribution, if desired, once the vulnerability is resolved.\"]},\"39\":{\"h\":\"Legal Protection\",\"t\":[\"We promise not to initiate legal action against individuals who report vulnerabilities responsibly in accordance with this policy. This includes not suing for accidental access to data or reporting in good faith.\"]},\"40\":{\"h\":\"Questions?\",\"t\":[\"If you have any questions about this policy or security of the Data Sharing Framework, the services and tools we provide, please contact us at dsf-security@hs-heilbronn.de. You can send us encrypted e-mails using s-mime. You can find the certificate chain here.\"]},\"41\":{\"h\":\"Sprechstunde\",\"t\":[\"Gemeinsame technische Sprechstunde der DSF-Community und des FDPG+\",\"Montags, 13:00-14:00 Uhr\",\"Ort: https://dsf.dev/sprechstunde\",\"Klicken Sie hier, um der Sprechstunde beizutreten.\"]},\"42\":{\"h\":\"DSF 1.5.2\",\"t\":[\"Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click to find more information about the DSF in general.\",\"Important note\",\"This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.\",\"Upgrade from DSF 0.9.x.\",\"Upgrade from DSF 1.5.1\",\"Install DSF 1.5.2\",\"Create a new process plugin\",\"Upgrade from DSF 0.9.x.\"]},\"43\":{\"h\":\"New features\",\"t\":[\"Improved versioning to support up- and downwards-compatibility\",\"Enhanced web ui to start processes in the web browser\",\"Allow local user authentication and authorization with OpenID Connect\",\"New process plugin API\",\"Removed mostly unused features to simplify instance configuration\",\"Unified proxy setup\",\"Many more features, see 1.x release-notes\"]},\"44\":{\"h\":\"DSF 1.0.0\",\"t\":[\"Data Sharing Framework 1.0.0 is the new major release of the Data Sharing Framework. Click to find more information about the DSF in general.\",\"Important note\",\"This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.\",\"Upgrade from DSF 0.9.x.\",\"Install DSF 1.0.0\",\"Create a new process plugin\",\"Upgrade from DSF 0.9.x.\"]},\"45\":{\"h\":\"New features\",\"t\":[\"Improved versioning to support up- and downwards-compatibility\",\"Enhanced web ui to start processes in the web browser\",\"Allow user authenitication and authorization with OpenID Connect\",\"New process plugin API\",\"Removed mostly unused features to simplify instance configuration\",\"Unified proxy setup\",\"Many more features\"]},\"46\":{\"h\":\"DSF 1.1.0\",\"t\":[\"Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click to find more information about the DSF in general.\",\"Important note\",\"This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.\",\"Upgrade from DSF 0.9.x.\",\"Upgrade from DSF 1.x.\",\"Install DSF 1.1.0\",\"Create a new process plugin\",\"Upgrade from DSF 0.9.x.\"]},\"47\":{\"h\":\"New features\",\"t\":[\"Improved versioning to support up- and downwards-compatibility\",\"Enhanced web ui to start processes in the web browser\",\"Allow local user authentication and authorization with OpenID Connect\",\"New process plugin API\",\"Removed mostly unused features to simplify instance configuration\",\"Unified proxy setup\",\"Many more features, see 1.x release-notes\"]},\"48\":{\"h\":\"DSF 1.2.0\",\"t\":[\"Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click to find more information about the DSF in general.\",\"Important note\",\"This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.\",\"Upgrade from DSF 0.9.x.\",\"Upgrade from DSF 1.x.\",\"Install DSF 1.2.0\",\"Create a new process plugin\",\"Upgrade from DSF 0.9.x.\"]},\"49\":{\"h\":\"New features\",\"t\":[\"Improved versioning to support up- and downwards-compatibility\",\"Enhanced web ui to start processes in the web browser\",\"Allow local user authentication and authorization with OpenID Connect\",\"New process plugin API\",\"Removed mostly unused features to simplify instance configuration\",\"Unified proxy setup\",\"Many more features, see 1.x release-notes\"]},\"50\":{\"h\":\"DSF 1.3.0\",\"t\":[\"Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click to find more information about the DSF in general.\",\"Important note\",\"This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.\",\"Upgrade from DSF 0.9.x.\",\"Upgrade from DSF 1.x.\",\"Install DSF 1.3.0\",\"Create a new process plugin\",\"Upgrade from DSF 0.9.x.\"]},\"51\":{\"h\":\"New features\",\"t\":[\"Improved versioning to support up- and downwards-compatibility\",\"Enhanced web ui to start processes in the web browser\",\"Allow local user authentication and authorization with OpenID Connect\",\"New process plugin API\",\"Removed mostly unused features to simplify instance configuration\",\"Unified proxy setup\",\"Many more features, see 1.x release-notes\"]},\"52\":{\"h\":\"DSF 1.3.1\",\"t\":[\"Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click to find more information about the DSF in general.\",\"Important note\",\"This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.\",\"Upgrade from DSF 0.9.x.\",\"Upgrade from DSF 1.3.0\",\"Install DSF 1.3.1\",\"Create a new process plugin\",\"Upgrade from DSF 0.9.x.\"]},\"53\":{\"h\":\"New features\",\"t\":[\"Improved versioning to support up- and downwards-compatibility\",\"Enhanced web ui to start processes in the web browser\",\"Allow local user authentication and authorization with OpenID Connect\",\"New process plugin API\",\"Removed mostly unused features to simplify instance configuration\",\"Unified proxy setup\",\"Many more features, see 1.x release-notes\"]},\"54\":{\"h\":\"DSF 1.3.2\",\"t\":[\"Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click to find more information about the DSF in general.\",\"Important note\",\"This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.\",\"Upgrade from DSF 0.9.x.\",\"Upgrade from DSF 1.3.0\",\"Install DSF 1.3.2\",\"Create a new process plugin\",\"Upgrade from DSF 0.9.x.\"]},\"55\":{\"h\":\"New features\",\"t\":[\"Improved versioning to support up- and downwards-compatibility\",\"Enhanced web ui to start processes in the web browser\",\"Allow local user authentication and authorization with OpenID Connect\",\"New process plugin API\",\"Removed mostly unused features to simplify instance configuration\",\"Unified proxy setup\",\"Many more features, see 1.x release-notes\"]},\"56\":{\"h\":\"DSF 1.4.0\",\"t\":[\"Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click to find more information about the DSF in general.\",\"Important note\",\"This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.\",\"Upgrade from DSF 0.9.x.\",\"Upgrade from DSF 1.3.2\",\"Install DSF 1.4.0\",\"Create a new process plugin\",\"Upgrade from DSF 0.9.x.\"]},\"57\":{\"h\":\"New features\",\"t\":[\"Improved versioning to support up- and downwards-compatibility\",\"Enhanced web ui to start processes in the web browser\",\"Allow local user authentication and authorization with OpenID Connect\",\"New process plugin API\",\"Removed mostly unused features to simplify instance configuration\",\"Unified proxy setup\",\"Many more features, see 1.x release-notes\"]},\"58\":{\"h\":\"DSF 1.5.0\",\"t\":[\"Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click to find more information about the DSF in general.\",\"Important note\",\"This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.\",\"Upgrade from DSF 0.9.x.\",\"Upgrade from DSF 1.4.0\",\"Install DSF 1.5.0\",\"Create a new process plugin\",\"Upgrade from DSF 0.9.x.\"]},\"59\":{\"h\":\"New features\",\"t\":[\"Improved versioning to support up- and downwards-compatibility\",\"Enhanced web ui to start processes in the web browser\",\"Allow local user authentication and authorization with OpenID Connect\",\"New process plugin API\",\"Removed mostly unused features to simplify instance configuration\",\"Unified proxy setup\",\"Many more features, see 1.x release-notes\"]},\"60\":{\"h\":\"DSF 1.5.1\",\"t\":[\"Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click to find more information about the DSF in general.\",\"Important note\",\"This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.\",\"Upgrade from DSF 0.9.x.\",\"Upgrade from DSF 1.5.0\",\"Install DSF 1.5.1\",\"Create a new process plugin\",\"Upgrade from DSF 0.9.x.\"]},\"61\":{\"h\":\"New features\",\"t\":[\"Improved versioning to support up- and downwards-compatibility\",\"Enhanced web ui to start processes in the web browser\",\"Allow local user authentication and authorization with OpenID Connect\",\"New process plugin API\",\"Removed mostly unused features to simplify instance configuration\",\"Unified proxy setup\",\"Many more features, see 1.x release-notes\"]},\"62\":{\"h\":\"DSF 1.5.2\",\"t\":[\"Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click to find more information about the DSF in general.\",\"Important note\",\"This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsf.\",\"Upgrade from DSF 0.9.x.\",\"Upgrade from DSF 1.5.1\",\"Install DSF 1.5.2\",\"Create a new process plugin\",\"Upgrade from DSF 0.9.x.\"]},\"63\":{\"h\":\"New features\",\"t\":[\"Improved versioning to support up- and downwards-compatibility\",\"Enhanced web ui to start processes in the web browser\",\"Allow local user authentication and authorization with OpenID Connect\",\"New process plugin API\",\"Removed mostly unused features to simplify instance configuration\",\"Unified proxy setup\",\"Many more features, see 1.x release-notes\"]},\"64\":{\"h\":\"Learn more\"},\"65\":{\"h\":\"Overview\"},\"66\":{\"h\":\"Contact & Community\"},\"67\":{\"h\":\"\",\"t\":[\"Feel free to contact us via E-Mail (dsf-gecko@hs-heilbronn.de) and we will take care of your request as soon as possible.\"]},\"68\":{\"h\":\"👥 COMMUNITY\",\"t\":[\"DSF's community is growing and we welcome anyone who would like to join! 🚀\"]},\"69\":{\"h\":\"Stay up to Date\",\"t\":[\"GitHub\",\"Follow our on GitHub\",\"Zulip Chat - MII (If you would like access, please write us an E-MAIL)\"]},\"70\":{\"h\":\"Contribute Code\",\"t\":[\"You can get familiar with the DSF code on GitHub. Branching follows the git-flow model, for the latest development version see branch develop. Additionally, you can find more information in the documentation.\"]},\"71\":{\"h\":\"Share your Experience & Get support\",\"t\":[\"You´re welcome to share your experience with the Community. If you have a bug to report or feature to request, that's what the GitHub issues are for.\"]},\"72\":{\"h\":\"Partners\",\"t\":[\"Funded for further development of the Data Sharing Framework are:\"]},\"73\":{\"h\":\"Heilbronn University of Applied Sciences | Gecko Institute\",\"t\":[\"The GECKO Institute is a research institution of Heilbronn University of Applied Sciences and conducts research and development at the interfaces between medicine, economics and computer science. The DSF is part of Prof. Fegeler's research area: Interoperability and Digital Processes in Medicine. Other areas of research include educational technologies, health economics, and consumer health informatics.\"]},\"74\":{\"h\":\"University of Heidelberg | Institute of Medical Informatics\",\"t\":[\"The Institute of Medical Informatics belongs to the University of Heidelberg. The scientific focus of the institute is on structured patient data, e.g.\",\"in the Medical Data Integration Center (MeDIC),\",\"structured acquisition and transformation of biomedical data,\",\"medical information systems and data models\",\"and much more.\"]},\"75\":{\"h\":\"University of Leipzig | LIFE Institute\",\"t\":[\"The LIFE Institute of the University of Leipzig manages collaborative and follow-on projects in the fields of medicine, public health, medical informatics, and biobanking.\"]},\"76\":{\"h\":\"Public Funding\"},\"77\":{\"h\":\"DSF - Medical Informatics Structure \\\"Data Sharing Framework Community\\\" (2023-2026)\",\"t\":[\"The DSF Community connects the DSF competencies of the entire Medical Informatics Initiative (MII) so that new use cases, in particular from Module 3 or the Network University Medicine (NUM), are better supported in creating the respective DSF plugins. In the context of Module 2b, the DSF Community contributes to the further development of the common digital infrastructure of the MII together with the FDPG+ and TRANSIT projects. BMBF\",\"Heilbronn University (HHN) focuses on the connecting of DSF related topics and competencies in the MII with the community management. The quality assurance of new DSF plugins and further development of the application and core components aim at a scalable, stable and secure operation of the DSF (Funding code: 01ZZ2307A).\",\"Heidelberg University is focusing on the further development of the DSF core components as well as the rollout of the DSF plugins, in particular also from the perspective of a data integration center in consultation with the FDGP+ and TRANSIT projects (Funding code: 01ZZ2307B).\",\"The University of Leipzig will further develop and adapt the DSF plugin for the Research Data Portal for Health FDPG according to specifications resulting from the FDPG+ project and enable Data Integration Centers (DIC) to operate the FDPG plugin (Funding code: 01ZZ2307C).\"]},\"78\":{\"h\":\"Development of the DSF in the HiGHmed consortium -Contribution Heilbronn University and Heidelberg University (2018-2022)\",\"t\":[\"HiGHmed aims to increase the efficiency of clinical research and improve patient care through new medical informatics solutions and cross-organizational data exchange. The concept will be developed on the basis of three defined prototypical use cases, which will ensure close integration with the requirements of patient care and medical research. The GECKO Institute of HHN will establish a trusted third party with pseudonymization service to implement the goals of HiGHmed and is involved in the technical development of the DSF together with the partners (Funding code: 01ZZ1802E). Heidelberg University is in particular involved in the technical development of the DSF (Funding code: 01ZZ1802A).\"]},\"79\":{\"h\":\"Team\",\"t\":[\"The funded project team includes:\",\"Prof. Dr. Christian Fegeler • Homepage\",\"Hauke Hund • GitHub\",\"Maximilian Kurscheidt • GitHub\",\"Simon Schweizer • GitHub\",\"Christoph Zilske • GitHub\",\"Reto Wettstein • GitHub\",\"Alexander Kiel • GitHub\",\"We thank additional contributors, including:\",\"Florian Seidel • GitHub\",\"Simon Mödinger • GitHub\"]},\"80\":{\"h\":\"Allow Lists\"},\"81\":{\"h\":\"Goal\",\"t\":[\"The main objective is to allow only authorized organizations to do what \\\"we\\\" allow them to do (e.g. query data). First, we need a list of organizations that we trust. Secondly, we need a way to ensure that the other party is a member of the parent organization. Thirdly, a list of actions we want to allow the organization to perform is needed. An organization can have different roles in different use cases.\",\"The Allow List consists of Organization-, Endpoint- and OrganisationAffiliation- resources. With these resources the allow list defines communication partners and and parent organizations like research consortia and groups as well as the roles of each organization. Each DSF FHIR server stores their own allow list. To make sure that processes can be executed, parties must allow access via their allow list.\",\"Architecture\"]},\"82\":{\"h\":\"Allow List Managment\",\"t\":[\" you can read all the information if you want to create or update an Allow List.\"]},\"83\":{\"h\":\"and we will take care of your request as soon as possible.\"},\"84\":{\"h\":\"Architecture\",\"t\":[\"The Data Sharing Framework implements a distributed business process engine based on the BPMN 2.0 and FHIR R4 standards. Every participating organisation (e.g. ORG. A) runs a FHIR endpoint accessible by other sites and a business process engine (BPE) in the local secured network. Once the DSF has been installed in an organisation, it can be used for multiple use cases.\",\"Simplified DSF Architecture\",\"The following architecture diagram also shows three organisations, each of which has installed the DSF. The FHIR endpoint (green) is located in a demilitarised zone (DMZ) and is accessible from outside for communication with other organisations. It can be compared to a mailbox. The Business Process Engine (BPE - blue) is located in the intranet of an organisation and is responsible for the execution of processes. The metaphor: control centre helps here.\",\"DSF Architecture\"]},\"85\":{\"h\":\"DSF FHIR Server 📫\",\"t\":[\"As mentioned above, the externally accessible DSF FHIR server acts as a mailbox for communication. This means that an organisation creates a task resource in its DSF and drops the task resource (letters) into the mailbox of another organisation, requesting that something happen. Task resources have been explained in more detail in the section Basics and Standards. It is important to understand that the DSF FHIR server is not used for persisting medical data.\",\"DSF FHIR Server\"]},\"86\":{\"h\":\"Business Process Engine (BPE)\",\"t\":[\"The BPE located in the secure internal network executes the processes (BPMN/Java). The BPE is deployed in the internal network and has access to the local systems, such as the organisation's own FHIR server, on which medical data is stored. These FHIR servers are not to be confused with the DSF FHIR server, on which no medical data is persisted. Different processes can be executed simultaneously. For this, only a new process plugin file has to be added and configured. More about this in the Process Plugins.\",\"BPE\",\"The DSF BPE uses websocket (WSS) and webservice (HTTPS) connections to communicate with the DSF FHIR server. FHIR resources are created, read, updated and deleted via HTTP requests against the FHIR webservice API. The FHIR subscription mechanism is used to communicate Task resources with status 'requested' and QuestionnaireResponse resources with status 'completed' to the BPE via websockets. When the BPE starts and before the websocket connections are established, 'requested' Task resources and 'completed' QuestionnaireResponse not seen by the BPE are read via webservice requests.\"]},\"87\":{\"h\":\"Flexible Deployment\",\"t\":[\"The deployment of the architecture is flexible. The organisations can be deployed as a star schema (left) or as a mesh schema (right). In the Star schema (left), all Data Integration Centres (DIC) are connected to a central node (CRR - Central Research Repository), which transfers the information to all nodes (DIC). For security reasons, a data transfer hub (DTH) is connected upstream, which provides additional security so that the medical data is never transferred together with the authenticating data.\",\"In the mesh scheme (right), the nodes (DIC) are all directly connected to each other and the information is transferred from node to node. Here in the FDPG (Forschungsdatenportal - Research Data Portal), the data can then be accessed for research purposes. More about this here.\"]},\"88\":{\"h\":\"Network Setup & Additional Reverse Proxy in external DMZ\",\"t\":[\"You can find more information about the network setup here\"]},\"89\":{\"h\":\"Basics and Standards\",\"t\":[\"Here you can find some basic information about interoperability and the standards were using within the DSF before we go into details about the architecture. Here we only describe how the standards (FHIR and BPMN) are used within the DSF. If you want to gain a deeper knowledge of the standards, we recommend visiting these websites: HL7 FHIR and BPMN\"]},\"90\":{\"h\":\"Interoperability\",\"t\":[\"Interoperability is the ability of different systems to work together as seamlessly as possible. We can divide interoperability into four levels.\",\"The foundational level defines the basic interconnectivity requirements which are necessary for a system or application to securely transmit data to and receive data from another system or application. Techniques such as HTTPS or REST are used for this.\",\"The second level is the structural level. It defines the format and the syntax of the data exchange. Therefore, data formats like JSON or XML can be used.\",\"The semantic level ensures the correct interpretation of the contents of the exchanged data between the different systems. Therefore, information models as FHIR or CDA or medical terminology systems like SNOMED CT or ICD can be used.\",\"The final level, the organizational level, includes policy, social, legal and organizational aspects that enable secure, seamless and timely communication and use of data both within and between organizations. And importantly, these components enable shared consent, trust and integrated end-user processes and workflows.\",\"Levels of interoperability\"]},\"91\":{\"h\":\"HL7 FHIR 🔥\",\"t\":[\"HL7 FHIR is a standard for data exchange that can be used as an information model for communication within and between systems. The standard is based on resources, references and profiles. With this concept, FHIR offers interoperability out of the box. The resources describe data formats. 150 specified resources cover the entire health system. An example of a resource would be a patient, which consists of data such as name or gender. These resources can refer to other resources by means of references. This connects the information units into a network. For seamless exchange of information, FHIR supports RESTful architectures and web standards such as XML or JSON, which makes it easier for developers to use FHIR. The FHIR profiles can be understood as a set of rules. They explain, for example, which attributes must be mandatorily specified or which terminology may be used. In addition, profiles and controlled vocabulary can be validated.\"]},\"92\":{\"h\":\"BPMN\",\"t\":[\"Business Process Modelling Notation is a modelling language that can be used to model and implement processes. The models can be used for the documentation of processes and for communication between different stakeholders. Furthermore, BPMN forms a standardised bridge between process design and process implementation. This is because it simplifies implementation. These processes are executed by a Business Process Engine. Basically, a BPE is a server that can read and execute the business process. More about this in the section on architecture.\",\"Example of a BPMN model (Ping-Pong-Process of the DSF)\"]},\"93\":{\"h\":\"Why are we using FHIR and BPMN?\",\"t\":[\"On the one hand we use FHIR because of the mentioned benefits. On the other hand FHIR fits great with BPMN and these two in combination are a great fit for what we do:Execute distributed data sharing Processes.\",\"We do not need all 150 FHIR resources. The following FHIR resources are the ones we need and have implemented: ActivityDefinition, Binary, Bundle, CodeSystem, DocumentReference, Endpoint, Group, Library, Measure, MeasureReport, NamingSystem, Organization, Questionnaire, QuestionnaireResponse, ResearchStudy, StructureDefinition, Subscription, Task and ValueSet.\",\"Don't worry, it is not important to understand them all now. But to understand why we use FHIR and BPMN, it is important to look at the ActivityDefinition and TaskResources on the FHIR side and the Message Events on the BPMN side. In the following picture you can see parts of BPMN. These Message Events enable the communication between different organizations. Every time there is a Message Event between two business processes, there is a corresponding TaskResource on the FHIR side. When one organization sends a message for example “do some work” to another organization or when we send a message to ourselves to start or continue a process, we do this by creating a FHIR TaskResource with the status “requested”. After that the Business Process Engine starts the work and the status switches to “in-progress” and if the work is done to “completed” or if there is a problem to “failed”.\",\"The ActivityDefinition is needed to publish what can be done in an instance. That means the ActivityDefinition contains the process description with the authorisation who is allowed to send a message.\",\"BPMN MessageEvents\"]},\"94\":{\"h\":\"Introduction\",\"t\":[\"The German Federal Ministry of Education and Research is funding the Medical Informatics Initiative with the aim of making routine data available digitally, reliably and quickly for medical research. University hospitals have founded consortia with partners such as research institutions and other companies to create the conditions for research and patient care to share their data across sites. Data Integration Centers (DIC) have been established at the university hospitals and partner institutions to create the technical and organizational conditions for data exchange between patient care and medical research.\",\"The Data Sharing Framework (DSF) was developed within the HiGHmed consortium of the Medical Informatics Initiative and is now funded as an independent project by the German Federal Ministry of Education and Research within the Medical Informatics structure as DSF Community.\",\"The DSF is a concept for a secure middleware to distribute data sharing processes, aiming to extract, merge, pseudonymize and provide data stored in multiple distributed DICs. A researcher can use the DSF for example to submit feasibility queries to several DICs and thus has the opportunity to obtain sufficient data from different locations for his or her research. By using international standards such as FHIR and BPMN 2.0, the problem of heterogeneous data models, primary systems, architectures and federated legislation between DICs can be solved. The aim is to enable secure and syntactically-, semantically- and process-interoperable data exchange across organisational boundaries.\",\"DSF concept\",\"The DSF is a secure communication infrastructure, that (1) scales with communication relationships, (2) orchestrates processes and instances, (3) separates execution logic from program code, (4) enables automated and user-centeric process steps ​(5) and can be used for heterogeny structures.\",\"Federated data exchange between distributed DICs (CRP=Central Research Portal, DMU=Data Management Unit)\"]},\"95\":{\"h\":\"Network Setup and General Architecture\",\"t\":[\"The Data Sharing Framework consists of two components: A FHIR Endpoint Server used to except Task resources and provide resources for download by other organizations and a Business Process Engine Server run internal and not accessible by other organization to execute and coordinate processes.\",\"Network Setup Diagramm\",\"FHIR Reverse Proxy: The FHIR Reverse Proxy is used to terminate incoming https connections to the FHIR App Server. The Reverse Proxy needs to be accessible on port 443 from the internet. Incoming https connection will be delegate as http on a docker internal network to the FHIR App Server.\",\"FHIR App Server: The FHIR App Server is used as a FHIR Endpoint for incoming Task resources and providing resources for download by other organizations. In order to validate incoming FHIR resources the server will communicate with FHIR Servers at other organizations. Access to resources and authorization for creating or updating resources is granted based on the content of the resource and/or based on the client (identified by its client certificate) being part of an allow list. JDBC connections to the FHIR DB Server\",\"FHIR DB Server: PostgreSQL database for the FHIR App Server.\",\"BPE App Server: The BPE App Server is executing BPMN 2.0 business processes with the included business process engine. Automatic BPMN service tasks are used for example to check resource, access the PDP- and MPI-servers as well as the MDAT repository. The calculation of record linkage bit vectors (Record Bloom Filters) is also performed using an automatic service task. As of version 0.3.0 the BPE server does not provide any webservices for modifying an server resources.\",\"BPE DB Server: PostgreSQL database for the BPE App Server.\",\"PDP: IHE Policy Decision Point for deciding on patient consent.\",\"MDAT Repo: Repository (e.g. openEHR) for storing medical data (MDAT).\",\"MPI: IHE Master Patient Index for storing identifying patient date (IDAT) e.g. first name, last name, date of birth.\",\"Cohort Browser: Example for a system to trigger patient cohort size estimations across multiple organizations.\",\"More information on Client- and Server-Certificates are available on the dedicated wiki page: Authentication: Client/Server Certificates\"]},\"96\":{\"h\":\"Additional Reverse Proxy in external DMZ\",\"t\":[\"In some organizations an additional reverse proxy in an external DMZ is needed. This can be accomplished by using for example nginx or haproxy as a TCP-Proxy. Example configurations routing traffic using SNI can be found below. Configuring an additional reverse proxy to terminate the incoming TLS connection early is not recommended.\",\"Network Setup Diagramm\"]},\"97\":{\"h\":\"Process Plugins\"},\"98\":{\"h\":\"Overview\",\"t\":[\"It is important to understand that the DSF is only the silent helper in the background: a middleware. The DSF is use case agnostic. This means that process plugins make it possible to execute almost any use case you can imagine with the DSF. Process plugins provide individual functionality. For example, it is possible to use the Ping Pong process to test bilateral communication or the Feasibility process to perform feasibility queries for research. However, it is possible to deploy several process plugins together, even the same process plugin in different versions. A process plugin is basically an archive of BPMN 2.0 models, FHIR R4 resources and Java code. This process plugin is deployed as a Jar file on the BPE.\"]},\"99\":{\"h\":\"BPMN: Example\",\"t\":[\"BPMN models can be created with Camunda Modeler. The following model is a BPMN model consisting of two lanes: These are the square boxes, i.e. Organization A and B. This process is intended only as an example to illustrate the formalities. We will look at realistic processes in the next chapter.\",\"BPMN: Example\"]},\"100\":{\"h\":\"Ping Pong Process\",\"t\":[\"The ping process plugin can be used for (periodic) connection testing between organizations that are part of your DSF allow list. The following figure shows a representation of the process.\",\"Ping-Pong Process\",\"The ping pong process is composed of 3 different subprocesses:\"]},\"101\":{\"h\":\"Autostart Ping Process\",\"t\":[\"The autostart ping process is used to execute connection tests in a predefined interval. This subprocess performs the following steps:\",\"Start a timer with a predefined interval (default 24 h)\",\"Start the ping process once per interval\",\"Stop the timer after the current interval completes\"]},\"102\":{\"h\":\"Ping Process\",\"t\":[\"The ping process is used to check outgoing and incoming connections to organizations in your allow-list. This subprocess performs the following steps:\",\"Select organizations in your allow list that should receive a ping message\",\"Send ping message to selected organizations\",\"Receive pong message from selected organizations\",\"Log status of ping/pong messages\",\"Log errors if any occur\"]},\"103\":{\"h\":\"Pong Process\",\"t\":[\"The pong process is used to send a response during the connection test to the requesting organization. This subprocess performs the following steps:\",\"Receive ping message from requesting organizations\",\"Send pong message to requesting organizations\",\"Log status of ping/pong message\",\"Log errors if any occur\"]},\"104\":{\"h\":\"Security by Design\"},\"105\":{\"h\":\"Basics Security\",\"t\":[\"The open-source Data Sharing Framework is EU-GDPR compliant and meets the highest security standards by design. DSF FHIR servers only accept certain FHIR resources from internal systems/administrators (e.g. tasks, binary resources...). In addition, the communication partners are defined via Allow Lists. This means that an organisation can only communicate with organisations that are included in the allow list of approved organisations of the participating organisations. More information about allow lists can be found in the next chapter. For transport encryption, the TLS protocol is used. Secure Web Socket (WSS) connections provide security for the connection between the DSF FHIR server (DMZ) and the BPE (internal network). In addition, the DSF is being actively developed and there is an excellent community, both of which guarantee fast security patches.\"]},\"106\":{\"h\":\"Authentication\",\"t\":[\"Authentication of organizations within the DSF is handled by the use of X.509 client and server certificates. Currently the certificate authorities run by DFN-PKI Global G2, D-Trust via TMF e.V. and GÉANT TCS via DFN are supported. All participating organizations are entered in a distributed and synchronized allow-list of valid organizations and certificates.\",\"A webserver certificate is needed to run the FHIR endpoint and a 802.1X client certificate is used to authenticate against other organizations endpoints and as a server certificate for the business process engine. For available certificate profiles see DFN-PKI-Zertifikatprofile_Global.pdf\",\"More information about client and server certificates can be found here.\"]},\"107\":{\"h\":\"Certificate Requests 🔒\"},\"108\":{\"h\":\"FHIR Endpoint\",\"t\":[\"Server certificates are used to authenticate the FHIR endpoint on the local network and to other organisations\",\"Certificate profile: \",\"DFN-PKI Global G2 via DFN e.V.: Web Server\",\"D-Trust via TMF e.V.: Advanced SSL ID\",\"GÉANT TCS via DFN e.V.: Web Server\",\"Common name: FQDN of the server used while accessing from other organizations (external FQDN)\",\"Subject alternative DNS entries: Use additional alternative FQDNs if a different name is used while accessing the Server from the local Network (local FQDN)\",\"More information: Parameters FHIR Server\"]},\"109\":{\"h\":\"Business Process Engine Server\",\"t\":[\"Client certificates are used to authenticate against remote FHIR endpoints (when either the BPE server or the FHIR endpoint server acts as the client). In addition, client certificates are used to authenticate the Business Process Engine server on the local network.\",\"Certificate profile: \",\"DFN-PKI Global G2 via DFN e.V.: 802.1X Client\",\"D-Trust via TMF e.V.: Basic Team ID\",\"GÉANT TCS via DFN e.V.: Web Server\",\"Common name: FQDN of the server used while accessing from the local network (local FQDN)\",\"More information: Parameters BPE Server\"]},\"110\":{\"h\":\"GMDS2022 - Process Development\",\"t\":[\"Redirect to .\"]},\"111\":{\"h\":\"MIE May 2023\"},\"112\":{\"h\":\"Abstract\",\"t\":[\"With this tutorial, participants will gain a detailed insight into the Data Sharing Framework (DSF) (https://github.com/highmed/highmed-dsf). The open source DSF enables users to execute biomedical research and healthcare delivery processes across organizations, and the tutorial will demonstrate this with examples from the German Medical Informatics Initiative (MII) (https://www.medizininformatik-initiative.de/en/start) funded by the Federal Ministry of Education and Research (BMBF). The tutorial will cover fundamental concepts of distributed processes, the DSFs architecture and key standards such as HL7 FHIR and BPMN 2.0. Participants will have the opportunity to gain hands-on experience with the DSF by working with different processes in a lab setting. Technical aspects such as authentication and authorization will be covered, as well as guidance on using the DSF for other use cases. This tutorial is designed for those involved in distributed research projects, including project members and software developers, as well as individuals interested in multi-organizational research projects.\"]},\"113\":{\"h\":\"Topic\",\"t\":[\"The use of real-world data collected by healthcare providers for bio-medical research requires the data to be available and accessible. This is especially important when considering the usage of data across organizations. Distributed processes such as feasibility studies, record linkage, and data sharing need to be established for effective consolidation and analysis. While even multi-center retrospective studies using real-world data become commonplace, maintaining infrastructure components for every project conducted is not sustainable. To address this, the Data Sharing Framework (DSF) was developed as an open source, use case independent distributed business process engine to execute cross-organizational research and healthcare delivery processes.\",\"The tutorial will cover the fundamental concepts of distributed processes and will provide an overview of the DSF's architecture and key standards such as HL7 FHIR and BPMN 2.0 that are used in the framework. The tutorial will present real-world examples to illustrate the DSFs capabilities and delve into specific issues the DSF addresses for the German Medical Informatics Initiative (MII).\",\"Participants will have the opportunity to gain hands-on experience with the DSF by working with different processes in a lab setting. Technical aspects such as authentication and authorization, onboarding of new organizations and guidance on using the DSF for other use cases, such as specific research projects or new infrastructure developments, will be covered. Finally, the tutorial will present lessons learned from the last years of using the DSF in test and production environments in multiple research consortia and will present ideas for future improvements based on feedback from end-users, process developers, project managers and administrative staff.\"]},\"114\":{\"h\":\"Target Group\",\"t\":[\"Decision makers and project members with data sharing ideas looking for an architecture, as well as medical informatics professionals and software developers tasked with building multi-centric data sharing applications, are the target audience for this tutorial.\"]},\"115\":{\"h\":\"What you need\",\"t\":[\"You need a laptop with a web browser for the hands-on portion of the tutorial.\"]},\"116\":{\"h\":\"What you will learn\",\"t\":[\"You will...\",\"… gain knowledge on various distributed processes specific to bio-medical research.\",\"… understand the unique challenges and considerations from the German MII resulting in the design and architecture of the DSF.\",\"… be introduced to the key concepts of the DSF and the various contexts in which it can be applied.\",\"… learn how to evaluate if the DSF is appropriate for their particular project or application your planning.\",\"… understand the difficulties that can occur when implementing distributed processes, as well as strategies for addressing them.\"]},\"117\":{\"h\":\"Tutorials\"},\"118\":{\"h\":\"Recorded talks\",\"t\":[\"Redirect to .\"]},\"119\":{\"h\":\"Use-Cases\"},\"120\":{\"h\":\"Overview\",\"t\":[\"Feasibility\",\"Network University Medicine\"]},\"121\":{\"h\":\"Feasibility\"},\"122\":{\"h\":\"Overview\",\"t\":[\"Funded by the German Federal Ministry of Research and Education, 25 sites have installed the DSF to execute the Feasibility process. To perform feasibility queries, a researcher can register and query data on the FDPG (Forschungsdaten Portal für Gesundheit - Research Data Portal) website. Basic data of hospitalizations of over 8 million patients with over 40 million diagnoses and much more such as laboratory values or drug prescriptions are available. After a successful query, the data is made available in standardized FHIR format. Further information can be found in the flyer.\"]},\"123\":{\"h\":\"The Feasibility Process\",\"t\":[\"Medical routine data holds great promise for advancing research, yet its integration into a research context poses significant challenges. To address this, Medical Data Integration Centers have been established, by the medical informatics initiative to consolidate data from primary information systems into a central repository. However, relying on data from only one organization is rarely sufficient to answer complex research questions, so merging data across institutional boundaries is necessary.\",\"To enable researchers to leverage this integrated data for specific research projects, there is a critical need for the ability to query cohort sizes across institutions. The feasibility process allows researchers to conduct automated and distributed feasibility queries, i.e., cohort size estimates. This process is executed according to the open standard BPMN 2.0, the underlying process data model is based on HL7 FHIR R4 resources.\"]},\"124\":{\"h\":\"Technical Information\",\"t\":[\"DSF Middleware Setup: The DSF middleware connects your site to the central platform. This allows it to receive feasibility query requests as well as reporting back any results of these queries.\",\"Feasibility Process: Core Feasibility Process\",\"Feasibility Triangle: The Feasibility Triangle part of this repository provides a site (data integration center) with all the necessary components to set up in order to allow feasibility queries from the central feasibility portal.\",\"Data Transfer\",\"Data extraction after successful feasibility query\"]},\"125\":{\"h\":\"Network University Medicine\",\"t\":[\"The Network University Medicine was established in April 2020 as part of the COVID-19 pandemic crisis management. The aim of the NUM is to better coordinate COVID-19 research at all 36 university hospitals in Germany.'\",\"As part of the CODEX | COVID-19 Data Exchange Platform project, a nationwide, uniform, privacy-compliant infrastructure for storing and providing COVID-19 research datasets was established. Since 2022, the work continues within the project NUM RDP. All 36 university hospitals have installed the DSF to share Covid-19 research data.\"]},\"126\":{\"h\":\"The Data Transfer Process\",\"t\":[\"The Data Transfer Process is used in NUM CODEX to send data from a Data Integration Center (DIC), via the Gecco Transfer Hub (GTH), to the Central Research Repository (CRR). The infrastructure and communincation messages on which the process is based can be seen in the following figure. All organizations use the Data Sharing Framework (DSF) for deployment and execution of the process.\",\"More technical information can be found on GitHub.\"]},\"127\":{\"h\":\"Build and Test\"},\"128\":{\"h\":\"Build and Test\"},\"129\":{\"h\":\"Build Project\",\"t\":[\"Prerequisite: Java 11, Maven 3.6, Docker\",\"mvn install \"]},\"130\":{\"h\":\"Manual Integration Testing (without Docker)\",\"t\":[\"Prerequisite: Java 11, Maven 3.6, PostgreSQL 11\",\"Build the entire project from the root directory of the repository\",\"mvn install \",\"Install PostgreSQL 11 (localhost:5432)\",\"Add DB User liquibase_user\",\"CREATE USER liquibase_user WITH LOGIN NOSUPERUSER INHERIT CREATEDB CREATEROLE NOREPLICATION PASSWORD 'fLp6ZSd5QrMAkGZMjxqXjmcWrTfa3Dn8fA57h92Y'; \",\"Create Databases fhir and bpe with owner liquibase_user\",\"CREATE DATABASE bpe OWNER liquibase_user; CREATE DATABASE fhir OWNER liquibase_user; \",\"Start org.highmed.dsf.fhir.FhirJettyServerHttps from your IDE with execution folder: .../highmed-dsf/dsf-fhir/dsf-fhir-server-jetty\",\"Start org.highmed.dsf.bpe.BpeJettyServerHttps from your IDE with execition folder: .../highmed-dsf/dsf-bpe/dsf-bpe-server-jetty\",\"To access the FHIR endpoint (https://localhost:8001/fhir/...) and BPE rest interface (https://localhost:8002/bpe/...) via WebBrowser install .../highmed-dsf/dsf-tools/dsf-tools-test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12 (Password: password) in your browsers certifiate store. The p12 file includes a client certificate for \\\"Webbrowser Test User\\\" and the \\\"Test CA\\\" certificate. All private-keys and certificates including the Test CA are generated during the maven build and are private to your machine. Make sure to protect the CA private-key at .../highmed-dsf/dsf-tools/dsf-tools-test-data-generator/cert/ca/testca_private-key.pem from third-party access if you have installed the Test CA certificate in your certificate store.\"]},\"131\":{\"h\":\"Manual Integration Testing (local with Docker)\",\"t\":[\"Prerequisite: Java 11, Maven 3.6, Docker 18\",\"Build the entire project from the root directory of this repository\",\"mvn install \",\"Build docker images \",\"Windows: in the .../dsf-docker-test-setup folder execute\",\"docker-build.bat \",\"Unix/Linux: in the .../dsf-docker-test-setup folder execute\",\"docker-build.sh \",\"Start docker containers \",\"To start the FHIR server execute in the .../dsf-docker-test-setup/fhir folder\",\"dev: docker-compose up prod: docker-compose -f docker-compose.yml -f docker-compose.prod.yml up \",\"To start the BPE server execute in the .../dsf-docker-test-setup/bpe folder\",\"dev: docker-compose up prod: docker-compose -f docker-compose.yml -f docker-compose.prod.yml up \",\"To access the FHIR endpoint (https://localhost/fhir/...) and BPE rest interface (https://localhost:8443/bpe/...) via WebBrowser install .../highmed-dsf/dsf-tools/dsf-tools-test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12 (Password: password) in your browsers certifiate store. The p12 file includes a client certificate for \\\"Webbrowser Test User\\\" and the \\\"Test CA\\\" certificate. All private-keys and certificates including the Test CA are generated during the maven build and are private to your machine. Make sure to protect the CA private-key at .../highmed-dsf/dsf-tools/dsf-tools-test-data-generator/cert/ca/testca_private-key.pem from third-party access if you have installed the Test CA certificate in your certificate store.\"]},\"132\":{\"h\":\"Troubleshooting\",\"t\":[\"If you run in docker network troubles, clean up your network using docker network ls -q | xargs docker network rm\",\"In production: if the warning Service \\\"db\\\" is using volume \\\"/var/lib/postgresql/data\\\" from the previous container appears, run the command\",\"docker-compose down -v \",\"before starting the containers.\"]},\"133\":{\"h\":\"Manual Integration Testing (VMs for Docker-Registry, 3 MeDICs, TTP)\",\"t\":[\"For hints on setting up 5 Ubuntu VMs with Docker running on a Windows 10 host with Hyper-V and Ansible see test_setup_windows.txt\",\"For hints on setting up 5 Ubuntu VMs with Docker running on a MacOS Catalina host with VirtualBox and Ansible see test_setup_macos.txt\"]},\"134\":{\"h\":\"Starting the Processes\",\"t\":[\"Each process contains an ExampleStarter which creates FHIR resources and sends them to a designated FHIR-Endpoint in order to start the corresponding process in the Manual Integration Test Setup. The same client certificate can be used as above: .../highmed-dsf/dsf-tools/dsf-tools-test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12 (Password: password).\",\"The following configuration is needed:\",\"The path to the client certificate: either the environment-variable DSF_CLIENT_CERTIFICATE_PATH or args[0] has to be set\",\"The password of the client certificate: either the environment-variable DSF_CLIENT_CERTIFICATE_PASSWORD or args[1] has to be set\"]},\"135\":{\"h\":\"Proxy Test Tool\",\"t\":[\"If the BPE will be deployed behind a proxy, you can test the internet access of the BPE using the tool in dsf-tools/dsf-tools-proxy-test.\",\"The proxy test jar takes three input variables:\",\"args[0]: the base url to test against (e.g. https://www.google.de)\",\"args[1]: the proxy url to connect to (e.g. http://proxy.klinikum.de:8080)\",\"args[1]: the proxy username\",\"The proxy password will be asked as command line input. The name of the main class is ProxyTest.\"]},\"136\":{\"h\":\"Release a new version\"},\"137\":{\"h\":\"Release a new final version\",\"t\":[\"Write release notes\",\"Create new release/x.y.z branch from develop\",\"Remove -SNAPSHOT from version in pom.xml files\",\"Change status from draft to active and update dates, verify versions in FHIR resources\",\"Update version and date-released in CITATION.cff\",\"Push branch release/x.y.z\",\"Create pull request (release/x.y.z -> main)\",\"Build maven\",\"Build docker images and run manual tests in 3MeDIC/TTP test setup\",\"Execute trivy and check CVEs for the docker images\",\"Merge release/x.y.z into main\",\"Git tag main branch\",\"Push main branch (including Git tag)\",\"Build maven\",\"Run multi-arch docker build (including push)\",\"Update release notes with docker links, check Git tag\",\"Publish release notes\",\"Create 'start next development cycle' issue and branch\",\"Merge main into issue branch\",\"Increase version\",\"Merge next development cycle issue branch into develop via PR\"]},\"138\":{\"h\":\"Release a new candidate version\",\"t\":[\"Write release notes\",\"Create new release/x.y.z-RC# branch from develop\",\"Replace -SNAPSHOT in versions with -RC# in pom.xml files\",\"Change status from draft to active and update dates, verify versions in FHIR resources\",\"Update version and date-released in CITATION.cff\",\"Git tag release/x.y.z-RC# branch\",\"Build maven\",\"Build docker images and run manual tests in 3MeDIC/TTP test setup\",\"Execute trivy and check CVEs for the docker images\",\"Push release/x.y.z-RC# branch (including Git tag)\",\"Run multi-arch docker build (including push)\",\"Update release notes with docker links, check Git tag\",\"Publish release notes\"]},\"139\":{\"h\":\"Code\"},\"140\":{\"h\":\"Adding FHIR Resources\",\"t\":[\"This wiki entry walks through the steps to add a new FHIR resource to the server\"]},\"141\":{\"h\":\"Database\",\"t\":[\"dsf-fhir-server > resources > db copy/past one file and change content to new resource (don't forget to allow permanent deletes like in db.questionnaires.changelog-0.6.0.xml)\",\"dsf-fhir-server > resources > db > db.changelog.xml include new generated db changelog file (are in alphabetic order)\",\"dsf-fhir-server > resources > db > trigger_functions copy/paste existing functions for insert/update triggers and change content to new resource\",\"dsf-fhir-server > resources > db > db.read_access.changelog.xml include new generated functions for insert/update triggers (are in alphabetic order)\"]},\"142\":{\"h\":\"JSON/XML Adapter\",\"t\":[\"dsf-fhir-rest-adapter > java copy/paste existing adapter for json/xml/html and change content to new resource\",\"dsf-fhir-webservice-client > java > FhirWebserviceClientJersey.javaregister generated json/xml (not html) adapters according to existing registrations (are in alphabetic order)\"]},\"143\":{\"h\":\"DAO\",\"t\":[\"dsf-fhir-server > java > dao copy/paste dao interface and change content to new resource\",\"dsf-fhir-server > java > search > parameters copy/paste a search parameter class based on type of the parameter (extends abstract search parameter type) and change content to new resource (existing search parameters can be found on the resources specification website)\",\"dsf-fhir-server > java > search > parameters > rev > include copy/paste rev include class and adapt content to resource to be rev included\",\"dsf-fhir-server > java > search > parameters > user copy/paste a search user filter class and adapt content to new resource\",\"dsf-fhir-server > java > dao > jdbc copy/paste dao jdbc class and adapt content (add search user filter and parameter)\",\"dsf-fhir-server > java > spring > config > DaoConfig.java register bean by adding a method according to existing resource bean methods (are in alphabetic order) and add it in the `daoProvider()´ method\",\"dsf-fhir-server > java > spring > config > EventConfig.java add the new created bean from the DaoConfig to the MatcherFactory according to existing dao's (are in alphabetic order)\",\"dsf-fhir-server > java > dao > provider > DaoProvider.java add a method similar to the existing one\",\"dsf-fhir-server > java > dao > provider > DaoProviderImpl.java adapt the class according to the other resource and implement the method similar to the existing one\"]},\"144\":{\"h\":\"Resolve Resource References if needed\",\"t\":[\"dsf-fhir-rest-adapter > java > service > ReferenceExtractor.java add a method similar to the existing ones\",\"dsf-fhir-rest-adapter > java > service > ReferenceExtractorImpl.java implement the method similar to the existing ones\"]},\"145\":{\"h\":\"Authorization\",\"t\":[\"dsf-fhir-server > java > authorization copy/paste class and change content to new resource\",\"dsf-fhir-server > java > spring > config > AuthorizationConfig.java register bean by adding a method according to existing resource bean methods (are in alphabetic order) and add it in the authorizationRuleProvider() and the binaryAuthorizationRule() method\"]},\"146\":{\"h\":\"Webservice\",\"t\":[\"dsf-fhir-server > java > webservice > specification copy/paste interface and change content to new resource\",\"dsf-fhir-server > java > webservice > impl copy/paste class and change content to new resource\",\"dsf-fhir-server > java > webservice > jaxrs copy/paste class and change content to new resource\",\"dsf-fhir-server > java > webservice > secure copy/paste class and change content to new resource\",\"dsf-fhir-server > java > webservice > impl > ConformanceServiceImpl add new Resource to list and add Search Parameter created above\",\"dsf-fhir-server > java > spring > config > WebserviceConfig.java register bean by adding a method according to existing resource bean methods (are in alphabetic order)\"]},\"147\":{\"h\":\"Test\",\"t\":[\"dsf-fhir-server > test-java > dao copy/paste class and change tests to new resource\",\"dsf-fhir-server > test-java > integration copy/paste class and change tests to new resource and above create search parameters\"]},\"148\":{\"h\":\"Adding MPI Clients\",\"t\":[\"The Master Patient Index (MPI) client that will be used by the Business Process Engine (BPE) is determined by the property org.highmed.dsf.bpe.mpi.webservice.factory.class and loaded using a service loader, which searches for a class of type MasterPatientIndexClientFactory on startup of the BPE.\",\"The framework currently includes an MPI client using the IHE PDQ interface, also supporting client certificate authentication. To use it, add the jar of the dsf-mpi-client-pdq module to the plugin configuration folder and set the property value to org.highmed.mpi.client.pdq.MasterPatientIndexClientPdqFactory.\",\"To implement a new MPI client, the following has to be taken into account:\",\"The plugin needs to supply an MPI client factory implementing the interface MasterPatientIndexClientFactory from the dsf-mpi-client module.\",\"The resources folder must contain a file with the name META-INF/services/org.highmed.mpi.client.MasterPatientIndexClientFactory containing the name of the new MPI client factory including the full package name.\",\"The client needs to implement the interface MasterPatientIndexClient. The interface defines a method returning instances of the interface Idat based on patient-ids used within the openEHR repository.\",\"An example of an MPI client implementation can be found in the dsf-mpi-client-pdq module.\"]},\"149\":{\"h\":\"Adding openEHR Clients\",\"t\":[\"The openEHR client that will be used by the Business Process Engine (BPE) is determined by the property org.highmed.dsf.bpe.openehr.webservice.factory.class and loaded using a service loader, which searches for a class of type OpenEhrClientFactory on startup of the BPE.\",\"The framework currently includes an openEHR Jersey REST client using basic authentication. To use it, add the jar of the dsf-openehr-client-impl module to the plugin configuration folder and set the property value to org.highmed.openehr.client.impl.OpenEhrClientJerseyFactory.\",\"To implement a new openEHR client, the following has to be taken into account:\",\"The plugin needs to supply an openEHR client factory implementing the interface OpenEhrClientFactory from the dsf-openehr-client module.\",\"The resources folder must contain a file with the name META-INF/services/org.highmed.openehr.client.OpenEhrClientFactory containing the name of the new openehr client factory including the full package name.\",\"The client needs to implement the interface OpenEhrClient. The interface defines a method executing an openEHR query returning an instance of an openEHR ResultSet.\",\"An example of an openEHR client implementation can be found in the dsf-openehr-client-impl module.\"]},\"150\":{\"h\":\"Changing BPMN Processes by Service Task Overwrites\",\"t\":[\"DEPRECATED SINCE VERSION 0.4.0\",\"A service task of a process integrated in the framework can be overwritten using the plugin interface. This means that entire processes do not have to be replaced when only individual steps need adaption. An example can be found in the module dsf-bpe > dsf-bpe-process-plugin-example > dsf-bpe-process-service-overwrite.\",\"A plugin has as its only dependency the process module which contains the service task to be overwritten.\",\"For a plugin replacing one service task, two new files must be generated:\",\"A new service task extending the task it overwrites. The method to be overwritten is doExecute(DelegateExecution execution).\",\"A new configuration file containing a method that has as return type the service task you want to overwrite. This method then returns a Bean of your own implementation of this specific service task. The method has to be annotated with @Primary.\"]},\"151\":{\"h\":\"Writing Code\"},\"152\":{\"h\":\"Code Style\",\"t\":[\"HiGHmed DSF code-style configurations for Eclipse and IntelliJ IDEA can be found here:\",\"Pull Requests are only approved, if the code is formatted according to the code-style configurations above. To format the code with maven before pushing to GitHub, use mvn compile -Pformat-and-sort.\"]},\"153\":{\"h\":\"Git Workflow\",\"t\":[\"Since Release 0.1.0, we follow git-flow as described here. New features should branch from develop and merged back if done. Hot-Fixes for the latest release will branch of master and will be merged into develop and later into master. A new release will branch of develop for a ramp down phase and will then be merged into master. The new master should merge back into develop to start a new development cycle.\"]},\"154\":{\"h\":\"Branch Naming:\",\"t\":[\"Features: issue/_\",\"Hot-Fix: hot-fix/_\",\"Release: release/\"]},\"155\":{\"h\":\"Eclipse code-style configurations\",\"t\":[\" \"]},\"156\":{\"h\":\"IntelliJ code-style configurations\",\"t\":[\" \"]},\"157\":{\"h\":\"Using the Github Maven Package Registry\"},\"158\":{\"h\":\"Authenticating to GitHub Packages\",\"t\":[\"For more information take a look at this GitHub documentation about authentication.\",\"In order to install the HiGHmed DSF packages using Maven in your own projects you need a personal GitHub access token. This GitHub documentation shows you how to generate one.\",\"After that, add the following configuration to your local .m2/settings.xml. Replace USERNAME with your GitHub username and TOKEN with the previously generated personal GitHub access token. The token needs at least the scope read:packages.\",\" github github github GitHub HiGHmed Apache Maven Packages https://maven.pkg.github.com/highmed/highmed-dsf true true github USERNAME TOKEN \"]},\"159\":{\"h\":\"Installing a Package\",\"t\":[\"For more information take a look at this GitHub documentation about package installation.\",\"To install an Apache Maven package from GitHub Packages edit the element dependencies in the pom.xml file by including the package. This could look as follows to include the dsf-bpe-process-base package (replace VERSION with the package version, e.g. 0.4.0-SNAPSHOT):\",\" org.highmed.dsf dsf-bpe-process-base VERSION \"]},\"160\":{\"h\":\"General Information\"},\"161\":{\"h\":\"Authentication\",\"t\":[\"Authentication of organizations within the DSF is handled by the use of X.509 client and server certificates. Currently the certificate authorities run by DFN-PKI Global G2, D-Trust via TMF e.V. and GÉANT TCS via DFN are supported. All participating organizations are entered in a distributed and synchronized allow-list of valid organizations and certificates.\",\"A webserver certificate is needed to run the FHIR endpoint and a 802.1X client certificate is used to authenticate against other organizations endpoints and as a server certificate for the business process engine. For available certificate profiles see DFN-PKI-Zertifikatprofile_Global.pdf\"]},\"162\":{\"h\":\"Certificate Requests\"},\"163\":{\"h\":\"FHIR Endpoint\",\"t\":[\"Purpose: Server certificate to authenticate the FHIR endpoint on the local network and against other organizations\",\"Certificate profile: \",\"DFN-PKI Global G2 via DFN e.V.: Web Server\",\"D-Trust via TMF e.V.: Advanced SSL ID\",\"GÉANT TCS via DFN e.V.: Web Server\",\"Common name: FQDN of the server used while accessing from other organizations (external FQDN)\",\"Subject alternative DNS entries: Use additional alternative FQDNs if a different name is used while accessing the Server from the local Network (local FQDN)\"]},\"164\":{\"h\":\"Business Process Engine Server\",\"t\":[\"Purpose: Client certificate to authenticate against remote FHIR endpoints (when either the BPE Server or the FHIR Endpoint Server is acting as a client), server certificate to authenticate the business process engine server on the local network\",\"Certificate profile: \",\"DFN-PKI Global G2 via DFN e.V.: 802.1X Client\",\"D-Trust via TMF e.V.: Basic Team ID\",\"GÉANT TCS via DFN e.V.: Web Server\",\"Common name: FQDN of the server used while accessing from the local network (local FQDN)\"]},\"165\":{\"h\":\"Network Setup and General Architecture\",\"t\":[\"The Data Sharing Framework consists of two components: A FHIR Endpoint Server used to except Task resources and provide resources for download by other organizations and a Business Process Engine Server run internal and not accessible by other organization to execute and coordinate processes.\",\"Network Setup Diagramm\",\"FHIR Reverse Proxy: The FHIR Reverse Proxy is used to terminate incoming https connections to the FHIR App Server. The Reverse Proxy needs to be accessible on port 443 from the internet. Incoming https connection will be delegate as http on a docker internal network to the FHIR App Server.\",\"FHIR App Server: The FHIR App Server is used as a FHIR Endpoint for incoming Task resources and providing resources for download by other organizations. In order to validate incoming FHIR resources the server will communicate with FHIR Servers at other organizations. Access to resources and authorization for creating or updating resources is granted based on the content of the resource and/or based on the client (identified by its client certificate) being part of an allow list. JDBC connections to the FHIR DB Server\",\"FHIR DB Server: PostgreSQL database for the FHIR App Server.\",\"BPE App Server: The BPE App Server is executing BPMN 2.0 business processes with the included business process engine. Automatic BPMN service tasks are used for example to check resource, access the PDP- and MPI-servers as well as the MDAT repository. The calculation of record linkage bit vectors (Record Bloom Filters) is also performed using an automatic service task. As of version 0.3.0 the BPE server does not provide any webservices for modifying an server resources.\",\"BPE DB Server: PostgreSQL database for the BPE App Server.\",\"PDP: IHE Policy Decision Point for deciding on patient consent.\",\"MDAT Repo: Repository (e.g. openEHR) for storing medical data (MDAT).\",\"MPI: IHE Master Patient Index for storing identifying patient date (IDAT) e.g. first name, last name, date of birth.\",\"Cohort Browser: Example for a system to trigger patient cohort size estimations across multiple organizations.\",\"More information on Client- and Server-Certificates are available on the dedicated wiki page: Authentication: Client/Server Certificates\"]},\"166\":{\"h\":\"Additional Reverse Proxy in external DMZ\",\"t\":[\"In some organizations an additional reverse proxy in an external DMZ is needed. This can be accomplished by using for example nginx or haproxy as a TCP-Proxy. Example configurations routing traffic using SNI can be found below. Configuring an additional reverse proxy to terminate the incoming TLS connection early is not recommended.\",\"Network Setup Diagramm\",\"nginx\",\"http { # ... } stream { map $ssl_preread_server_name $name { fhir.example.com fhir; } upstream fhir { server 192.168.0.1:443; } server { listen 443; proxy_pass $name; ssl_preread on; } } \",\"haproxy\",\"defaults timeout connect 5s timeout client 30s timeout server 30s frontend ingress bind :443 mode tcp tcp-request inspect-delay 5s tcp-request content accept if { req_ssl_hello_type 1 } use_backend fhir if { req.ssl_sni fhir.example.com } backend fhir mode tcp server fhir 192.168.0.1:443 \"]},\"167\":{\"h\":\"Releases and Deployment\",\"t\":[\"Older Versions\"]},\"168\":{\"h\":\"\"},\"169\":{\"h\":\"DSF 0.9.3 Configuration Parameters - BPE Server\",\"t\":[\"Please note: Additional parameters (not listed here) are used to configure process plugins.\"]},\"170\":{\"h\":\"ORG_HIGHMED_DSF_BPE_CONSENT_WEBSERVICE_FACTORY_CLASS\",\"t\":[\"Property: org.highmed.dsf.bpe.consent.webservice.factory.class\",\"Required: No\",\"Description: Factory for client implementations used to connect to a consent server in order to check permissions to access patient medical data\",\"Recommendation: The default value is a factory for a stub implementation, change to a factory for client implementation that matches the API of your Consent server\",\"Default:org.highmed.consent.client.stub.ConsentClientStubFactory\"]},\"171\":{\"h\":\"ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD or ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: org.highmed.dsf.bpe.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"172\":{\"h\":\"ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: org.highmed.dsf.bpe.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server to execute database migrations\",\"Default:liquibase_user\"]},\"173\":{\"h\":\"ORG_HIGHMED_DSF_BPE_DB_URL\",\"t\":[\"Property: org.highmed.dsf.bpe.db.url\",\"Required: Yes\",\"Description: The address of the database used for the DSF BPE server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/bpe\"]},\"174\":{\"h\":\"ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_GROUP\",\"t\":[\"Property: org.highmed.dsf.bpe.db.user.camunda.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server for camunda processes\",\"Default:camunda_users\"]},\"175\":{\"h\":\"ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"t\":[\"Property: org.highmed.dsf.bpe.db.user.camunda.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"Example:/run/secrets/db_user_camunda.password\"]},\"176\":{\"h\":\"ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_USERNAME\",\"t\":[\"Property: org.highmed.dsf.bpe.db.user.camunda.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use a different user then in ORG_HIGHMED_DSF_BPE_DB_USER_USERNAME\",\"Default:camunda_server_user\"]},\"177\":{\"h\":\"ORG_HIGHMED_DSF_BPE_DB_USER_GROUP\",\"t\":[\"Property: org.highmed.dsf.bpe.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server\",\"Default:bpe_users\"]},\"178\":{\"h\":\"ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD or ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: org.highmed.dsf.bpe.db.user.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server\",\"Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"179\":{\"h\":\"ORG_HIGHMED_DSF_BPE_DB_USER_USERNAME\",\"t\":[\"Property: org.highmed.dsf.bpe.db.user.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server\",\"Default:bpe_server_user\"]},\"180\":{\"h\":\"ORG_HIGHMED_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND\",\"t\":[\"Property: org.highmed.dsf.bpe.debug.log.message.onActivityEnd\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity end, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"181\":{\"h\":\"ORG_HIGHMED_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART\",\"t\":[\"Property: org.highmed.dsf.bpe.debug.log.message.onActivityStart\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity start, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"182\":{\"h\":\"ORG_HIGHMED_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES\",\"t\":[\"Property: org.highmed.dsf.bpe.debug.log.message.variables\",\"Required: No\",\"Description: To enable loging bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"183\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"184\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"185\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"186\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_PASSWORD or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_PASSWORD_FILE\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.local.proxy.password\",\"Required: No\",\"Description: Proxy password, set if the DSF BPE server can reach internal servers, like the DSF FHIR server, only through a proxy which requests authentication\",\"Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_PASSWORD_FILE\"]},\"187\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_URL\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.local.proxy.url\",\"Required: No\",\"Description: Proxy location, set if the DSF BPE server can reach internal servers, like the DSF FHIR server, only through a proxy\",\"Example:http://proxy.foo:8080\"]},\"188\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_PROXY_USERNAME\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.local.proxy.username\",\"Required: No\",\"Description: Proxy username, set if the DSF BPE server can reach internal servers, like the DSF FHIR server, only through a proxy which requests authentication\"]},\"189\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.local.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"190\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.local.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until a reading a resource from the local DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"191\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.local.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true\",\"Default:false\"]},\"192\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_PASSWORD or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_PASSWORD_FILE\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.local.websocket.proxy.password\",\"Required: No\",\"Description: Proxy password, set if the DSF BPE server can reach internal servers via websocket, like the getSub server, only through a proxy which requests authentication\",\"Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_PASSWORD_FILE\"]},\"193\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_URL\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.local.websocket.proxy.url\",\"Required: No\",\"Description: Proxy location, set if the DSF BPE server can reach internal servers via websocket, like the DSF FHIR server, only through a proxy\",\"Example:http://proxy.foo:8080\"]},\"194\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_LOCAL_WEBSOCKET_PROXY_USERNAME\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.local.websocket.proxy.username\",\"Required: No\",\"Description: Proxy username, set if the DSF BPE server can reach internal servers via websocket, like the DSF FHIR server, only through a proxy which requests authentication\"]},\"195\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_PASSWORD or ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_PASSWORD_FILE\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.remote.proxy.password\",\"Required: No\",\"Description: Proxy password, set if the the DSF FHIR server can reach the internet only through a proxy which requests authentication\",\"Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_PASSWORD_FILE\"]},\"196\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_URL\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.remote.proxy.url\",\"Required: No\",\"Description: Proxy location, set if the DSF BPE server can reach the internet only through a proxy\",\"Example:http://proxy.foo:8080\"]},\"197\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_PROXY_USERNAME\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.remote.proxy.username\",\"Required: No\",\"Description: Proxy username, set if the the DSF BPE server can reach the internet only through a proxy which requests authentication\"]},\"198\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.remote.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:5000\"]},\"199\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.remote.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"200\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.remote.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"201\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_TRUST_CERTIFICATES\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.client.trust.certificates\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"202\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server\",\"Default:?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"203\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.server.base.url\",\"Required: Yes\",\"Description: The base address of the local DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"204\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.server.organization.identifier.value\",\"Required: Yes\",\"Description: The local identifier value used in the Allow-List\",\"Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization\",\"Example:hospital.com\"]},\"205\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.task.subscription.retry.max\",\"Required: No\",\"Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries\",\"Default:-1\"]},\"206\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.task.subscription.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server\",\"Default:5000\"]},\"207\":{\"h\":\"ORG_HIGHMED_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: org.highmed.dsf.bpe.fhir.task.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about task resources from the DSF FHIR server\",\"Default:?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"208\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate.pem\"]},\"209\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem\"]},\"210\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem.password\"]},\"211\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_FROMADDRESS\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.fromAddress\",\"Required: No\",\"Description: Mail service sender address\",\"Example:sender@localhost\"]},\"212\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_HOST\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.host\",\"Required: No\",\"Description: SMTP server hostname\",\"Example:smtp.server.de\"]},\"213\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.mailOnErrorLogEventBufferSize\",\"Required: No\",\"Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:4\"]},\"214\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation\",\"Required: No\",\"Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:/opt/bpe/log/bpe.log\"]},\"215\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_PASSWORD or ORG_HIGHMED_DSF_BPE_MAIL_PASSWORD_FILE\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.password\",\"Required: No\",\"Description: SMTP server authentication password\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using ORG_HIGHMED_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS\"]},\"216\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_PORT\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.port\",\"Required: No\",\"Description: SMTP server port\",\"Example:465\",\"Default:0\"]},\"217\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_REPLYTOADDRESSES\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.replyToAddresses\",\"Required: No\",\"Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported\",\"Example:reply.to@localhost\"]},\"218\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.sendMailOnErrorLogEvent\",\"Required: No\",\"Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"219\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.sendTestMailOnStartup\",\"Required: No\",\"Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"220\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_SMIME_P12KEYSTORE\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.smime.p12Keystore\",\"Required: No\",\"Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smime_certificate.p12\"]},\"221\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or ORG_HIGHMED_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.smime.p12Keystore.password\",\"Required: No\",\"Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file\",\"Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"Example:/run/secrets/smime_certificate.p12.password\"]},\"222\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_TOADDRESSES\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.toAddresses\",\"Required: No\",\"Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported\",\"Example:recipient@localhost\"]},\"223\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_TOADDRESSESCC\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.toAddressesCc\",\"Required: No\",\"Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported\",\"Example:cc.recipient@localhost\"]},\"224\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_TRUST_CERTIFICATES\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.trust.certificates\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_trust_certificates.pem\"]},\"225\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_USERNAME\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.username\",\"Required: No\",\"Description: SMTP server authentication username\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS\"]},\"226\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MAIL_USESMTPS\",\"t\":[\"Property: org.highmed.dsf.bpe.mail.useSmtps\",\"Required: No\",\"Description: To enable SMTP over TLS (smtps), set to true\",\"Default:false\"]},\"227\":{\"h\":\"ORG_HIGHMED_DSF_BPE_MPI_WEBSERVICE_FACTORY_CLASS\",\"t\":[\"Property: org.highmed.dsf.bpe.mpi.webservice.factory.class\",\"Required: No\",\"Description: Factory for client implementations used to connect to a Master Patient Index (MPI) server in order to read patient demographic data\",\"Recommendation: The default value is a factory for a stub implementation, change to a factory for client implementation that matches the API of your MPI\",\"Default:org.highmed.mpi.client.stub.MasterPatientIndexClientStubFactory\"]},\"228\":{\"h\":\"ORG_HIGHMED_DSF_BPE_OPENEHR_WEBSERVICE_FACTORY_CLASS\",\"t\":[\"Property: org.highmed.dsf.bpe.openehr.webservice.factory.class\",\"Required: No\",\"Description: Factory for client implementations used to connect to an openEHR repository in order to read patient medical data\",\"Recommendation: The default value is a factory for a stub implementation, change to a factory for client implementation that matches the API of your openEHR repository\",\"Default:org.highmed.openehr.client.stub.OpenEhrClientStubFactory\"]},\"229\":{\"h\":\"ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED\",\"t\":[\"Property: org.highmed.dsf.bpe.process.excluded\",\"Required: No\",\"Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List\"]},\"230\":{\"h\":\"ORG_HIGHMED_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX\",\"t\":[\"Property: org.highmed.dsf.bpe.process.fhir.server.retry.max\",\"Required: No\",\"Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries\",\"Default:-1\"]},\"231\":{\"h\":\"ORG_HIGHMED_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP\",\"t\":[\"Property: org.highmed.dsf.bpe.process.fhir.server.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment\",\"Default:5000\"]},\"232\":{\"h\":\"ORG_HIGHMED_DSF_BPE_PROCESS_PLUGIN_DIRECTROY\",\"t\":[\"Property: org.highmed.dsf.bpe.process.plugin.directroy\",\"Required: No\",\"Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server\",\"Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit\",\"Default:process\"]},\"233\":{\"h\":\"ORG_HIGHMED_DSF_BPE_PROCESS_RETIRED\",\"t\":[\"Property: org.highmed.dsf.bpe.process.retired\",\"Required: No\",\"Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Retire processes that where deployed previously but are not anymore available\"]},\"234\":{\"h\":\"ORG_HIGHMED_DSF_BPE_PSEUDONYMIZATION_WEBSERVICE_FACTORY_CLASS\",\"t\":[\"Property: org.highmed.dsf.bpe.pseudonymization.webservice.factory.class\",\"Required: No\",\"Description: Factory for client implementations used to connect to a pseudonymization service in order to pseudonymize patient demographic and medical data\",\"Recommendation: The default value is a factory for a stub implementation, change to a factory for client implementation that matches the API of your pseudonymization service\",\"Default:org.highmed.pseudonymization.client.stub.PseudonymizationClientStubFactory\"]},\"235\":{\"h\":\"\"},\"236\":{\"h\":\"DSF 0.9.3 Configuration Parameters - FHIR Server\",\"t\":[\"Please note: Additional parameters (not listed here) are used to define elements of the external FHIR bundle.\"]},\"237\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: org.highmed.dsf.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"238\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: org.highmed.dsf.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"239\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: org.highmed.dsf.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"240\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_PASSWORD or ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_PASSWORD_FILE\",\"t\":[\"Property: org.highmed.dsf.fhir.client.proxy.password\",\"Required: No\",\"Description: Proxy password, set if the the DSF FHIR server can reach the internet only through a proxy which requests authentication\",\"Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_PASSWORD_FILE\"]},\"241\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_URL\",\"t\":[\"Property: org.highmed.dsf.fhir.client.proxy.url\",\"Required: No\",\"Description: Proxy location, set if the DSF FHIR server can reach the internet only through a proxy\",\"Example:http://proxy.foo:8080\"]},\"242\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_CLIENT_PROXY_USERNAME\",\"t\":[\"Property: org.highmed.dsf.fhir.client.proxy.username\",\"Required: No\",\"Description: Proxy username, set if the the DSF FHIR server can reach the internet only through a proxy which requests authentication\"]},\"243\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_CLIENT_TIMEOUT_CONNECT\",\"t\":[\"Property: org.highmed.dsf.fhir.client.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"244\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_CLIENT_TIMEOUT_READ\",\"t\":[\"Property: org.highmed.dsf.fhir.client.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:10000\"]},\"245\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_CLIENT_TRUST_CERTIFICATES\",\"t\":[\"Property: org.highmed.dsf.fhir.client.trust.certificates\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"246\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_CLIENT_VERBOSE\",\"t\":[\"Property: org.highmed.dsf.fhir.client.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"247\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD or ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: org.highmed.dsf.fhir.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"248\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: org.highmed.dsf.fhir.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server to execute database migrations\",\"Default:liquibase_user\"]},\"249\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_DB_URL\",\"t\":[\"Property: org.highmed.dsf.fhir.db.url\",\"Required: Yes\",\"Description: The address of the database used for the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/fhir\"]},\"250\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_DB_USER_GROUP\",\"t\":[\"Property: org.highmed.dsf.fhir.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server\",\"Default:fhir_users\"]},\"251\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD or ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: org.highmed.dsf.fhir.db.user.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server\",\"Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"252\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP\",\"t\":[\"Property: org.highmed.dsf.fhir.db.user.permanent.delete.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes\",\"Default:fhir_permanent_delete_users\"]},\"253\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"t\":[\"Property: org.highmed.dsf.fhir.db.user.permanent.delete.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use docker secret file to configure using ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"Example:/run/secrets/db_user_permanent_delete.password\"]},\"254\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME\",\"t\":[\"Property: org.highmed.dsf.fhir.db.user.permanent.delete.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use a different user then ORG_HIGHMED_DSF_FHIR_DB_USER_USERNAME\",\"Default:fhir_server_permanent_delete_user\"]},\"255\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_DB_USER_USERNAME\",\"t\":[\"Property: org.highmed.dsf.fhir.db.user.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server\",\"Default:fhir_server_user\"]},\"256\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: org.highmed.dsf.fhir.server.base.url\",\"Required: Yes\",\"Description: The base address of this DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"257\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_SERVER_CORS_ORIGINS\",\"t\":[\"Property: org.highmed.dsf.fhir.server.cors.origins\",\"Required: No\",\"Description: List of allowed CORS origins, used to set the Access-Control-Allow-Origin HTTP response header, which indicates whether the response can be shared with requesting code from the given origin; comma or space separated list, YAML block scalars supported\"]},\"258\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_SERVER_INIT_BUNDLE\",\"t\":[\"Property: org.highmed.dsf.fhir.server.init.bundle\",\"Required: No\",\"Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source\",\"Default:conf/bundle.xml\"]},\"259\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE\",\"t\":[\"Property: org.highmed.dsf.fhir.server.organization.identifier.value\",\"Required: Yes\",\"Description: The local identifier value used in the Allow-List\",\"Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization\",\"Example:hospital.com\"]},\"260\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_SERVER_PAGE_COUNT\",\"t\":[\"Property: org.highmed.dsf.fhir.server.page.count\",\"Required: No\",\"Description: The page size returned by the DSF FHIR server when reading/searching fhir resources\",\"Default:20\"]},\"261\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS\",\"t\":[\"Property: org.highmed.dsf.fhir.server.user.thumbprints\",\"Required: Yes\",\"Description: List of SHA512 thumbprints as hex from local client certificates that can be used to access the DSF FHIR server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Besides the DSF BPE client certificate thumbprint, add a second thumbprint of a personal client certificate for administration purposes\"]},\"262\":{\"h\":\"ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE\",\"t\":[\"Property: org.highmed.dsf.fhir.server.user.thumbprints.permanent.delete\",\"Required: Yes\",\"Description: List of SHA512 thumbprints as hex from local client certificates that can be used to access the DSF FHIR server for permanent deletes; comma or space separated list, YAML block scalars supported\",\"Recommendation: Besides the DSF BPE client certificate thumbprint, add a second thumbprint of a personal client certificate for administration purposes\"]},\"263\":{\"h\":\"\"},\"264\":{\"h\":\"DSF 0.9.3 Configuration Parameters - FHIR Reverse Proxy\"},\"265\":{\"h\":\"APP_SERVER_IP\",\"t\":[\"Required: Yes\",\"Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target\",\"Example:app, 172.28.1.3\"]},\"266\":{\"h\":\"HTTPS_SERVER_NAME_PORT\",\"t\":[\"Required: Yes\",\"Description: External FQDN of your DSF FHIR server with port, typically 443\",\"Example:my-external.fqdn:443\"]},\"267\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"268\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"269\":{\"h\":\"PROXY_PASS_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"270\":{\"h\":\"PROXY_PASS_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"271\":{\"h\":\"SSL_CA_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_certificate_file.pem\"]},\"272\":{\"h\":\"SSL_CA_DN_REQUEST_FILE\",\"t\":[\"Required: No\",\"Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_dn_request_file.pem\"]},\"273\":{\"h\":\"SSL_CERTIFICATE_CHAIN_FILE\",\"t\":[\"Required: No\",\"Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_chain_file.pem\"]},\"274\":{\"h\":\"SSL_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_file.pem\"]},\"275\":{\"h\":\"SSL_CERTIFICATE_KEY_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_key_file.pem\"]},\"276\":{\"h\":\"\",\"t\":[\"This setup guide uses pre-build docker images for DSF Version 0.9.3. This guide is only suitable for HiGHmed organizations. If you are not a member of HiGHmed, see NUM-CODEX Install.\"]},\"277\":{\"h\":\"Prerequisites\"},\"278\":{\"h\":\"Virtual Machines\",\"t\":[\"DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\",\"DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\"]},\"279\":{\"h\":\"Docker / Docker-Compose\",\"t\":[\"Both VMs need latest docker and docker-compose. For the latest install guide see https://docs.docker.com/engine/install and https://docs.docker.com/compose/install\",\"docker:\",\"sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \\\"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\\\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io \",\"docker-compose (warning: 2.17.3 might not be latest):\",\"sudo curl -L \\\"https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-$(uname -s)-$(uname -m)\\\" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose \"]},\"280\":{\"h\":\"Client/Server Certificates\",\"t\":[\"Two Certificates from the DFN-PKI Global G2 (via DFN e.V.), GÉANT TCS (via DFN e.V.) or D-Trust (via TMF e.V.) are needed, more infos see Authentication\",\"Certificate A: Server Certificate (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)\",\"Certificate B: Client Certificate (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)\"]},\"281\":{\"h\":\"Network setup / Network access\",\"t\":[\"For additional information on the network setup see Network-and-Architecture.\",\"The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.\",\"The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.\",\"Here is a quick overview of the expected network setup. Connections to the fTTP, the terminology server and simplifier.net for validating GECCO FHIR resources as well as the local GECCO FHIR server are not listed:\",\"Source\",\"Target\",\"Port\",\"Protocol\",\"DSF BPE (local)\",\"DSF FHIR (local)\",\"443\",\"https, wss\",\"DSF BPE (local)\",\"DSF FHIR (GECCO Transfer Hub)\",\"443\",\"https\",\"DSF FHIR (local)\",\"DSF FHIR (GECCO Transfer Hub)\",\"443\",\"https (HTTP HEAD only)\",\"DSF BPE (GECCO Transfer Hub)\",\"DSF FHIR (local)\",\"443\",\"https\",\"DSF FHIR (GECCO Transfer Hub)\",\"DSF FHIR (local)\",\"443\",\"https (HTTP HEAD only)\"]},\"282\":{\"h\":\"On-Boarding Excel Spreadsheet\",\"t\":[\"You are required to fill out the on-boarding Excel spreadsheet, provided with the NUM-CODEX hackathon invite, and send it to the GECCO Transfer Hub. If the GECCO Transfer Hub already received and validated your On-Boarding Excel spreadsheet and you do not have to change any information, you can skip this step.\"]},\"283\":{\"h\":\"Setup\"},\"284\":{\"h\":\"Prepare Certificates\",\"t\":[\"Server Certificate (certificate A)This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)\",\"Store PEM encoded certificate as ssl_certificate_file.pem\",\"Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem\",\"Client Certificate (certificate B)This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)\",\"Store PEM encoded certificate as client_certificate.pem\",\"Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem\"]},\"285\":{\"h\":\"DSF FHIR Server\",\"t\":[\"Add Group/User Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:\",\"sudo addgroup --gid 2101 fhir sudo adduser --system --no-create-home --uid 2101 --gid 2101 fhir \",\"Download and Extract Config Files Download prepared DSF FHIR server config files and folder structure from\",\"Test HiGHmed instance:https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_test_fhir_0_9_3.tar.gz\",\"cd /opt wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_test_fhir_0_9_3.tar.gz sudo tar --same-owner -zxvf dsf_highmed_test_fhir_0_9_3.tar.gz \",\"Production HiGHmed instance:https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_prod_fhir_0_9_3.tar.gz\",\"cd /opt wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_prod_fhir_0_9_3.tar.gz sudo tar --same-owner -zxvf dsf_highmed_prod_fhir_0_9_3.tar.gz \",\"The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.\",\"Verify that the fhir system user or group can write into the following folder\",\"/opt/fhir/log\",\"Add certificates and keys\",\"Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/\",\"ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)\",\"ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)\",\"Add the client certificate (certificate B) and the corresponding private-key to /opt/fhir/secrets/\",\"client_certificate.pem (chmod: 440, chown: fhir:docker)\",\"client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/\",\"client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L39: - app_client_certificate_private_key.pem.password ... L56: ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L136: app_client_certificate_private_key.pem.password: L137: file: ./secrets/client_certificate_private_key.pem.password \",\"Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA\",\"L101: ssl_certificate_chain_file.pem: L102: file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem \",\"Modify database passwords\",\"/opt/fhir/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user_permanent_delete.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> proxy -> environment:\",\"HTTPS_SERVER_NAME_PORT: TODO_DSF_FRIR_SERVER_EXTERNAL_FQDN:443 Set your FHIR servers external FQDN, e.g. foo.bar.de -> foo.bar.de:443\",\"For additional environment variables, see DSF 0.9.3 FHIR Reverse Proxy configuration parameters\",\"services -> app -> environment:\",\"ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL: https://TODO_DSF_FRIR_SERVER_EXTERNAL_FQDN/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de\",\"ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_NAME: TODO_ORGANIZATION_NAME Set your Organizations official name, e.g. Hochschule Heilbronn\",\"ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: TODO_CLIENT_CERTIFICATE_THUMBPRINT Set the SHA-512 Hash (lowercase hex) of your client certificate (certificate B) Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.\",\"ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS: TODO_CLIENT_CERTIFICATE_THUMBPRINTS Set the SHA-512 Hash (lowercase hex) of your client certificate (certificate B) This parameter is a comma separated list e.g. ab12...37ff,f3a2...bb22. You can add additional client certificate thumbprints for example the thumbprint of your (the admins) personal DFN PKI S/MIME certificate, to access the DSF FHIR servers REST interface.\",\"ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE: TODO_CLIENT_CERTIFICATE_THUMBPRINTS Set the SHA-512 Hash (lowercase hex) of your client certificate (certificate B) This parameter is a comma separated list e.g. ab12...37ff,f3a2...bb22. Usually it is not necessary to add additional thumbprints other than your client certificate (certificate B) here. When a client uses a certificate with a thumbprint listed here, the client is allowed to permanently delete FHIR resources.\",\"For additional environment variables, see DSF 0.9.3 FHIR Server configuration parameters\",\"Start the DSF FHIR Server Start using: docker-compose up -d && docker-compose logs -f (Ctrl-C will close log, but not stop container)\"]},\"286\":{\"h\":\"DSF BPE Server\",\"t\":[\"Add Group/User Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:\",\"sudo addgroup --gid 2202 bpe sudo adduser --system --no-create-home --uid 2202 --gid 2202 bpe \",\"Download and Extract Config Files Download prepared DSF BPE server config files and folder structure from\",\"Test HiGHmed instance:https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_test_bpe_0_9_3.tar.gz\",\"cd /opt wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_test_bpe_0_9_3.tar.gz sudo tar --same-owner -zxvf dsf_highmed_test_bpe_0_9_3.tar.gz \",\"Production HiGHmed instance:https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_prod_bpe_0_9_3.tar.gz\",\"cd /opt wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_prod_bpe_0_9_3.tar.gz sudo tar --same-owner -zxvf dsf_highmed_prod_bpe_0_9_3.tar.gz \",\"The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.\",\"Verify that the bpe system user or group can write into the following folders\",\"/opt/bpe/log\",\"/opt/bpe/psn\",\"Add certificates and keys\",\"Add the client certificate (certificate B) and the corresponding private-key to /opt/bpe/secrets/\",\"client_certificate.pem (chmod: 440 chown: bpe:docker)\",\"client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/\",\"client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L13: - app_client_certificate_private_key.pem.password ... L41: ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L99: app_client_certificate_private_key.pem.password: L100: file: ./secrets/client_certificate_private_key.pem.password \",\"Add the CRR public-key used for asymmetrically encrypting the GECCO FHIR Bundles to /opt/bpe/secrets/\",\"crr_public_key.pem (chmod: 440 chown: bpe:docker)\",\"You can download the 4096 Bit RSA PEM encoded public-key for \",\"a Test instance from:https://keys.num-codex.de/crr_public-key-pre-prod.pem\",\"a Production instance from:https://keys.num-codex.de/crr_public-key-prod.pem\",\"Modify database passwords\",\"/opt/bpe/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user_camunda.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> app -> environment:\",\"ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER Set your Organizations DSF identifier, aka the shortest FQDN that resolves the main homepage of the organization, e.g. hs-heilbronn.de\",\"ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://TODO_DSF_FRIR_SERVER_FQDN/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"For additional environment variables, see DSF 0.9.3 BPE Server configuration parameters\",\"Start the DSF BPE Server (without process plugins) Start using: docker-compose up -d && docker-compose logs -f (Ctrl-C will close log, but not stop container)\",\"Verify DSF BPE Startup\",\"Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.\",\"Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.\",\"Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.\",\"If you need to debug the TLS connection to your DSF FHIR server use for example:docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443 The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]\",\"Stop the DSF BPE Server\",\"Hit Ctrl-C to close log\",\"Stop using: docker-compose stop\",\"Add the following DSF BPE process plugins, for instructions on how to configure the plugin, see release notes.\",\"num-codex / codex-processes-ap1 version 0.7.0 or later:https://github.com/num-codex/codex-processes-ap1/releases/tag/v0.7.0 See NUM-CODEX: Process Deployment and Configuration on how to configure the process plugin.\",\"highmed / highmed-processes / data-sharing version 0.7.0 or later:https://github.com/highmed/highmed-processes/releases/tag/v0.7.0\",\"highmed / highmed-processes / feasibility version 0.7.0 or later:https://github.com/highmed/highmed-processes/releases/tag/v0.7.0\",\"highmed / highmed-processes / feasibility-mpc version 0.7.0 or later:https://github.com/highmed/highmed-processes/releases/tag/v0.7.0\",\"highmed / highmed-processes / local-services version 0.7.0 or later:https://github.com/highmed/highmed-processes/releases/tag/v0.7.0\",\"highmed / highmed-processes / ping version 0.7.0 or later:https://github.com/highmed/highmed-processes/releases/tag/v0.7.0\",\"highmed / highmed-processes / update-allow-list version 0.7.0 or later:https://github.com/highmed/highmed-processes/releases/tag/v0.7.0 See HiGHmed: Process Ping Deployment on how to deploy and configure the process plugin.\",\"Notice: Jar-files within the folders /opt/bpe/process and /opt/bpe/plugin need to be readable by the linxux bpe user -> chown root:bpe, chmod 440\",\"Start the DSF BPE Server (with process plugins) Start using: docker-compose up -d && docker-compose logs -f (Ctrl-C will close log, but not stop container)\",\"Request Allow-List upload from HiGHmed TTP\\nThe Allow-List upload is needed in order to execute HiGHmed and NUM-CODEX processes.\"]},\"287\":{\"h\":\"\",\"t\":[\"This setup guide uses pre-build docker images for DSF Version 0.9.3. This guide is not suitable for HiGHmed organizations. If you are a member of HiGHmed, see HiGHmed Install.\"]},\"288\":{\"h\":\"Prerequisites\"},\"289\":{\"h\":\"Virtual Machines\",\"t\":[\"DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\",\"DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\"]},\"290\":{\"h\":\"Docker / Docker-Compose\",\"t\":[\"Both VMs need latest docker and docker-compose. For the latest install guide see https://docs.docker.com/engine/install and https://docs.docker.com/compose/install\",\"docker:\",\"sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \\\"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\\\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io \",\"docker-compose (warning: 2.17.3 might not be latest):\",\"sudo curl -L \\\"https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-$(uname -s)-$(uname -m)\\\" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose \"]},\"291\":{\"h\":\"Client/Server Certificates\",\"t\":[\"Two Certificates from the DFN-PKI Global G2 (via DFN e.V.), GÉANT TCS (via DFN e.V.) or D-Trust (via TMF e.V.) are needed, more infos see Authentication\",\"Certificate A: Server Certificate (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)\",\"Certificate B: Client Certificate (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)\"]},\"292\":{\"h\":\"Network setup / Network access\",\"t\":[\"For additional information on the network setup see Network-and-Architecture.\",\"The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.\",\"The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.\",\"Here is a quick overview of the expected network setup. Connections to the fTTP, the terminology server and simplifier.net for validating GECCO FHIR resources as well as the local GECCO FHIR server are not listed:\",\"Source\",\"Target\",\"Port\",\"Protocol\",\"DSF BPE (local)\",\"DSF FHIR (local)\",\"443\",\"https, wss\",\"DSF BPE (local)\",\"DSF FHIR (GECCO Transfer Hub)\",\"443\",\"https\",\"DSF FHIR (local)\",\"DSF FHIR (GECCO Transfer Hub)\",\"443\",\"https (HTTP HEAD only)\",\"DSF BPE (GECCO Transfer Hub)\",\"DSF FHIR (local)\",\"443\",\"https\",\"DSF FHIR (GECCO Transfer Hub)\",\"DSF FHIR (local)\",\"443\",\"https (HTTP HEAD only)\"]},\"293\":{\"h\":\"On-Boarding Excel Spreadsheet\",\"t\":[\"You are required to fill out the on-boarding Excel spreadsheet, provided with the NUM-CODEX hackathon invite, and send it to the GECCO Transfer Hub. If the GECCO Transfer Hub already received and validated your On-Boarding Excel spreadsheet and you do not have to change any information, you can skip this step.\"]},\"294\":{\"h\":\"Setup\"},\"295\":{\"h\":\"Prepare Certificates\",\"t\":[\"Server Certificate (certificate A)This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)\",\"Store PEM encoded certificate as ssl_certificate_file.pem\",\"Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem\",\"Client Certificate (certificate B)This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)\",\"Store PEM encoded certificate as client_certificate.pem\",\"Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem\"]},\"296\":{\"h\":\"DSF FHIR Server\",\"t\":[\"Add Group/User Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:\",\"sudo addgroup --gid 2101 fhir sudo adduser --system --no-create-home --uid 2101 --gid 2101 fhir \",\"Download and Extract Config Files Download prepared DSF FHIR server config files and folder structure from\",\"Test NUM-CODEX instance:https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_test_fhir_0_9_3.tar.gz\",\"cd /opt wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_test_fhir_0_9_3.tar.gz sudo tar --same-owner -zxvf dsf_codex_test_fhir_0_9_3.tar.gz \",\"Production NUM-CODEX instance:https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_prod_fhir_0_9_3.tar.gz\",\"cd /opt wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_prod_fhir_0_9_3.tar.gz sudo tar --same-owner -zxvf dsf_codex_prod_fhir_0_9_3.tar.gz \",\"The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.\",\"Verify that the fhir system user or group can write into the following folder\",\"/opt/fhir/log\",\"Add certificates and keys\",\"Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/\",\"ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)\",\"ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)\",\"Add the client certificate (certificate B) and the corresponding private-key to /opt/fhir/secrets/\",\"client_certificate.pem (chmod: 440, chown: fhir:docker)\",\"client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/\",\"client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L39: - app_client_certificate_private_key.pem.password ... L56: ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L137: app_client_certificate_private_key.pem.password: L138: file: ./secrets/client_certificate_private_key.pem.password \",\"Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA\",\"L102: ssl_certificate_chain_file.pem: L103: file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem \",\"Modify database passwords\",\"/opt/fhir/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user_permanent_delete.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> proxy -> environment:\",\"HTTPS_SERVER_NAME_PORT: TODO_DSF_FRIR_SERVER_EXTERNAL_FQDN:443 Set your FHIR servers external FQDN, e.g. foo.bar.de -> foo.bar.de:443\",\"For additional environment variables, see DSF 0.9.3 FHIR Reverse Proxy configuration parameters\",\"services -> app -> environment:\",\"ORG_HIGHMED_DSF_FHIR_SERVER_FQDN: TODO_DSF_FRIR_SERVER_EXTERNAL_FQDN Set your FHIR servers external FQDN, e.g. foo.bar.de\",\"ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL: https://TODO_DSF_FRIR_SERVER_EXTERNAL_FQDN/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de\",\"ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_NAME: TODO_ORGANIZATION_NAME Set your Organizations official name, e.g. Hochschule Heilbronn\",\"ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: TODO_CLIENT_CERTIFICATE_THUMBPRINT Set the SHA-512 Hash (lowercase hex) of your client certificate (certificate B) Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.\",\"ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS: TODO_CLIENT_CERTIFICATE_THUMBPRINTS Set the SHA-512 Hash (lowercase hex) of your client certificate (certificate B) This parameter is a comma separated list e.g. ab12...37ff,f3a2...bb22. You can add additional client certificate thumbprints for example the thumbprint of your (the admins) personal DFN PKI S/MIME certificate, to access the DSF FHIR servers REST interface.\",\"ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE: TODO_CLIENT_CERTIFICATE_THUMBPRINTS Set the SHA-512 Hash (lowercase hex) of your client certificate (certificate B) This parameter is a comma separated list e.g. ab12...37ff,f3a2...bb22. Usually it is not necessary to add additional thumbprints other than your client certificate (certificate B) here. When a client uses a certificate with a thumbprint listed here, the client is allowed to permanently delete FHIR resources.\",\"For additional environment variables, see DSF 0.9.3 FHIR Server configuration parameters\",\"Start the DSF FHIR Server Start using: docker-compose up -d && docker-compose logs -f (Ctrl-C will close log, but not stop container)\"]},\"297\":{\"h\":\"DSF BPE Server\",\"t\":[\"Add Group/User Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:\",\"sudo addgroup --gid 2202 bpe sudo adduser --system --no-create-home --uid 2202 --gid 2202 bpe \",\"Download and Extract Config Files Download prepared DSF BPE server config files and folder structure from\",\"Test NUM-CODEX instance:https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_test_bpe_0_9_3.tar.gz\",\"cd /opt wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_test_bpe_0_9_3.tar.gz sudo tar --same-owner -zxvf dsf_codex_test_bpe_0_9_3.tar.gz \",\"Production NUM-CODEX instance:https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_prod_bpe_0_9_3.tar.gz\",\"cd /opt wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_prod_bpe_0_9_3.tar.gz sudo tar --same-owner -zxvf dsf_codex_prod_bpe_0_9_3.tar.gz \",\"The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.\",\"Verify that the bpe system user or group can write into the following folders\",\"/opt/bpe/log\",\"Add certificates and keys\",\"Add the client certificate (certificate B) and the corresponding private-key to /opt/bpe/secrets/\",\"client_certificate.pem (chmod: 440 chown: bpe:docker)\",\"client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/\",\"client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L13: - app_client_certificate_private_key.pem.password ... L38: ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L92: app_client_certificate_private_key.pem.password: L93: file: ./secrets/client_certificate_private_key.pem.password \",\"Add the CRR public-key used for asymmetrically encrypting the GECCO FHIR Bundles to /opt/bpe/secrets/\",\"crr_public_key.pem (chmod: 440 chown: bpe:docker)\",\"You can download the 4096 Bit RSA PEM encoded public-key for \",\"a Test instance from:https://keys.num-codex.de/crr_public-key-pre-prod.pem\",\"a Production instance from:https://keys.num-codex.de/crr_public-key-prod.pem\",\"Modify database passwords\",\"/opt/bpe/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user_camunda.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> app -> environment:\",\"ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER Set your Organizations DSF identifier, aka the shortest FQDN that resolves the main homepage of the organization, e.g. hs-heilbronn.de\",\"ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://TODO_DSF_FRIR_SERVER_FQDN/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"For additional environment variables, see DSF 0.9.3 BPE Server configuration parameters\",\"Start the DSF BPE Server (without process plugins) Start using: docker-compose up -d && docker-compose logs -f (Ctrl-C will close log, but not stop container)\",\"Verify DSF BPE Startup\",\"Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.\",\"Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.\",\"Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.\",\"If you need to debug the TLS connection to your DSF FHIR server use for example:docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443 The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]\",\"Stop the DSF BPE Server\",\"Hit Ctrl-C to close log\",\"Stop using: docker-compose stop\",\"Add the following DSF BPE process plugins, for instructions on how to configure the plugin, see release notes.\",\"num-codex / codex-processes-ap1 version 0.7.0 or later:https://github.com/num-codex/codex-processes-ap1/releases/tag/v0.7.0 See NUM-CODEX: Process Deployment and Configuration on how to deploy and configure the process plugin.\",\"highmed / highmed-processes / ping version 0.7.0 or later:https://github.com/highmed/highmed-processes/releases/tag/v0.7.0 See HiGHmed: Process Ping Deployment on how to deploy and configure the process plugin.\",\"Notice: Jar-files within the folders /opt/bpe/process and /opt/bpe/plugin need to be readable by the linxux bpe user -> chown root:bpe, chmod 440\",\"Start the DSF BPE Server (with process plugins)\\nStart using: docker-compose up -d && docker-compose logs -f (Ctrl-C will close log, but not stop container)\"]},\"298\":{\"h\":\"Upgrading from 0.7.0 to 0.9.0\",\"t\":[\"Upgrading the DSF from 0.7.0 to 0.9.0 involves replacing a config file, modifying the docker-compose.yml files, replacing the process plugins and recreating the containers.\",\"If you are upgrading from 0.6.0 please see the Upgrade from 0.6.0 to 0.7.0 guide first.\"]},\"299\":{\"h\":\"Modify DSF FHIR Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_0.9.0_upgrade\",\"Modify the DSF FHIR docker-compose.yml file, replace 0.7.0 with 0.9.0\",\"@@ -1,7 +1,7 @@ version: '3.8' services: proxy: - image: ghcr.io/highmed/fhir_proxy:0.7.0 + image: ghcr.io/highmed/fhir_proxy:0.9.0 restart: on-failure ports: - 127.0.0.1:80:80 @@ -27,7 +27,7 @@ services: - app app: - image: ghcr.io/highmed/fhir:0.7.0 + image: ghcr.io/highmed/fhir:0.9.0 restart: on-failure healthcheck: test: [\\\"CMD\\\", \\\"java\\\", \\\"-cp\\\", \\\"dsf_fhir.jar\\\", \\\"org.highmed.dsf.fhir.StatusClient\\\"] \",\"Download prepared DSF FHIR server config files and extract/replace the external FHIR bundle\",\"Test NUM-CODEX (non HiGHmed) instance:https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_test_fhir_0_9_0.tar.gz\",\"cd /opt wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_test_fhir_0_9_0.tar.gz sudo tar --same-owner -zxvf dsf_codex_test_fhir_0_9_0.tar.gz fhir/conf/bundle.xml \",\"Test HiGHmed instance:https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_test_fhir_0_9_0.tar.gz\",\"cd /opt wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_test_fhir_0_9_0.tar.gz sudo tar --same-owner -zxvf dsf_highmed_test_fhir_0_9_0.tar.gz fhir/conf/bundle.xml \",\"Production NUM-CODEX (non HiGHmed) instance:https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_prod_fhir_0_9_0.tar.gz\",\"cd /opt wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_codex_prod_fhir_0_9_0.tar.gz sudo tar --same-owner -zxvf dsf_codex_prod_fhir_0_9_0.tar.gz fhir/conf/bundle.xml \",\"Production HiGHmed instance:https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_prod_fhir_0_9_0.tar.gz\",\"cd /opt wget https://github.com/highmed/highmed-dsf/wiki/resources/dsf_highmed_prod_fhir_0_9_0.tar.gz sudo tar --same-owner -zxvf dsf_highmed_prod_fhir_0_9_0.tar.gz fhir/conf/bundle.xml \",\"The command will update the external FHIR bundle at /opt/fhir/conf/bundle.xml\",\"The output of the tar command should be\",\"fhir/conf/bundle.xml \",\"Upgrade the DSF FHIR containers From /opt/fhir execute\",\"docker-compose up -d && docker-compose logs -f \"]},\"300\":{\"h\":\"Modify DSF BPE Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_0.9.0_upgrade\",\"Modify the DSF BPE docker-compose.yml file\",\"NUM-CODEX (non HiGHmed) instance: Change the bpe container version from 0.7.0 to 0.9.0, update the process exclude config and remove a bind mount\",\"@@ -1,7 +1,7 @@ version: '3.8' services: app: - image: ghcr.io/highmed/bpe:0.7.0 + image: ghcr.io/highmed/bpe:0.9.0 restart: on-failure healthcheck: test: [\\\"CMD\\\", \\\"java\\\", \\\"-cp\\\", \\\"dsf_bpe.jar\\\", \\\"org.highmed.dsf.bpe.StatusClient\\\"] @@ -29,9 +29,6 @@ services: - type: bind source: ./log target: /opt/bpe/log - - type: bind - source: ./last_event - target: /opt/bpe/last_event - type: bind source: ./cache target: /opt/bpe/cache @@ -48,8 +45,8 @@ services: ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://TODO_DSF_FRIR_SERVER_FQDN/fhir ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED: | - wwwnetzwerk-universitaetsmedizinde_dataTranslate/0.6.0 - wwwnetzwerk-universitaetsmedizinde_dataReceive/0.6.0 + wwwnetzwerk-universitaetsmedizinde_dataTranslate/0.7.0 + wwwnetzwerk-universitaetsmedizinde_dataReceive/0.7.0 #TODO modify ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED for later process versions #TODO add process specific environment variables, see process documentation \",\"HiGHmed instance: Change the bpe container version from 0.7.0 to 0.9.0, update the process exclude config, and remove a bind mount\",\"@@ -1,7 +1,7 @@ version: '3.8' services: app: - image: ghcr.io/highmed/bpe:0.7.0 + image: ghcr.io/highmed/bpe:0.9.0 restart: on-failure healthcheck: test: [\\\"CMD\\\", \\\"java\\\", \\\"-cp\\\", \\\"dsf_bpe.jar\\\", \\\"org.highmed.dsf.bpe.StatusClient\\\"] @@ -29,9 +29,6 @@ services: - type: bind source: ./log target: /opt/bpe/log - - type: bind - source: ./last_event - target: /opt/bpe/last_event - type: bind source: ./psn target: /opt/bpe/psn @@ -51,11 +48,11 @@ services: ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://TODO_DSF_FRIR_SERVER_FQDN/fhir ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED: | - highmedorg_computeFeasibility/0.6.0 - highmedorg_computeDataSharing/0.6.0 - highmedorg_updateAllowList/0.6.0 - wwwnetzwerk-universitaetsmedizinde_dataTranslate/0.6.0 - wwwnetzwerk-universitaetsmedizinde_dataReceive/0.6.0 + highmedorg_computeFeasibility/0.7.0 + highmedorg_computeDataSharing/0.7.0 + highmedorg_updateAllowList/0.7.0 + wwwnetzwerk-universitaetsmedizinde_dataTranslate/0.7.0 + wwwnetzwerk-universitaetsmedizinde_dataReceive/0.7.0 #TODO modify ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED for later process versions #TODO add process specific environment variables, see process documentation \",\"Upgrade DSF Plugins and Process-Plugins\",\"NUM-CODEX (non HiGHmed) instance: \",\"Process plugins in /opt/bpe/process:\",\"Replace codex-process-data-transfer-0.6.0.jar with codex-process-data-transfer-0.7.0.jar from the latest NUM-CODEX processes release\",\"Replace dsf-bpe-process-ping-0.6.0.jar with dsf-bpe-process-ping-0.7.0.jar from the latest HiGHmed processes release\",\"Make sure the process plugins in /opt/bpe/process are configured with chmod 440 and chown root:bpe.\",\"HiGHmed instance: \",\"Process plugins in /opt/bpe/process:\",\"Replace codex-process-data-transfer-0.6.0.jar with codex-process-data-transfer-0.7.0.jar from the latest NUM-CODEX processes release\",\"Replace dsf-bpe-process-data-sharing-0.6.0.jar with dsf-bpe-process-data-sharing-0.7.0.jar from the latest HiGHmed processes release\",\"Replace dsf-bpe-process-feasibility-0.6.0.jar with dsf-bpe-process-feasibility-0.7.0.jar from the latest HiGHmed processes release\",\"Replace dsf-bpe-process-feasibility-mpc-0.6.0.jar with dsf-bpe-process-feasibility-mpc-0.7.0.jar from the latest HiGHmed processes release\",\"Replace dsf-bpe-process-local-services-0.6.0.jar with dsf-bpe-process-local-services-0.7.0.jar from the latest HiGHmed processes release\",\"Replace dsf-bpe-process-ping-0.6.0.jar with dsf-bpe-process-ping-0.7.0.jar from the latest HiGHmed processes release\",\"Replace dsf-bpe-process-update-allow-list-0.6.0.jar with dsf-bpe-process-update-allow-list-0.7.0.jar from the latest HiGHmed processes release\",\"Make sure the process plugins in /opt/bpe/process are configured with chmod 440 and chown root:bpe.\",\"Plugins in '/opt/bpe/plugin':\",\"If you are using the provided PDQ MPI Client, replace dsf-mpi-client-pdq-0.7.0.jar, hapi-base-2.3.jar and hapi-structures-v25-2.3.jar with the new files from dsf-mpi-client-pdq-0.9.0.zip, see DSF release notes\",\"If you are using the provided openEHR Client, replace dsf-openehr-client-impl-0.7.0.jar with the new file from dsf-openehr-client-impl-0.9.0.zip, see DSF release notes\",\"Make sure the plugins in /opt/bpe/plugin are configured with chmod 440 and chown root:bpe.\",\"Upgrade the DSF BPE containers From /opt/bpe execute\",\"docker-compose up -d && docker-compose logs -f \",\"Verify your upgrade:\",\"Verify the DSF FHIR server is running in version 0.9.0. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 0.9.0, [...]\",\"Verify the DSF FHIR server started without errors\",\"Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/ (authentication with your client-certificate)\",\"Verify the DSF BPE server is running in version 0.9.0. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 0.9.0, [...]\",\"Verify the DSF BPE server started without errors\",\"Verify the DSF BPE server removed ActivityDefinition resources for the deleted process plugin from the DSF FHIR server and created new ActivityDefinition for the new process plugin.\",\"Verify your install with a ping/pong test\\nFor a Task resource compatible with the 0.7.0 release of the ping process, see the Ping/Pong process wiki.\"]},\"301\":{\"h\":\"Upgrading from 0.8.0 to 0.9.0\",\"t\":[\"Upgrading the DSF from 0.8.0 to 0.9.0 involves modifying the docker-compose.yml files, replacing the process plugins and recreating the containers.\",\"If you are upgrading from 0.6.0 please see the Upgrade from 0.6.0 to 0.7.0 guide first and then visit the Upgrade from 0.7.0 to 0.9.0 guide.If you are upgrading from 0.7.0 please see the .\"]},\"302\":{\"h\":\"Modify DSF FHIR Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_0.9.0_upgrade\",\"Modify the DSF FHIR docker-compose.yml file, replace 0.8.0 with 0.9.0\",\"@@ -1,7 +1,7 @@ version: '3.8' services: proxy: - image: ghcr.io/highmed/fhir_proxy:0.8.0 + image: ghcr.io/highmed/fhir_proxy:0.9.0 restart: on-failure ports: - 127.0.0.1:80:80 @@ -27,7 +27,7 @@ services: - app app: - image: ghcr.io/highmed/fhir:0.8.0 + image: ghcr.io/highmed/fhir:0.9.0 restart: on-failure healthcheck: test: [\\\"CMD\\\", \\\"java\\\", \\\"-cp\\\", \\\"dsf_fhir.jar\\\", \\\"org.highmed.dsf.fhir.StatusClient\\\"] \",\"Upgrade the DSF FHIR containers From /opt/fhir execute\",\"docker-compose up -d && docker-compose logs -f \"]},\"303\":{\"h\":\"Modify DSF BPE Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_0.9.0_upgrade\",\"Modify the DSF BPE docker-compose.yml file\",\"NUM-CODEX (non HiGHmed) instance: Change the bpe container version from 0.8.0 to 0.9.0, update the process exclude config and remove a bind mount\",\"@@ -1,7 +1,7 @@ version: '3.8' services: app: - image: ghcr.io/highmed/bpe:0.8.0 + image: ghcr.io/highmed/bpe:0.9.0 restart: on-failure healthcheck: test: [\\\"CMD\\\", \\\"java\\\", \\\"-cp\\\", \\\"dsf_bpe.jar\\\", \\\"org.highmed.dsf.bpe.StatusClient\\\"] \",\"HiGHmed instance: Change the bpe container version from 0.7.0 to 0.9.0, update the process exclude config, and remove a bind mount\",\"@@ -1,7 +1,7 @@ version: '3.8' services: app: - image: ghcr.io/highmed/bpe:0.8.0 + image: ghcr.io/highmed/bpe:0.9.0 restart: on-failure healthcheck: test: [\\\"CMD\\\", \\\"java\\\", \\\"-cp\\\", \\\"dsf_bpe.jar\\\", \\\"org.highmed.dsf.bpe.StatusClient\\\"] @@ -48,9 +48,9 @@ services: ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://TODO_DSF_FRIR_SERVER_FQDN/fhir ORG_HIGHMED_DSF_BPE_PROCESS_EXCLUDED: | - highmedorg_computeFeasibility/0.6.0 - highmedorg_computeDataSharing/0.6.0 - highmedorg_updateAllowList/0.6.0 + highmedorg_computeFeasibility/0.7.0 + highmedorg_computeDataSharing/0.7.0 + highmedorg_updateAllowList/0.7.0 wwwnetzwerk-universitaetsmedizinde_dataTranslate/0.7.0 wwwnetzwerk-universitaetsmedizinde_dataReceive/0.7.0 \",\"Upgrade DSF Plugins and Process-Plugins\",\"NUM-CODEX (non HiGHmed) instance: \",\"Process plugins in /opt/bpe/process:\",\"Replace codex-process-data-transfer-0.6.0.jar with codex-process-data-transfer-0.7.0.jar from the latest NUM-CODEX processes release\",\"Replace dsf-bpe-process-ping-0.6.0.jar with dsf-bpe-process-ping-0.7.0.jar from the latest HiGHmed processes release\",\"Make sure the process plugins in /opt/bpe/process are configured with chmod 440 and chown root:bpe.\",\"HiGHmed instance: \",\"Process plugins in /opt/bpe/process:\",\"Replace codex-process-data-transfer-0.6.0.jar with codex-process-data-transfer-0.7.0.jar from the latest NUM-CODEX processes release\",\"Replace dsf-bpe-process-data-sharing-0.6.0.jar with dsf-bpe-process-data-sharing-0.7.0.jar from the latest HiGHmed processes release\",\"Replace dsf-bpe-process-feasibility-0.6.0.jar with dsf-bpe-process-feasibility-0.7.0.jar from the latest HiGHmed processes release\",\"Replace dsf-bpe-process-feasibility-mpc-0.6.0.jar with dsf-bpe-process-feasibility-mpc-0.7.0.jar from the latest HiGHmed processes release\",\"Replace dsf-bpe-process-local-services-0.6.0.jar with dsf-bpe-process-local-services-0.7.0.jar from the latest HiGHmed processes release\",\"Replace dsf-bpe-process-ping-0.6.0.jar with dsf-bpe-process-ping-0.7.0.jar from the latest HiGHmed processes release\",\"Replace dsf-bpe-process-update-allow-list-0.6.0.jar with dsf-bpe-process-update-allow-list-0.7.0.jar from the latest HiGHmed processes release\",\"Make sure the process plugins in /opt/bpe/process are configured with chmod 440 and chown root:bpe.\",\"Plugins in '/opt/bpe/plugin':\",\"If you are using the provided PDQ MPI Client, replace dsf-mpi-client-pdq-0.7.0.jar, hapi-base-2.3.jar and hapi-structures-v25-2.3.jar with the new files from dsf-mpi-client-pdq-0.9.0.zip, see DSF release notes\",\"If you are using the provided openEHR Client, replace dsf-openehr-client-impl-0.7.0.jar with the new file from dsf-openehr-client-impl-0.9.0.zip, see DSF release notes\",\"Make sure the plugins in /opt/bpe/plugin are configured with chmod 440 and chown root:bpe.\",\"Upgrade the DSF BPE containers From /opt/bpe execute\",\"docker-compose up -d && docker-compose logs -f \",\"Verify your upgrade:\",\"Verify the DSF FHIR server is running in version 0.9.0. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 0.9.0, [...]\",\"Verify the DSF FHIR server started without errors\",\"Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/ (authentication with your client-certificate)\",\"Verify the DSF BPE server is running in version 0.9.0. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 0.9.0, [...]\",\"Verify the DSF BPE server started without errors\",\"Verify the DSF BPE server removed ActivityDefinition resources for the deleted process plugin from the DSF FHIR server and created new ActivityDefinition for the new process plugin.\",\"Verify your install with a ping/pong test\\nFor a Task resource compatible with the 0.7.0 release of the ping process, see the Ping/Pong process wiki.\"]},\"304\":{\"h\":\"Upgrading from 0.9.0 to 0.9.1\",\"t\":[\"Upgrading the DSF from 0.9.0 to 0.9.1 involves modifying the docker-compose.yml files, replacing the process plugins and recreating the containers.\",\"If you are upgrading from 0.8.0 please see the .\"]},\"305\":{\"h\":\"Modify DSF FHIR Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_0.9.1_upgrade\",\"Modify the DSF FHIR docker-compose.yml file, replace 0.9.0 with 0.9.1\",\"@@ -1,7 +1,7 @@ version: '3.8' services: proxy: - image: ghcr.io/highmed/fhir_proxy:0.9.0 + image: ghcr.io/highmed/fhir_proxy:0.9.1 restart: on-failure ports: - 127.0.0.1:80:80 @@ -27,7 +27,7 @@ services: - app app: - image: ghcr.io/highmed/fhir:0.9.0 + image: ghcr.io/highmed/fhir:0.9.1 restart: on-failure healthcheck: test: [\\\"CMD\\\", \\\"java\\\", \\\"-cp\\\", \\\"dsf_fhir.jar\\\", \\\"org.highmed.dsf.fhir.StatusClient\\\"] \",\"Upgrade the DSF FHIR containers From /opt/fhir execute\",\"docker-compose up -d && docker-compose logs -f \"]},\"306\":{\"h\":\"Modify DSF BPE Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_0.9.1_upgrade\",\"Modify the DSF BPE docker-compose.yml file\",\"NUM-CODEX (non HiGHmed) instance: Change the bpe container version from 0.9.0 to 0.9.1\",\"@@ -1,7 +1,7 @@ version: '3.8' services: app: - image: ghcr.io/highmed/bpe:0.9.0 + image: ghcr.io/highmed/bpe:0.9.1 restart: on-failure healthcheck: test: [\\\"CMD\\\", \\\"java\\\", \\\"-cp\\\", \\\"dsf_bpe.jar\\\", \\\"org.highmed.dsf.bpe.StatusClient\\\"] \",\"HiGHmed instance: Change the bpe container version from 0.9.0 to 0.9.1\",\"@@ -1,7 +1,7 @@ version: '3.8' services: app: - image: ghcr.io/highmed/bpe:0.8.0 + image: ghcr.io/highmed/bpe:0.9.0 restart: on-failure healthcheck: test: [\\\"CMD\\\", \\\"java\\\", \\\"-cp\\\", \\\"dsf_bpe.jar\\\", \\\"org.highmed.dsf.bpe.StatusClient\\\"] \",\"Upgrade DSF Plugins and Process-Plugins * Plugins in '/opt/bpe/plugin': 1. If you are using the provided PDQ MPI Client, replace dsf-mpi-client-pdq-0.7.0.jar, hapi-base-2.3.jar and hapi-structures-v25-2.3.jar with the new files from dsf-mpi-client-pdq-0.9.1.zip, see DSF release notes 1. If you are using the provided openEHR Client, replace dsf-openehr-client-impl-0.7.0.jar with the new file from dsf-openehr-client-impl-0.9.1.zip, see DSF release notes\",\" Make sure the plugins in `/opt/bpe/plugin` are configured with `chmod 440` and `chown root:bpe`. \",\"Upgrade the DSF BPE containers From /opt/bpe execute\",\"docker-compose up -d && docker-compose logs -f \",\"Verify your upgrade:\",\"Verify the DSF FHIR server is running in version 0.9.1. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 0.9.1, [...]\",\"Verify the DSF FHIR server started without errors\",\"Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/ (authentication with your client-certificate)\",\"Verify the DSF BPE server is running in version 0.9.1. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 0.9.1, [...]\",\"Verify the DSF BPE server started without errors\",\"Verify the DSF BPE server removed ActivityDefinition resources for the deleted process plugin from the DSF FHIR server and created new ActivityDefinition for the new process plugin.\",\"Verify your install with a ping/pong test\\nFor a Task resource compatible with the 0.7.0 release of the ping process, see the Ping/Pong process wiki.\"]},\"307\":{\"h\":\"Upgrading from 0.9.1\",\"t\":[\"Upgrading the DSF from 0.9.1 to 0.9.2 involves modifying the docker-compose.yml files and recreating the containers.\",\"As the upgrade from 0.9.0 to 0.9.1 does not require any changes except the change of the version numbers, you can directly follow the following instructions.\"]},\"308\":{\"h\":\"Modify DSF FHIR Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_0.9.2_upgrade\",\"Modify the DSF FHIR docker-compose.yml file, replace 0.9.1 (or 0.9.0) with 0.9.2\",\"@@ -1,7 +1,7 @@ version: '3.8' services: proxy: - image: ghcr.io/highmed/fhir_proxy:0.9.1 + image: ghcr.io/highmed/fhir_proxy:0.9.2 restart: on-failure ports: - 127.0.0.1:80:80 @@ -27,7 +27,7 @@ services: - app app: - image: ghcr.io/highmed/fhir:0.9.1 + image: ghcr.io/highmed/fhir:0.9.2 restart: on-failure healthcheck: test: [\\\"CMD\\\", \\\"java\\\", \\\"-cp\\\", \\\"dsf_fhir.jar\\\", \\\"org.highmed.dsf.fhir.StatusClient\\\"] \",\"Upgrade the DSF FHIR containers From /opt/fhir execute\",\"docker-compose up -d && docker-compose logs -f \"]},\"309\":{\"h\":\"Modify DSF BPE Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_0.9.2_upgrade\",\"Modify the DSF BPE docker-compose.yml file, replace 0.9.1 (or 0.9.0) with 0.9.2\",\"@@ -1,7 +1,7 @@ version: '3.8' services: app: - image: ghcr.io/highmed/bpe:0.9.1 + image: ghcr.io/highmed/bpe:0.9.2 restart: on-failure healthcheck: test: [\\\"CMD\\\", \\\"java\\\", \\\"-cp\\\", \\\"dsf_bpe.jar\\\", \\\"org.highmed.dsf.bpe.StatusClient\\\"] \",\"Upgrade the DSF BPE containers From /opt/bpe execute\",\"docker-compose up -d && docker-compose logs -f \",\"Verify your upgrade:\",\"Verify the DSF FHIR server is running in version 0.9.2. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 0.9.2, [...]\",\"Verify the DSF FHIR server started without errors\",\"Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/ (authentication with your client-certificate)\",\"Verify the DSF BPE server is running in version 0.9.2. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 0.9.2, [...]\",\"Verify the DSF BPE server started without errors\",\"Verify your install with a ping/pong test\\nFor a Task resource compatible with the 0.7.0 release of the ping process, see the Ping/Pong process wiki.\"]},\"310\":{\"h\":\"Upgrading from 0.9.2\",\"t\":[\"Upgrading the DSF from 0.9.2 to 0.9.3 involves modifying the docker-compose.yml files and recreating the containers.\",\"As the upgrade from 0.9.0 to 0.9.1 and 0.9.1 to 0.9.2 does not require any changes except the change of the version numbers, you can directly follow the following instructions.\"]},\"311\":{\"h\":\"Modify DSF FHIR Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_0.9.3_upgrade\",\"Modify the DSF FHIR docker-compose.yml file, replace 0.9.2 (or 0.9.0, 0.9.1) with 0.9.3\",\"@@ -1,7 +1,7 @@ version: '3.8' services: proxy: - image: ghcr.io/highmed/fhir_proxy:0.9.2 + image: ghcr.io/highmed/fhir_proxy:0.9.3 restart: on-failure ports: - 127.0.0.1:80:80 @@ -27,7 +27,7 @@ services: - app app: - image: ghcr.io/highmed/fhir:0.9.2 + image: ghcr.io/highmed/fhir:0.9.3 restart: on-failure healthcheck: test: [\\\"CMD\\\", \\\"java\\\", \\\"-cp\\\", \\\"dsf_fhir.jar\\\", \\\"org.highmed.dsf.fhir.StatusClient\\\"] \",\"Upgrade the DSF FHIR containers From /opt/fhir execute\",\"docker-compose up -d && docker-compose logs -f \"]},\"312\":{\"h\":\"Modify DSF BPE Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_0.9.3_upgrade\",\"Modify the DSF BPE docker-compose.yml file, replace 0.9.2 (or 0.9.0, 0.9.1) with 0.9.3\",\"@@ -1,7 +1,7 @@ version: '3.8' services: app: - image: ghcr.io/highmed/bpe:0.9.2 + image: ghcr.io/highmed/bpe:0.9.3 restart: on-failure healthcheck: test: [\\\"CMD\\\", \\\"java\\\", \\\"-cp\\\", \\\"dsf_bpe.jar\\\", \\\"org.highmed.dsf.bpe.StatusClient\\\"] \",\"Upgrade the DSF BPE containers From /opt/bpe execute\",\"docker-compose up -d && docker-compose logs -f \",\"Verify your upgrade:\",\"Verify the DSF FHIR server is running in version 0.9.3. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 0.9.3, [...]\",\"Verify the DSF FHIR server started without errors\",\"Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/ (authentication with your client-certificate)\",\"Verify the DSF BPE server is running in version 0.9.3. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 0.9.3, [...]\",\"Verify the DSF BPE server started without errors\",\"Verify your install with a ping/pong test\\nFor a Task resource compatible with the 0.7.0 release of the ping process, see the Ping/Pong process wiki.\"]},\"313\":{\"h\":\"DSF Process Plugin Tutorial\"},\"314\":{\"h\":\"Implementing BPMN Processes as DSF Process-Plugins\",\"t\":[\"This repository contains exercises to learn how to implement process plugins for the Data Sharing Framework (DSF). The tutorial is divided into several exercises that build on each other. For each exercise, a sample solution is provided in a separate branch. This tutorial was first executed at the GMDS / TMF 2022 conference. A recording of the opening remarks by H. Hund and R. Wettstein can be found on YouTube. The slides of the opening remarks are available as a PDF download.\"]},\"315\":{\"h\":\"Prerequisites\",\"t\":[\"In order to be able to solve the exercises described in this tutorial a software development environment with git, Java 11, Maven 3.8, Docker, docker-compose, a Java IDE like Eclipse or IntelliJ, a BPMN Editor like the Camunda Modeler and a minimum 16GB of RAM is needed. For more details see the .\"]},\"316\":{\"h\":\"Exercise 1 - Simple Process\",\"t\":[\"The first exercise focuses on setting up the testing environment used in this tutorial and shows how to implement and execute a simple BPMN process. For more details see the .\"]},\"317\":{\"h\":\"Exercise 1.1 - Process Debugging\",\"t\":[\"Exercise 1.1 looks at how to use the Java debugger of your IDE to remote debug the execution of a process plugin. For more details see the .\"]},\"318\":{\"h\":\"Exercise 2 - Input Parameters\",\"t\":[\"In order to configure processes that are packaged as process plugins, we will take a look at two possibilities on how to pass parameters to a process. For more details see the .\"]},\"319\":{\"h\":\"Exercise 3 - Message Events\",\"t\":[\"Communication between organizations is modeled using message flow in BPMN processes. The third exercise shows how a process at one organization can trigger a process at another organization. For more details see the .\"]},\"320\":{\"h\":\"Exercise 4 - Exclusive Gateways\",\"t\":[\"Different execution paths in a process based on the state of process variables can be achieved using Exclusive Gateways. In Exercise 4 we will examine how this can be implemented. For more details see the .\"]},\"321\":{\"h\":\"Exercise 5 - Event Based Gateways and Intermediate Events\",\"t\":[\"In the final exercise we will look at message flow between three organizations as well as how to continue a waiting process if no return message arrives. For more details see the .\",\" | | | | | | \"]},\"322\":{\"h\":\"Exercise 1.1 - Process Debugging\",\"t\":[\" | | | | | | \"]},\"323\":{\"h\":\"docker-compose.yml\",\"t\":[\"version: '3.8' services: proxy: image: nginx:1.23 restart: \\\"no\\\" ports: - 127.0.0.1:443:443 secrets: - proxy_certificate_and_int_cas.pem - proxy_certificate_private_key.pem - proxy_trusted_client_cas.pem volumes: - type: bind source: ./proxy/conf.d target: /etc/nginx/conf.d read_only: true - type: bind source: ./proxy/nginx.conf target: /etc/nginx/nginx.conf read_only: true networks: dic-fhir-frontend: ipv4_address: 172.20.0.66 hrp-fhir-frontend: ipv4_address: 172.20.0.82 cos-fhir-frontend: ipv4_address: 172.20.0.98 internet: aliases: - cos - dic - hrp environment: TZ: Europe/Berlin db: image: postgres:13 restart: \\\"no\\\" healthcheck: test: [\\\"CMD-SHELL\\\", \\\"pg_isready -U liquibase_user -d postgres\\\"] interval: 10s timeout: 5s retries: 5 environment: TZ: Europe/Berlin POSTGRES_PASSWORD_FILE: /run/secrets/db_liquibase.password POSTGRES_USER: liquibase_user POSTGRES_DB: postgres networks: - cos-fhir-backend - dic-fhir-backend - hrp-fhir-backend - cos-bpe-backend - dic-bpe-backend - hrp-bpe-backend secrets: - db_liquibase.password volumes: - type: volume source: db-data target: /var/lib/postgresql/data - type: bind source: ./db/init-db.sh target: /docker-entrypoint-initdb.d/init-db.sh read_only: true cos-fhir: image: ghcr.io/highmed/fhir:0.7.0 restart: \\\"no\\\" ports: - 127.0.0.1:5002:5002 secrets: - db_liquibase.password - db_cos_fhir_user.password - db_cos_fhir_user_permanent_delete.password - app_client_trust_certificates.pem - app_cos_client_certificate.pem - app_cos_client_certificate_private_key.pem - app_client_certificate_private_key.pem.password volumes: - type: bind source: ./cos/fhir/conf/bundle.xml target: /opt/fhir/conf/bundle.xml - type: bind source: ./cos/fhir/log target: /opt/fhir/log environment: TZ: Europe/Berlin EXTRA_JVM_ARGS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5002 ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE: /run/secrets/db_liquibase.password ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD_FILE: /run/secrets/db_cos_fhir_user.password ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE: /run/secrets/db_cos_fhir_user_permanent_delete.password ORG_HIGHMED_DSF_FHIR_CLIENT_TRUST_CERTIFICATES: /run/secrets/app_client_trust_certificates.pem ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE: /run/secrets/app_cos_client_certificate.pem ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY: /run/secrets/app_cos_client_certificate_private_key.pem ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ORG_HIGHMED_DSF_FHIR_DB_URL: jdbc:postgresql://db/cos_fhir ORG_HIGHMED_DSF_FHIR_DB_USER_GROUP: cos_fhir_users ORG_HIGHMED_DSF_FHIR_DB_USER_USERNAME: cos_fhir_server_user ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP: cos_fhir_permanent_delete_users ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME: cos_fhir_server_permanent_delete_user ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL: https://cos/fhir ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: Test_COS ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS: ${COS_USER_THUMBPRINTS} ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE: ${COS_USER_THUMBPRINTS_PERMANENT_DELETE} networks: cos-fhir-frontend: ipv4_address: 172.20.0.99 cos-fhir-backend: internet: depends_on: - db - proxy cos-bpe: image: ghcr.io/highmed/bpe:0.7.0 restart: \\\"no\\\" ports: - 127.0.0.1:5005:5005 secrets: - db_liquibase.password - db_cos_bpe_user.password - db_cos_bpe_user_camunda.password - app_client_trust_certificates.pem - app_cos_client_certificate.pem - app_cos_client_certificate_private_key.pem - app_client_certificate_private_key.pem.password volumes: - type: bind source: ./cos/bpe/plugin target: /opt/bpe/plugin read_only: true - type: bind source: ./cos/bpe/process target: /opt/bpe/process read_only: true - type: bind source: ./cos/bpe/log target: /opt/bpe/log - type: bind source: ./cos/bpe/last_event target: /opt/bpe/last_event environment: TZ: Europe/Berlin EXTRA_JVM_ARGS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE: /run/secrets/db_liquibase.password ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD_FILE: /run/secrets/db_cos_bpe_user.password ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE: /run/secrets/db_cos_bpe_user_camunda.password ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_TRUST_CERTIFICATES: /run/secrets/app_client_trust_certificates.pem ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE: /run/secrets/app_cos_client_certificate.pem ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY: /run/secrets/app_cos_client_certificate_private_key.pem ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ORG_HIGHMED_DSF_BPE_DB_URL: jdbc:postgresql://db/cos_bpe ORG_HIGHMED_DSF_BPE_DB_USER_GROUP: cos_bpe_users ORG_HIGHMED_DSF_BPE_DB_USER_USERNAME: cos_bpe_server_user ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_GROUP: cos_camunda_users ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_USERNAME: cos_camunda_server_user ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: Test_COS ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://cos/fhir networks: cos-bpe-frontend: cos-bpe-backend: internet: depends_on: - db - cos-fhir dic-fhir: image: ghcr.io/highmed/fhir:0.7.0 restart: \\\"no\\\" ports: - 127.0.0.1:5000:5000 secrets: - db_liquibase.password - db_dic_fhir_user.password - db_dic_fhir_user_permanent_delete.password - app_client_trust_certificates.pem - app_dic_client_certificate.pem - app_dic_client_certificate_private_key.pem - app_client_certificate_private_key.pem.password volumes: - type: bind source: ./dic/fhir/conf/bundle.xml target: /opt/fhir/conf/bundle.xml - type: bind source: ./dic/fhir/log target: /opt/fhir/log environment: TZ: Europe/Berlin EXTRA_JVM_ARGS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5000 ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE: /run/secrets/db_liquibase.password ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD_FILE: /run/secrets/db_dic_fhir_user.password ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE: /run/secrets/db_dic_fhir_user_permanent_delete.password ORG_HIGHMED_DSF_FHIR_CLIENT_TRUST_CERTIFICATES: /run/secrets/app_client_trust_certificates.pem ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE: /run/secrets/app_dic_client_certificate.pem ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY: /run/secrets/app_dic_client_certificate_private_key.pem ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ORG_HIGHMED_DSF_FHIR_DB_URL: jdbc:postgresql://db/dic_fhir ORG_HIGHMED_DSF_FHIR_DB_USER_GROUP: dic_fhir_users ORG_HIGHMED_DSF_FHIR_DB_USER_USERNAME: dic_fhir_server_user ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP: dic_fhir_permanent_delete_users ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME: dic_fhir_server_permanent_delete_user ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL: https://dic/fhir ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: Test_DIC ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS: ${DIC_USER_THUMBPRINTS} ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE: ${DIC_USER_THUMBPRINTS_PERMANENT_DELETE} networks: dic-fhir-frontend: ipv4_address: 172.20.0.67 dic-fhir-backend: internet: depends_on: - db - proxy dic-bpe: image: ghcr.io/highmed/bpe:0.7.0 restart: \\\"no\\\" ports: - 127.0.0.1:5003:5003 secrets: - db_liquibase.password - db_dic_bpe_user.password - db_dic_bpe_user_camunda.password - app_client_trust_certificates.pem - app_dic_client_certificate.pem - app_dic_client_certificate_private_key.pem - app_client_certificate_private_key.pem.password volumes: - type: bind source: ./dic/bpe/plugin target: /opt/bpe/plugin read_only: true - type: bind source: ./dic/bpe/process target: /opt/bpe/process read_only: true - type: bind source: ./dic/bpe/log target: /opt/bpe/log - type: bind source: ./dic/bpe/last_event target: /opt/bpe/last_event environment: TZ: Europe/Berlin EXTRA_JVM_ARGS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5003 ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE: /run/secrets/db_liquibase.password ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD_FILE: /run/secrets/db_dic_bpe_user.password ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE: /run/secrets/db_dic_bpe_user_camunda.password ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_TRUST_CERTIFICATES: /run/secrets/app_client_trust_certificates.pem ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE: /run/secrets/app_dic_client_certificate.pem ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY: /run/secrets/app_dic_client_certificate_private_key.pem ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ORG_HIGHMED_DSF_BPE_DB_URL: jdbc:postgresql://db/dic_bpe ORG_HIGHMED_DSF_BPE_DB_USER_GROUP: dic_bpe_users ORG_HIGHMED_DSF_BPE_DB_USER_USERNAME: dic_bpe_server_user ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_GROUP: dic_camunda_users ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_USERNAME: dic_camunda_server_user ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: Test_DIC ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://dic/fhir networks: dic-bpe-frontend: dic-bpe-backend: internet: depends_on: - db - dic-fhir hrp-fhir: image: ghcr.io/highmed/fhir:0.7.0 restart: \\\"no\\\" ports: - 127.0.0.1:5001:5001 secrets: - db_liquibase.password - db_hrp_fhir_user.password - db_hrp_fhir_user_permanent_delete.password - app_client_trust_certificates.pem - app_hrp_client_certificate.pem - app_hrp_client_certificate_private_key.pem - app_client_certificate_private_key.pem.password volumes: - type: bind source: ./hrp/fhir/conf/bundle.xml target: /opt/fhir/conf/bundle.xml - type: bind source: ./hrp/fhir/log target: /opt/fhir/log environment: TZ: Europe/Berlin EXTRA_JVM_ARGS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5001 ORG_HIGHMED_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE: /run/secrets/db_liquibase.password ORG_HIGHMED_DSF_FHIR_DB_USER_PASSWORD_FILE: /run/secrets/db_hrp_fhir_user.password ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE: /run/secrets/db_hrp_fhir_user_permanent_delete.password ORG_HIGHMED_DSF_FHIR_CLIENT_TRUST_CERTIFICATES: /run/secrets/app_client_trust_certificates.pem ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE: /run/secrets/app_hrp_client_certificate.pem ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY: /run/secrets/app_hrp_client_certificate_private_key.pem ORG_HIGHMED_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ORG_HIGHMED_DSF_FHIR_DB_URL: jdbc:postgresql://db/hrp_fhir ORG_HIGHMED_DSF_FHIR_DB_USER_GROUP: hrp_fhir_users ORG_HIGHMED_DSF_FHIR_DB_USER_USERNAME: hrp_fhir_server_user ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP: hrp_fhir_permanent_delete_users ORG_HIGHMED_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME: hrp_fhir_server_permanent_delete_user ORG_HIGHMED_DSF_FHIR_SERVER_BASE_URL: https://hrp/fhir ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS: ${HRP_USER_THUMBPRINTS} ORG_HIGHMED_DSF_FHIR_SERVER_USER_THUMBPRINTS_PERMANENT_DELETE: ${HRP_USER_THUMBPRINTS_PERMANENT_DELETE} ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: Test_HRP networks: hrp-fhir-frontend: ipv4_address: 172.20.0.83 hrp-fhir-backend: internet: depends_on: - db - proxy hrp-bpe: image: ghcr.io/highmed/bpe:0.7.0 restart: \\\"no\\\" ports: - 127.0.0.1:5004:5004 secrets: - db_liquibase.password - db_hrp_bpe_user.password - db_hrp_bpe_user_camunda.password - app_client_trust_certificates.pem - app_hrp_client_certificate.pem - app_hrp_client_certificate_private_key.pem - app_client_certificate_private_key.pem.password volumes: - type: bind source: ./hrp/bpe/plugin target: /opt/bpe/plugin read_only: true - type: bind source: ./hrp/bpe/process target: /opt/bpe/process read_only: true - type: bind source: ./hrp/bpe/log target: /opt/bpe/log - type: bind source: ./hrp/bpe/last_event target: /opt/bpe/last_event environment: TZ: Europe/Berlin EXTRA_JVM_ARGS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5004 ORG_HIGHMED_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE: /run/secrets/db_liquibase.password ORG_HIGHMED_DSF_BPE_DB_USER_PASSWORD_FILE: /run/secrets/db_hrp_bpe_user.password ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE: /run/secrets/db_hrp_bpe_user_camunda.password ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_TRUST_CERTIFICATES: /run/secrets/app_client_trust_certificates.pem ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE: /run/secrets/app_hrp_client_certificate.pem ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY: /run/secrets/app_hrp_client_certificate_private_key.pem ORG_HIGHMED_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ORG_HIGHMED_DSF_BPE_DB_URL: jdbc:postgresql://db/hrp_bpe ORG_HIGHMED_DSF_BPE_DB_USER_GROUP: hrp_bpe_users ORG_HIGHMED_DSF_BPE_DB_USER_USERNAME: hrp_bpe_server_user ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_GROUP: hrp_camunda_users ORG_HIGHMED_DSF_BPE_DB_USER_CAMUNDA_USERNAME: hrp_camunda_server_user ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: Test_HRP ORG_HIGHMED_DSF_BPE_FHIR_SERVER_BASE_URL: https://hrp/fhir networks: hrp-bpe-frontend: hrp-bpe-backend: internet: depends_on: - db - hrp-fhir secrets: proxy_certificate_and_int_cas.pem: file: ./secrets/proxy_certificate_and_int_cas.pem proxy_certificate_private_key.pem: file: ./secrets/proxy_certificate_private_key.pem proxy_trusted_client_cas.pem: file: ./secrets/proxy_trusted_client_cas.pem db_liquibase.password: file: ./secrets/db_liquibase.password db_dic_fhir_user.password: file: ./secrets/db_dic_fhir_user.password db_dic_fhir_user_permanent_delete.password: file: ./secrets/db_dic_fhir_user_permanent_delete.password db_dic_bpe_user.password: file: ./secrets/db_dic_bpe_user.password db_dic_bpe_user_camunda.password: file: ./secrets/db_dic_bpe_user_camunda.password db_hrp_fhir_user.password: file: ./secrets/db_hrp_fhir_user.password db_hrp_fhir_user_permanent_delete.password: file: ./secrets/db_hrp_fhir_user_permanent_delete.password db_hrp_bpe_user.password: file: ./secrets/db_hrp_bpe_user.password db_hrp_bpe_user_camunda.password: file: ./secrets/db_hrp_bpe_user_camunda.password db_cos_fhir_user.password: file: ./secrets/db_cos_fhir_user.password db_cos_fhir_user_permanent_delete.password: file: ./secrets/db_cos_fhir_user_permanent_delete.password db_cos_bpe_user.password: file: ./secrets/db_cos_bpe_user.password db_cos_bpe_user_camunda.password: file: ./secrets/db_cos_bpe_user_camunda.password app_client_trust_certificates.pem: file: ./secrets/app_client_trust_certificates.pem app_client_certificate_private_key.pem.password: file: ./secrets/app_client_certificate_private_key.pem.password app_dic_client_certificate.pem: file: ./secrets/app_dic_client_certificate.pem app_dic_client_certificate_private_key.pem: file: ./secrets/app_dic_client_certificate_private_key.pem app_hrp_client_certificate.pem: file: ./secrets/app_hrp_client_certificate.pem app_hrp_client_certificate_private_key.pem: file: ./secrets/app_hrp_client_certificate_private_key.pem app_cos_client_certificate.pem: file: ./secrets/app_cos_client_certificate.pem app_cos_client_certificate_private_key.pem: file: ./secrets/app_cos_client_certificate_private_key.pem networks: internet: dic-fhir-frontend: driver: bridge ipam: driver: default config: - subnet: 172.20.0.64/28 dic-fhir-backend: dic-bpe-frontend: dic-bpe-backend: hrp-fhir-frontend: driver: bridge ipam: driver: default config: - subnet: 172.20.0.80/28 hrp-fhir-backend: hrp-bpe-frontend: hrp-bpe-backend: cos-fhir-frontend: driver: bridge ipam: driver: default config: - subnet: 172.20.0.96/28 cos-fhir-backend: cos-bpe-frontend: cos-bpe-backend: volumes: db-data: name: dsf-process-tutorial-db \",\" | | | | | | \"]},\"324\":{\"h\":\"Exercise 1 - Simple Process\",\"t\":[\" | Exercise 1 | | | | | \"]},\"325\":{\"h\":\"Exercise 1 - Simple Process\",\"t\":[\"The first exercise focuses on setting up the testing environment used in this tutorial and shows how to implement and execute a simple BPMN process.\",\"With this exercise we will take a look at the general setup of the tutorial code base, modify a service class and execute the service within a simple demo process.\"]},\"326\":{\"h\":\"Introduction\"},\"327\":{\"h\":\"Tutorial Code Base Structure and Docker Test Setup\",\"t\":[\"The tutorial project consists of three parts: A test-data-generator project used to generate X.509 certificates and FHIR resources during the maven build of the project. The certificates and FHIR resources are needed to start DSF instances simulating installations at three different organizations used for this tutorial. The DSF instances are configured using a docker-compose.yml file in the test-setup folder. The docker-compose test setup uses a single PostgreSQL database server, a single nginx reverse proxy as well as three separate DSF FHIR server- and 3 separate DSF BPE server instances. The tutorial-process project contains all resource (FHIR resources, BPMN process models and Java code) for the actual DSF process plugin.\",\"Java code for the tutorial-process project is located at src/main/java, FHIR resources and BPMN process models at src/main/resources as well as prepared JUnit tests to verify your solution at src/test/java.\"]},\"328\":{\"h\":\"Process Plugin Main Components\",\"t\":[\"The most imported Java class used to specify the process plugin for the DSF BPE server is a class that implements the org.highmed.dsf.bpe.ProcessPluginDefinition interface from the DSF dsf-bpe-process-base module. The DSF BPE server searches for classes implementing this interface using the Java ServiceLoader mechanism. For this tutorial the TutorialProcessPluginDefinition class implements this interface. It is appropriately specified in the src/main/resources/META-INF/services/org.highmed.dsf.bpe.ProcessPluginDefinition file. The TutorialProcessPluginDefinition class is used to specify name and version of the process plugin, what BPMN processes are to be deployed and what FHIR resources and required by the BPMN processes. For the implementation of service task and message events of the processes a special Spring context is used for every process plugin. The TutorialProcessPluginDefinition class specifies what via Spring-Framework configuration class with Spring Beans are used for the process plugin specific Spring Context. For this plugin the TutorialConfig cass is used to define Spring Beans.\",\"The business process engine used by the DSF BPE server is based on the OpenSource Camunda Process Engine 7. In order to specify what Java code should be executed for a BPMN ServiceTask you need to specify the fully-qualified Java class name in the ServiceTask inside the BPMN model. To be executable the Java class needs to extend the org.highmed.dsf.bpe.delegate.AbstractServiceDelegate from the DSF dsf-bpe-process-base module and the class needs to be defined as as Spring Bean.\"]},\"329\":{\"h\":\"Process Execution and FHIR Task Resources\",\"t\":[\"Business process instances are started or the execution continued via FHIR Task resources. The Task resource specifies what process to instantiate or continue, what organization is requesting this action and what organization is the target for the request. When a Task resource starts a process we call it \\\"leading\\\", when it continues a process it's called \\\"current\\\". This differentiation is important for multi-instance use cases not covered by this tutorial. Each Java class extending the abstract class org.highmed.dsf.bpe.delegate.AbstractServiceDelegate has methods to access both types of Task resources.\"]},\"330\":{\"h\":\"Process Access Control\",\"t\":[\"FHIR ActivityDefinition resources are used to announce what processes can be instantiated at a given DSF instance. These resources are used by the DSF to specify what profile the Task resource needs to conform to and what BPMN message name is used to correlate the appropriate start or intermediate event within the BPMN model. The ActivityDefinition also defines what kind of organization can request the instantiation or continuation of a process instance and what kind of organization are allowed to fulfill the request.\",\"We will take a closer look as ActivityDefinition resources in and .\"]},\"331\":{\"h\":\"Exercise Tasks\",\"t\":[\"Add a log message to the HelloDic#doExecute method that logs the recipient organization identifier from the \\\"leading\\\" Task.\",\"Register the HelloDic class as a singleton bean in the TutorialConfig class.\",\"Set the HelloDic class as the service implementation of the appropriate service task within the hello-dic.bpmn process model.\",\"Modify the ActivityDefinition for the highmedorg_helloDic process to only allow local clients to instantiate the process via a helloDic message.\"]},\"332\":{\"h\":\"Solution Verification\"},\"333\":{\"h\":\"Maven Build and Automated Tests\",\"t\":[\"Execute a maven build of the dsf-process-tutorial parent module via:\",\"mvn clean install -Pexercise-1 \",\"Verify that the build was successful and no test failures occurred.\"]},\"334\":{\"h\":\"Process Execution and Manual Tests\",\"t\":[\"To verify the highmedorg_helloDic process can be executed successfully, we need to deploy it into a DSF instance and execute the process. The maven install build is configured to create a process jar file with all necessary resources and to copy the jar to the appropriate locations of the docker test setup.\",\"Start the DSF FHIR server for the Test_DIC organization in a console at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up dic-fhir \",\"Verify the DSF FHIR server started successfully. You can access the webservice of the DSF FHIR server at https://dic/fhir. The DSF FHIR server uses a server certificate that was generated during the first maven install build. To authenticate yourself to the server you can use the client certificate located at .../dsf-process-tutorial/test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12 (Password: password). Add the certificate and the generated Root CA to your browser certificate store.\",\"Caution: If you add the generated Root CA to your browsers certificate store as a trusted Root CA, make sure you are the only one with access to the private key at .../dsf-process-tutorial/test-data-generator/cert/ca/testca_private-key.pem.\",\"Start the DSF BPE server for the Test_DIC organization in a second console at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up dic-bpe \",\"Verify the DSF BPE server started successfully and deployed the highmedorg_helloDic process. The DSF BPE server should print a message that the process was deployed. The DSF FHIR server should now have a new ActivityDefinition resource. Go to https://dic/fhir/ActivityDefinition to check if the expected resource was created by the BPE while deploying the process. The returned FHIR Bundle should contain a single ActivityDefinition. Also, go to https://dic/fhir/StructureDefinition?url=http://highmed.org/fhir/StructureDefinition/task-hello-dic to check if the expected Task profile was created.\",\"Start the highmedorg_helloDic process by posting an appropriate FHIR Task resource to the DSF FHIR server:\",\"The Task resource is used to tell the DSF BPE server via the DSF FHIR server that a specific organization wants to start (or continue) one process instance at a specified organization. The needed Task resource can be generated and posted to the DSF FHIR server by executing the main method of the org.highmed.dsf.process.tutorial.TutorialExampleStarter class. For the TutorialExampleStarter to work the location of the client certificate and its password need to be specified:\",\"Either specify the location and password via program arguments: 1. location of the client certificate (.../dsf-process-tutorial/test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12), 2. password for the client certificate (password)\",\"Or set the environment variables DSF_CLIENT_CERTIFICATE_PATH and DSF_CLIENT_CERTIFICATE_PASSWORD with the appropriate values.\",\"Verify that the FHIR Task resource could be created at the DSF FHIR server. The TutorialExampleStarter class should print a message HTTP 201: Created showing that the Task resource was created.\",\"Verify that the highmedorg_helloDic process was executed by the DSF BPE server. The BPE server should print a message showing that the process was started, print the log message you added to the HelloDic class and end with a message showing that the process finished.\",\"Continue with .\",\" | Exercise 1 | | | | | \"]},\"335\":{\"h\":\"Exercise 1.1 - Process Debugging\",\"t\":[\" | | Exercise 1.1 | | | | \"]},\"336\":{\"h\":\"Exercise 1.1 - Process Debugging\",\"t\":[\"This exercise looks at how to use the Java debugger of your IDE to remote debug the execution of a process plugin.\"]},\"337\":{\"h\":\"Introduction\",\"t\":[\"The DSF FHIR server and the DSF BPE server applications are written in Java and as such are execute on a headless JRE 11 within their docker containers. Command line arguments can be passed to the JVM inside the ghcr.io/highmed/fhir and ghcr.io/highmed/bpe docker images by specifying the environment variable EXTRA_JVM_ARGS. This can be used for example to configure the minimum and maximum heap of the JVM; but can also be used to specify a remote debugging port, which we will use in this exercise.\",\"An EXTRA_JVM_ARGS environment variable is already configure for all DSF FHIR server and DSF BPE server docker containers in the tutorial docker-compose test setup. Take a look at the file to lookup the port numbers specified for the different DSF FHIR and DSF BPE servers.\"]},\"338\":{\"h\":\"Exercise Tasks\",\"t\":[\"Start the DSF FHIR server for the Test_DIC organization in a console at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up dic-fhir \",\"Start the DSF BPE server for the Test_DIC organization in second console at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up dic-bpe \",\"Configure your Java IDE for remote debugging\",\"Eclipse:\",\"IntelliJ:\",\"Create a debug breakpoint in the first line of the HelloDic class doExecute method.\",\"Start your previously defined remote Java debugger in your IDE.\",\"Execute the TutorialExampleStarter class to start highmed_helloDic process.\",\"User your IDE's debugger to step thru the code of the HelloDic class doExecute method.\",\"Continue with .\",\" | | Exercise 1.1 | | | | \"]},\"339\":{\"h\":\"Exercise 2 - Input Parameters\",\"t\":[\" | | | Exercise 2 | | | \"]},\"340\":{\"h\":\"Exercise 2 - Input Parameters\",\"t\":[\"In order to configure processes that are packaged as process plugins, we will take a look at two possibilities on how to pass parameters to a process. The goal of this exercise is to enhance the highmedorg_helloDic process by trying them both.\"]},\"341\":{\"h\":\"Introduction\",\"t\":[\"DSF process plugins can be configured with input parameters using two different approaches:\",\"Static configuration using environment variables during the deployment of a process plugin.\",\"Dynamic configuration by sending values as part of the Task resource to start or continue a process instance.\"]},\"342\":{\"h\":\"Environment Variables\",\"t\":[\"Environment variables are the same for all running process instances and allow static configuration of processes. They can be defined by adding a member variable having the Spring-Framework @Value annotation to the configuration class TutorialConfig. The value of the annotation uses the ${..} notation and follows the form ${some.property:defaultValue}, where each dot in the property name corresponds to an underscore in the environment variable and environment variables are always written upper-case. The property some.property therefore corresponds to the environment variable SOME_PROPERTY.\",\"To create an automated documentation of environment variables during the Maven build process, the DSF provided @ProcessDocumentation annotation from the package org.highmed.dsf.tools.generator can be used. The pom.xml of the tutorial-process submodule calls the DSF provided DocumentGenerator class from the same package during the prepare-package phase of the build process. The generator searches for all @ProcessDocumentation annotations and generates a Markdown documentation based on the annotation's values in the target folder.\"]},\"343\":{\"h\":\"Task Input Parameters\",\"t\":[\"Providing input parameters to a specific process instance allows for dynamic configuration of process instances. It can be done by sending additional values as part of the Task resource that starts or continues a process instance. It should be noted that a FHIR profile must be created for each Task resource, i.e. for each message event in a process model, which inherits from the DSF Task Base Profile. This base profile defines three default input parameters:\",\"message-name (mandatory 1..1): the name of the BPMN message event, same as in the BPMN model\",\"business-key (optional 0..1): used to identify process instances\",\"correlation-key(optional 0..1): used to identify multi-instance process instances used for messaging multiple targets\",\"A later exercise will examine these input parameters and their meaning in more detail.\",\"Since input parameters of Task resources are identified by predefined codes, they are defined via FHIR CodeSystem and resources. The BPMN-Message CodeSystem and the BPMN-Message ValueSet are used in the DSF Task Base Profile to define the three default input parameters of Task resources.\"]},\"344\":{\"h\":\"Version and Release-Date Placeholders\",\"t\":[\"To avoid the need to specify the version and release date for each CodeSystem, StructureDefinition (Task profile) and ValueSet resource, the placeholders #{version} and #{date} can be used. They are replaced with the values returned by the methods ProcessPluginDefinition#getVersion() and ProcessPluginDefinition#getReleaseDate() respectively during deployment of a process plugin by the DSF BPE server.\",\"Read Access Tag While writing FHIR resources on the DSF FHIR server is only allowed by the own organization (except Task), rules have to be defined for reading FHIR resources by external organizations (again except Task). The Resource.meta.tag field is used for this purpose. To allow read access for all organizations (the standard for metadata resources), the following read-access-tag value can be written into this field:\",\" \",\"The read access rules for Task resources are defined through the fields Task.requester and Task.restriction.recipient. Therefore, no read-access-tag is needed.\",\"It is also possible to restrict read access of FHIR resources to organizations with a specific role in a consortium or a specific identifier, but this is not covered in the tutorial.\",\"The write access rules for Task resources are defined through the ActivityDefinition resources belonging to the process. We will take a look at this in and .\"]},\"345\":{\"h\":\"Exercise Tasks\",\"t\":[\"Add an environment variable to enable/disable logging to the TutorialConfig class specify the default value as false.\",\"Inject the value of the environment variable in to HelloDic class, by modifying its constructor and using the new field of the TutorialConfig class.\",\"Use the value of the environment variable in the HelloDic class to decide whether the log message from exercise 1 should be printed.\",\"Adapt test-setup/docker-compose.yml by adding the new environment variable to the service dic-bpe and set the value to \\\"true\\\".\",\"Create a new CodeSystem with url http://highmed.org/fhir/CodeSystem/tutorial having a concept with code tutorial-input.\",\"Create a new ValueSet with url http://highmed.org/fhir/ValueSet/tutorial that includes all concepts from the CodeSystem.\",\"Add the new CodeSystem and ValueSet resources to the highmedorg_helloDic process in the TutorialProcessPluginDefinition class.\",\"Add a new input parameter of type string to the task-hello-dic.xmlTask profile using the concept of the new CodeSystem as a fixed coding.\",\"Read the new input parameter in the HelloDic class from the \\\"leading\\\" Task and add the value to the log message from exercise 1.\",\"Adapt the starter class TutorialExampleStarter by adding the new input parameter with an arbitrary string.\"]},\"346\":{\"h\":\"Solution Verification\"},\"347\":{\"h\":\"Maven Build and Automated Tests\",\"t\":[\"Execute a maven build of the dsf-process-tutorial parent module via:\",\"mvn clean install -Pexercise-2 \",\"Verify that the build was successful and no test failures occurred.\"]},\"348\":{\"h\":\"Process Execution and Manual Tests\",\"t\":[\"To verify the highmedorg_helloDic process can be executed successfully, we need to deploy it into a DSF instance and execute the process. The maven install build is configured to create a process jar file with all necessary resources and copy the jar to the appropriate locations of the docker test setup.\",\"Start the DSF FHIR server for the Test_DIC organization in a console at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up dic-fhir \",\"Verify the DSF FHIR server started successfully.\",\"Start the DSF BPE server for the Test_DIC organization in second console at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up dic-bpe \",\"Verify the DSF BPE server started successfully and deployed the highmedorg_helloDic process.\",\"Start the highmedorg_helloDic process by posting an appropriate FHIR Task resource to the DSF FHIR server of the Test_DIC organization: Execute the main method of the org.highmed.dsf.process.tutorial.TutorialExampleStarter class as in to create the Task resource needed to start the highmedorg_helloDic process.\",\"Verify that the highmedorg_helloDic process was executed by the DSF BPE server. The BPE server should:\",\"Print a message showing that the process was started.\",\"If logging is enabled - print the log message and the value of the input parameter you added to the HelloDic implementation.\",\"Print a message showing that the process finished.\",\"Check that you can disable logging of you message by modifying the docker-compose.yml file and configuring your environment variable with the value \\\"false\\\" or removing the environment variable. Note: Changes to environment variable require recreating the docker container.\",\"Also check that modification to the Task input parameter specified in the TutorialExampleStarter class, have the appropriate effect on your log message.\",\"Continue with .\",\" | | | Exercise 2 | | | \"]},\"349\":{\"h\":\"Exercise 3 - Message Events\",\"t\":[\" | | | | Exercise 3 | | \"]},\"350\":{\"h\":\"Exercise 3 - Message Events\",\"t\":[\"Communication between organizations is modeled using message flow in BPMN processes. The third exercise shows how a process at one organization can trigger a process at another organization.\",\"To demonstrate communication between two organizations we will configure message flow between the processes highmedorg_helloDic and highmedorg_helloCos. The processes are then to be executed at the organizations Test_DIC and Test_COS respectively in the docker test setup, with the former triggering execution of the latter by automatically sending a Task from organization Test_DIC to organization Test_COS.\"]},\"351\":{\"h\":\"Introduction\"},\"352\":{\"h\":\"Message Flow and FHIR Task resources\",\"t\":[\"BPMN processes are instantiated and started within the DSF by creating a matching FHIR Task resource in the DSF FHIR server. This is true for executing a process on the local DSF BPE server by manually creating a Task resource, but also works by creating and starting a process instance at a remote DSF BPE server from an executing process automatically.\",\"In order to exchange information between different processes, for example at two different organizations, BPMN message flow is used. Typically represented by a dashed line arrow between elements with black (send) and white (receive) envelop icons. The following BPMN collaboration diagram shows two processes. The process at \\\"Organization 1\\\" is sending a message to \\\"Organization 2\\\" which results in the instantiation and execution of new process instance at the second organization.\",\"Message Flow\",\"Every time message flow is used in a BPMN process for the DSF, a corresponding FHIR Task profile needs to be specified for every interaction. This profile specifies which process should be started or continued and what the message name is when correlating the appropriate Message Start Event or Intermediate Message Catch Event. A Business Key and a Correlation Key are specified if different process instances need to be linked to a single execution, for example to be able to send a message back.\"]},\"353\":{\"h\":\"BPMN Process Definition Key vs. FHIR Task.instantiatesUri and ActivityDefinition.url / version\",\"t\":[\"FHIR ActivityDefinition resources are used to announce what processes can be instantiated at a given DSF instance. They also control what kind of organization can request the instantiation or continuation of a process instance and what kind of organization is allowed to fulfill the request.\",\"In order to link the FHIR and BPMN worlds the BPMN process definition key needs to be specified following the pattern ^[-a-zA-Z0-9]+_[-a-zA-Z0-9]+$ for example:\",\"domainorg_processKey \",\"In addition the BPM process needs to specify a process version with the pattern ^\\\\d+.\\\\d+.\\\\d+$ for example:\",\"1.0.0 \",\"This results in a canonical URL used to identify the process, for example:\",\"http://domain.org/bpe/Process/processKey/1.0.0 \",\"The canonical URL is used for Task.instantiatesUri and ActivityDefinition.url / version.\"]},\"354\":{\"h\":\"ActivityDefinitions for the DSF\",\"t\":[\"FHIR ActivityDefinition resources are used to announce what processes can be instantiated at a given DSF instance and contain the authorization rules for the specified process. ActivityDefinition for the DSF need to comply with the http://highmed.org/fhir/StructureDefinition/activity-definition profile, with authorization rules configured using the http://highmed.org/fhir/StructureDefinition/extension-process-authorization extension.\",\"The authorization extension needs to be configured at least once and has four sub extensions:\"]},\"355\":{\"h\":\"message-name [1..1]\",\"t\":[\"String value specifying the message name of Message Start Event, Intermediate Message Catch Event or Message Receive Task this authorization rule should match. Can only be specified once per authorization rule extension.\"]},\"356\":{\"h\":\"task-profile [1..1]\",\"t\":[\"Canonical URL value specifying the Task profile this authorization rule should match. Can only be specified once per authorization rule extension.\"]},\"357\":{\"h\":\"requester [1..]\",\"t\":[\"Coding value matching entries from the http://highmed.org/fhir/ValueSet/process-authorization-requester ValueSet:\",\"LOCAL_ORGANIZATION A local organization with a specific identifier. The organization identifier needs to specified using the http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization extension.\",\"REMOTE_ORGANIZATION A remote (non local) organization with a specific identifier. The organization identifier needs to specified using the http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization extension.\",\"LOCAL_ROLE A local organizations with a specific role defined via OrganizationAffiliation. Role and consortium identifier need to be specified using the http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role extension.\",\"REMOTE_ROLE A remote (non local) organizations with a specific role defined via . Role and consortium identifier need to be specified using the http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role extension.\",\"LOCAL_ALL All local organizations regardless of their identifier or role in a consortium.\",\"REMOTE_ALL All remote (non local) organizations regardless of their identifier or role in a consortium.\"]},\"358\":{\"h\":\"recipient [1..]\",\"t\":[\"Coding value matching entries from the http://highmed.org/fhir/ValueSet/process-authorization-recipient ValueSet.\",\"LOCAL_ORGANIZATION Organization with a specific identifier. The organization identifier needs to specified using the http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization extension.\",\"LOCAL_ROLE Organizations with a specific role defined via OrganizationAffiliation. Role and consortium identifier need to be specified using the http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role extension.\",\"LOCAL_ALL All organizations regardless of their identifier or role in a consortium.\",\"The local organization of a DSF instance is configured using the environment variables ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE for the DSF FHIR server and ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE for the DSF BPE server.\"]},\"359\":{\"h\":\"Authorization Extension Example\",\"t\":[\"The following example specifies that process execution can only be requested by a organization with a specific identifier and only allows execution of the process in the DSF instance of an organization with a specific identifier.\",\" \"]},\"360\":{\"h\":\"Exercise Tasks\",\"t\":[\"Modify the highmedorg_helloDic process in the hello-dic.bpmn file and replace the End Event with a Message End Event. Configure input parameters instantiatesUri, profile and messageName in the BPMN model for the Message End Event. Set the message name of the Message End Event and configure it to be executed using the HelloCosMessage class. Use http://highmed.org/fhir/StructureDefinition/task-hello-cos|#{version} as the profile and helloCos as the message name. Figure out what the appropriate instantiatesUri value is, based on the name (process definition key) of the process to be triggered.\",\"Modify the highmedorg_helloCos process in the hello-cos.bpmn file and configure the message name of the Message Start Event with the same value as the message name of the Message End Event in the highmedorg_helloDic process.\",\"Create a new StructureDefinition with a Task profile for the helloCos message.\",\"Create a new ActivityDefinition resource for the highmedorg_helloCos process and configure the authorization extension to allow the Test_DIC organization as the requester and the Test_COS organization as the recipient.\",\"Add the highmedorg_helloCos process and its resources to the TutorialProcessPluginDefinition class.\",\"Modify HelloDic service class to set the target process variable for the Test_COS organization.\",\"Configure the HelloCosMessage class as a spring in the TutorialConfig class.\"]},\"361\":{\"h\":\"Solution Verification\"},\"362\":{\"h\":\"Maven Build and Automated Tests\",\"t\":[\"Execute a maven build of the dsf-process-tutorial parent module via:\",\"mvn clean install -Pexercise-3 \",\"Verify that the build was successful and no test failures occurred.\"]},\"363\":{\"h\":\"Process Execution and Manual Tests\",\"t\":[\"To verify the highmedorg_helloDic and highmedorg_helloCos processes can be executed successfully, we need to deploy them into DSF instances and execute the highmedorg_helloDic process. The maven install build is configured to create a process jar file with all necessary resources and copy the jar to the appropriate locations of the docker test setup.\",\"Start the DSF FHIR server for the Test_DIC organization in a console at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up dic-fhir \",\"Verify the DSF FHIR server started successfully.\",\"Start the DSF BPE server for the Test_DIC organization in another console at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up dic-bpe \",\"Verify the DSF BPE server started successfully and deployed the highmedorg_helloDic process.\",\"Start the DSF FHIR server for the Test_COS organization in a console at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up cos-fhir \",\"Verify the DSF FHIR server started successfully. You can access the webservice of the DSF FHIR server at https://cos/fhir. The DSF FHIR server uses a server certificate that was generated during the first maven build. To authenticate yourself to the server you can use the client certificate located at .../dsf-process-tutorial/test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12 (Password: password).\",\"Start the DSF BPE server for the Test_COS organization in another console at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up cos-bpe \",\"Verify the DSF BPE server started successfully and deployed the highmedorg_helloCos process. The DSF BPE server should print a message that the process was deployed. The DSF FHIR server should now have a new ActivityDefinition resource. Go to https://cos/fhir/ActivityDefinition to check if the expected resource was created by the BPE while deploying the process. The returned FHIR Bundle should contain two ActivityDefinition resources. Also, go to https://cos/fhir/StructureDefinition?url=http://highmed.org/fhir/StructureDefinition/task-hello-cos to check if the expected Task profile was created.\",\"Start the highmedorg_helloDic process by posting a specific FHIR Task resource to the DSF FHIR server of the Test_DIC organization: Execute therefore the main method of the org.highmed.dsf.process.tutorial.TutorialExampleStarter class to create the Task resource needed to start the highmedorg_helloDic process.\",\"Verify that the FHIR Task resource was created at the DSF FHIR server and the highmedorg_helloDic process was executed by the DSF BPE server of the Test_DIC organization. The DSF BPE server of the Test_DIC organization should print a message showing that a Task resource to start the highmedorg_helloCos process was send to the Test_COS organization. Verify that a FHIR Task resource was created at the DSF FHIR server of the Test_COS organization and the highmedorg_helloCos process was then executed by the DSF BPE server of the Test_COS organization.\",\"Continue with .\",\" | | | | Exercise 3 | | \"]},\"364\":{\"h\":\"Exercise 4 - Exclusive Gateways\",\"t\":[\" | | | | | Exercise 4 | \"]},\"365\":{\"h\":\"Exercise 4 - Exclusive Gateways\",\"t\":[\"Different execution paths in a process based on the state of process variables can be achieved using Exclusive Gateways. In Exercise 4 we will examine how this can be implemented by modifying the highmedorg_helloDic process.\"]},\"366\":{\"h\":\"Introduction\"},\"367\":{\"h\":\"Exclusive Gateways\",\"t\":[\"Different sequence flows during the execution of a process instance can be modeled using BPMN Exclusive Gateways. For each outgoing sequence flow of the gateway, a BPMN Condition Expression can be added to the process model, deciding whether a sequence flow should be followed. Thereby, all condition decisions must be in an XOR relationship to each other.\"]},\"368\":{\"h\":\"Condition Expressions\",\"t\":[\"A BPMN Condition Expression uses the ${..} notation. Within the curly braces all execution variables of a process instance can be accessed, e.g. the ones that were stored in a previous Java implementation of a BPMN ServiceTask. For example, the BPMN Condition Expression${cohortSize > 100} checks whether the value in the execution variable cohortSize is greater than 100.\"]},\"369\":{\"h\":\"Storing / Modifying Process Variables\",\"t\":[\"Via the DelegateExecution execution parameter of the doExecute method of a class extending AbstractServiceDelegate, we can write and read process variables of the current process instance. The following code listing show how to write and read a boolean variable:\",\"{ execution.setVariable(\\\"variable-name\\\", Variables.booleanValue(false)); boolean variable = (boolean) execution.getVariable(\\\"variable-name\\\"); } \",\"For more details on process variables see the Camunda documentation.\"]},\"370\":{\"h\":\"Exercise Tasks\",\"t\":[\"In the HelloDic class, write an algorithm deciding based on the \\\"leading\\\" Task's input parameter tutorial-input, whether the highmedorg_helloCos process should be started.\",\"Add a boolean variable to the process instance execution variables storing the decision.\",\"Add an exclusive gateway to the highmedorg_helloDic process model and two outgoing sequence flows - the first starting process highmedorg_helloDic, the second stopping process highmedorg_helloDic without starting process highmedorg_helloCos.\",\"Add a condition expressions to each outgoing sequence flow based on the previously stored execution variable.\"]},\"371\":{\"h\":\"Solution Verification\"},\"372\":{\"h\":\"Maven Build and Automated Tests\",\"t\":[\"Execute a maven build of the dsf-process-tutorial parent module via:\",\"mvn clean install -Pexercise-4 \",\"Verify that the build was successful and no test failures occurred.\"]},\"373\":{\"h\":\"Process Execution and Manual Tests\",\"t\":[\"To verify the highmedorg_helloDic and highmedorg_helloCos processes can be executed successfully, we need to deploy them into DSF instances and execute the highmedorg_helloDic process. The maven install build is configured to create a process jar file with all necessary resources and copy the jar to the appropriate locations of the docker test setup.\",\"Start the DSF FHIR server for the Test_DIC organization in a console at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up dic-fhir \",\"Verify the DSF FHIR server started successfully.\",\"Start the DSF BPE server for the Test_DIC organization in a second console at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up cos-fhir \",\"Verify the DSF FHIR server started successfully.\",\"Start the DSF BPE server for the Test_COS organization in a fourth console at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up cos-bpe \",\"Verify the DSF BPE server started successfully and deployed the highmedorg_helloCos process.\",\"Start the highmedorg_helloDic process by posting a specific FHIR Task resource to the DSF FHIR server of the Test_DIC organization: Execute therefore the main method of the org.highmed.dsf.process.tutorial.TutorialExampleStarter class to create the Task resource needed to start the highmedorg_helloDic process.\",\"Verify that the highmedorg_helloDic process was executed successfully by the Test_DIC DSF BPE server and possibly the highmedorg_helloCos process by the Test_COS DSF BPE server, depending on whether decision of your algorithm based on the input parameter allowed to start the highmedorg_helloDic process.\",\"Continue with \",\" | | | | | Exercise 4 | \"]},\"374\":{\"h\":\"Exercise 5 - Event Based Gateways and Intermediate Events\",\"t\":[\" | | | | | | Exercise 5\"]},\"375\":{\"h\":\"Exercise 5 - Event Based Gateways and Intermediate Events\",\"t\":[\"In the final exercise we will look at message flow between three organizations as well as how to continue a waiting process if no return message arrives. With this exercise we will add a third process and complete a message loop from Test_DIC to Test_COR to Test_HRP back to Test_DIC.\"]},\"376\":{\"h\":\"Introduction\"},\"377\":{\"h\":\"Managing Multiple- and Missing Messages\",\"t\":[\"If an existing and started process instance is waiting for a message from another organization, the corresponding FHIR Task may never arrive. Either because the other organization decides to never send the \\\"message\\\" or because some technical problem prohibits the Task resource from being posted to the DSF FHIR server. This would result in stale process instances that never finish.\",\"In order to solve this problem we can add an Event Based Gateway to the process waiting for a response and then either handle a Task resource with the response and finish the process in a success state or fire of an Intermediate Timer Catch Event after a defined wait period and finish the process in an error state. The following BPMN collaboration diagram shows how the process at the first organization would look like if two different message or no message could be received:\"]},\"378\":{\"h\":\"Timer Events\",\"t\":[\"For Timer Events the duration until the timer fires is specified using the ISO 8601 Durations format. Examples can be found in the Camunda 7 documentation.\"]},\"379\":{\"h\":\"Matching Process Instances With Business Keys\",\"t\":[\"In the example above the first organization is sending a \\\"message\\\" to the second and waiting for a reply. In order to correlate the return message with the waiting process instance, a unique identifier needs to be exchanged between both process instances. Within the DSF this is implemented using the process instance business-key and a corresponding Task.input parameter. For 1:1 communication relationships this is handled by the DSF BPE servers automatically, but the corresponding Task profiles need to define the business-key input parameter as mandatory.\",\"If multiple message are send in a 1:n relationship with a n:1 return an additional correlation-key needs to be configured in order to correlate every bidirectional communication between two DSF instances.\"]},\"380\":{\"h\":\"ActivityDefinitions for the DSF\",\"t\":[\"FHIR ActivityDefinition resources are used to announce what processes can be instantiated at a given DSF instance and contain the authorization rules for the specified process. ActivityDefinition for the DSF need to comply with the http://highmed.org/fhir/StructureDefinition/activity-definition profile, with authorization rules configured using the http://highmed.org/fhir/StructureDefinition/extension-process-authorization extension.\",\"The authorization extension needs to be configured at least once and has four sub extensions:\"]},\"381\":{\"h\":\"message-name [1..1]\",\"t\":[\"String value specifying the message name of Message Start Event, Intermediate Message Catch Event or Message Receive Task this authorization rule should match. Can only be specified once per authorization rule extension.\"]},\"382\":{\"h\":\"task-profile [1..1]\",\"t\":[\"Canonical URL value specifying the Task profile this authorization rule should match. Can only be specified once per authorization rule extension.\"]},\"383\":{\"h\":\"requester [1..]\",\"t\":[\"Coding value matching entries from the http://highmed.org/fhir/ValueSet/process-authorization-requester ValueSet:\",\"LOCAL_ORGANIZATION A local organization with a specific identifier. The organization identifier needs to specified using the http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization extension.\",\"REMOTE_ORGANIZATION A remote (non local) organization with a specific identifier. The organization identifier needs to specified using the http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization extension.\",\"LOCAL_ROLE A local organizations with a specific role defined via OrganizationAffiliation. Role and consortium identifier need to be specified using the http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role extension.\",\"REMOTE_ROLE A remote (non local) organizations with a specific role defined via OrganizationAffiliation. Role and consortium identifier need to be specified using the http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role extension.\",\"LOCAL_ALL All local organizations regardless of their identifier or role in a consortium.\",\"REMOTE_ALL All remote (non local) organizations regardless of their identifier or role in a consortium.\"]},\"384\":{\"h\":\"recipient [1..]\",\"t\":[\"Coding value matching entries from the http://highmed.org/fhir/ValueSet/process-authorization-recipient ValueSet.\",\"LOCAL_ORGANIZATION Organization with a specific identifier. The organization identifier needs to specified using the http://highmed.org/fhir/StructureDefinition/extension-process-authorization-organization extension.\",\"LOCAL_ROLE Organizations with a specific role defined via OrganizationAffiliation. Role and consortium identifier need to be specified using the http://highmed.org/fhir/StructureDefinition/extension-process-authorization-consortium-role extension.\",\"LOCAL_ALL All organizations regardless of their identifier or role in a consortium.\",\"The local organization of a DSF instance is configured using the environment variables ORG_HIGHMED_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE for the DSF FHIR server and ORG_HIGHMED_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE for the DSF BPE server.\"]},\"385\":{\"h\":\"Authorization Extension Example\",\"t\":[\"The following example specifies that process execution can only be requested by a organization with a specific identifier and only allows execution of the process in the DSF instance of an organization with a specific identifier.\",\" \"]},\"386\":{\"h\":\"Exercise Tasks\",\"t\":[\"Modify the HelloCosMessage and use the value from the Task.input parameter of the helloDicTask to send it to the highmedorg_helloCos process via a Task.input parameter in the helloCos Task. Override the getAdditionalInputParameters to configure a Task.input parameter to be send.\",\"Modify the highmedorg_helloCos process to use a Message End Event to trigger the process in file hello-hrp.bpmn. Figure out the values for the instantiatesUri, profile and messageName input parameters of the Message End Event based on the AcitvityDefinition in file hello-hrp.xml.\",\"Modify the highmedorg_helloDic process: \",\"Change the Message End Event to an Intermediate Message Throw Event\",\"Add an Event Based Gateway after the throw event\",\"Configure two cases for the Event Based Gateway: \",\"An Intermediate Message Catch Event to catch the goodbyDic message from the highmedorg_helloHrp process.\",\"An Intermediate Timer Catch Event to end the process if no message is sent by the highmedorg_helloHrp process after two minutes. Make sure both cases finish with a process End Event.\",\"Modify the process in file hello-hrp.bpmn and set the process definition key and version. Figure out the appropriate values based on the AcitvityDefinition in file hello-hrp.xml.\",\"Add the process in file hello-hrp.bpmn to the TutorialProcessPluginDefinition and configure the FHIR resources needed for the three processes.\",\"Add the HelloCos, HelloHrpMessage , HelloHrp and GoodbyeDicMessage classes as spring beans.\"]},\"387\":{\"h\":\"Solution Verification\"},\"388\":{\"h\":\"Maven Build and Automated Tests\",\"t\":[\"Execute a maven build of the dsf-process-tutorial parent module via:\",\"mvn clean install -Pexercise-5 \",\"Verify that the build was successful and no test failures occurred.\"]},\"389\":{\"h\":\"Process Execution and Manual Tests\",\"t\":[\"To verify the highmedorg_helloDic, highmedorg_helloCos and highmedorg_helloHrp processes can be executed successfully, we need to deploy them into DSF instances and execute the highmedorg_helloDic process. The maven install build is configured to create a process jar file with all necessary resources and copy the jar to the appropriate locations of the docker test setup.\",\"Start the DSF FHIR server for the Test_DIC organization in a console at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up dic-fhir \",\"Verify the DSF FHIR server started successfully.\",\"Start the DSF BPE server for the Test_DIC organization in a second console at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up dic-bpe \",\"Verify the DSF BPE server started successfully and deployed the highmedorg_helloDic process.\",\"Start the DSF FHIR server for the Test_COS organization in a third console at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up cos-fhir \",\"Verify the DSF FHIR server started successfully.\",\"Start the DSF BPE server for the Test_COS organization in a fourth console at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up cos-bpe \",\"Verify the DSF BPE server started successfully and deployed the highmedorg_helloDic process.\",\"Start the DSF FHIR server for the Test_HRP organization in a fifth at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up hrp-fhir \",\"Verify the DSF FHIR server started successfully. You can access the webservice of the DSF FHIR server at https://hrp/fhir. The DSF FHIR server uses a server certificate that was generated during the first maven build. To authenticate yourself to the server you can use the client certificate located at .../dsf-process-tutorial/test-data-generator/cert/Webbrowser_Test_User/Webbrowser_Test_User_certificate.p12 (Password: password).\",\"Start the DSF BPE server for the Test_HRP organization in a sixth console at location .../dsf-process-tutorial/test-setup:\",\"docker-compose up hrp-bpe \",\"Verify the DSF BPE server started successfully and deployed the highmedorg_helloHrp process. The DSF BPE server should print a message that the process was deployed. The DSF FHIR server should now have a new ActivityDefinition resource. Go to https://hrp/fhir/ActivityDefinition to check if the expected resource was created by the BPE while deploying the process. The returned FHIR Bundle should contain a three ActivityDefinition resources. Also, go to https://hrp/fhir/StructureDefinition?url=http://highmed.org/fhir/StructureDefinition/task-hello-hrp to check if the expected Task profile was created.\",\"Start the highmedorg_helloDic process by posting a specific FHIR Task resource to the DSF FHIR server of the Test_DIC organization: Execute therefore the main method of the org.highmed.dsf.process.tutorial.TutorialExampleStarter class to create the Task resource needed to start the highmedorg_helloDic process.\",\"Verify that the FHIR Task resource was created at the DSF FHIR server and the highmedorg_helloDic process was executed by the DSF BPE server of the Test_DIC organization. The DSF BPE server of the Test_DIC organization should print a message showing that a Task resource to start the highmedorg_helloCos process was sent to the Test_COS organization. Verify that a FHIR Task resource was created at the DSF FHIR server of the Test_COS organization and the highmedorg_helloCos process was executed by the DSF BPE server of the Test_COS organization. The DSF BPE server of the Test_COS organization should print a message showing that a Task resource to start the highmedorg_helloHrp process was send to the Test_HRP organization.\",\"Based on the value of the Task.input parameter you send, the highmedorg_helloHrp process will either send a goodbyDic message to the Test_DIC organization or finish without sending a message.\",\"To trigger the goodbyDic message, use send-response as the http://highmed.org/fhir/CodeSystem/tutorial#tutorial-input input parameter.\",\"Verify that the highmedorg_helloDic process either finishes with the arrival of the goodbyDic message or after waiting for two minutes.\",\" | | | | | | Exercise 5\"]},\"390\":{\"h\":\"Prerequisites\",\"t\":[\"In order to be able to solve the exercises described in this tutorial a software development environment with git, Java 11, Maven 3.8, Docker, docker-compose, a Java IDE like Eclipse or IntelliJ, a BPMN Editor like the Camunda Modeler a and minimum 16GB of RAM is needed.\"]},\"391\":{\"h\":\"git\",\"t\":[\"git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.\",\"An installation guide for Linux, Mac and Windows can be found here: installation guide\",\"The most basic git CLI commands are described here: commands\"]},\"392\":{\"h\":\"Java 11\",\"t\":[\"Processes for the DSF are written using the Java programming language in version 11. Various open source releases of the Java Developer Kit (JDK) 11 exist, you are free in your choice.\"]},\"393\":{\"h\":\"Maven 3.8\",\"t\":[\"When implementing DSF processes, we use Maven 3.8 to manage the software project's build, reporting and documentation workflow.\",\"An installation guide for Maven 3.8 can be found here: installation guide\",\"The most important maven commands are described here: commands\"]},\"394\":{\"h\":\"GitHub Packages\",\"t\":[\"In order to download DSF packages from the GitHub Package Registry using Maven you need a personal GitHub access token with scope read:packages. This GitHub documentation shows you how to generate one.\",\"After that, add the following server configuration to your local .m2/settings.xml. Replace USERNAME with your GitHub username and TOKEN with the previously generated personal GitHub access token. The token needs at least the read:packages scope.\",\" ... github USERNAME TOKEN \"]},\"395\":{\"h\":\"Docker and docker-compose\",\"t\":[\"To be able to test the implemented processes, we use a test-setup based on Docker and docker-compose. This allows us to simulate multiple organizations with different roles and run the processes across \\\"organizational boundaries\\\".\",\"An installation guide for Docker and docker-compose can be found here: installation guide\",\"The most important Docker commands are described here: Docker commands\",\"An overview of docker-compose commands are described here: docker-compose commands\"]},\"396\":{\"h\":\"Host entries for test-setup\",\"t\":[\"The following entries are required in the hosts file of your computer so that the FHIR servers of the simulated organizations can be accessed in your web browser. On Linux and Mac this file is located at /etc/hosts. On Windows you can find it at C:\\\\Windows\\\\System32\\\\drivers\\\\etc\\\\hosts\",\"127.0.0.1 dic 127.0.0.1 cos 127.0.0.1 hrp \"]},\"397\":{\"h\":\"Java IDE\",\"t\":[\"For the development of the processes we recommend the use of an IDE, e.g. Eclipse or IntelliJ:\",\"An installation guide for Eclipse can be found here: Eclipse installation guide\",\"An installation guide for IntelliJ can be found here: IntelliJ installation guide\"]},\"398\":{\"h\":\"BPMN Editor\",\"t\":[\"To simplify modeling of BPMN processes, we recommend a graphical editor, e.g. the Camunda Modeler:\",\"An installation guide for the Camunda Modeler can be found here: installation guide\"]},\"399\":{\"h\":\"Hardware\",\"t\":[\"The minimum hardware requirements to run all simulated organizations as part of the Docker test-setup is 16 GB of RAM.\",\"Prerequisites | | | | | | \"]},\"400\":{\"h\":\"Contribute code\",\"t\":[\"Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.\"]},\"401\":{\"h\":\"Benefits of Contributing:\",\"t\":[\"Foster community growth and diversification.\",\"Sharpen your coding skills.\",\"Gain recognition in the DSF community.\",\"Directly impact the future of data sharing in medicine.\",\"Start now by visiting our contribution pages. Every line of code helps us build a stronger and more versatile DSF.\"]},\"402\":{\"h\":\"General\"},\"403\":{\"h\":\"Code style\",\"t\":[\"You can import our code style for your specific IDE:\",\"Eclipse. Open your preferences, click on Java, Code style, Formatter, Import and select the downloaded file.\",\"IntelliJ. Open your settings, click on Editor, Code style, Java, the settings icon, import scheme, IntelliJ and select the downloaded file.\",\"Pull requests will only be approved if the code is formatted according to the code style configurations above. To format the code with maven before pushing to GitHub, use mvn compile -Pformat-and-sort.\"]},\"404\":{\"h\":\"Branching strategy\",\"t\":[\"Git Flow is used as this project's branching strategy. Therefore, you will find the following structure:\",\"main\",\"develop\",\"issue\",\"hotfix\",\"release\",\"Notice that only the first two elements listed are actual branches. The other elements are containers to hold all branches belonging to that category.\"]},\"405\":{\"h\":\"Branch naming\",\"t\":[\"The following ruleset is applied to name branches:\",\"issue/_\",\"hotfix/\",\"release/\"]},\"406\":{\"h\":\"Setting up the project\",\"t\":[\"This chapter lists all important requirements to get the project buildable and running properly.\"]},\"407\":{\"h\":\"Java\",\"t\":[\"This project uses Java JDK 17, so make sure you have it installed on your system.\"]},\"408\":{\"h\":\"Docker\",\"t\":[\"Docker is used in this project to test database functionality and to run more complex test-setups.\"]},\"409\":{\"h\":\"Maven\",\"t\":[\"The project relies on Maven as its management tool.Important: When building the project you might encounter the following error:Could not determine gpg versionGPG is used to sign artifacts for public release. Since this does not concern contributors, you may skip this step in the maven build process with -Dgpg.skip.\"]},\"410\":{\"h\":\"Workflow\",\"t\":[\"Create an issue or comment on an issue that you want to contribute some feature\",\"Fork the repository, create a branch and mention it in the issue\",\"If you desire feedback, create a pull request or comment on it in the issue. Feel free to @ any member with write permissions if you feel like your request has not been registered yet. They will review your changes and/or change requests\",\"If your changes are production-ready, create a pull request.\"]},\"411\":{\"h\":\"Pull request process\",\"t\":[\"We follow Martin Fowler's method for managing pull requests. This approach categorizes pull requests based on the level of trust and experience of the contributor, as well as the impact of the changes. Here's how we apply it:\",\"Ship: For our most trusted contributors with a proven track record. These members can merge their pull requests without prior review, typically for minor or highly confident changes.\",\"Show: This level is for trusted contributors who need some oversight, as well as for experienced developers who want to demonstrate how certain changes should be made in the future. They create pull requests and show their work to the team.\",\"Ask: New or less experienced contributors, as well as those submitting more complex changes, fall into this category. They are required to ask for feedback and approval before their changes can be merged, ensuring thorough review and quality control.\",\"This method helps us maintain a balance between code quality and efficient development, recognizing the varying levels of expertise among our contributors.\",\"For more information on Fowler's approach, visit Martin Fowler's article on Pull Requests.\"]},\"412\":{\"h\":\"Data Security in DSF Development\",\"t\":[\"The DSF (Data Sharing Framework) and its process plugins are frequently used to transmit sensitive personal data. To prevent the release of personal data during development, please adhere to the following guidelines:\",\"No development with real personal data: Always use anonymized or synthetic data for development purposes.\",\"No personal data in repositories: Ensure no personal data is present in local and remote repositories intended for publication, not even temporarily.\",\"Review all log files: Before using log files in issues, examples, etc., thoroughly review them to ensure no personal and sensitive data is included.\"]},\"413\":{\"h\":\"Contribute documentation\",\"t\":[\"Join us in enhancing our documentation!\",\"We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!\",\"Contact us with feedback: If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.\",\"Create an issue: You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at Data Sharing Framework Documentation and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.\",\"Contribute directly with a pull request: If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at Data Sharing Framework Documentation and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.\",\"We're excited to see your suggestions and are grateful for every contribution that helps us improve. Let's build better documentation together!\"]},\"414\":{\"h\":\"Contribute\",\"t\":[\"We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.\"]},\"415\":{\"h\":\"\",\"t\":[\"Helping other users: \",\"MII Zulip: If you are part of the German Medical Informatics Initiative, join the MII Zulip community to assist others, share your knowledge, and learn from fellow contributors.\",\"GitHub Discussions: Engage with our community in GitHub Discussions by answering questions, providing feedback, and sharing your insights.\",\"Testing releases: \",\"Stay ahead: Help us testing the latest releases. Your feedback on functionality, bugs, and user experience is invaluable.\",\"Report findings: Share your testing results to help us refine and enhance our releases.\",\"Reviewing changes: \",\"Peer review: Contribute by reviewing pull requests. Your insights can help ensure the quality and integrity of code changes.\",\"Constructive feedback: Offer constructive feedback and suggestions to help improve and refine proposed changes.\",\"Documentation changes: \",\"Improve documentation: Help us improving and updating our documentation. Clear and accurate documentation is crucial for user understanding and success. Please checkout our Getting started guide for documentation contributions to DSF.\",\"Suggest improvements: If you notice gaps or areas for enhancement in our documentation, we welcome your suggestions and contributions.\",\"Contributing bug reports: \",\"Report bugs: If you find a bug, please report it via an issue on GitHub. Detailed bug reports are incredibly helpful.\",\"Reproduction steps: Include steps to reproduce the bug and any relevant logs according to our bug report issue template.\",\"Contributing feature requests: \",\"Suggest features: You have an idea for a new feature? We'd love to hear it! Open an issue to describe your proposed feature and its potential benefits according to our feature request template.\",\"Collaborate on implementation: If you're able to, contribute to the development of your proposed feature or bug fix. Collaboration can lead to more innovative and effective solutions. Please checkout our Getting started guide for code contributions to DSF.\",\"Contributing process plugins: \",\"Develop process plugins for the DSF: If you have ideas for a process plugin, we encourage you to develop and contribute them. Our Getting started guide for process plugin development will be a useful reference.\",\"Share your work: Your plugins could be a valuable addition to the ecosystem and benefit other users.\",\"Before you start contributing, we recommend reading our getting started guidelines for detailed information on our processes and standards. This ensures a smooth and productive experience for everyone involved.\",\"Your contributions in any form, are what drives the continuous growth and improvement of this project. Thank you for being a part of our community and for your willingness to contribute!\"]},\"416\":{\"h\":\"Develop Process Plugins\"},\"417\":{\"h\":\"Overview\",\"t\":[\"Create a new process plugin\",\"Upgrade processes from 0.9.x\"]},\"418\":{\"h\":\"Create a new process plugin\",\"t\":[\"Visit the page to get started.\",\"Work in progress\",\"We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the . Additionally, we recommend to take a look at the upgraded DSF processes here:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"419\":{\"h\":\"Upgrade processes from 0.9.x\",\"t\":[\"Work in progress\",\"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"420\":{\"h\":\"Maintain a DSF instance\"},\"421\":{\"h\":\"Overview\",\"t\":[\"Install DSF 1.5.2\",\"Upgrade from DSF 0.9.x\",\"Allow List Management\",\"FHIR Reverse Proxy \",\"Configuration Parameters\",\"FHIR Server \",\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\",\"BPE Reverse Proxy \",\"Configuration Parameters\",\"BPE Server \",\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\"]},\"422\":{\"h\":\"Allow List Management\",\"t\":[\"You can read all about the concept of Allow Lists .\"]},\"423\":{\"h\":\"Overview\",\"t\":[\"To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.\",\"The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.\"]},\"424\":{\"h\":\"Prerequisites\",\"t\":[\"Deployed DSF instance (test or production infrastructure) 1.1 If none exists yet, read the installation guide\",\"Certificate 2.1 If none exists yet, read the certificate requirements\",\"Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de\",\"FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir\",\"Contact details from a responsible person of your organization\",\"Access to the E-Mail address from your organization for verification\"]},\"425\":{\"h\":\"Start here\",\"t\":[\"When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:\",\"Test infrastructure\",\"Production infrastructure\",\"We use different highlight colors for the DSF Allow List Management Tool: Green for the Test environment and blue for the Production infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"426\":{\"h\":\"Install Plugins\",\"t\":[\"Marketplace for process plugins\",\"To install and learn more about each Process Plugin, you can visit the Marketplace here.\"]},\"427\":{\"h\":\"\",\"t\":[\"You can find an overview of compatable process plugins below (last updated 25/07/2024).\",\"Process Plugin\",\"released for test\",\"released for production\",\"Ping-Pong\",\"v1.0.1.0\",\"v1.0.1.0\",\"Allow-List\",\"v1.0.0.1\",\"v1.0.0.1\",\"MII Process Feasibility\",\"v1.0.0.5\",\"v1.0.0.5\",\"MII Process Report\",\"v1.1.0.1\",\"v1.0.0.0\",\"MII Process Data Transfer\",\"v1.0.0.1\",\"v1.0.0.1\",\"MII Process Data Sharing\",\"v1.0.1.0\",\"v1.0.1.0\",\"NUM-RDP\",\"v1.1.0.0\",\"v1.1.0.0\",\"Explore and install Process Plugins in the Marketplace. Details on each plugin are available here.\",\"Deploying the process plugin to the DSF involves copy the process jar-file and configuring environment variable for the business process engine (BPE).\"]},\"428\":{\"h\":\"Prerequisites\",\"t\":[\"A DSF installation of version 1.3.x or higher. An installation guide can be found here.\"]},\"429\":{\"h\":\"Deployment\",\"t\":[\"Add the process jar-file to the DSF BPE folder /opt/bpe/process:\",\"wget (your jar-file download link) \",\"For example:\",\" wget https://github.com/medizininformatik-initiative/mii-process-data-sharing/releases/download/v1.0.0.1/mii-process-data-sharing-1.0.0.1.jar \",\"Make sure the process is readable by the bpe user or group, for example by executing:\",\"sudo chmod 440 (your jar-file name.jar) sudo chown root:bpe (your jar-file name.jar) \",\"For example:\",\"sudo chmod 440 mii-process-data-sharing-1.0.0.1.jar sudo chown root:bpe mii-process-data-sharing-1.0.0.1.jar \",\"Modify the process exclude config in /opt/bpe/docker-compose.yml\",\"Reminder: Update/verify required configurations in docker-compose.yml\"]},\"430\":{\"h\":\"Install DSF 1.5.2\",\"t\":[\"In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.\",\"Unified installation manual\",\"The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.\"]},\"431\":{\"h\":\"Prerequisites\"},\"432\":{\"h\":\"Virtual Machines\",\"t\":[\"DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\",\"DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\"]},\"433\":{\"h\":\"Docker / Docker-Compose\",\"t\":[\"Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/install.\",\"sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \\\"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\\\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo systemctl enable docker.service sudo systemctl enable containerd.service \",\"The current version of docker compose is installed with the current docker version.\"]},\"434\":{\"h\":\"Client/Server Certificates\",\"t\":[\"Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:\",\"Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)\",\"Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)\",\"If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.\"]},\"435\":{\"h\":\"Network setup / Network access\",\"t\":[\"The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.\",\"The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.\",\"Here is a quick overview of the expected network setup.\",\"Source\",\"Target\",\"Port\",\"Protocol\",\"DSF BPE (local)\",\"DSF FHIR (local)\",\"443\",\"https, wss\",\"DSF BPE (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https\",\"DSF FHIR (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https (HTTP HEAD only)\",\"DSF BPE (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https\",\"DSF FHIR (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https (HTTP HEAD only)\",\"Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.net or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.\"]},\"436\":{\"h\":\"Setup\"},\"437\":{\"h\":\"Prepare Certificates\",\"t\":[\"Server Certificate (certificate A)This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)\",\"Store PEM encoded certificate as ssl_certificate_file.pem\",\"Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem\",\"Client Certificate (Certificate B)This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)\",\"Store PEM encoded certificate as client_certificate.pem\",\"Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem\"]},\"438\":{\"h\":\"DSF FHIR Server\",\"t\":[\"Add Group/User Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:\",\"sudo groupadd --gid 2101 fhir sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir \",\"Download and Extract Config Files Download and unpack the prepared DSF FHIR server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_fhir_1_5_2.tar.gz sudo tar --same-owner -zxvf dsf_fhir_1_5_2.tar.gz \",\"The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.\",\"Verify that the fhir system user or group can write into the following folder\",\"/opt/fhir/log\",\"Add certificates and keys\",\"Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/\",\"ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)\",\"ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/\",\"client_certificate.pem (chmod: 440, chown: fhir:docker)\",\"client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L39: - app_client_certificate_private_key.pem.password ... L54: DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L141: app_client_certificate_private_key.pem.password: L142: file: ./secrets/client_certificate_private_key.pem.password \",\"How to chmod / chown\",\"For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:\",\"Set the file content as requested\",\"Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem\",\"Change the owner of the file to the user fhir and the group the file belongs to to docker:chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem\",\"Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA\",\"L114: ssl_certificate_chain_file.pem: L115: file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem \",\"Modify database passwords\",\"/opt/fhir/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user_permanent_delete.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> proxy -> environment:\",\"HTTPS_SERVER_NAME_PORT: TODO_DSF_FHIR_SERVER_EXTERNAL_FQDN:443 Set your FHIR servers external FQDN, e.g. foo.bar.de -> foo.bar.de:443\",\"For additional environment variables, see DSF configuration parameters - FHIR Reverse Proxy\",\"services -> app -> environment:\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de\",\"DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B) Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.\",\"DEV_DSF_FHIR_SERVER_ROLECONFIG: | (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.\",\"For additional environment variables, see FHIR server Configuration Parameters page.\",\"Start the DSF FHIR Server Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\"]},\"439\":{\"h\":\"DSF BPE Server\",\"t\":[\"Add Group/User Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:\",\"sudo groupadd --gid 2202 bpe sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe \",\"Download and Extract Config Files Download and extract prepared DSF BPE server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_bpe_1_5_2.tar.gz sudo tar --same-owner -zxvf dsf_bpe_1_5_2.tar.gz \",\"The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.\",\"Verify that the bpe system user or group can write into the following folders\",\"/opt/bpe/log\",\"Add certificates and keys\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/\",\"client_certificate.pem (chmod: 440 chown: bpe:docker)\",\"client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L13: - app_client_certificate_private_key.pem.password ... L35: DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L89: app_client_certificate_private_key.pem.password: L90: file: ./secrets/client_certificate_private_key.pem.password \",\"Modify database passwords\",\"/opt/bpe/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user_camunda.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> app -> environment:\",\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"For additional environment variables, see the BPE server Configuration Parameters page.\",\"Start the DSF BPE Server (without process plugins) Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\",\"Verify DSF BPE Startup\",\"Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.\",\"Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.\",\"Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.\",\"If you need to debug the TLS connection to your DSF FHIR server use for example:docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443 The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]\"]},\"440\":{\"h\":\"Logs\",\"t\":[\"By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.\",\"On a successful BPE start, you should see the following entries in your BPE log:\",\"INFO Grizzly(1) - INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket open, session SOME_RANDOM_UUID1 INFO Grizzly(1) - INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket open, session SOME_RANDOM_UUID2 \"]},\"441\":{\"h\":\"On-Boarding\",\"t\":[\"Please visit the on boarding website of your network for more information.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"442\":{\"h\":\"Upgrade from DSF 0.9.x\",\"t\":[\"A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.\",\"Do not use your 0.9.x configuration as starting point\",\"There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.\",\"Please use the new installation manual to perform a new installation and use the old setup only for reference.\",\"Instead, please perform the following steps:\",\"Shut down your DSF instances (DSF FHIR Server and DSF BPE).\",\"Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)\",\"Install the new DSF according to the instructions.\",\"You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).\",\"Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).\",\"If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).\",\"If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.\",\"New process plugins\",\"Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.\",\"Use your old virtual machine\",\"We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.\"]},\"443\":{\"h\":\"Upgrade from DSF 1.5.1\",\"t\":[\"Upgrading the DSF from 1.5.1 to 1.5.2 involves modifying the docker-compose.yml files and recreating the containers.\",\"Update to DSF 1.2.0 first\",\"When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.\"]},\"444\":{\"h\":\"Modify DSF FHIR Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.5.2_upgrade\",\"Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.5.2.\",\"version: '3.8' services: proxy: - image: ghcr.io/datasharingframework/fhir_proxy:1.5.1 + image: ghcr.io/datasharingframework/fhir_proxy:1.5.2 restart: on-failure ... app: - image: ghcr.io/datasharingframework/fhir:1.5.1 + image: ghcr.io/datasharingframework/fhir:1.5.2 restart: on-failure ... \",\"Upgrade the DSF FHIR containers From /opt/fhir execute\",\"docker compose up -d && docker compose logs -f \"]},\"445\":{\"h\":\"Modify DSF BPE Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.5.2_upgrade\",\"Modify the DSF BPE docker-compose.yml file, replace the version number with 1.5.2.\",\"version: '3.8' services: app: - image: ghcr.io/datasharingframework/bpe:1.5.1 + image: ghcr.io/datasharingframework/bpe:1.5.2 restart: on-failure ... \",\"Upgrade the DSF BPE containers From /opt/bpe execute\",\"docker compose up -d && docker compose logs -f \",\"Verify your upgrade:\",\"Verify the DSF FHIR server is running in version 1.5.2. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.5.2, [...]\",\"Verify the DSF FHIR server started without errors\",\"Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/ (authentication with your client-certificate)\",\"Verify the DSF BPE server is running in version 1.5.2. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.5.2, [...]\",\"Verify the DSF BPE server started without errors\",\"Verify your install with a ping/pong test\"]},\"446\":{\"h\":\"Develop Process Plugins\"},\"447\":{\"h\":\"Overview\",\"t\":[\"Create a new process plugin\",\"Upgrade processes from 0.9.x\"]},\"448\":{\"h\":\"Create a new process plugin\",\"t\":[\"Work in progress\",\"We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the . Additionally, we recommend to take a look at the upgraded DSF processes here:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"449\":{\"h\":\"Upgrade processes from 0.9.x\",\"t\":[\"Work in progress\",\"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"450\":{\"h\":\"Maintain a DSF instance\"},\"451\":{\"h\":\"Overview\",\"t\":[\"Install DSF 1.0.0\",\"Upgrade from DSF 0.9.x\",\"Allow List Management\"]},\"452\":{\"h\":\"Allow List Management\",\"t\":[\"Caution\",\"This is an outdated version of the Allow List Management documentation. Please use the current version, even if you use an outdated DSF version.\",\"You can read all about the concept of Allow Lists .\"]},\"453\":{\"h\":\"Overview\",\"t\":[\"To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the Gecko Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.\",\"The DSF Allow List management tool uses client certificates for authentication. You can either use your personal client certificate or the client certificate from your DSF BPE, which needs to be added to your webbrowser. For instructions on how to add a client certificate to your browser, please follow here. Currently, the Allow List Management Tool is only for DSF TEST infrastructure. For production, please write us an E-Mail with your information.\"]},\"454\":{\"h\":\"Prerequisites\",\"t\":[\"Deployed DSF instance (test infrastructure) 1.1 If none exists yet, read here\",\"Certificate 2.1 If none exists yet, read here\",\"Organization identifier (FQDN of your organization, e.g. hs-heilbronn.de)\",\"FHIR Endpoint URL (e.g. https://gth.gecko.hs-heilbronn.de/fhir )\",\"Contact details from a responsible person of your organization\",\"Access to the E-Mail address from your organization for verification\"]},\"455\":{\"h\":\"Start here\",\"t\":[\"When you have fulfilled all the prerequisites, you can start managing your Allow Lists on the DSF Allow List Management Tool. At the beginning, a popup will appear where you have to select your certificate. Only then you will have access to the website.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"456\":{\"h\":\"Install DSF 1.0.0\",\"t\":[\"Member of existing networks\",\"If you are part of an existing network (e.g. the German MII), please install the appropriate DSF version. For the production environment of MII and NUM this is currently DSF 0.9.x.\",\"In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.\",\"Unified installation manual\",\"The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.\"]},\"457\":{\"h\":\"Prerequisites\"},\"458\":{\"h\":\"Virtual Machines\",\"t\":[\"DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\",\"DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\"]},\"459\":{\"h\":\"Docker / Docker-Compose\",\"t\":[\"Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/install.\",\"sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \\\"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\\\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo systemctl enable docker.service sudo systemctl enable containerd.service \",\"The current version of docker compose is installed with the current docker version.\"]},\"460\":{\"h\":\"Client/Server Certificates\",\"t\":[\"Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:\",\"Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)\",\"Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)\",\"If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.\"]},\"461\":{\"h\":\"Network setup / Network access\",\"t\":[\"The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.\",\"The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.\",\"Here is a quick overview of the expected network setup.\",\"Source\",\"Target\",\"Port\",\"Protocol\",\"DSF BPE (local)\",\"DSF FHIR (local)\",\"443\",\"https, wss\",\"DSF BPE (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https\",\"DSF FHIR (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https (HTTP HEAD only)\",\"DSF BPE (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https\",\"DSF FHIR (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https (HTTP HEAD only)\",\"Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.net or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.\"]},\"462\":{\"h\":\"Setup\"},\"463\":{\"h\":\"Prepare Certificates\",\"t\":[\"Server Certificate (certificate A)This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)\",\"Store PEM encoded certificate as ssl_certificate_file.pem\",\"Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem\",\"Client Certificate (Certificate B)This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)\",\"Store PEM encoded certificate as client_certificate.pem\",\"Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem\"]},\"464\":{\"h\":\"DSF FHIR Server\",\"t\":[\"Add Group/User Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:\",\"sudo addgroup --gid 2101 fhir sudo adduser --system --no-create-home --uid 2101 --gid 2101 fhir \",\"Download and Extract Config Files Download and unpack the prepared DSF FHIR server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_fhir_1_0_0.tar.gz sudo tar --same-owner -zxvf dsf_fhir_1_0_0.tar.gz \",\"The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.\",\"Verify that the fhir system user or group can write into the following folder\",\"/opt/fhir/log\",\"Add certificates and keys\",\"Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/\",\"ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)\",\"ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/\",\"client_certificate.pem (chmod: 440, chown: fhir:docker)\",\"client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L44: - app_client_certificate_private_key.pem.password ... L59: DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L149: app_client_certificate_private_key.pem.password: L150: file: ./secrets/client_certificate_private_key.pem.password \",\"How to chmod / chown\",\"For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:\",\"Set the file content as requested\",\"Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem\",\"Change the owner of the file to the user fhir and the group the file belongs to to docker:chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem\",\"Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA\",\"L114: ssl_certificate_chain_file.pem: L115: file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem \",\"Modify database passwords\",\"/opt/fhir/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user_permanent_delete.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> proxy -> environment:\",\"HTTPS_SERVER_NAME_PORT: TODO_DSF_FHIR_SERVER_EXTERNAL_FQDN:443 Set your FHIR servers external FQDN, e.g. foo.bar.de -> foo.bar.de:443\",\"For additional environment variables, see DSF configuration parameters - FHIR Reverse Proxy\",\"services -> app -> environment:\",\"DEV_DSF_FHIR_SERVER_BASE_URL: https://TODO_DSF_FHIR_SERVER_EXTERNAL_FQDN/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: TODO_CLIENT_CERTIFICATE_THUMBPRINT Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B) Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.\",\"DEV_DSF_FHIR_SERVER_ROLECONFIG: You can add other client certificates (e.g. personal DFN PKI S/MIME certificates, e.g. from admins) to your DSF instance. Set the SHA-512 Hash (lowercase hex) of your additional client certificates. The parameter TODO_WEBUSER_CLIENT_CERTIFICATE_THUMBPRINT can be a single thumbprint or can be expanded to a list (like dsf-role). If you don't have additional thumbprints you want to add, simply remove the DEV_DSF_FHIR_SERVER_ROLECONFIG variable from your docker-compose file.\",\"For additional environment variables, see DSF configuration parameters - FHIR Server\",\"Start the DSF FHIR Server Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\"]},\"465\":{\"h\":\"DSF BPE Server\",\"t\":[\"Add Group/User Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:\",\"sudo addgroup --gid 2202 bpe sudo adduser --system --no-create-home --uid 2202 --gid 2202 bpe \",\"Download and Extract Config Files Download and extract prepared DSF BPE server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_bpe_1_0_0.tar.gz sudo tar --same-owner -zxvf dsf_bpe_1_0_0.tar.gz \",\"The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.\",\"Verify that the bpe system user or group can write into the following folders\",\"/opt/bpe/log\",\"Add certificates and keys\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/\",\"client_certificate.pem (chmod: 440 chown: bpe:docker)\",\"client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L18: - app_client_certificate_private_key.pem.password ... L40: DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L89: app_client_certificate_private_key.pem.password: L90: file: ./secrets/client_certificate_private_key.pem.password \",\"Modify database passwords\",\"/opt/bpe/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user_camunda.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> app -> environment:\",\"DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER Set your Organizations DSF identifier, aka the shortest FQDN that resolves the main homepage of the organization, e.g. hs-heilbronn.de\",\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://TODO_DSF_FHIR_SERVER_FQDN/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"For additional environment variables, see DSF configuration parameters - BPE Server\",\"Start the DSF BPE Server (without process plugins) Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\",\"Verify DSF BPE Startup\",\"Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.\",\"Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.\",\"Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.\",\"If you need to debug the TLS connection to your DSF FHIR server use for example:docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443 The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]\"]},\"466\":{\"h\":\"Logs\",\"t\":[\"By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.\",\"On a successful BPE start, you should see the following entries in your BPE log:\",\"INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1} INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2} \"]},\"467\":{\"h\":\"On-Boarding\",\"t\":[\"Please visit the on boarding website of your network for more information.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"468\":{\"h\":\"Upgrade from DSF 0.9.x\",\"t\":[\"Do not upgrade unless prompted!\",\"Please do not upgrade your DSF installation from DSF 0.9.x to DSF 1.x unless prompted to do so (e.g. from the German MII).\",\"A direct upgrade from DSF 0.9.x to DSF 1.x is not supported. Instead, please perform the following steps:\",\"shut down your DSF instances (DSF FHIR Server and DSF BPE).\",\"backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)\",\"install the new DSF according to the instructions.\",\"New process plugins\",\"Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.\"]},\"469\":{\"h\":\"Develop Process Plugins\"},\"470\":{\"h\":\"Overview\",\"t\":[\"Create a new process plugin\",\"Upgrade processes from 0.9.x\"]},\"471\":{\"h\":\"Create a new process plugin\",\"t\":[\"Work in progress\",\"We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the . Additionally, we recommend to take a look at the upgraded DSF processes here:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"472\":{\"h\":\"Upgrade processes from 0.9.x\",\"t\":[\"Work in progress\",\"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"473\":{\"h\":\"Maintain a DSF instance\"},\"474\":{\"h\":\"Overview\",\"t\":[\"Install DSF 1.1.0\",\"Upgrade from DSF 0.9.x\",\"Allow List Management\",\"FHIR Reverse Proxy \",\"Configuration Parameters\",\"FHIR Server \",\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\",\"BPE Server \",\"Configuration Parameters\"]},\"475\":{\"h\":\"Allow List Management\",\"t\":[\"Caution\",\"This is an outdated version of the Allow List Management documentation. Please use the current version, even if you use an outdated DSF version.\",\"You can read all about the concept of Allow Lists .\"]},\"476\":{\"h\":\"Overview\",\"t\":[\"To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the Gecko Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.\",\"The DSF Allow List management tool uses client certificates for authentication. You can either use your personal client certificate or the client certificate from your DSF BPE, which needs to be added to your webbrowser. For instructions on how to add a client certificate to your browser, please follow here. Currently, the Allow List Management Tool is only for DSF TEST infrastructure. For production, please write us an E-Mail with your information.\"]},\"477\":{\"h\":\"Prerequisites\",\"t\":[\"Deployed DSF instance (test infrastructure) 1.1 If none exists yet, read here\",\"Certificate 2.1 If none exists yet, read here\",\"Organization identifier (FQDN of your organization website, e.g. hs-heilbronn.de)\",\"FHIR Endpoint URL (e.g. https://gth.gecko.hs-heilbronn.de/fhir )\",\"Contact details from a responsible person of your organization\",\"Access to the E-Mail address from your organization for verification\"]},\"478\":{\"h\":\"Start here\",\"t\":[\"When you have fulfilled all the prerequisites, you can start managing your Allow Lists on the DSF Allow List Management Tool. At the beginning, a popup will appear where you have to select your certificate. Only then you will have access to the website.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"479\":{\"h\":\"Install DSF 1.1.0\",\"t\":[\"Member of existing networks\",\"If you are part of an existing network (e.g. the German MII), please install the appropriate DSF version. For the production environment of MII and NUM this is currently DSF 0.9.x.\",\"In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.\",\"Unified installation manual\",\"The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.\"]},\"480\":{\"h\":\"Prerequisites\"},\"481\":{\"h\":\"Virtual Machines\",\"t\":[\"DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\",\"DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\"]},\"482\":{\"h\":\"Docker / Docker-Compose\",\"t\":[\"Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/install.\",\"sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \\\"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\\\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo systemctl enable docker.service sudo systemctl enable containerd.service \",\"The current version of docker compose is installed with the current docker version.\"]},\"483\":{\"h\":\"Client/Server Certificates\",\"t\":[\"Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:\",\"Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)\",\"Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)\",\"If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.\"]},\"484\":{\"h\":\"Network setup / Network access\",\"t\":[\"The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.\",\"The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.\",\"Here is a quick overview of the expected network setup.\",\"Source\",\"Target\",\"Port\",\"Protocol\",\"DSF BPE (local)\",\"DSF FHIR (local)\",\"443\",\"https, wss\",\"DSF BPE (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https\",\"DSF FHIR (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https (HTTP HEAD only)\",\"DSF BPE (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https\",\"DSF FHIR (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https (HTTP HEAD only)\",\"Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.net or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.\"]},\"485\":{\"h\":\"Setup\"},\"486\":{\"h\":\"Prepare Certificates\",\"t\":[\"Server Certificate (certificate A)This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)\",\"Store PEM encoded certificate as ssl_certificate_file.pem\",\"Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem\",\"Client Certificate (Certificate B)This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)\",\"Store PEM encoded certificate as client_certificate.pem\",\"Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem\"]},\"487\":{\"h\":\"DSF FHIR Server\",\"t\":[\"Add Group/User Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:\",\"sudo addgroup --gid 2101 fhir sudo adduser --system --no-create-home --uid 2101 --gid 2101 fhir \",\"Download and Extract Config Files Download and unpack the prepared DSF FHIR server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_fhir_1_1_0.tar.gz sudo tar --same-owner -zxvf dsf_fhir_1_1_0.tar.gz \",\"The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.\",\"Verify that the fhir system user or group can write into the following folder\",\"/opt/fhir/log\",\"Add certificates and keys\",\"Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/\",\"ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)\",\"ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/\",\"client_certificate.pem (chmod: 440, chown: fhir:docker)\",\"client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L44: - app_client_certificate_private_key.pem.password ... L59: DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L146: app_client_certificate_private_key.pem.password: L147: file: ./secrets/client_certificate_private_key.pem.password \",\"How to chmod / chown\",\"For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:\",\"Set the file content as requested\",\"Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem\",\"Change the owner of the file to the user fhir and the group the file belongs to to docker:chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem\",\"Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA\",\"L114: ssl_certificate_chain_file.pem: L115: file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem \",\"Modify database passwords\",\"/opt/fhir/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user_permanent_delete.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> proxy -> environment:\",\"HTTPS_SERVER_NAME_PORT: TODO_DSF_FHIR_SERVER_EXTERNAL_FQDN:443 Set your FHIR servers external FQDN, e.g. foo.bar.de -> foo.bar.de:443\",\"For additional environment variables, see DSF configuration parameters - FHIR Reverse Proxy\",\"services -> app -> environment:\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de\",\"DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B) Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.\",\"DEV_DSF_FHIR_SERVER_ROLECONFIG: | You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.\",\"For additional environment variables, see FHIR server Configuration Parameters page.\",\"Start the DSF FHIR Server Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\"]},\"488\":{\"h\":\"DSF BPE Server\",\"t\":[\"Add Group/User Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:\",\"sudo addgroup --gid 2202 bpe sudo adduser --system --no-create-home --uid 2202 --gid 2202 bpe \",\"Download and Extract Config Files Download and extract prepared DSF BPE server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_bpe_1_1_0.tar.gz sudo tar --same-owner -zxvf dsf_bpe_1_1_0.tar.gz \",\"The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.\",\"Verify that the bpe system user or group can write into the following folders\",\"/opt/bpe/log\",\"Add certificates and keys\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/\",\"client_certificate.pem (chmod: 440 chown: bpe:docker)\",\"client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L18: - app_client_certificate_private_key.pem.password ... L40: DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L97: app_client_certificate_private_key.pem.password: L98: file: ./secrets/client_certificate_private_key.pem.password \",\"Modify database passwords\",\"/opt/bpe/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user_camunda.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> app -> environment:\",\"DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com Set your Organizations DSF identifier, aka the shortest FQDN that resolves the main homepage of the organization, e.g. hs-heilbronn.de\",\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"For additional environment variables, see the BPE server Configuration Parameters page.\",\"Start the DSF BPE Server (without process plugins) Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\",\"Verify DSF BPE Startup\",\"Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.\",\"Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.\",\"Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.\",\"If you need to debug the TLS connection to your DSF FHIR server use for example:docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443 The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]\"]},\"489\":{\"h\":\"Logs\",\"t\":[\"By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.\",\"On a successful BPE start, you should see the following entries in your BPE log:\",\"INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1} INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2} \"]},\"490\":{\"h\":\"On-Boarding\",\"t\":[\"Please visit the on boarding website of your network for more information.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"491\":{\"h\":\"Upgrade from DSF 0.9.x\",\"t\":[\"Do not upgrade unless prompted!\",\"Please do not upgrade your DSF installation from DSF 0.9.x to DSF 1.x unless prompted to do so (e.g. from the German MII).\",\"A direct upgrade from DSF 0.9.x to DSF 1.x is not supported. Instead, please perform the following steps:\",\"shut down your DSF instances (DSF FHIR Server and DSF BPE).\",\"backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)\",\"install the new DSF according to the instructions.\",\"New process plugins\",\"Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.\"]},\"492\":{\"h\":\"Upgrade from DSF 1.x\",\"t\":[\"Upgrading the DSF from 1.0.0 to 1.1.0 involves modifying the docker-compose.yml files and recreating the containers.\",\"Upgrade from 0.9.x\",\"If you want to migrate from DSF 0.9.x, please follow these instructions.\"]},\"493\":{\"h\":\"Modify DSF FHIR Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.1.0_upgrade\",\"Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.1.0\",\"version: '3.8' services: proxy: - image: ghcr.io/datasharingframework/fhir_proxy:1.0.0 + image: ghcr.io/datasharingframework/fhir_proxy:1.1.0 restart: on-failure ... app: - image: ghcr.io/datasharingframework/fhir:1.0.0 + image: ghcr.io/datasharingframework/fhir:1.1.0 restart: on-failure ... \",\"Upgrade the DSF FHIR containers From /opt/fhir execute\",\"docker compose up -d && docker compose logs -f \"]},\"494\":{\"h\":\"Modify DSF BPE Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.1.0_upgrade\",\"Modify the DSF BPE docker-compose.yml file, replace the version number with 1.1.0\",\"version: '3.8' services: app: - image: ghcr.io/datasharingframework/bpe:1.0.0 + image: ghcr.io/datasharingframework/bpe:1.1.0 restart: on-failure ... \",\"Upgrade the DSF BPE containers From /opt/bpe execute\",\"docker compose up -d && docker compose logs -f \",\"Verify your upgrade:\",\"Verify the DSF FHIR server is running in version 1.1.0. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.1.0, [...]\",\"Verify the DSF FHIR server started without errors\",\"Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/ (authentication with your client-certificate)\",\"Verify the DSF BPE server is running in version 1.1.0. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.1.0, [...]\",\"Verify the DSF BPE server started without errors\",\"Verify your install with a ping/pong test\"]},\"495\":{\"h\":\"Develop Process Plugins\"},\"496\":{\"h\":\"Overview\",\"t\":[\"Create a new process plugin\",\"Upgrade processes from 0.9.x\"]},\"497\":{\"h\":\"Create a new process plugin\",\"t\":[\"Work in progress\",\"We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the . Additionally, we recommend to take a look at the upgraded DSF processes here:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"498\":{\"h\":\"Upgrade processes from 0.9.x\",\"t\":[\"Work in progress\",\"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"499\":{\"h\":\"Maintain a DSF instance\"},\"500\":{\"h\":\"Overview\",\"t\":[\"Install DSF 1.2.0\",\"Upgrade from DSF 0.9.x\",\"Allow List Management\",\"FHIR Reverse Proxy \",\"Configuration Parameters\",\"FHIR Server \",\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\",\"BPE Server \",\"Configuration Parameters\"]},\"501\":{\"h\":\"Allow List Management\",\"t\":[\"Caution\",\"This is an outdated version of the Allow List Management documentation. Please use the current version, even if you use an outdated DSF version.\",\"You can read all about the concept of Allow Lists .\"]},\"502\":{\"h\":\"Overview\",\"t\":[\"To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the Gecko Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.\",\"The DSF Allow List management tool uses client certificates for authentication. You can either use your personal client certificate or the client certificate from your DSF BPE, which needs to be added to your webbrowser. For instructions on how to add a client certificate to your browser, please follow here. Currently, the Allow List Management Tool is only for DSF TEST infrastructure. For production, please write us an E-Mail with your information.\"]},\"503\":{\"h\":\"Prerequisites\",\"t\":[\"Deployed DSF instance (test infrastructure) 1.1 If none exists yet, read here\",\"Certificate 2.1 If none exists yet, read here\",\"Organization identifier (FQDN of your organization website, e.g. hs-heilbronn.de)\",\"FHIR Endpoint URL (e.g. https://gth.gecko.hs-heilbronn.de/fhir )\",\"Contact details from a responsible person of your organization\",\"Access to the E-Mail address from your organization for verification\"]},\"504\":{\"h\":\"Start here\",\"t\":[\"When you have fulfilled all the prerequisites, you can start managing your Allow Lists on the DSF Allow List Management Tool. At the beginning, a popup will appear where you have to select your certificate. Only then you will have access to the website.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"505\":{\"h\":\"Install DSF 1.2.0\",\"t\":[\"Member of existing networks\",\"If you are part of an existing network (e.g. the German MII), please install the appropriate DSF version. For the production environment of MII and NUM this is currently DSF 0.9.x.\",\"In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.\",\"Unified installation manual\",\"The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.\"]},\"506\":{\"h\":\"Prerequisites\"},\"507\":{\"h\":\"Virtual Machines\",\"t\":[\"DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\",\"DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\"]},\"508\":{\"h\":\"Docker / Docker-Compose\",\"t\":[\"Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/install.\",\"sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \\\"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\\\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo systemctl enable docker.service sudo systemctl enable containerd.service \",\"The current version of docker compose is installed with the current docker version.\"]},\"509\":{\"h\":\"Client/Server Certificates\",\"t\":[\"Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:\",\"Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)\",\"Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)\",\"If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.\"]},\"510\":{\"h\":\"Network setup / Network access\",\"t\":[\"The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.\",\"The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.\",\"Here is a quick overview of the expected network setup.\",\"Source\",\"Target\",\"Port\",\"Protocol\",\"DSF BPE (local)\",\"DSF FHIR (local)\",\"443\",\"https, wss\",\"DSF BPE (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https\",\"DSF FHIR (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https (HTTP HEAD only)\",\"DSF BPE (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https\",\"DSF FHIR (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https (HTTP HEAD only)\",\"Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.net or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.\"]},\"511\":{\"h\":\"Setup\"},\"512\":{\"h\":\"Prepare Certificates\",\"t\":[\"Server Certificate (certificate A)This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)\",\"Store PEM encoded certificate as ssl_certificate_file.pem\",\"Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem\",\"Client Certificate (Certificate B)This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)\",\"Store PEM encoded certificate as client_certificate.pem\",\"Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem\"]},\"513\":{\"h\":\"DSF FHIR Server\",\"t\":[\"Add Group/User Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:\",\"sudo groupadd --gid 2101 fhir sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir \",\"Download and Extract Config Files Download and unpack the prepared DSF FHIR server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_fhir_1_2_0.tar.gz sudo tar --same-owner -zxvf dsf_fhir_1_2_0.tar.gz \",\"The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.\",\"Verify that the fhir system user or group can write into the following folder\",\"/opt/fhir/log\",\"Add certificates and keys\",\"Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/\",\"ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)\",\"ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/\",\"client_certificate.pem (chmod: 440, chown: fhir:docker)\",\"client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L44: - app_client_certificate_private_key.pem.password ... L59: DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L146: app_client_certificate_private_key.pem.password: L147: file: ./secrets/client_certificate_private_key.pem.password \",\"How to chmod / chown\",\"For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:\",\"Set the file content as requested\",\"Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem\",\"Change the owner of the file to the user fhir and the group the file belongs to to docker:chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem\",\"Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA\",\"L114: ssl_certificate_chain_file.pem: L115: file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem \",\"Modify database passwords\",\"/opt/fhir/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user_permanent_delete.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> proxy -> environment:\",\"HTTPS_SERVER_NAME_PORT: TODO_DSF_FHIR_SERVER_EXTERNAL_FQDN:443 Set your FHIR servers external FQDN, e.g. foo.bar.de -> foo.bar.de:443\",\"For additional environment variables, see DSF configuration parameters - FHIR Reverse Proxy\",\"services -> app -> environment:\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de\",\"DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B) Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.\",\"DEV_DSF_FHIR_SERVER_ROLECONFIG: | (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.\",\"For additional environment variables, see FHIR server Configuration Parameters page.\",\"Start the DSF FHIR Server Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\"]},\"514\":{\"h\":\"DSF BPE Server\",\"t\":[\"Add Group/User Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:\",\"sudo groupadd --gid 2202 bpe sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe \",\"Download and Extract Config Files Download and extract prepared DSF BPE server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_bpe_1_2_0.tar.gz sudo tar --same-owner -zxvf dsf_bpe_1_2_0.tar.gz \",\"The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.\",\"Verify that the bpe system user or group can write into the following folders\",\"/opt/bpe/log\",\"Add certificates and keys\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/\",\"client_certificate.pem (chmod: 440 chown: bpe:docker)\",\"client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L18: - app_client_certificate_private_key.pem.password ... L40: DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L97: app_client_certificate_private_key.pem.password: L98: file: ./secrets/client_certificate_private_key.pem.password \",\"Modify database passwords\",\"/opt/bpe/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user_camunda.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> app -> environment:\",\"DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com Set your Organizations DSF identifier, aka the shortest FQDN that resolves the main homepage of the organization, e.g. hs-heilbronn.de\",\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"For additional environment variables, see the BPE server Configuration Parameters page.\",\"Start the DSF BPE Server (without process plugins) Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\",\"Verify DSF BPE Startup\",\"Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.\",\"Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.\",\"Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.\",\"If you need to debug the TLS connection to your DSF FHIR server use for example:docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443 The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]\"]},\"515\":{\"h\":\"Logs\",\"t\":[\"By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.\",\"On a successful BPE start, you should see the following entries in your BPE log:\",\"INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1} INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2} \"]},\"516\":{\"h\":\"On-Boarding\",\"t\":[\"Please visit the on boarding website of your network for more information.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"517\":{\"h\":\"Upgrade from DSF 0.9.x\",\"t\":[\"Do not upgrade unless prompted!\",\"Please do not upgrade your DSF installation from DSF 0.9.x to DSF 1.x unless prompted to do so (e.g. from the German MII).\",\"A direct upgrade from DSF 0.9.x to DSF 1.x is not supported. Instead, please perform the following steps:\",\"shut down your DSF instances (DSF FHIR Server and DSF BPE).\",\"backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)\",\"install the new DSF according to the instructions.\",\"New process plugins\",\"Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.\"]},\"518\":{\"h\":\"Upgrade from DSF 1.1.0\",\"t\":[\"Upgrading the DSF from 1.1.0 to 1.2.0 involves modifying the docker-compose.yml files and recreating the containers.\",\"Upgrade from 0.9.x\",\"If you want to migrate from DSF 0.9.x, please follow these instructions.\"]},\"519\":{\"h\":\"Modify DSF FHIR Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.2.0_upgrade\",\"Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.2.0 and remove the old healthcheck definition. The new healthcheck is defined as part of the docker image.\",\"version: '3.8' services: proxy: - image: ghcr.io/datasharingframework/fhir_proxy:1.1.0 + image: ghcr.io/datasharingframework/fhir_proxy:1.2.0 restart: on-failure ... app: - image: ghcr.io/datasharingframework/fhir:1.1.0 + image: ghcr.io/datasharingframework/fhir:1.2.0 restart: on-failure - healthcheck: - test: [\\\"CMD\\\", \\\"java\\\", \\\"-cp\\\", \\\"dsf_fhir.jar\\\", \\\"dev.dsf.common.status.client.StatusClient\\\"] - interval: 10s - timeout: 15s - retries: 5 ... \",\"The role configuration is now optional. If you don't use roles, you can remove the role config (default for new installations):\",\" app: ... environment: ... - # TODO specify role configuration to allow access to the UI via web-browser or REST API for specific users, see documentation at dsf.dev - DEV_DSF_FHIR_SERVER_ROLECONFIG: | \",\"Upgrade the DSF FHIR containers From /opt/fhir execute\",\"docker compose up -d && docker compose logs -f \"]},\"520\":{\"h\":\"Modify DSF BPE Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.2.0_upgrade\",\"Modify the DSF BPE docker-compose.yml file, replace the version number with 1.2.0 and remove the old healthcheck definition. The new healthcheck is defined as part of the docker image.\",\"version: '3.8' services: app: - image: ghcr.io/datasharingframework/bpe:1.1.0 + image: ghcr.io/datasharingframework/bpe:1.2.0 restart: on-failure - healthcheck: - test: [\\\"CMD\\\", \\\"java\\\", \\\"-cp\\\", \\\"dsf_bpe.jar\\\", \\\"dev.dsf.common.status.client.StatusClient\\\"] - interval: 10s - timeout: 15s - retries: 5 ... \",\"DSF v1.2.0 is not compatible with the Ping/Pong process plugin v1.0.0.0, upgrade to the Ping/Pong plugin v1.0.1.0 by removing the old jar file and replacing it with the new v1.0.1.0 one.\",\"We have released a new version of the Allow List Process plugin where we added support for delete operations. Please upgrade to the Allow-List process v1.0.0.1 by removing the old jar file and replacing it with the new v1.0.0.1 one.\",\"Upgrade the DSF BPE containers From /opt/bpe execute\",\"docker compose up -d && docker compose logs -f \",\"Verify your upgrade:\",\"Verify the DSF FHIR server is running in version 1.2.0. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.2.0, [...]\",\"Verify the DSF FHIR server started without errors\",\"Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/ (authentication with your client-certificate)\",\"Verify the DSF BPE server is running in version 1.2.0. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.2.0, [...]\",\"Verify the DSF BPE server started without errors\",\"Verify your install with a ping/pong test\"]},\"521\":{\"h\":\"Develop Process Plugins\"},\"522\":{\"h\":\"Overview\",\"t\":[\"Create a new process plugin\",\"Upgrade processes from 0.9.x\"]},\"523\":{\"h\":\"Create a new process plugin\",\"t\":[\"Work in progress\",\"We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the . Additionally, we recommend to take a look at the upgraded DSF processes here:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"524\":{\"h\":\"Upgrade processes from 0.9.x\",\"t\":[\"Work in progress\",\"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"525\":{\"h\":\"Maintain a DSF instance\"},\"526\":{\"h\":\"Overview\",\"t\":[\"Install DSF 1.3.0\",\"Upgrade from DSF 0.9.x\",\"Allow List Management\",\"FHIR Reverse Proxy \",\"Configuration Parameters\",\"FHIR Server \",\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\",\"BPE Server \",\"Configuration Parameters\"]},\"527\":{\"h\":\"Allow List Management\",\"t\":[\"You can read all about the concept of Allow Lists .\"]},\"528\":{\"h\":\"Overview\",\"t\":[\"To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the Gecko Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.\",\"The DSF Allow List management tool uses client certificates for authentication. You can either use your personal client certificate or the client certificate from your DSF BPE, which needs to be added to your webbrowser. For instructions on how to add a client certificate to your browser, please follow here.\"]},\"529\":{\"h\":\"Prerequisites\",\"t\":[\"Deployed DSF instance (test or production infrastructure) 1.1 If none exists yet, read the installation guide\",\"Certificate 2.1 If none exists yet, read the certificate requirements\",\"Organization identifier (FQDN of your organization website, e.g. hs-heilbronn.de)\",\"FHIR Endpoint URL (e.g. https://gth.gecko.hs-heilbronn.de/fhir )\",\"Contact details from a responsible person of your organization\",\"Access to the E-Mail address from your organization for verification\"]},\"530\":{\"h\":\"Start here\",\"t\":[\"When you have fulfilled all the prerequisites, you can start managing your Allow Lists respective Allow List Management Tool.\",\"Click here to open the DSF Allow List Management Tool for the Test infrastructure.\",\"Click here to open the DSF Allow List Management Tool for the Production infrastructure.\",\"We use different colors for the DSF Allow List Management Tools in the Test (green) and Production (blue) infastructure.\",\"At the beginning, a popup will appear where you have to select your certificate. Only then you will have access to the website.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"531\":{\"h\":\"Install Plugins\",\"t\":[\"You can find an overview of compatable process plugins below.\"]},\"532\":{\"h\":\"Common processes\",\"t\":[\"Ping-Pong: https://github.com/datasharingframework/dsf-process-ping-pong/releases\",\"AllowList Download: https://github.com/datasharingframework/dsf-process-allow-list/releases\"]},\"533\":{\"h\":\"MII processes\",\"t\":[\"Feasibility: https://github.com/medizininformatik-initiative/feasibility-dsf-process/releases\",\"KDS-Report: https://github.com/medizininformatik-initiative/mii-process-report/releases\"]},\"534\":{\"h\":\"NUM processes\",\"t\":[\"NUM-RDP: https://github.com/num-codex/codex-processes-ap1/releases\"]},\"535\":{\"h\":\"Install DSF 1.3.0\",\"t\":[\"In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.\",\"Unified installation manual\",\"The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.\"]},\"536\":{\"h\":\"Prerequisites\"},\"537\":{\"h\":\"Virtual Machines\",\"t\":[\"DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\",\"DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\"]},\"538\":{\"h\":\"Docker / Docker-Compose\",\"t\":[\"Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/install.\",\"sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \\\"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\\\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo systemctl enable docker.service sudo systemctl enable containerd.service \",\"The current version of docker compose is installed with the current docker version.\"]},\"539\":{\"h\":\"Client/Server Certificates\",\"t\":[\"Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:\",\"Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)\",\"Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)\",\"If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.\"]},\"540\":{\"h\":\"Network setup / Network access\",\"t\":[\"The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.\",\"The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.\",\"Here is a quick overview of the expected network setup.\",\"Source\",\"Target\",\"Port\",\"Protocol\",\"DSF BPE (local)\",\"DSF FHIR (local)\",\"443\",\"https, wss\",\"DSF BPE (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https\",\"DSF FHIR (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https (HTTP HEAD only)\",\"DSF BPE (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https\",\"DSF FHIR (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https (HTTP HEAD only)\",\"Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.net or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.\"]},\"541\":{\"h\":\"Setup\"},\"542\":{\"h\":\"Prepare Certificates\",\"t\":[\"Server Certificate (certificate A)This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)\",\"Store PEM encoded certificate as ssl_certificate_file.pem\",\"Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem\",\"Client Certificate (Certificate B)This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)\",\"Store PEM encoded certificate as client_certificate.pem\",\"Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem\"]},\"543\":{\"h\":\"DSF FHIR Server\",\"t\":[\"Add Group/User Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:\",\"sudo groupadd --gid 2101 fhir sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir \",\"Download and Extract Config Files Download and unpack the prepared DSF FHIR server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_fhir_1_3_0.tar.gz sudo tar --same-owner -zxvf dsf_fhir_1_3_0.tar.gz \",\"The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.\",\"Verify that the fhir system user or group can write into the following folder\",\"/opt/fhir/log\",\"Add certificates and keys\",\"Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/\",\"ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)\",\"ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/\",\"client_certificate.pem (chmod: 440, chown: fhir:docker)\",\"client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L44: - app_client_certificate_private_key.pem.password ... L59: DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L146: app_client_certificate_private_key.pem.password: L147: file: ./secrets/client_certificate_private_key.pem.password \",\"How to chmod / chown\",\"For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:\",\"Set the file content as requested\",\"Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem\",\"Change the owner of the file to the user fhir and the group the file belongs to to docker:chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem\",\"Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA\",\"L114: ssl_certificate_chain_file.pem: L115: file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem \",\"Modify database passwords\",\"/opt/fhir/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user_permanent_delete.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> proxy -> environment:\",\"HTTPS_SERVER_NAME_PORT: TODO_DSF_FHIR_SERVER_EXTERNAL_FQDN:443 Set your FHIR servers external FQDN, e.g. foo.bar.de -> foo.bar.de:443\",\"For additional environment variables, see DSF configuration parameters - FHIR Reverse Proxy\",\"services -> app -> environment:\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de\",\"DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B) Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.\",\"DEV_DSF_FHIR_SERVER_ROLECONFIG: | (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.\",\"For additional environment variables, see FHIR server Configuration Parameters page.\",\"Start the DSF FHIR Server Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\"]},\"544\":{\"h\":\"DSF BPE Server\",\"t\":[\"Add Group/User Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:\",\"sudo groupadd --gid 2202 bpe sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe \",\"Download and Extract Config Files Download and extract prepared DSF BPE server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_bpe_1_3_0.tar.gz sudo tar --same-owner -zxvf dsf_bpe_1_3_0.tar.gz \",\"The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.\",\"Verify that the bpe system user or group can write into the following folders\",\"/opt/bpe/log\",\"Add certificates and keys\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/\",\"client_certificate.pem (chmod: 440 chown: bpe:docker)\",\"client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L18: - app_client_certificate_private_key.pem.password ... L40: DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L97: app_client_certificate_private_key.pem.password: L98: file: ./secrets/client_certificate_private_key.pem.password \",\"Modify database passwords\",\"/opt/bpe/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user_camunda.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> app -> environment:\",\"DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com Set your Organizations DSF identifier, aka the shortest FQDN that resolves the main homepage of the organization, e.g. hs-heilbronn.de\",\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"For additional environment variables, see the BPE server Configuration Parameters page.\",\"Start the DSF BPE Server (without process plugins) Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\",\"Verify DSF BPE Startup\",\"Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.\",\"Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.\",\"Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.\",\"If you need to debug the TLS connection to your DSF FHIR server use for example:docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443 The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]\"]},\"545\":{\"h\":\"Logs\",\"t\":[\"By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.\",\"On a successful BPE start, you should see the following entries in your BPE log:\",\"INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1} INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2} \"]},\"546\":{\"h\":\"On-Boarding\",\"t\":[\"Please visit the on boarding website of your network for more information.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"547\":{\"h\":\"Upgrade from DSF 0.9.x\",\"t\":[\"A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.\",\"Do not use your 0.9.x configuration as starting point\",\"There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.\",\"Please use the new installation manual to perform a new installation and use the old setup only for reference.\",\"Instead, please perform the following steps:\",\"Shut down your DSF instances (DSF FHIR Server and DSF BPE).\",\"Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)\",\"Install the new DSF according to the instructions.\",\"You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).\",\"Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).\",\"If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).\",\"If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.\",\"New process plugins\",\"Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.\",\"Use your old virtual machine\",\"We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.\"]},\"548\":{\"h\":\"Upgrade from DSF 1.2.0\",\"t\":[\"Upgrading the DSF from 1.2.0 to 1.3.0 involves modifying the docker-compose.yml files and recreating the containers.\",\"Upgrade from 0.9.x\",\"If you want to migrate from DSF 0.9.x, please follow these instructions.\",\"Update to DSF 1.2.0 first\",\"When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.\"]},\"549\":{\"h\":\"Modify DSF FHIR Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.3.0_upgrade\",\"Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.3.0.\",\"version: '3.8' services: proxy: - image: ghcr.io/datasharingframework/fhir_proxy:1.2.0 + image: ghcr.io/datasharingframework/fhir_proxy:1.3.0 restart: on-failure ... app: - image: ghcr.io/datasharingframework/fhir:1.2.0 + image: ghcr.io/datasharingframework/fhir:1.3.0 restart: on-failure ... \",\"Upgrade the DSF FHIR containers From /opt/fhir execute\",\"docker compose up -d && docker compose logs -f \"]},\"550\":{\"h\":\"Modify DSF BPE Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.3.0_upgrade\",\"Modify the DSF BPE docker-compose.yml file, replace the version number with 1.3.0.\",\"version: '3.8' services: app: - image: ghcr.io/datasharingframework/bpe:1.2.0 + image: ghcr.io/datasharingframework/bpe:1.3.0 restart: on-failure ... \",\"Upgrade the DSF BPE containers From /opt/bpe execute\",\"docker compose up -d && docker compose logs -f \",\"Verify your upgrade:\",\"Verify the DSF FHIR server is running in version 1.3.0. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.3.0, [...]\",\"Verify the DSF FHIR server started without errors\",\"Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/ (authentication with your client-certificate)\",\"Verify the DSF BPE server is running in version 1.3.0. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.3.0, [...]\",\"Verify the DSF BPE server started without errors\",\"Verify your install with a ping/pong test\"]},\"551\":{\"h\":\"Develop Process Plugins\"},\"552\":{\"h\":\"Overview\",\"t\":[\"Create a new process plugin\",\"Upgrade processes from 0.9.x\"]},\"553\":{\"h\":\"Create a new process plugin\",\"t\":[\"Work in progress\",\"We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the . Additionally, we recommend to take a look at the upgraded DSF processes here:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"554\":{\"h\":\"Upgrade processes from 0.9.x\",\"t\":[\"Work in progress\",\"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"555\":{\"h\":\"Maintain a DSF instance\"},\"556\":{\"h\":\"Overview\",\"t\":[\"Install DSF 1.3.1\",\"Upgrade from DSF 0.9.x\",\"Allow List Management\",\"FHIR Reverse Proxy \",\"Configuration Parameters\",\"FHIR Server \",\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\",\"BPE Server \",\"Configuration Parameters\"]},\"557\":{\"h\":\"Allow List Management\",\"t\":[\"You can read all about the concept of Allow Lists .\"]},\"558\":{\"h\":\"Overview\",\"t\":[\"To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.\",\"The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.\"]},\"559\":{\"h\":\"Prerequisites\",\"t\":[\"Deployed DSF instance (test or production infrastructure) 1.1 If none exists yet, read the installation guide\",\"Certificate 2.1 If none exists yet, read the certificate requirements\",\"Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de\",\"FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir\",\"Contact details from a responsible person of your organization\",\"Access to the E-Mail address from your organization for verification\"]},\"560\":{\"h\":\"Start here\",\"t\":[\"When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:\",\"Test infrastructure\",\"Production infrastructure\",\"We use different highlight colors for the DSF Allow List Management Tool: Green for the Test environment and blue for the Production infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"561\":{\"h\":\"Install Plugins\",\"t\":[\"You can find an overview of compatable process plugins below.\"]},\"562\":{\"h\":\"Common processes\",\"t\":[\"Ping-Pong: https://github.com/datasharingframework/dsf-process-ping-pong/releases\",\"AllowList Download: https://github.com/datasharingframework/dsf-process-allow-list/releases\"]},\"563\":{\"h\":\"MII processes\",\"t\":[\"Feasibility: https://github.com/medizininformatik-initiative/feasibility-dsf-process/releases\",\"KDS-Report: https://github.com/medizininformatik-initiative/mii-process-report/releases\"]},\"564\":{\"h\":\"NUM processes\",\"t\":[\"NUM-RDP: https://github.com/num-codex/codex-processes-ap1/releases\"]},\"565\":{\"h\":\"Install DSF 1.3.1\",\"t\":[\"In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.\",\"Unified installation manual\",\"The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.\"]},\"566\":{\"h\":\"Prerequisites\"},\"567\":{\"h\":\"Virtual Machines\",\"t\":[\"DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\",\"DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\"]},\"568\":{\"h\":\"Docker / Docker-Compose\",\"t\":[\"Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/install.\",\"sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \\\"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\\\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo systemctl enable docker.service sudo systemctl enable containerd.service \",\"The current version of docker compose is installed with the current docker version.\"]},\"569\":{\"h\":\"Client/Server Certificates\",\"t\":[\"Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:\",\"Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)\",\"Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)\",\"If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.\"]},\"570\":{\"h\":\"Network setup / Network access\",\"t\":[\"The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.\",\"The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.\",\"Here is a quick overview of the expected network setup.\",\"Source\",\"Target\",\"Port\",\"Protocol\",\"DSF BPE (local)\",\"DSF FHIR (local)\",\"443\",\"https, wss\",\"DSF BPE (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https\",\"DSF FHIR (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https (HTTP HEAD only)\",\"DSF BPE (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https\",\"DSF FHIR (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https (HTTP HEAD only)\",\"Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.net or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.\"]},\"571\":{\"h\":\"Setup\"},\"572\":{\"h\":\"Prepare Certificates\",\"t\":[\"Server Certificate (certificate A)This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)\",\"Store PEM encoded certificate as ssl_certificate_file.pem\",\"Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem\",\"Client Certificate (Certificate B)This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)\",\"Store PEM encoded certificate as client_certificate.pem\",\"Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem\"]},\"573\":{\"h\":\"DSF FHIR Server\",\"t\":[\"Add Group/User Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:\",\"sudo groupadd --gid 2101 fhir sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir \",\"Download and Extract Config Files Download and unpack the prepared DSF FHIR server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_fhir_1_3_1.tar.gz sudo tar --same-owner -zxvf dsf_fhir_1_3_1.tar.gz \",\"The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.\",\"Verify that the fhir system user or group can write into the following folder\",\"/opt/fhir/log\",\"Add certificates and keys\",\"Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/\",\"ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)\",\"ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/\",\"client_certificate.pem (chmod: 440, chown: fhir:docker)\",\"client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L39: - app_client_certificate_private_key.pem.password ... L54: DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L141: app_client_certificate_private_key.pem.password: L142: file: ./secrets/client_certificate_private_key.pem.password \",\"How to chmod / chown\",\"For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:\",\"Set the file content as requested\",\"Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem\",\"Change the owner of the file to the user fhir and the group the file belongs to to docker:chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem\",\"Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA\",\"L114: ssl_certificate_chain_file.pem: L115: file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem \",\"Modify database passwords\",\"/opt/fhir/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user_permanent_delete.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> proxy -> environment:\",\"HTTPS_SERVER_NAME_PORT: TODO_DSF_FHIR_SERVER_EXTERNAL_FQDN:443 Set your FHIR servers external FQDN, e.g. foo.bar.de -> foo.bar.de:443\",\"For additional environment variables, see DSF configuration parameters - FHIR Reverse Proxy\",\"services -> app -> environment:\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de\",\"DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B) Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.\",\"DEV_DSF_FHIR_SERVER_ROLECONFIG: | (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.\",\"For additional environment variables, see FHIR server Configuration Parameters page.\",\"Start the DSF FHIR Server Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\"]},\"574\":{\"h\":\"DSF BPE Server\",\"t\":[\"Add Group/User Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:\",\"sudo groupadd --gid 2202 bpe sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe \",\"Download and Extract Config Files Download and extract prepared DSF BPE server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_bpe_1_3_1.tar.gz sudo tar --same-owner -zxvf dsf_bpe_1_3_1.tar.gz \",\"The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.\",\"Verify that the bpe system user or group can write into the following folders\",\"/opt/bpe/log\",\"Add certificates and keys\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/\",\"client_certificate.pem (chmod: 440 chown: bpe:docker)\",\"client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L13: - app_client_certificate_private_key.pem.password ... L35: DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L89: app_client_certificate_private_key.pem.password: L90: file: ./secrets/client_certificate_private_key.pem.password \",\"Modify database passwords\",\"/opt/bpe/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user_camunda.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> app -> environment:\",\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"For additional environment variables, see the BPE server Configuration Parameters page.\",\"Start the DSF BPE Server (without process plugins) Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\",\"Verify DSF BPE Startup\",\"Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.\",\"Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.\",\"Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.\",\"If you need to debug the TLS connection to your DSF FHIR server use for example:docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443 The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]\"]},\"575\":{\"h\":\"Logs\",\"t\":[\"By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.\",\"On a successful BPE start, you should see the following entries in your BPE log:\",\"INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1} INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2} \"]},\"576\":{\"h\":\"On-Boarding\",\"t\":[\"Please visit the on boarding website of your network for more information.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"577\":{\"h\":\"Upgrade from DSF 0.9.x\",\"t\":[\"A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.\",\"Do not use your 0.9.x configuration as starting point\",\"There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.\",\"Please use the new installation manual to perform a new installation and use the old setup only for reference.\",\"Instead, please perform the following steps:\",\"Shut down your DSF instances (DSF FHIR Server and DSF BPE).\",\"Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)\",\"Install the new DSF according to the instructions.\",\"You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).\",\"Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).\",\"If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).\",\"If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.\",\"New process plugins\",\"Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.\",\"Use your old virtual machine\",\"We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.\"]},\"578\":{\"h\":\"Upgrade from DSF 1.3.0\",\"t\":[\"Upgrading the DSF from 1.3.0 to 1.3.1 involves modifying the docker-compose.yml files and recreating the containers.\",\"Update to DSF 1.2.0 first\",\"When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.\"]},\"579\":{\"h\":\"Modify DSF FHIR Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.3.1_upgrade\",\"Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.3.1.\",\"version: '3.8' services: proxy: - image: ghcr.io/datasharingframework/fhir_proxy:1.3.0 + image: ghcr.io/datasharingframework/fhir_proxy:1.3.1 restart: on-failure ... app: - image: ghcr.io/datasharingframework/fhir:1.3.0 + image: ghcr.io/datasharingframework/fhir:1.3.1 restart: on-failure ... \",\"Upgrade the DSF FHIR containers From /opt/fhir execute\",\"docker compose up -d && docker compose logs -f \"]},\"580\":{\"h\":\"Modify DSF BPE Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.3.1_upgrade\",\"Modify the DSF BPE docker-compose.yml file, replace the version number with 1.3.1.\",\"version: '3.8' services: app: - image: ghcr.io/datasharingframework/bpe:1.3.0 + image: ghcr.io/datasharingframework/bpe:1.3.1 restart: on-failure ... \",\"Upgrade the DSF BPE containers From /opt/bpe execute\",\"docker compose up -d && docker compose logs -f \",\"Verify your upgrade:\",\"Verify the DSF FHIR server is running in version 1.3.1. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.3.1, [...]\",\"Verify the DSF FHIR server started without errors\",\"Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/ (authentication with your client-certificate)\",\"Verify the DSF BPE server is running in version 1.3.1. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.3.1, [...]\",\"Verify the DSF BPE server started without errors\",\"Verify your install with a ping/pong test\"]},\"581\":{\"h\":\"Develop Process Plugins\"},\"582\":{\"h\":\"Overview\",\"t\":[\"Create a new process plugin\",\"Upgrade processes from 0.9.x\"]},\"583\":{\"h\":\"Create a new process plugin\",\"t\":[\"Work in progress\",\"We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the . Additionally, we recommend to take a look at the upgraded DSF processes here:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"584\":{\"h\":\"Upgrade processes from 0.9.x\",\"t\":[\"Work in progress\",\"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"585\":{\"h\":\"Maintain a DSF instance\"},\"586\":{\"h\":\"Overview\",\"t\":[\"Install DSF 1.3.1\",\"Upgrade from DSF 0.9.x\",\"Allow List Management\",\"FHIR Reverse Proxy \",\"Configuration Parameters\",\"FHIR Server \",\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\",\"BPE Server \",\"Configuration Parameters\"]},\"587\":{\"h\":\"Allow List Management\",\"t\":[\"You can read all about the concept of Allow Lists .\"]},\"588\":{\"h\":\"Overview\",\"t\":[\"To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.\",\"The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.\"]},\"589\":{\"h\":\"Prerequisites\",\"t\":[\"Deployed DSF instance (test or production infrastructure) 1.1 If none exists yet, read the installation guide\",\"Certificate 2.1 If none exists yet, read the certificate requirements\",\"Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de\",\"FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir\",\"Contact details from a responsible person of your organization\",\"Access to the E-Mail address from your organization for verification\"]},\"590\":{\"h\":\"Start here\",\"t\":[\"When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:\",\"Test infrastructure\",\"Production infrastructure\",\"We use different highlight colors for the DSF Allow List Management Tool: Green for the Test environment and blue for the Production infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"591\":{\"h\":\"Install Plugins\",\"t\":[\"You can find an overview of compatable process plugins below.\"]},\"592\":{\"h\":\"Common processes\",\"t\":[\"Ping-Pong: https://github.com/datasharingframework/dsf-process-ping-pong/releases\",\"AllowList Download: https://github.com/datasharingframework/dsf-process-allow-list/releases\"]},\"593\":{\"h\":\"MII processes\",\"t\":[\"Feasibility: https://github.com/medizininformatik-initiative/feasibility-dsf-process/releases\",\"KDS-Report: https://github.com/medizininformatik-initiative/mii-process-report/releases\",\"MII-Data-Transfer: https://github.com/medizininformatik-initiative/mii-process-data-transfer/releases\"]},\"594\":{\"h\":\"NUM processes\",\"t\":[\"NUM-RDP: https://github.com/num-codex/codex-processes-ap1/releases\"]},\"595\":{\"h\":\"Install DSF 1.3.2\",\"t\":[\"In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.\",\"Unified installation manual\",\"The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.\"]},\"596\":{\"h\":\"Prerequisites\"},\"597\":{\"h\":\"Virtual Machines\",\"t\":[\"DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\",\"DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\"]},\"598\":{\"h\":\"Docker / Docker-Compose\",\"t\":[\"Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/install.\",\"sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \\\"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\\\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo systemctl enable docker.service sudo systemctl enable containerd.service \",\"The current version of docker compose is installed with the current docker version.\"]},\"599\":{\"h\":\"Client/Server Certificates\",\"t\":[\"Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:\",\"Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)\",\"Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)\",\"If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.\"]},\"600\":{\"h\":\"Network setup / Network access\",\"t\":[\"The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.\",\"The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.\",\"Here is a quick overview of the expected network setup.\",\"Source\",\"Target\",\"Port\",\"Protocol\",\"DSF BPE (local)\",\"DSF FHIR (local)\",\"443\",\"https, wss\",\"DSF BPE (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https\",\"DSF FHIR (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https (HTTP HEAD only)\",\"DSF BPE (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https\",\"DSF FHIR (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https (HTTP HEAD only)\",\"Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.net or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.\"]},\"601\":{\"h\":\"Setup\"},\"602\":{\"h\":\"Prepare Certificates\",\"t\":[\"Server Certificate (certificate A)This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)\",\"Store PEM encoded certificate as ssl_certificate_file.pem\",\"Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem\",\"Client Certificate (Certificate B)This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)\",\"Store PEM encoded certificate as client_certificate.pem\",\"Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem\"]},\"603\":{\"h\":\"DSF FHIR Server\",\"t\":[\"Add Group/User Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:\",\"sudo groupadd --gid 2101 fhir sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir \",\"Download and Extract Config Files Download and unpack the prepared DSF FHIR server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_fhir_1_3_2.tar.gz sudo tar --same-owner -zxvf dsf_fhir_1_3_2.tar.gz \",\"The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.\",\"Verify that the fhir system user or group can write into the following folder\",\"/opt/fhir/log\",\"Add certificates and keys\",\"Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/\",\"ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)\",\"ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/\",\"client_certificate.pem (chmod: 440, chown: fhir:docker)\",\"client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L39: - app_client_certificate_private_key.pem.password ... L54: DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L141: app_client_certificate_private_key.pem.password: L142: file: ./secrets/client_certificate_private_key.pem.password \",\"How to chmod / chown\",\"For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:\",\"Set the file content as requested\",\"Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem\",\"Change the owner of the file to the user fhir and the group the file belongs to to docker:chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem\",\"Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA\",\"L114: ssl_certificate_chain_file.pem: L115: file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem \",\"Modify database passwords\",\"/opt/fhir/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user_permanent_delete.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> proxy -> environment:\",\"HTTPS_SERVER_NAME_PORT: TODO_DSF_FHIR_SERVER_EXTERNAL_FQDN:443 Set your FHIR servers external FQDN, e.g. foo.bar.de -> foo.bar.de:443\",\"For additional environment variables, see DSF configuration parameters - FHIR Reverse Proxy\",\"services -> app -> environment:\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de\",\"DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B) Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.\",\"DEV_DSF_FHIR_SERVER_ROLECONFIG: | (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.\",\"For additional environment variables, see FHIR server Configuration Parameters page.\",\"Start the DSF FHIR Server Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\"]},\"604\":{\"h\":\"DSF BPE Server\",\"t\":[\"Add Group/User Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:\",\"sudo groupadd --gid 2202 bpe sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe \",\"Download and Extract Config Files Download and extract prepared DSF BPE server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_bpe_1_3_2.tar.gz sudo tar --same-owner -zxvf dsf_bpe_1_3_2.tar.gz \",\"The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.\",\"Verify that the bpe system user or group can write into the following folders\",\"/opt/bpe/log\",\"Add certificates and keys\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/\",\"client_certificate.pem (chmod: 440 chown: bpe:docker)\",\"client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L13: - app_client_certificate_private_key.pem.password ... L35: DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L89: app_client_certificate_private_key.pem.password: L90: file: ./secrets/client_certificate_private_key.pem.password \",\"Modify database passwords\",\"/opt/bpe/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user_camunda.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> app -> environment:\",\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"For additional environment variables, see the BPE server Configuration Parameters page.\",\"Start the DSF BPE Server (without process plugins) Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\",\"Verify DSF BPE Startup\",\"Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.\",\"Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.\",\"Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.\",\"If you need to debug the TLS connection to your DSF FHIR server use for example:docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443 The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]\"]},\"605\":{\"h\":\"Logs\",\"t\":[\"By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.\",\"On a successful BPE start, you should see the following entries in your BPE log:\",\"INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1} INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2} \"]},\"606\":{\"h\":\"On-Boarding\",\"t\":[\"Please visit the on boarding website of your network for more information.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"607\":{\"h\":\"Upgrade from DSF 0.9.x\",\"t\":[\"A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.\",\"Do not use your 0.9.x configuration as starting point\",\"There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.\",\"Please use the new installation manual to perform a new installation and use the old setup only for reference.\",\"Instead, please perform the following steps:\",\"Shut down your DSF instances (DSF FHIR Server and DSF BPE).\",\"Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)\",\"Install the new DSF according to the instructions.\",\"You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).\",\"Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).\",\"If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).\",\"If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.\",\"New process plugins\",\"Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.\",\"Use your old virtual machine\",\"We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.\"]},\"608\":{\"h\":\"Upgrade from DSF 1.3.1\",\"t\":[\"Upgrading the DSF from 1.3.1 to 1.3.2 involves modifying the docker-compose.yml files and recreating the containers.\",\"Update to DSF 1.2.0 first\",\"When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.\"]},\"609\":{\"h\":\"Modify DSF FHIR Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.3.2_upgrade\",\"Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.3.2.\",\"version: '3.8' services: proxy: - image: ghcr.io/datasharingframework/fhir_proxy:1.3.1 + image: ghcr.io/datasharingframework/fhir_proxy:1.3.2 restart: on-failure ... app: - image: ghcr.io/datasharingframework/fhir:1.3.1 + image: ghcr.io/datasharingframework/fhir:1.3.2 restart: on-failure ... \",\"Upgrade the DSF FHIR containers From /opt/fhir execute\",\"docker compose up -d && docker compose logs -f \"]},\"610\":{\"h\":\"Modify DSF BPE Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.3.2_upgrade\",\"Modify the DSF BPE docker-compose.yml file, replace the version number with 1.3.2.\",\"version: '3.8' services: app: - image: ghcr.io/datasharingframework/bpe:1.3.1 + image: ghcr.io/datasharingframework/bpe:1.3.2 restart: on-failure ... \",\"Upgrade the DSF BPE containers From /opt/bpe execute\",\"docker compose up -d && docker compose logs -f \",\"Verify your upgrade:\",\"Verify the DSF FHIR server is running in version 1.3.2. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.3.2, [...]\",\"Verify the DSF FHIR server started without errors\",\"Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/ (authentication with your client-certificate)\",\"Verify the DSF BPE server is running in version 1.3.2. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.3.2, [...]\",\"Verify the DSF BPE server started without errors\",\"Verify your install with a ping/pong test\"]},\"611\":{\"h\":\"Contribute code\",\"t\":[\"Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.\"]},\"612\":{\"h\":\"Benefits of Contributing:\",\"t\":[\"Foster community growth and diversification.\",\"Sharpen your coding skills.\",\"Gain recognition in the DSF community.\",\"Directly impact the future of data sharing in medicine.\",\"Start now by visiting our contribution pages. Every line of code helps us build a stronger and more versatile DSF.\"]},\"613\":{\"h\":\"General\"},\"614\":{\"h\":\"Code style\",\"t\":[\"You can import our code style for your specific IDE:\",\"Eclipse. Open your preferences, click on Java, Code style, Formatter, Import and select the downloaded file.\",\"IntelliJ. Open your settings, click on Editor, Code style, Java, the settings icon, import scheme, IntelliJ and select the downloaded file.\",\"Pull requests will only be approved if the code is formatted according to the code style configurations above. To format the code with maven before pushing to GitHub, use mvn compile -Pformat-and-sort.\"]},\"615\":{\"h\":\"Branching strategy\",\"t\":[\"Git Flow is used as this project's branching strategy. Therefore, you will find the following structure:\",\"main\",\"develop\",\"issue\",\"hotfix\",\"release\",\"Notice that only the first two elements listed are actual branches. The other elements are containers to hold all branches belonging to that category.\"]},\"616\":{\"h\":\"Branch naming\",\"t\":[\"The following ruleset is applied to name branches:\",\"issue/_\",\"hotfix/\",\"release/\"]},\"617\":{\"h\":\"Setting up the project\",\"t\":[\"This chapter lists all important requirements to get the project buildable and running properly.\"]},\"618\":{\"h\":\"Java\",\"t\":[\"This project uses Java JDK 17, so make sure you have it installed on your system.\"]},\"619\":{\"h\":\"Docker\",\"t\":[\"Docker is used in this project to test database functionality and to run more complex test-setups.\"]},\"620\":{\"h\":\"Maven\",\"t\":[\"The project relies on Maven as its management tool.Important: When building the project you might encounter the following error:Could not determine gpg versionGPG is used to sign artifacts for public release. Since this does not concern contributors, you may skip this step in the maven build process with -Dgpg.skip.\"]},\"621\":{\"h\":\"Workflow\",\"t\":[\"Create an issue or comment on an issue that you want to contribute some feature\",\"Fork the repository, create a branch and mention it in the issue\",\"If you desire feedback, create a pull request or comment on it in the issue. Feel free to @ any member with write permissions if you feel like your request has not been registered yet. They will review your changes and/or change requests\",\"If your changes are production-ready, create a pull request.\"]},\"622\":{\"h\":\"Pull request process\",\"t\":[\"We follow Martin Fowler's method for managing pull requests. This approach categorizes pull requests based on the level of trust and experience of the contributor, as well as the impact of the changes. Here's how we apply it:\",\"Ship: For our most trusted contributors with a proven track record. These members can merge their pull requests without prior review, typically for minor or highly confident changes.\",\"Show: This level is for trusted contributors who need some oversight, as well as for experienced developers who want to demonstrate how certain changes should be made in the future. They create pull requests and show their work to the team.\",\"Ask: New or less experienced contributors, as well as those submitting more complex changes, fall into this category. They are required to ask for feedback and approval before their changes can be merged, ensuring thorough review and quality control.\",\"This method helps us maintain a balance between code quality and efficient development, recognizing the varying levels of expertise among our contributors.\",\"For more information on Fowler's approach, visit Martin Fowler's article on Pull Requests.\"]},\"623\":{\"h\":\"Data Security in DSF Development\",\"t\":[\"The DSF (Data Sharing Framework) and its process plugins are frequently used to transmit sensitive personal data. To prevent the release of personal data during development, please adhere to the following guidelines:\",\"No development with real personal data: Always use anonymized or synthetic data for development purposes.\",\"No personal data in repositories: Ensure no personal data is present in local and remote repositories intended for publication, not even temporarily.\",\"Review all log files: Before using log files in issues, examples, etc., thoroughly review them to ensure no personal and sensitive data is included.\"]},\"624\":{\"h\":\"Contribute documentation\",\"t\":[\"Join us in enhancing our documentation!\",\"We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!\",\"Contact us with feedback: If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.\",\"Create an issue: You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at Data Sharing Framework Documentation and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.\",\"Contribute directly with a pull request: If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at Data Sharing Framework Documentation and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.\",\"We're excited to see your suggestions and are grateful for every contribution that helps us improve. Let's build better documentation together!\"]},\"625\":{\"h\":\"Contribute\",\"t\":[\"We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.\"]},\"626\":{\"h\":\"\",\"t\":[\"Helping other users: \",\"MII Zulip: If you are part of the German Medical Informatics Initiative, join the MII Zulip community to assist others, share your knowledge, and learn from fellow contributors.\",\"GitHub Discussions: Engage with our community in GitHub Discussions by answering questions, providing feedback, and sharing your insights.\",\"Testing releases: \",\"Stay ahead: Help us testing the latest releases. Your feedback on functionality, bugs, and user experience is invaluable.\",\"Report findings: Share your testing results to help us refine and enhance our releases.\",\"Reviewing changes: \",\"Peer review: Contribute by reviewing pull requests. Your insights can help ensure the quality and integrity of code changes.\",\"Constructive feedback: Offer constructive feedback and suggestions to help improve and refine proposed changes.\",\"Documentation changes: \",\"Improve documentation: Help us improving and updating our documentation. Clear and accurate documentation is crucial for user understanding and success. Please checkout our Getting started guide for documentation contributions to DSF.\",\"Suggest improvements: If you notice gaps or areas for enhancement in our documentation, we welcome your suggestions and contributions.\",\"Contributing bug reports: \",\"Report bugs: If you find a bug, please report it via an issue on GitHub. Detailed bug reports are incredibly helpful.\",\"Reproduction steps: Include steps to reproduce the bug and any relevant logs according to our bug report issue template.\",\"Contributing feature requests: \",\"Suggest features: You have an idea for a new feature? We'd love to hear it! Open an issue to describe your proposed feature and its potential benefits according to our feature request template.\",\"Collaborate on implementation: If you're able to, contribute to the development of your proposed feature or bug fix. Collaboration can lead to more innovative and effective solutions. Please checkout our Getting started guide for code contributions to DSF.\",\"Contributing process plugins: \",\"Develop process plugins for the DSF: If you have ideas for a process plugin, we encourage you to develop and contribute them. Our Getting started guide for process plugin development will be a useful reference.\",\"Share your work: Your plugins could be a valuable addition to the ecosystem and benefit other users.\",\"Before you start contributing, we recommend reading our getting started guidelines for detailed information on our processes and standards. This ensures a smooth and productive experience for everyone involved.\",\"Your contributions in any form, are what drives the continuous growth and improvement of this project. Thank you for being a part of our community and for your willingness to contribute!\"]},\"627\":{\"h\":\"Develop Process Plugins\"},\"628\":{\"h\":\"Overview\",\"t\":[\"Create a new process plugin\",\"Upgrade processes from 0.9.x\"]},\"629\":{\"h\":\"Create a new process plugin\",\"t\":[\"Visit the page to get started.\",\"Work in progress\",\"We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the . Additionally, we recommend to take a look at the upgraded DSF processes here:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"630\":{\"h\":\"Upgrade processes from 0.9.x\",\"t\":[\"Work in progress\",\"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"631\":{\"h\":\"Maintain a DSF instance\"},\"632\":{\"h\":\"Overview\",\"t\":[\"Install DSF 1.4.0\",\"Upgrade from DSF 0.9.x\",\"Allow List Management\",\"FHIR Reverse Proxy \",\"Configuration Parameters\",\"FHIR Server \",\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\",\"BPE Server \",\"Configuration Parameters\"]},\"633\":{\"h\":\"Allow List Management\",\"t\":[\"You can read all about the concept of Allow Lists .\"]},\"634\":{\"h\":\"Overview\",\"t\":[\"To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.\",\"The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.\"]},\"635\":{\"h\":\"Prerequisites\",\"t\":[\"Deployed DSF instance (test or production infrastructure) 1.1 If none exists yet, read the installation guide\",\"Certificate 2.1 If none exists yet, read the certificate requirements\",\"Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de\",\"FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir\",\"Contact details from a responsible person of your organization\",\"Access to the E-Mail address from your organization for verification\"]},\"636\":{\"h\":\"Start here\",\"t\":[\"When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:\",\"Test infrastructure\",\"Production infrastructure\",\"We use different highlight colors for the DSF Allow List Management Tool: Green for the Test environment and blue for the Production infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"637\":{\"h\":\"Install Plugins\",\"t\":[\"You can find an overview of compatable process plugins below.\"]},\"638\":{\"h\":\"Common processes\",\"t\":[\"Ping-Pong: https://github.com/datasharingframework/dsf-process-ping-pong/releases\",\"AllowList Download: https://github.com/datasharingframework/dsf-process-allow-list/releases\"]},\"639\":{\"h\":\"MII processes\",\"t\":[\"Feasibility: https://github.com/medizininformatik-initiative/mii-process-feasibility/releases\",\"KDS-Report: https://github.com/medizininformatik-initiative/mii-process-report/releases\",\"MII-Data-Transfer: https://github.com/medizininformatik-initiative/mii-process-data-transfer/releases\"]},\"640\":{\"h\":\"NUM processes\",\"t\":[\"NUM-RDP: https://github.com/num-codex/codex-processes-ap1/releases\"]},\"641\":{\"h\":\"Install DSF 1.4.0\",\"t\":[\"In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.\",\"Unified installation manual\",\"The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.\"]},\"642\":{\"h\":\"Prerequisites\"},\"643\":{\"h\":\"Virtual Machines\",\"t\":[\"DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\",\"DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\"]},\"644\":{\"h\":\"Docker / Docker-Compose\",\"t\":[\"Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/install.\",\"sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \\\"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\\\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo systemctl enable docker.service sudo systemctl enable containerd.service \",\"The current version of docker compose is installed with the current docker version.\"]},\"645\":{\"h\":\"Client/Server Certificates\",\"t\":[\"Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:\",\"Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)\",\"Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)\",\"If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.\"]},\"646\":{\"h\":\"Network setup / Network access\",\"t\":[\"The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.\",\"The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.\",\"Here is a quick overview of the expected network setup.\",\"Source\",\"Target\",\"Port\",\"Protocol\",\"DSF BPE (local)\",\"DSF FHIR (local)\",\"443\",\"https, wss\",\"DSF BPE (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https\",\"DSF FHIR (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https (HTTP HEAD only)\",\"DSF BPE (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https\",\"DSF FHIR (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https (HTTP HEAD only)\",\"Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.net or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.\"]},\"647\":{\"h\":\"Setup\"},\"648\":{\"h\":\"Prepare Certificates\",\"t\":[\"Server Certificate (certificate A)This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)\",\"Store PEM encoded certificate as ssl_certificate_file.pem\",\"Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem\",\"Client Certificate (Certificate B)This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)\",\"Store PEM encoded certificate as client_certificate.pem\",\"Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem\"]},\"649\":{\"h\":\"DSF FHIR Server\",\"t\":[\"Add Group/User Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:\",\"sudo groupadd --gid 2101 fhir sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir \",\"Download and Extract Config Files Download and unpack the prepared DSF FHIR server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_fhir_1_4_0.tar.gz sudo tar --same-owner -zxvf dsf_fhir_1_4_0.tar.gz \",\"The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.\",\"Verify that the fhir system user or group can write into the following folder\",\"/opt/fhir/log\",\"Add certificates and keys\",\"Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/\",\"ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)\",\"ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/\",\"client_certificate.pem (chmod: 440, chown: fhir:docker)\",\"client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L39: - app_client_certificate_private_key.pem.password ... L54: DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L141: app_client_certificate_private_key.pem.password: L142: file: ./secrets/client_certificate_private_key.pem.password \",\"How to chmod / chown\",\"For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:\",\"Set the file content as requested\",\"Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem\",\"Change the owner of the file to the user fhir and the group the file belongs to to docker:chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem\",\"Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA\",\"L114: ssl_certificate_chain_file.pem: L115: file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem \",\"Modify database passwords\",\"/opt/fhir/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user_permanent_delete.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> proxy -> environment:\",\"HTTPS_SERVER_NAME_PORT: TODO_DSF_FHIR_SERVER_EXTERNAL_FQDN:443 Set your FHIR servers external FQDN, e.g. foo.bar.de -> foo.bar.de:443\",\"For additional environment variables, see DSF configuration parameters - FHIR Reverse Proxy\",\"services -> app -> environment:\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de\",\"DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B) Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.\",\"DEV_DSF_FHIR_SERVER_ROLECONFIG: | (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.\",\"For additional environment variables, see FHIR server Configuration Parameters page.\",\"Start the DSF FHIR Server Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\"]},\"650\":{\"h\":\"DSF BPE Server\",\"t\":[\"Add Group/User Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:\",\"sudo groupadd --gid 2202 bpe sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe \",\"Download and Extract Config Files Download and extract prepared DSF BPE server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_bpe_1_4_0.tar.gz sudo tar --same-owner -zxvf dsf_bpe_1_4_0.tar.gz \",\"The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.\",\"Verify that the bpe system user or group can write into the following folders\",\"/opt/bpe/log\",\"Add certificates and keys\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/\",\"client_certificate.pem (chmod: 440 chown: bpe:docker)\",\"client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L13: - app_client_certificate_private_key.pem.password ... L35: DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L89: app_client_certificate_private_key.pem.password: L90: file: ./secrets/client_certificate_private_key.pem.password \",\"Modify database passwords\",\"/opt/bpe/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user_camunda.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> app -> environment:\",\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"For additional environment variables, see the BPE server Configuration Parameters page.\",\"Start the DSF BPE Server (without process plugins) Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\",\"Verify DSF BPE Startup\",\"Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.\",\"Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.\",\"Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.\",\"If you need to debug the TLS connection to your DSF FHIR server use for example:docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443 The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]\"]},\"651\":{\"h\":\"Logs\",\"t\":[\"By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.\",\"On a successful BPE start, you should see the following entries in your BPE log:\",\"INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1} INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2} \"]},\"652\":{\"h\":\"On-Boarding\",\"t\":[\"Please visit the on boarding website of your network for more information.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"653\":{\"h\":\"Upgrade from DSF 0.9.x\",\"t\":[\"A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.\",\"Do not use your 0.9.x configuration as starting point\",\"There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.\",\"Please use the new installation manual to perform a new installation and use the old setup only for reference.\",\"Instead, please perform the following steps:\",\"Shut down your DSF instances (DSF FHIR Server and DSF BPE).\",\"Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)\",\"Install the new DSF according to the instructions.\",\"You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).\",\"Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).\",\"If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).\",\"If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.\",\"New process plugins\",\"Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.\",\"Use your old virtual machine\",\"We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.\"]},\"654\":{\"h\":\"Upgrade from DSF 1.3.2\",\"t\":[\"Upgrading the DSF from 1.3.2 to 1.4.0 involves modifying the docker-compose.yml files and recreating the containers.\",\"Update to DSF 1.2.0 first\",\"When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.\"]},\"655\":{\"h\":\"Modify DSF FHIR Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.4.0_upgrade\",\"Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.4.0.\",\"version: '3.8' services: proxy: - image: ghcr.io/datasharingframework/fhir_proxy:1.3.2 + image: ghcr.io/datasharingframework/fhir_proxy:1.4.0 restart: on-failure ... app: - image: ghcr.io/datasharingframework/fhir:1.3.2 + image: ghcr.io/datasharingframework/fhir:1.4.0 restart: on-failure ... \",\"Upgrade the DSF FHIR containers From /opt/fhir execute\",\"docker compose up -d && docker compose logs -f \"]},\"656\":{\"h\":\"Modify DSF BPE Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.4.0_upgrade\",\"Modify the DSF BPE docker-compose.yml file, replace the version number with 1.4.0.\",\"version: '3.8' services: app: - image: ghcr.io/datasharingframework/bpe:1.3.2 + image: ghcr.io/datasharingframework/bpe:1.4.0 restart: on-failure ... \",\"Upgrade the DSF BPE containers From /opt/bpe execute\",\"docker compose up -d && docker compose logs -f \",\"Verify your upgrade:\",\"Verify the DSF FHIR server is running in version 1.4.0. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.4.0, [...]\",\"Verify the DSF FHIR server started without errors\",\"Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/ (authentication with your client-certificate)\",\"Verify the DSF BPE server is running in version 1.4.0. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.4.0, [...]\",\"Verify the DSF BPE server started without errors\",\"Verify your install with a ping/pong test\"]},\"657\":{\"h\":\"Contribute code\",\"t\":[\"Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.\"]},\"658\":{\"h\":\"Benefits of Contributing:\",\"t\":[\"Foster community growth and diversification.\",\"Sharpen your coding skills.\",\"Gain recognition in the DSF community.\",\"Directly impact the future of data sharing in medicine.\",\"Start now by visiting our contribution pages. Every line of code helps us build a stronger and more versatile DSF.\"]},\"659\":{\"h\":\"General\"},\"660\":{\"h\":\"Code style\",\"t\":[\"You can import our code style for your specific IDE:\",\"Eclipse. Open your preferences, click on Java, Code style, Formatter, Import and select the downloaded file.\",\"IntelliJ. Open your settings, click on Editor, Code style, Java, the settings icon, import scheme, IntelliJ and select the downloaded file.\",\"Pull requests will only be approved if the code is formatted according to the code style configurations above. To format the code with maven before pushing to GitHub, use mvn compile -Pformat-and-sort.\"]},\"661\":{\"h\":\"Branching strategy\",\"t\":[\"Git Flow is used as this project's branching strategy. Therefore, you will find the following structure:\",\"main\",\"develop\",\"issue\",\"hotfix\",\"release\",\"Notice that only the first two elements listed are actual branches. The other elements are containers to hold all branches belonging to that category.\"]},\"662\":{\"h\":\"Branch naming\",\"t\":[\"The following ruleset is applied to name branches:\",\"issue/_\",\"hotfix/\",\"release/\"]},\"663\":{\"h\":\"Setting up the project\",\"t\":[\"This chapter lists all important requirements to get the project buildable and running properly.\"]},\"664\":{\"h\":\"Java\",\"t\":[\"This project uses Java JDK 17, so make sure you have it installed on your system.\"]},\"665\":{\"h\":\"Docker\",\"t\":[\"Docker is used in this project to test database functionality and to run more complex test-setups.\"]},\"666\":{\"h\":\"Maven\",\"t\":[\"The project relies on Maven as its management tool.Important: When building the project you might encounter the following error:Could not determine gpg versionGPG is used to sign artifacts for public release. Since this does not concern contributors, you may skip this step in the maven build process with -Dgpg.skip.\"]},\"667\":{\"h\":\"Workflow\",\"t\":[\"Create an issue or comment on an issue that you want to contribute some feature\",\"Fork the repository, create a branch and mention it in the issue\",\"If you desire feedback, create a pull request or comment on it in the issue. Feel free to @ any member with write permissions if you feel like your request has not been registered yet. They will review your changes and/or change requests\",\"If your changes are production-ready, create a pull request.\"]},\"668\":{\"h\":\"Pull request process\",\"t\":[\"We follow Martin Fowler's method for managing pull requests. This approach categorizes pull requests based on the level of trust and experience of the contributor, as well as the impact of the changes. Here's how we apply it:\",\"Ship: For our most trusted contributors with a proven track record. These members can merge their pull requests without prior review, typically for minor or highly confident changes.\",\"Show: This level is for trusted contributors who need some oversight, as well as for experienced developers who want to demonstrate how certain changes should be made in the future. They create pull requests and show their work to the team.\",\"Ask: New or less experienced contributors, as well as those submitting more complex changes, fall into this category. They are required to ask for feedback and approval before their changes can be merged, ensuring thorough review and quality control.\",\"This method helps us maintain a balance between code quality and efficient development, recognizing the varying levels of expertise among our contributors.\",\"For more information on Fowler's approach, visit Martin Fowler's article on Pull Requests.\"]},\"669\":{\"h\":\"Data Security in DSF Development\",\"t\":[\"The DSF (Data Sharing Framework) and its process plugins are frequently used to transmit sensitive personal data. To prevent the release of personal data during development, please adhere to the following guidelines:\",\"No development with real personal data: Always use anonymized or synthetic data for development purposes.\",\"No personal data in repositories: Ensure no personal data is present in local and remote repositories intended for publication, not even temporarily.\",\"Review all log files: Before using log files in issues, examples, etc., thoroughly review them to ensure no personal and sensitive data is included.\"]},\"670\":{\"h\":\"Contribute documentation\",\"t\":[\"Join us in enhancing our documentation!\",\"We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!\",\"Contact us with feedback: If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.\",\"Create an issue: You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at Data Sharing Framework Documentation and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.\",\"Contribute directly with a pull request: If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at Data Sharing Framework Documentation and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.\",\"We're excited to see your suggestions and are grateful for every contribution that helps us improve. Let's build better documentation together!\"]},\"671\":{\"h\":\"Contribute\",\"t\":[\"We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.\"]},\"672\":{\"h\":\"\",\"t\":[\"Helping other users: \",\"MII Zulip: If you are part of the German Medical Informatics Initiative, join the MII Zulip community to assist others, share your knowledge, and learn from fellow contributors.\",\"GitHub Discussions: Engage with our community in GitHub Discussions by answering questions, providing feedback, and sharing your insights.\",\"Testing releases: \",\"Stay ahead: Help us testing the latest releases. Your feedback on functionality, bugs, and user experience is invaluable.\",\"Report findings: Share your testing results to help us refine and enhance our releases.\",\"Reviewing changes: \",\"Peer review: Contribute by reviewing pull requests. Your insights can help ensure the quality and integrity of code changes.\",\"Constructive feedback: Offer constructive feedback and suggestions to help improve and refine proposed changes.\",\"Documentation changes: \",\"Improve documentation: Help us improving and updating our documentation. Clear and accurate documentation is crucial for user understanding and success. Please checkout our Getting started guide for documentation contributions to DSF.\",\"Suggest improvements: If you notice gaps or areas for enhancement in our documentation, we welcome your suggestions and contributions.\",\"Contributing bug reports: \",\"Report bugs: If you find a bug, please report it via an issue on GitHub. Detailed bug reports are incredibly helpful.\",\"Reproduction steps: Include steps to reproduce the bug and any relevant logs according to our bug report issue template.\",\"Contributing feature requests: \",\"Suggest features: You have an idea for a new feature? We'd love to hear it! Open an issue to describe your proposed feature and its potential benefits according to our feature request template.\",\"Collaborate on implementation: If you're able to, contribute to the development of your proposed feature or bug fix. Collaboration can lead to more innovative and effective solutions. Please checkout our Getting started guide for code contributions to DSF.\",\"Contributing process plugins: \",\"Develop process plugins for the DSF: If you have ideas for a process plugin, we encourage you to develop and contribute them. Our Getting started guide for process plugin development will be a useful reference.\",\"Share your work: Your plugins could be a valuable addition to the ecosystem and benefit other users.\",\"Before you start contributing, we recommend reading our getting started guidelines for detailed information on our processes and standards. This ensures a smooth and productive experience for everyone involved.\",\"Your contributions in any form, are what drives the continuous growth and improvement of this project. Thank you for being a part of our community and for your willingness to contribute!\"]},\"673\":{\"h\":\"Develop Process Plugins\"},\"674\":{\"h\":\"Overview\",\"t\":[\"Create a new process plugin\",\"Upgrade processes from 0.9.x\"]},\"675\":{\"h\":\"Create a new process plugin\",\"t\":[\"Visit the page to get started.\",\"Work in progress\",\"We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the . Additionally, we recommend to take a look at the upgraded DSF processes here:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"676\":{\"h\":\"Upgrade processes from 0.9.x\",\"t\":[\"Work in progress\",\"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"677\":{\"h\":\"Maintain a DSF instance\"},\"678\":{\"h\":\"Overview\",\"t\":[\"Install DSF 1.5.0\",\"Upgrade from DSF 0.9.x\",\"Allow List Management\",\"FHIR Reverse Proxy \",\"Configuration Parameters\",\"FHIR Server \",\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\",\"BPE Reverse Proxy \",\"Configuration Parameters\",\"BPE Server \",\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\"]},\"679\":{\"h\":\"Allow List Management\",\"t\":[\"You can read all about the concept of Allow Lists .\"]},\"680\":{\"h\":\"Overview\",\"t\":[\"To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.\",\"The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.\"]},\"681\":{\"h\":\"Prerequisites\",\"t\":[\"Deployed DSF instance (test or production infrastructure) 1.1 If none exists yet, read the installation guide\",\"Certificate 2.1 If none exists yet, read the certificate requirements\",\"Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de\",\"FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir\",\"Contact details from a responsible person of your organization\",\"Access to the E-Mail address from your organization for verification\"]},\"682\":{\"h\":\"Start here\",\"t\":[\"When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:\",\"Test infrastructure\",\"Production infrastructure\",\"We use different highlight colors for the DSF Allow List Management Tool: Green for the Test environment and blue for the Production infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"683\":{\"h\":\"Install Plugins\",\"t\":[\"You can find an overview of compatable process plugins below.\"]},\"684\":{\"h\":\"Common processes\",\"t\":[\"Ping-Pong: https://github.com/datasharingframework/dsf-process-ping-pong/releases\",\"AllowList Download: https://github.com/datasharingframework/dsf-process-allow-list/releases\"]},\"685\":{\"h\":\"MII processes\",\"t\":[\"Feasibility: https://github.com/medizininformatik-initiative/mii-process-feasibility/releases\",\"KDS-Report: https://github.com/medizininformatik-initiative/mii-process-report/releases\",\"MII-Data-Transfer: https://github.com/medizininformatik-initiative/mii-process-data-transfer/releases\"]},\"686\":{\"h\":\"NUM processes\",\"t\":[\"NUM-RDP: https://github.com/num-codex/codex-processes-ap1/releases\"]},\"687\":{\"h\":\"Install DSF 1.5.0\",\"t\":[\"In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.\",\"Unified installation manual\",\"The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.\"]},\"688\":{\"h\":\"Prerequisites\"},\"689\":{\"h\":\"Virtual Machines\",\"t\":[\"DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\",\"DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\"]},\"690\":{\"h\":\"Docker / Docker-Compose\",\"t\":[\"Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/install.\",\"sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \\\"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\\\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo systemctl enable docker.service sudo systemctl enable containerd.service \",\"The current version of docker compose is installed with the current docker version.\"]},\"691\":{\"h\":\"Client/Server Certificates\",\"t\":[\"Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:\",\"Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)\",\"Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)\",\"If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.\"]},\"692\":{\"h\":\"Network setup / Network access\",\"t\":[\"The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.\",\"The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.\",\"Here is a quick overview of the expected network setup.\",\"Source\",\"Target\",\"Port\",\"Protocol\",\"DSF BPE (local)\",\"DSF FHIR (local)\",\"443\",\"https, wss\",\"DSF BPE (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https\",\"DSF FHIR (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https (HTTP HEAD only)\",\"DSF BPE (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https\",\"DSF FHIR (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https (HTTP HEAD only)\",\"Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.net or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.\"]},\"693\":{\"h\":\"Setup\"},\"694\":{\"h\":\"Prepare Certificates\",\"t\":[\"Server Certificate (certificate A)This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)\",\"Store PEM encoded certificate as ssl_certificate_file.pem\",\"Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem\",\"Client Certificate (Certificate B)This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)\",\"Store PEM encoded certificate as client_certificate.pem\",\"Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem\"]},\"695\":{\"h\":\"DSF FHIR Server\",\"t\":[\"Add Group/User Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:\",\"sudo groupadd --gid 2101 fhir sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir \",\"Download and Extract Config Files Download and unpack the prepared DSF FHIR server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_fhir_1_5_0.tar.gz sudo tar --same-owner -zxvf dsf_fhir_1_5_0.tar.gz \",\"The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.\",\"Verify that the fhir system user or group can write into the following folder\",\"/opt/fhir/log\",\"Add certificates and keys\",\"Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/\",\"ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)\",\"ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/\",\"client_certificate.pem (chmod: 440, chown: fhir:docker)\",\"client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L39: - app_client_certificate_private_key.pem.password ... L54: DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L141: app_client_certificate_private_key.pem.password: L142: file: ./secrets/client_certificate_private_key.pem.password \",\"How to chmod / chown\",\"For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:\",\"Set the file content as requested\",\"Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem\",\"Change the owner of the file to the user fhir and the group the file belongs to to docker:chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem\",\"Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA\",\"L114: ssl_certificate_chain_file.pem: L115: file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem \",\"Modify database passwords\",\"/opt/fhir/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user_permanent_delete.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> proxy -> environment:\",\"HTTPS_SERVER_NAME_PORT: TODO_DSF_FHIR_SERVER_EXTERNAL_FQDN:443 Set your FHIR servers external FQDN, e.g. foo.bar.de -> foo.bar.de:443\",\"For additional environment variables, see DSF configuration parameters - FHIR Reverse Proxy\",\"services -> app -> environment:\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de\",\"DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B) Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.\",\"DEV_DSF_FHIR_SERVER_ROLECONFIG: | (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.\",\"For additional environment variables, see FHIR server Configuration Parameters page.\",\"Start the DSF FHIR Server Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\"]},\"696\":{\"h\":\"DSF BPE Server\",\"t\":[\"Add Group/User Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:\",\"sudo groupadd --gid 2202 bpe sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe \",\"Download and Extract Config Files Download and extract prepared DSF BPE server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_bpe_1_5_0.tar.gz sudo tar --same-owner -zxvf dsf_bpe_1_5_0.tar.gz \",\"The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.\",\"Verify that the bpe system user or group can write into the following folders\",\"/opt/bpe/log\",\"Add certificates and keys\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/\",\"client_certificate.pem (chmod: 440 chown: bpe:docker)\",\"client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L13: - app_client_certificate_private_key.pem.password ... L35: DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L89: app_client_certificate_private_key.pem.password: L90: file: ./secrets/client_certificate_private_key.pem.password \",\"Modify database passwords\",\"/opt/bpe/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user_camunda.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> app -> environment:\",\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"For additional environment variables, see the BPE server Configuration Parameters page.\",\"Start the DSF BPE Server (without process plugins) Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\",\"Verify DSF BPE Startup\",\"Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.\",\"Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.\",\"Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.\",\"If you need to debug the TLS connection to your DSF FHIR server use for example:docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443 The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]\"]},\"697\":{\"h\":\"Logs\",\"t\":[\"By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.\",\"On a successful BPE start, you should see the following entries in your BPE log:\",\"INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1} INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2} \"]},\"698\":{\"h\":\"On-Boarding\",\"t\":[\"Please visit the on boarding website of your network for more information.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"699\":{\"h\":\"Upgrade from DSF 0.9.x\",\"t\":[\"A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.\",\"Do not use your 0.9.x configuration as starting point\",\"There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.\",\"Please use the new installation manual to perform a new installation and use the old setup only for reference.\",\"Instead, please perform the following steps:\",\"Shut down your DSF instances (DSF FHIR Server and DSF BPE).\",\"Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)\",\"Install the new DSF according to the instructions.\",\"You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).\",\"Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).\",\"If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).\",\"If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.\",\"New process plugins\",\"Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.\",\"Use your old virtual machine\",\"We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.\"]},\"700\":{\"h\":\"Upgrade from DSF 1.4.0\",\"t\":[\"Upgrading the DSF from 1.4.0 to 1.5.0 involves modifying the docker-compose.yml files and recreating the containers.\",\"Update to DSF 1.2.0 first\",\"When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.\"]},\"701\":{\"h\":\"Modify DSF FHIR Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.5.0_upgrade\",\"Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.5.0.\",\"version: '3.8' services: proxy: - image: ghcr.io/datasharingframework/fhir_proxy:1.4.0 + image: ghcr.io/datasharingframework/fhir_proxy:1.5.0 restart: on-failure ... app: - image: ghcr.io/datasharingframework/fhir:1.4.0 + image: ghcr.io/datasharingframework/fhir:1.5.0 restart: on-failure ... \",\"Upgrade the DSF FHIR containers From /opt/fhir execute\",\"docker compose up -d && docker compose logs -f \"]},\"702\":{\"h\":\"Modify DSF BPE Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.5.0_upgrade\",\"Modify the DSF BPE docker-compose.yml file, replace the version number with 1.5.0.\",\"version: '3.8' services: app: - image: ghcr.io/datasharingframework/bpe:1.4.0 + image: ghcr.io/datasharingframework/bpe:1.5.0 restart: on-failure ... \",\"Upgrade the DSF BPE containers From /opt/bpe execute\",\"docker compose up -d && docker compose logs -f \",\"Verify your upgrade:\",\"Verify the DSF FHIR server is running in version 1.5.0. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.5.0, [...]\",\"Verify the DSF FHIR server started without errors\",\"Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/ (authentication with your client-certificate)\",\"Verify the DSF BPE server is running in version 1.5.0. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.5.0, [...]\",\"Verify the DSF BPE server started without errors\",\"Verify your install with a ping/pong test\"]},\"703\":{\"h\":\"Contribute code\",\"t\":[\"Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.\"]},\"704\":{\"h\":\"Benefits of Contributing:\",\"t\":[\"Foster community growth and diversification.\",\"Sharpen your coding skills.\",\"Gain recognition in the DSF community.\",\"Directly impact the future of data sharing in medicine.\",\"Start now by visiting our contribution pages. Every line of code helps us build a stronger and more versatile DSF.\"]},\"705\":{\"h\":\"General\"},\"706\":{\"h\":\"Code style\",\"t\":[\"You can import our code style for your specific IDE:\",\"Eclipse. Open your preferences, click on Java, Code style, Formatter, Import and select the downloaded file.\",\"IntelliJ. Open your settings, click on Editor, Code style, Java, the settings icon, import scheme, IntelliJ and select the downloaded file.\",\"Pull requests will only be approved if the code is formatted according to the code style configurations above. To format the code with maven before pushing to GitHub, use mvn compile -Pformat-and-sort.\"]},\"707\":{\"h\":\"Branching strategy\",\"t\":[\"Git Flow is used as this project's branching strategy. Therefore, you will find the following structure:\",\"main\",\"develop\",\"issue\",\"hotfix\",\"release\",\"Notice that only the first two elements listed are actual branches. The other elements are containers to hold all branches belonging to that category.\"]},\"708\":{\"h\":\"Branch naming\",\"t\":[\"The following ruleset is applied to name branches:\",\"issue/_\",\"hotfix/\",\"release/\"]},\"709\":{\"h\":\"Setting up the project\",\"t\":[\"This chapter lists all important requirements to get the project buildable and running properly.\"]},\"710\":{\"h\":\"Java\",\"t\":[\"This project uses Java JDK 17, so make sure you have it installed on your system.\"]},\"711\":{\"h\":\"Docker\",\"t\":[\"Docker is used in this project to test database functionality and to run more complex test-setups.\"]},\"712\":{\"h\":\"Maven\",\"t\":[\"The project relies on Maven as its management tool.Important: When building the project you might encounter the following error:Could not determine gpg versionGPG is used to sign artifacts for public release. Since this does not concern contributors, you may skip this step in the maven build process with -Dgpg.skip.\"]},\"713\":{\"h\":\"Workflow\",\"t\":[\"Create an issue or comment on an issue that you want to contribute some feature\",\"Fork the repository, create a branch and mention it in the issue\",\"If you desire feedback, create a pull request or comment on it in the issue. Feel free to @ any member with write permissions if you feel like your request has not been registered yet. They will review your changes and/or change requests\",\"If your changes are production-ready, create a pull request.\"]},\"714\":{\"h\":\"Pull request process\",\"t\":[\"We follow Martin Fowler's method for managing pull requests. This approach categorizes pull requests based on the level of trust and experience of the contributor, as well as the impact of the changes. Here's how we apply it:\",\"Ship: For our most trusted contributors with a proven track record. These members can merge their pull requests without prior review, typically for minor or highly confident changes.\",\"Show: This level is for trusted contributors who need some oversight, as well as for experienced developers who want to demonstrate how certain changes should be made in the future. They create pull requests and show their work to the team.\",\"Ask: New or less experienced contributors, as well as those submitting more complex changes, fall into this category. They are required to ask for feedback and approval before their changes can be merged, ensuring thorough review and quality control.\",\"This method helps us maintain a balance between code quality and efficient development, recognizing the varying levels of expertise among our contributors.\",\"For more information on Fowler's approach, visit Martin Fowler's article on Pull Requests.\"]},\"715\":{\"h\":\"Data Security in DSF Development\",\"t\":[\"The DSF (Data Sharing Framework) and its process plugins are frequently used to transmit sensitive personal data. To prevent the release of personal data during development, please adhere to the following guidelines:\",\"No development with real personal data: Always use anonymized or synthetic data for development purposes.\",\"No personal data in repositories: Ensure no personal data is present in local and remote repositories intended for publication, not even temporarily.\",\"Review all log files: Before using log files in issues, examples, etc., thoroughly review them to ensure no personal and sensitive data is included.\"]},\"716\":{\"h\":\"Contribute documentation\",\"t\":[\"Join us in enhancing our documentation!\",\"We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!\",\"Contact us with feedback: If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.\",\"Create an issue: You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at Data Sharing Framework Documentation and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.\",\"Contribute directly with a pull request: If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at Data Sharing Framework Documentation and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.\",\"We're excited to see your suggestions and are grateful for every contribution that helps us improve. Let's build better documentation together!\"]},\"717\":{\"h\":\"Contribute\",\"t\":[\"We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.\"]},\"718\":{\"h\":\"\",\"t\":[\"Helping other users: \",\"MII Zulip: If you are part of the German Medical Informatics Initiative, join the MII Zulip community to assist others, share your knowledge, and learn from fellow contributors.\",\"GitHub Discussions: Engage with our community in GitHub Discussions by answering questions, providing feedback, and sharing your insights.\",\"Testing releases: \",\"Stay ahead: Help us testing the latest releases. Your feedback on functionality, bugs, and user experience is invaluable.\",\"Report findings: Share your testing results to help us refine and enhance our releases.\",\"Reviewing changes: \",\"Peer review: Contribute by reviewing pull requests. Your insights can help ensure the quality and integrity of code changes.\",\"Constructive feedback: Offer constructive feedback and suggestions to help improve and refine proposed changes.\",\"Documentation changes: \",\"Improve documentation: Help us improving and updating our documentation. Clear and accurate documentation is crucial for user understanding and success. Please checkout our Getting started guide for documentation contributions to DSF.\",\"Suggest improvements: If you notice gaps or areas for enhancement in our documentation, we welcome your suggestions and contributions.\",\"Contributing bug reports: \",\"Report bugs: If you find a bug, please report it via an issue on GitHub. Detailed bug reports are incredibly helpful.\",\"Reproduction steps: Include steps to reproduce the bug and any relevant logs according to our bug report issue template.\",\"Contributing feature requests: \",\"Suggest features: You have an idea for a new feature? We'd love to hear it! Open an issue to describe your proposed feature and its potential benefits according to our feature request template.\",\"Collaborate on implementation: If you're able to, contribute to the development of your proposed feature or bug fix. Collaboration can lead to more innovative and effective solutions. Please checkout our Getting started guide for code contributions to DSF.\",\"Contributing process plugins: \",\"Develop process plugins for the DSF: If you have ideas for a process plugin, we encourage you to develop and contribute them. Our Getting started guide for process plugin development will be a useful reference.\",\"Share your work: Your plugins could be a valuable addition to the ecosystem and benefit other users.\",\"Before you start contributing, we recommend reading our getting started guidelines for detailed information on our processes and standards. This ensures a smooth and productive experience for everyone involved.\",\"Your contributions in any form, are what drives the continuous growth and improvement of this project. Thank you for being a part of our community and for your willingness to contribute!\"]},\"719\":{\"h\":\"Develop Process Plugins\"},\"720\":{\"h\":\"Overview\",\"t\":[\"Create a new process plugin\",\"Upgrade processes from 0.9.x\"]},\"721\":{\"h\":\"Create a new process plugin\",\"t\":[\"Visit the page to get started.\",\"Work in progress\",\"We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the . Additionally, we recommend to take a look at the upgraded DSF processes here:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"722\":{\"h\":\"Upgrade processes from 0.9.x\",\"t\":[\"Work in progress\",\"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"723\":{\"h\":\"Maintain a DSF instance\"},\"724\":{\"h\":\"Overview\",\"t\":[\"Install DSF 1.5.1\",\"Upgrade from DSF 0.9.x\",\"Allow List Management\",\"FHIR Reverse Proxy \",\"Configuration Parameters\",\"FHIR Server \",\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\",\"BPE Reverse Proxy \",\"Configuration Parameters\",\"BPE Server \",\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\"]},\"725\":{\"h\":\"Allow List Management\",\"t\":[\"You can read all about the concept of Allow Lists .\"]},\"726\":{\"h\":\"Overview\",\"t\":[\"To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.\",\"The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.\"]},\"727\":{\"h\":\"Prerequisites\",\"t\":[\"Deployed DSF instance (test or production infrastructure) 1.1 If none exists yet, read the installation guide\",\"Certificate 2.1 If none exists yet, read the certificate requirements\",\"Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de\",\"FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir\",\"Contact details from a responsible person of your organization\",\"Access to the E-Mail address from your organization for verification\"]},\"728\":{\"h\":\"Start here\",\"t\":[\"When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:\",\"Test infrastructure\",\"Production infrastructure\",\"We use different highlight colors for the DSF Allow List Management Tool: Green for the Test environment and blue for the Production infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"729\":{\"h\":\"Install Plugins\",\"t\":[\"You can find an overview of compatible process plugins below.\"]},\"730\":{\"h\":\"Common processes\",\"t\":[\"Ping-Pong: https://github.com/datasharingframework/dsf-process-ping-pong/releases\",\"AllowList Download: https://github.com/datasharingframework/dsf-process-allow-list/releases\"]},\"731\":{\"h\":\"MII processes\",\"t\":[\"Feasibility: https://github.com/medizininformatik-initiative/mii-process-feasibility/releases\",\"KDS-Report: https://github.com/medizininformatik-initiative/mii-process-report/releases\",\"MII-Data-Sharing: https://github.com/medizininformatik-initiative/mii-process-data-sharing/releases\",\"MII-Data-Transfer: https://github.com/medizininformatik-initiative/mii-process-data-transfer/releases\"]},\"732\":{\"h\":\"NUM processes\",\"t\":[\"NUM-RDP: https://github.com/num-codex/codex-processes-ap1/releases\"]},\"733\":{\"h\":\"Install DSF 1.5.1\",\"t\":[\"In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.\",\"Unified installation manual\",\"The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.\"]},\"734\":{\"h\":\"Prerequisites\"},\"735\":{\"h\":\"Virtual Machines\",\"t\":[\"DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\",\"DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\"]},\"736\":{\"h\":\"Docker / Docker-Compose\",\"t\":[\"Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/install.\",\"sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \\\"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\\\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo systemctl enable docker.service sudo systemctl enable containerd.service \",\"The current version of docker compose is installed with the current docker version.\"]},\"737\":{\"h\":\"Client/Server Certificates\",\"t\":[\"Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:\",\"Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)\",\"Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)\",\"If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.\"]},\"738\":{\"h\":\"Network setup / Network access\",\"t\":[\"The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.\",\"The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.\",\"Here is a quick overview of the expected network setup.\",\"Source\",\"Target\",\"Port\",\"Protocol\",\"DSF BPE (local)\",\"DSF FHIR (local)\",\"443\",\"https, wss\",\"DSF BPE (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https\",\"DSF FHIR (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https (HTTP HEAD only)\",\"DSF BPE (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https\",\"DSF FHIR (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https (HTTP HEAD only)\",\"Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.net or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.\"]},\"739\":{\"h\":\"Setup\"},\"740\":{\"h\":\"Prepare Certificates\",\"t\":[\"Server Certificate (certificate A)This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)\",\"Store PEM encoded certificate as ssl_certificate_file.pem\",\"Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem\",\"Client Certificate (Certificate B)This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)\",\"Store PEM encoded certificate as client_certificate.pem\",\"Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem\"]},\"741\":{\"h\":\"DSF FHIR Server\",\"t\":[\"Add Group/User Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:\",\"sudo groupadd --gid 2101 fhir sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir \",\"Download and Extract Config Files Download and unpack the prepared DSF FHIR server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_fhir_1_5_1.tar.gz sudo tar --same-owner -zxvf dsf_fhir_1_5_1.tar.gz \",\"The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.\",\"Verify that the fhir system user or group can write into the following folder\",\"/opt/fhir/log\",\"Add certificates and keys\",\"Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/\",\"ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)\",\"ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/\",\"client_certificate.pem (chmod: 440, chown: fhir:docker)\",\"client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L39: - app_client_certificate_private_key.pem.password ... L54: DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L141: app_client_certificate_private_key.pem.password: L142: file: ./secrets/client_certificate_private_key.pem.password \",\"How to chmod / chown\",\"For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:\",\"Set the file content as requested\",\"Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem\",\"Change the owner of the file to the user fhir and the group the file belongs to to docker:chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem\",\"Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA\",\"L114: ssl_certificate_chain_file.pem: L115: file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem \",\"Modify database passwords\",\"/opt/fhir/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user_permanent_delete.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> proxy -> environment:\",\"HTTPS_SERVER_NAME_PORT: TODO_DSF_FHIR_SERVER_EXTERNAL_FQDN:443 Set your FHIR servers external FQDN, e.g. foo.bar.de -> foo.bar.de:443\",\"For additional environment variables, see DSF configuration parameters - FHIR Reverse Proxy\",\"services -> app -> environment:\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de\",\"DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B) Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.\",\"DEV_DSF_FHIR_SERVER_ROLECONFIG: | (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.\",\"For additional environment variables, see FHIR server Configuration Parameters page.\",\"Start the DSF FHIR Server Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\"]},\"742\":{\"h\":\"DSF BPE Server\",\"t\":[\"Add Group/User Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:\",\"sudo groupadd --gid 2202 bpe sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe \",\"Download and Extract Config Files Download and extract prepared DSF BPE server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_bpe_1_5_1.tar.gz sudo tar --same-owner -zxvf dsf_bpe_1_5_1.tar.gz \",\"The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.\",\"Verify that the bpe system user or group can write into the following folders\",\"/opt/bpe/log\",\"Add certificates and keys\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/\",\"client_certificate.pem (chmod: 440 chown: bpe:docker)\",\"client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L13: - app_client_certificate_private_key.pem.password ... L35: DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L89: app_client_certificate_private_key.pem.password: L90: file: ./secrets/client_certificate_private_key.pem.password \",\"Modify database passwords\",\"/opt/bpe/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user_camunda.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> app -> environment:\",\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"For additional environment variables, see the BPE server Configuration Parameters page.\",\"Start the DSF BPE Server (without process plugins) Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\",\"Verify DSF BPE Startup\",\"Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.\",\"Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.\",\"Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.\",\"If you need to debug the TLS connection to your DSF FHIR server use for example:docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443 The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]\"]},\"743\":{\"h\":\"Logs\",\"t\":[\"By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.\",\"On a successful BPE start, you should see the following entries in your BPE log:\",\"INFO Grizzly(1) - INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket open, session SOME_RANDOM_UUID1 INFO Grizzly(1) - INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket open, session SOME_RANDOM_UUID2 \"]},\"744\":{\"h\":\"On-Boarding\",\"t\":[\"Please visit the on boarding website of your network for more information.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"745\":{\"h\":\"Upgrade from DSF 0.9.x\",\"t\":[\"A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.\",\"Do not use your 0.9.x configuration as starting point\",\"There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.\",\"Please use the new installation manual to perform a new installation and use the old setup only for reference.\",\"Instead, please perform the following steps:\",\"Shut down your DSF instances (DSF FHIR Server and DSF BPE).\",\"Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)\",\"Install the new DSF according to the instructions.\",\"You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).\",\"Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).\",\"If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).\",\"If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.\",\"New process plugins\",\"Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.\",\"Use your old virtual machine\",\"We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.\"]},\"746\":{\"h\":\"Upgrade from DSF 1.5.0\",\"t\":[\"Upgrading the DSF from 1.5.0 to 1.5.1 involves modifying the docker-compose.yml files and recreating the containers.\",\"Update to DSF 1.2.0 first\",\"When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.\"]},\"747\":{\"h\":\"Modify DSF FHIR Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.5.1_upgrade\",\"Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.5.1.\",\"version: '3.8' services: proxy: - image: ghcr.io/datasharingframework/fhir_proxy:1.5.0 + image: ghcr.io/datasharingframework/fhir_proxy:1.5.1 restart: on-failure ... app: - image: ghcr.io/datasharingframework/fhir:1.5.0 + image: ghcr.io/datasharingframework/fhir:1.5.1 restart: on-failure ... \",\"Upgrade the DSF FHIR containers From /opt/fhir execute\",\"docker compose up -d && docker compose logs -f \"]},\"748\":{\"h\":\"Modify DSF BPE Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.5.1_upgrade\",\"Modify the DSF BPE docker-compose.yml file, replace the version number with 1.5.1.\",\"version: '3.8' services: app: - image: ghcr.io/datasharingframework/bpe:1.5.0 + image: ghcr.io/datasharingframework/bpe:1.5.1 restart: on-failure ... \",\"Upgrade the DSF BPE containers From /opt/bpe execute\",\"docker compose up -d && docker compose logs -f \",\"Verify your upgrade:\",\"Verify the DSF FHIR server is running in version 1.5.1. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.5.1, [...]\",\"Verify the DSF FHIR server started without errors\",\"Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/ (authentication with your client-certificate)\",\"Verify the DSF BPE server is running in version 1.5.1. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.5.1, [...]\",\"Verify the DSF BPE server started without errors\",\"Verify your install with a ping/pong test\"]},\"749\":{\"h\":\"Contribute code\",\"t\":[\"Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.\"]},\"750\":{\"h\":\"Benefits of Contributing:\",\"t\":[\"Foster community growth and diversification.\",\"Sharpen your coding skills.\",\"Gain recognition in the DSF community.\",\"Directly impact the future of data sharing in medicine.\",\"Start now by visiting our contribution pages. Every line of code helps us build a stronger and more versatile DSF.\"]},\"751\":{\"h\":\"General\"},\"752\":{\"h\":\"Code style\",\"t\":[\"You can import our code style for your specific IDE:\",\"Eclipse. Open your preferences, click on Java, Code style, Formatter, Import and select the downloaded file.\",\"IntelliJ. Open your settings, click on Editor, Code style, Java, the settings icon, import scheme, IntelliJ and select the downloaded file.\",\"Pull requests will only be approved if the code is formatted according to the code style configurations above. To format the code with maven before pushing to GitHub, use mvn compile -Pformat-and-sort.\"]},\"753\":{\"h\":\"Branching strategy\",\"t\":[\"Git Flow is used as this project's branching strategy. Therefore, you will find the following structure:\",\"main\",\"develop\",\"issue\",\"hotfix\",\"release\",\"Notice that only the first two elements listed are actual branches. The other elements are containers to hold all branches belonging to that category.\"]},\"754\":{\"h\":\"Branch naming\",\"t\":[\"The following ruleset is applied to name branches:\",\"issue/_\",\"hotfix/\",\"release/\"]},\"755\":{\"h\":\"Setting up the project\",\"t\":[\"This chapter lists all important requirements to get the project buildable and running properly.\"]},\"756\":{\"h\":\"Java\",\"t\":[\"This project uses Java JDK 17, so make sure you have it installed on your system.\"]},\"757\":{\"h\":\"Docker\",\"t\":[\"Docker is used in this project to test database functionality and to run more complex test-setups.\"]},\"758\":{\"h\":\"Maven\",\"t\":[\"The project relies on Maven as its management tool.Important: When building the project you might encounter the following error:Could not determine gpg versionGPG is used to sign artifacts for public release. Since this does not concern contributors, you may skip this step in the maven build process with -Dgpg.skip.\"]},\"759\":{\"h\":\"Workflow\",\"t\":[\"Create an issue or comment on an issue that you want to contribute some feature\",\"Fork the repository, create a branch and mention it in the issue\",\"If you desire feedback, create a pull request or comment on it in the issue. Feel free to @ any member with write permissions if you feel like your request has not been registered yet. They will review your changes and/or change requests\",\"If your changes are production-ready, create a pull request.\"]},\"760\":{\"h\":\"Pull request process\",\"t\":[\"We follow Martin Fowler's method for managing pull requests. This approach categorizes pull requests based on the level of trust and experience of the contributor, as well as the impact of the changes. Here's how we apply it:\",\"Ship: For our most trusted contributors with a proven track record. These members can merge their pull requests without prior review, typically for minor or highly confident changes.\",\"Show: This level is for trusted contributors who need some oversight, as well as for experienced developers who want to demonstrate how certain changes should be made in the future. They create pull requests and show their work to the team.\",\"Ask: New or less experienced contributors, as well as those submitting more complex changes, fall into this category. They are required to ask for feedback and approval before their changes can be merged, ensuring thorough review and quality control.\",\"This method helps us maintain a balance between code quality and efficient development, recognizing the varying levels of expertise among our contributors.\",\"For more information on Fowler's approach, visit Martin Fowler's article on Pull Requests.\"]},\"761\":{\"h\":\"Data Security in DSF Development\",\"t\":[\"The DSF (Data Sharing Framework) and its process plugins are frequently used to transmit sensitive personal data. To prevent the release of personal data during development, please adhere to the following guidelines:\",\"No development with real personal data: Always use anonymized or synthetic data for development purposes.\",\"No personal data in repositories: Ensure no personal data is present in local and remote repositories intended for publication, not even temporarily.\",\"Review all log files: Before using log files in issues, examples, etc., thoroughly review them to ensure no personal and sensitive data is included.\"]},\"762\":{\"h\":\"Contribute documentation\",\"t\":[\"Join us in enhancing our documentation!\",\"We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!\",\"Contact us with feedback: If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.\",\"Create an issue: You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at Data Sharing Framework Documentation and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.\",\"Contribute directly with a pull request: If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at Data Sharing Framework Documentation and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.\",\"We're excited to see your suggestions and are grateful for every contribution that helps us improve. Let's build better documentation together!\"]},\"763\":{\"h\":\"Contribute\",\"t\":[\"We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.\"]},\"764\":{\"h\":\"\",\"t\":[\"Helping other users: \",\"MII Zulip: If you are part of the German Medical Informatics Initiative, join the MII Zulip community to assist others, share your knowledge, and learn from fellow contributors.\",\"GitHub Discussions: Engage with our community in GitHub Discussions by answering questions, providing feedback, and sharing your insights.\",\"Testing releases: \",\"Stay ahead: Help us testing the latest releases. Your feedback on functionality, bugs, and user experience is invaluable.\",\"Report findings: Share your testing results to help us refine and enhance our releases.\",\"Reviewing changes: \",\"Peer review: Contribute by reviewing pull requests. Your insights can help ensure the quality and integrity of code changes.\",\"Constructive feedback: Offer constructive feedback and suggestions to help improve and refine proposed changes.\",\"Documentation changes: \",\"Improve documentation: Help us improving and updating our documentation. Clear and accurate documentation is crucial for user understanding and success. Please checkout our Getting started guide for documentation contributions to DSF.\",\"Suggest improvements: If you notice gaps or areas for enhancement in our documentation, we welcome your suggestions and contributions.\",\"Contributing bug reports: \",\"Report bugs: If you find a bug, please report it via an issue on GitHub. Detailed bug reports are incredibly helpful.\",\"Reproduction steps: Include steps to reproduce the bug and any relevant logs according to our bug report issue template.\",\"Contributing feature requests: \",\"Suggest features: You have an idea for a new feature? We'd love to hear it! Open an issue to describe your proposed feature and its potential benefits according to our feature request template.\",\"Collaborate on implementation: If you're able to, contribute to the development of your proposed feature or bug fix. Collaboration can lead to more innovative and effective solutions. Please checkout our Getting started guide for code contributions to DSF.\",\"Contributing process plugins: \",\"Develop process plugins for the DSF: If you have ideas for a process plugin, we encourage you to develop and contribute them. Our Getting started guide for process plugin development will be a useful reference.\",\"Share your work: Your plugins could be a valuable addition to the ecosystem and benefit other users.\",\"Before you start contributing, we recommend reading our getting started guidelines for detailed information on our processes and standards. This ensures a smooth and productive experience for everyone involved.\",\"Your contributions in any form, are what drives the continuous growth and improvement of this project. Thank you for being a part of our community and for your willingness to contribute!\"]},\"765\":{\"h\":\"Develop Process Plugins\"},\"766\":{\"h\":\"Overview\",\"t\":[\"Create a new process plugin\",\"Upgrade processes from 0.9.x\"]},\"767\":{\"h\":\"Create a new process plugin\",\"t\":[\"Visit the page to get started.\",\"Work in progress\",\"We are currently in the process of updating the written documentation on how to create a DSF process plugin. In the meantime we recommend to study the oldstable version of the . Additionally, we recommend to take a look at the upgraded DSF processes here:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"768\":{\"h\":\"Upgrade processes from 0.9.x\",\"t\":[\"Work in progress\",\"We are currently in the process of updating the written documentation on how to upgrade a DSF process plugin to DSF 1.0.0. In the meantime we recommend to take a look at the provided sample plugin and the upgraded DSF plugins:\",\"The hello world plugin\",\"The ping pong plugin\",\"The update allowlist plugin\"]},\"769\":{\"h\":\"Maintain a DSF instance\"},\"770\":{\"h\":\"Overview\",\"t\":[\"Install DSF 1.5.2\",\"Upgrade from DSF 0.9.x\",\"Allow List Management\",\"FHIR Reverse Proxy \",\"Configuration Parameters\",\"FHIR Server \",\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\",\"BPE Reverse Proxy \",\"Configuration Parameters\",\"BPE Server \",\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\"]},\"771\":{\"h\":\"Allow List Management\",\"t\":[\"You can read all about the concept of Allow Lists .\"]},\"772\":{\"h\":\"Overview\",\"t\":[\"To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.\",\"The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.\"]},\"773\":{\"h\":\"Prerequisites\",\"t\":[\"Deployed DSF instance (test or production infrastructure) 1.1 If none exists yet, read the installation guide\",\"Certificate 2.1 If none exists yet, read the certificate requirements\",\"Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de\",\"FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir\",\"Contact details from a responsible person of your organization\",\"Access to the E-Mail address from your organization for verification\"]},\"774\":{\"h\":\"Start here\",\"t\":[\"When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:\",\"Test infrastructure\",\"Production infrastructure\",\"We use different highlight colors for the DSF Allow List Management Tool: Green for the Test environment and blue for the Production infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"775\":{\"h\":\"Install Plugins\",\"t\":[\"Marketplace for process plugins\",\"To install and learn more about each Process Plugin, you can visit the Marketplace here.\"]},\"776\":{\"h\":\"\",\"t\":[\"You can find an overview of compatable process plugins below (last updated 25/07/2024).\",\"Process Plugin\",\"released for test\",\"released for production\",\"Ping-Pong\",\"v1.0.1.0\",\"v1.0.1.0\",\"Allow-List\",\"v1.0.0.1\",\"v1.0.0.1\",\"MII Process Feasibility\",\"v1.0.0.5\",\"v1.0.0.5\",\"MII Process Report\",\"v1.1.0.1\",\"v1.0.0.0\",\"MII Process Data Transfer\",\"v1.0.0.1\",\"v1.0.0.1\",\"MII Process Data Sharing\",\"v1.0.1.0\",\"v1.0.1.0\",\"NUM-RDP\",\"v1.1.0.0\",\"v1.1.0.0\",\"Explore and install Process Plugins in the Marketplace. Details on each plugin are available here.\",\"Deploying the process plugin to the DSF involves copy the process jar-file and configuring environment variable for the business process engine (BPE).\"]},\"777\":{\"h\":\"Prerequisites\",\"t\":[\"A DSF installation of version 1.3.x or higher. An installation guide can be found here.\"]},\"778\":{\"h\":\"Deployment\",\"t\":[\"Add the process jar-file to the DSF BPE folder /opt/bpe/process:\",\"wget (your jar-file download link) \",\"For example:\",\" wget https://github.com/medizininformatik-initiative/mii-process-data-sharing/releases/download/v1.0.0.1/mii-process-data-sharing-1.0.0.1.jar \",\"Make sure the process is readable by the bpe user or group, for example by executing:\",\"sudo chmod 440 (your jar-file name.jar) sudo chown root:bpe (your jar-file name.jar) \",\"For example:\",\"sudo chmod 440 mii-process-data-sharing-1.0.0.1.jar sudo chown root:bpe mii-process-data-sharing-1.0.0.1.jar \",\"Modify the process exclude config in /opt/bpe/docker-compose.yml\",\"Reminder: Update/verify required configurations in docker-compose.yml\"]},\"779\":{\"h\":\"Install DSF 1.5.2\",\"t\":[\"In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.\",\"Unified installation manual\",\"The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.\"]},\"780\":{\"h\":\"Prerequisites\"},\"781\":{\"h\":\"Virtual Machines\",\"t\":[\"DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\",\"DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD\"]},\"782\":{\"h\":\"Docker / Docker-Compose\",\"t\":[\"Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/install.\",\"sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \\\"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\\\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo systemctl enable docker.service sudo systemctl enable containerd.service \",\"The current version of docker compose is installed with the current docker version.\"]},\"783\":{\"h\":\"Client/Server Certificates\",\"t\":[\"Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:\",\"Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)\",\"Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)\",\"If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.\"]},\"784\":{\"h\":\"Network setup / Network access\",\"t\":[\"The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.\",\"The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.\",\"Here is a quick overview of the expected network setup.\",\"Source\",\"Target\",\"Port\",\"Protocol\",\"DSF BPE (local)\",\"DSF FHIR (local)\",\"443\",\"https, wss\",\"DSF BPE (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https\",\"DSF FHIR (local)\",\"DSF FHIR (other DSF communication partners)\",\"443\",\"https (HTTP HEAD only)\",\"DSF BPE (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https\",\"DSF FHIR (other DSF communication partners)\",\"DSF FHIR (local)\",\"443\",\"https (HTTP HEAD only)\",\"Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.net or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.\"]},\"785\":{\"h\":\"Setup\"},\"786\":{\"h\":\"Prepare Certificates\",\"t\":[\"Server Certificate (certificate A)This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)\",\"Store PEM encoded certificate as ssl_certificate_file.pem\",\"Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem\",\"Client Certificate (Certificate B)This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)\",\"Store PEM encoded certificate as client_certificate.pem\",\"Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem\"]},\"787\":{\"h\":\"DSF FHIR Server\",\"t\":[\"Add Group/User Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:\",\"sudo groupadd --gid 2101 fhir sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir \",\"Download and Extract Config Files Download and unpack the prepared DSF FHIR server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_fhir_1_5_2.tar.gz sudo tar --same-owner -zxvf dsf_fhir_1_5_2.tar.gz \",\"The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.\",\"Verify that the fhir system user or group can write into the following folder\",\"/opt/fhir/log\",\"Add certificates and keys\",\"Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/\",\"ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)\",\"ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/\",\"client_certificate.pem (chmod: 440, chown: fhir:docker)\",\"client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L39: - app_client_certificate_private_key.pem.password ... L54: DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L141: app_client_certificate_private_key.pem.password: L142: file: ./secrets/client_certificate_private_key.pem.password \",\"How to chmod / chown\",\"For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:\",\"Set the file content as requested\",\"Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem\",\"Change the owner of the file to the user fhir and the group the file belongs to to docker:chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem\",\"Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA\",\"L114: ssl_certificate_chain_file.pem: L115: file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem \",\"Modify database passwords\",\"/opt/fhir/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/fhir/secrets/db_user_permanent_delete.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> proxy -> environment:\",\"HTTPS_SERVER_NAME_PORT: TODO_DSF_FHIR_SERVER_EXTERNAL_FQDN:443 Set your FHIR servers external FQDN, e.g. foo.bar.de -> foo.bar.de:443\",\"For additional environment variables, see DSF configuration parameters - FHIR Reverse Proxy\",\"services -> app -> environment:\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de\",\"DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B) Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.\",\"DEV_DSF_FHIR_SERVER_ROLECONFIG: | (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.\",\"For additional environment variables, see FHIR server Configuration Parameters page.\",\"Start the DSF FHIR Server Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\"]},\"788\":{\"h\":\"DSF BPE Server\",\"t\":[\"Add Group/User Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:\",\"sudo groupadd --gid 2202 bpe sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe \",\"Download and Extract Config Files Download and extract prepared DSF BPE server config files and folder structure:\",\"cd /opt wget https://dsf.dev/download/dsf_bpe_1_5_2.tar.gz sudo tar --same-owner -zxvf dsf_bpe_1_5_2.tar.gz \",\"The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.\",\"Verify that the bpe system user or group can write into the following folders\",\"/opt/bpe/log\",\"Add certificates and keys\",\"Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/\",\"client_certificate.pem (chmod: 440 chown: bpe:docker)\",\"client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)\",\"If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password\",\"If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file\",\"L13: - app_client_certificate_private_key.pem.password ... L35: DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password ... L89: app_client_certificate_private_key.pem.password: L90: file: ./secrets/client_certificate_private_key.pem.password \",\"Modify database passwords\",\"/opt/bpe/secrets/db_liquibase.password\",\"Generate a random password (min. 32 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"/opt/bpe/secrets/db_user_camunda.password\",\"Generate a random password (min. 16 characters recommended) and replace the content of the file.\",\"Modify the docker-compose.yml file and set environment variables to the appropriate values\",\"services -> app -> environment:\",\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir\",\"For additional environment variables, see the BPE server Configuration Parameters page.\",\"Start the DSF BPE Server (without process plugins) Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)\",\"Verify DSF BPE Startup\",\"Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.\",\"Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.\",\"Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.\",\"If you need to debug the TLS connection to your DSF FHIR server use for example:docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443 The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]\"]},\"789\":{\"h\":\"Logs\",\"t\":[\"By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.\",\"On a successful BPE start, you should see the following entries in your BPE log:\",\"INFO Grizzly(1) - INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket open, session SOME_RANDOM_UUID1 INFO Grizzly(1) - INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket open, session SOME_RANDOM_UUID2 \"]},\"790\":{\"h\":\"On-Boarding\",\"t\":[\"Please visit the on boarding website of your network for more information.\",\"Ideas for improvement?\",\"Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!\"]},\"791\":{\"h\":\"Upgrade from DSF 0.9.x\",\"t\":[\"A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.\",\"Do not use your 0.9.x configuration as starting point\",\"There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.\",\"Please use the new installation manual to perform a new installation and use the old setup only for reference.\",\"Instead, please perform the following steps:\",\"Shut down your DSF instances (DSF FHIR Server and DSF BPE).\",\"Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)\",\"Install the new DSF according to the instructions.\",\"You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).\",\"Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).\",\"If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).\",\"If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.\",\"New process plugins\",\"Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.\",\"Use your old virtual machine\",\"We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.\"]},\"792\":{\"h\":\"Upgrade from DSF 1.5.1\",\"t\":[\"Upgrading the DSF from 1.5.1 to 1.5.2 involves modifying the docker-compose.yml files and recreating the containers.\",\"Update to DSF 1.2.0 first\",\"When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.\"]},\"793\":{\"h\":\"Modify DSF FHIR Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.5.2_upgrade\",\"Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.5.2.\",\"version: '3.8' services: proxy: - image: ghcr.io/datasharingframework/fhir_proxy:1.5.1 + image: ghcr.io/datasharingframework/fhir_proxy:1.5.2 restart: on-failure ... app: - image: ghcr.io/datasharingframework/fhir:1.5.1 + image: ghcr.io/datasharingframework/fhir:1.5.2 restart: on-failure ... \",\"Upgrade the DSF FHIR containers From /opt/fhir execute\",\"docker compose up -d && docker compose logs -f \"]},\"794\":{\"h\":\"Modify DSF BPE Server Setup\",\"t\":[\"Preparation / Backup\",\"We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade. For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.5.2_upgrade\",\"Modify the DSF BPE docker-compose.yml file, replace the version number with 1.5.2.\",\"version: '3.8' services: app: - image: ghcr.io/datasharingframework/bpe:1.5.1 + image: ghcr.io/datasharingframework/bpe:1.5.2 restart: on-failure ... \",\"Upgrade the DSF BPE containers From /opt/bpe execute\",\"docker compose up -d && docker compose logs -f \",\"Verify your upgrade:\",\"Verify the DSF FHIR server is running in version 1.5.2. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.5.2, [...]\",\"Verify the DSF FHIR server started without errors\",\"Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/ (authentication with your client-certificate)\",\"Verify the DSF BPE server is running in version 1.5.2. The log should contain a message:INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.5.2, [...]\",\"Verify the DSF BPE server started without errors\",\"Verify your install with a ping/pong test\"]},\"795\":{\"h\":\"BPE Server\"},\"796\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\"]},\"797\":{\"h\":\"Access Control\"},\"798\":{\"h\":\"Overview\",\"t\":[\"The DSF BPE server provides a user interface for administrators. Without any additional configuration the user interface is not accessible with the organizations X.509 client certificate or any other certificate or OpenID Connect authenticated user.\",\"OpenID Connect\",\"To enable OpenID Connect authentication of local user, see the DSF BPE server OpenID Connect configuration page.\",\"Access to the user interface can be enabled for client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.\",\"The listing below shows a minimal configuration to enable access for a specific client-certificate:\",\" DEV_DSF_BPE_SERVER_ROLECONFIG: | - example_read_only_role: thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128} dsf-role: - ADMIN \",\"The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.\",\"Certificate Thumbprints\",\"SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:\",\"certtool --fingerprint --hash=sha512 --infile=certificate.pem \",\"Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string \\\"\\\" or a single block scalar | character as the value for the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG if no roles should be configured.\"]},\"799\":{\"h\":\"Matching Users\",\"t\":[\"To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.\"]},\"800\":{\"h\":\"thumbprint\",\"t\":[\"The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.\"]},\"801\":{\"h\":\"email\",\"t\":[\"Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the emailclaim from the access token will be matched against the property values.\"]},\"802\":{\"h\":\"token-role and token-group\",\"t\":[\"With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.\"]},\"803\":{\"h\":\"DSF and Practitioner Roles\",\"t\":[\"Two types of roles can be applied to matched users.\"]},\"804\":{\"h\":\"dsf-role\",\"t\":[\"DSF roles specified via the dsf-role property define general access to the user interface. Allowed values are:\",\"ADMIN.\"]},\"805\":{\"h\":\"practitioner-role\",\"t\":[\"The BPE server currently does not support any practionier-roles.\"]},\"806\":{\"h\":\"Examples\",\"t\":[\"The first example defines a group of DSF administrators. Two client certificates match against this role:\",\" DEV_DSF_BPE_SERVER_ROLECONFIG: | - certificate-admins: thumbprint: - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c dsf-role: - ADMIN \",\"The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:\",\" DEV_DSF_BPE_SERVER_ROLECONFIG: | - token-role-admins: token-role: admin dsf-role: - ADMIN \",\"The third example allows administrator access and users e-mail addresses to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:\",\" DEV_DSF_BPE_SERVER_ROLECONFIG: | - email-admins: email: - first.user@test.org - second.user@test.org dsf-role: - ADMIN \"]},\"807\":{\"h\":\"Configuration Parameters\"},\"808\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"809\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"810\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"811\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"812\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"813\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"814\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"815\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"816\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"817\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"818\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"819\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"820\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"821\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"822\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"823\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"824\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"825\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"826\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"827\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"828\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"829\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"830\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"831\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"832\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"833\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"834\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"835\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server to execute database migrations\",\"Default:liquibase_user\"]},\"836\":{\"h\":\"DEV_DSF_BPE_DB_URL\",\"t\":[\"Property: dev.dsf.bpe.db.url\",\"Required: Yes\",\"Description: Address of the database used for the DSF BPE server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/bpe\"]},\"837\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server for camunda processes\",\"Default:camunda_users\"]},\"838\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.password\",\"Required: Yes\",\"Description: Password to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"Example:/run/secrets/db_user_camunda.password\"]},\"839\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.username\",\"Required: No\",\"Description: Username to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME\",\"Default:camunda_server_user\"]},\"840\":{\"h\":\"DEV_DSF_BPE_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server\",\"Default:bpe_users\"]},\"841\":{\"h\":\"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.password\",\"Required: Yes\",\"Description: Password to access the database from the DSF BPE server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"842\":{\"h\":\"DEV_DSF_BPE_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.username\",\"Required: No\",\"Description: Username to access the database from the DSF BPE server\",\"Default:bpe_server_user\"]},\"843\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_CURRENTUSER\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.currentUser\",\"Required: No\",\"Description: To enable logging of the currently requesting user set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"844\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_DBSTATEMENT\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.dbStatement\",\"Required: No\",\"Description: To enable logging of DB queries set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"845\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityEnd\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity end, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"846\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityStart\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity start, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"847\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variables\",\"Required: No\",\"Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"848\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variablesLocal\",\"Required: No\",\"Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"849\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.webserviceRequest\",\"Required: No\",\"Description: To enable logging of webservices requests set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"850\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"851\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"852\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"853\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.connect\",\"Required: No\",\"Description: Timeout in milliseconds until a connection is established with the local DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"854\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.read\",\"Required: No\",\"Description: Timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"855\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true\",\"Default:false\"]},\"856\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.connect\",\"Required: No\",\"Description: Timeout in milliseconds until a connection is established with a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:5000\"]},\"857\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.read\",\"Required: No\",\"Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"858\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"859\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"860\":{\"h\":\"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server\",\"Default:?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"861\":{\"h\":\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.bpe.fhir.server.base.url\",\"Required: Yes\",\"Description: Base address of the local DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"862\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.max\",\"Required: No\",\"Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries\",\"Default:-1\"]},\"863\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server\",\"Default:5000\"]},\"864\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about task resources from the DSF FHIR server\",\"Default:?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"865\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate.pem\"]},\"866\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem\"]},\"867\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem.password\"]},\"868\":{\"h\":\"DEV_DSF_BPE_MAIL_FROMADDRESS\",\"t\":[\"Property: dev.dsf.bpe.mail.fromAddress\",\"Required: No\",\"Description: Mail service sender address\",\"Example:sender@localhost\"]},\"869\":{\"h\":\"DEV_DSF_BPE_MAIL_HOST\",\"t\":[\"Property: dev.dsf.bpe.mail.host\",\"Required: No\",\"Description: SMTP server hostname\",\"Example:smtp.server.de\"]},\"870\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize\",\"Required: No\",\"Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:4\"]},\"871\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation\",\"Required: No\",\"Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:/opt/bpe/log/bpe.log\"]},\"872\":{\"h\":\"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.password\",\"Required: No\",\"Description: SMTP server authentication password\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"873\":{\"h\":\"DEV_DSF_BPE_MAIL_PORT\",\"t\":[\"Property: dev.dsf.bpe.mail.port\",\"Required: No\",\"Description: SMTP server port\",\"Example:465\",\"Default:0\"]},\"874\":{\"h\":\"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.replyToAddresses\",\"Required: No\",\"Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported\",\"Example:reply.to@localhost\"]},\"875\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT\",\"t\":[\"Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent\",\"Required: No\",\"Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"876\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP\",\"t\":[\"Property: dev.dsf.bpe.mail.sendTestMailOnStartup\",\"Required: No\",\"Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"877\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore\",\"Required: No\",\"Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smime_certificate.p12\"]},\"878\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore.password\",\"Required: No\",\"Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"Example:/run/secrets/smime_certificate.p12.password\"]},\"879\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddresses\",\"Required: No\",\"Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported\",\"Example:recipient@localhost\"]},\"880\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSESCC\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddressesCc\",\"Required: No\",\"Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported\",\"Example:cc.recipient@localhost\"]},\"881\":{\"h\":\"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.mail.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_trust_certificates.pem\"]},\"882\":{\"h\":\"DEV_DSF_BPE_MAIL_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.mail.username\",\"Required: No\",\"Description: SMTP server authentication username\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"883\":{\"h\":\"DEV_DSF_BPE_MAIL_USESMTPS\",\"t\":[\"Property: dev.dsf.bpe.mail.useSmtps\",\"Required: No\",\"Description: To enable SMTP over TLS (smtps), set to true\",\"Default:false\"]},\"884\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.corePoolSize\",\"Required: No\",\"Description: Process engine job executor core pool size\",\"Default:4\"]},\"885\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.maxPoolSize\",\"Required: No\",\"Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full\",\"Default:10\"]},\"886\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.queueSize\",\"Required: No\",\"Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy\",\"Default:40\"]},\"887\":{\"h\":\"DEV_DSF_BPE_PROCESS_EXCLUDED\",\"t\":[\"Property: dev.dsf.bpe.process.excluded\",\"Required: No\",\"Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List\",\"Example:dsfdev_updateAllowList|1.0, another_process|x.y\"]},\"888\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.max\",\"Required: No\",\"Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries\",\"Default:-1\"]},\"889\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment\",\"Default:5000\"]},\"890\":{\"h\":\"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY\",\"t\":[\"Property: dev.dsf.bpe.process.plugin.directroy\",\"Required: No\",\"Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server\",\"Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit\",\"Default:process\"]},\"891\":{\"h\":\"DEV_DSF_BPE_PROCESS_RETIRED\",\"t\":[\"Property: dev.dsf.bpe.process.retired\",\"Required: No\",\"Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Retire processes that where deployed previously but are not anymore available\",\"Example:old_process|x.y\"]},\"892\":{\"h\":\"DEV_DSF_BPE_PROCESS_THREADS\",\"t\":[\"Property: dev.dsf.bpe.process.threads\",\"Required: No\",\"Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores\",\"Default:-1\"]},\"893\":{\"h\":\"DEV_DSF_BPE_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.bpe.server.base.url\",\"Required: No\",\"Description: Base address of the BPE server, configure when exposing the web-ui\",\"Example:https://foo.bar/bpe\",\"Default:https\"]},\"894\":{\"h\":\"DEV_DSF_BPE_SERVER_ROLECONFIG\",\"t\":[\"Property: dev.dsf.bpe.server.roleConfig\",\"Required: No\",\"Description: Role config YAML as defined in FHIR Server: Access Control.\"]},\"895\":{\"h\":\"DEV_DSF_BPE_SERVER_STATIC_RESOURCE_CACHE\",\"t\":[\"Property: dev.dsf.bpe.server.static.resource.cache\",\"Required: No\",\"Description: To disable static resource caching, set to false\",\"Recommendation: Only set to false for development\",\"Default:true\"]},\"896\":{\"h\":\"DEV_DSF_BPE_SERVER_UI_THEME\",\"t\":[\"Property: dev.dsf.bpe.server.ui.theme\",\"Required: No\",\"Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod\"]},\"897\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"898\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"899\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"900\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"901\":{\"h\":\"OpenID Connect\"},\"902\":{\"h\":\"Overview\",\"t\":[\"Access to the DSF BPE server user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.\",\"The DSF BPE server supports Authorization Code Flow for the user interface. Back-Channel Logout is also supported.\",\"BPE Reverse Proxy\",\"The DSF BPE reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter needs to be set to optional.\"]},\"903\":{\"h\":\"Authorization Code Flow\",\"t\":[\"To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF BPE server accepts logout tokens at DEV_DSF_BPE_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.\"]},\"904\":{\"h\":\"Additional ODIC Configuration Parameter\",\"t\":[\"A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF BPE server configuration parameter page.\",\"For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.\"]},\"905\":{\"h\":\"Example\",\"t\":[\"services: app: image: ghcr.io/datasharingframework/bpe:1.5.2 # ... secrets: - keycloak_root_ca.pem # ... environment: # ... DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true' DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true' DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true' DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-bpe DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3 # ... secrets: keycloak_root_ca.pem: file: ./secrets/keycloak_root_ca.pem \"]},\"906\":{\"h\":\"BPE Reverse Proxy\"},\"907\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"908\":{\"h\":\"Configuration Parameters\"},\"909\":{\"h\":\"APP_SERVER_IP\",\"t\":[\"Required: Yes\",\"Description: Hostname or IP-Address of the DSF BPE server application container, the reverse proxy target\",\"Example:app, 172.28.1.3\"]},\"910\":{\"h\":\"HTTPS_SERVER_NAME_PORT\",\"t\":[\"Required: Yes\",\"Description: External FQDN of your DSF BPE server with port, typically 443\",\"Example:my-external.fqdn:443\"]},\"911\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"912\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"913\":{\"h\":\"PROXY_PASS_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"914\":{\"h\":\"PROXY_PASS_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"915\":{\"h\":\"SERVER_CONTEXT_PATH\",\"t\":[\"Required: No\",\"Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.\",\"Default:/bpe\"]},\"916\":{\"h\":\"SSL_CA_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_certificate_file.pem\"]},\"917\":{\"h\":\"SSL_CA_DN_REQUEST_FILE\",\"t\":[\"Required: No\",\"Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_dn_request_file.pem\"]},\"918\":{\"h\":\"SSL_CERTIFICATE_CHAIN_FILE\",\"t\":[\"Required: No\",\"Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_chain_file.pem\"]},\"919\":{\"h\":\"SSL_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_file.pem\"]},\"920\":{\"h\":\"SSL_CERTIFICATE_KEY_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_key_file.pem\"]},\"921\":{\"h\":\"SSL_VERIFY_CLIENT\",\"t\":[\"Required: No\",\"Description: Modifies the apache mod_ssl config parameter SSLVerifyClient\",\"Recommendation: Set to optional when using OIDC authentication\",\"Default:require\"]},\"922\":{\"h\":\"FHIR Server\"},\"923\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\"]},\"924\":{\"h\":\"Access Control\"},\"925\":{\"h\":\"Overview\",\"t\":[\"The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"OpenID Connect\",\"To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.\",\"Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.\",\"The listing below shows a minimal configuration to enable read access for a specific client-certificate:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - example_read_only_role: thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128} dsf-role: - READ - SEARCH - HISTORY \",\"The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.\",\"Certificate Thumbprints\",\"SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:\",\"certtool --fingerprint --hash=sha512 --infile=certificate.pem \",\"Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string \\\"\\\" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.\"]},\"926\":{\"h\":\"Matching Users\",\"t\":[\"To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.\"]},\"927\":{\"h\":\"thumbprint\",\"t\":[\"The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.\"]},\"928\":{\"h\":\"email\",\"t\":[\"Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the emailclaim from the access token will be matched against the property values.\"]},\"929\":{\"h\":\"token-role and token-group\",\"t\":[\"With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.\"]},\"930\":{\"h\":\"DSF and Practitioner Roles\",\"t\":[\"Two types of roles can be applied to matched users.\"]},\"931\":{\"h\":\"dsf-role\",\"t\":[\"DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:\",\"CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.\"]},\"932\":{\"h\":\"practitioner-role\",\"t\":[\"In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystem resources. Codes are specified in the form system-url|code. If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinition resource, the user can start the process if he also has the dsf-roleCREATE.\",\"Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:\",\"UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.\"]},\"933\":{\"h\":\"Examples\",\"t\":[\"The first example defines a group of DSF administrators. Two client certificates match against this role:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - certificate-admins: thumbprint: - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - token-role-admins: token-role: admin dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - read-only: email: - first.user@test.org - second.user@test.org dsf-role: - READ - SEARCH - HISTORY \"]},\"934\":{\"h\":\"Configuration Parameters\"},\"935\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"936\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"937\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"938\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.connect\",\"Required: No\",\"Description: Timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"939\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.read\",\"Required: No\",\"Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:10000\"]},\"940\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client _trust_certificates.pem\"]},\"941\":{\"h\":\"DEV_DSF_FHIR_CLIENT_VERBOSE\",\"t\":[\"Property: dev.dsf.fhir.client.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"942\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"943\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"944\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"945\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server to execute database migrations\",\"Default:liquibase_user\"]},\"946\":{\"h\":\"DEV_DSF_FHIR_DB_URL\",\"t\":[\"Property: dev.dsf.fhir.db.url\",\"Required: Yes\",\"Description: Address of the database used for the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/fhir\"]},\"947\":{\"h\":\"DEV_DSF_FHIR_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server\",\"Default:fhir_users\"]},\"948\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.password\",\"Required: Yes\",\"Description: Password to access the database from the DSF FHIR server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"949\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes\",\"Default:fhir_permanent_delete_users\"]},\"950\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.password\",\"Required: Yes\",\"Description: Password to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"Example:/run/secrets/db_user_permanent_delete.password\"]},\"951\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.username\",\"Required: No\",\"Description: Username to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME\",\"Default:fhir_server_permanent_delete_user\"]},\"952\":{\"h\":\"DEV_DSF_FHIR_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.username\",\"Required: No\",\"Description: Username to access the database from the DSF FHIR server\",\"Default:fhir_server_user\"]},\"953\":{\"h\":\"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_CURRENTUSER\",\"t\":[\"Property: dev.dsf.fhir.debug.log.message.currentUser\",\"Required: No\",\"Description: To enable logging of the currently requesting user set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"954\":{\"h\":\"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_DBSTATEMENT\",\"t\":[\"Property: dev.dsf.fhir.debug.log.message.dbStatement\",\"Required: No\",\"Description: To enable logging of DB queries set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"955\":{\"h\":\"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST\",\"t\":[\"Property: dev.dsf.fhir.debug.log.message.webserviceRequest\",\"Required: No\",\"Description: To enable logging of webservices requests set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"956\":{\"h\":\"DEV_DSF_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.fhir.server.base.url\",\"Required: Yes\",\"Description: Base address of this DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"957\":{\"h\":\"DEV_DSF_FHIR_SERVER_INIT_BUNDLE\",\"t\":[\"Property: dev.dsf.fhir.server.init.bundle\",\"Required: No\",\"Description: Fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source\",\"Default:conf/bundle.xml\"]},\"958\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE\",\"t\":[\"Property: dev.dsf.fhir.server.organization.identifier.value\",\"Required: Yes\",\"Description: Local identifier value used in the Allow-List\",\"Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization\",\"Example:hospital.com\"]},\"959\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"t\":[\"Property: dev.dsf.fhir.server.organization.thumbprint\",\"Required: Yes\",\"Description: The SHA-512 thumbprint of the local organization client certificate\",\"Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem\"]},\"960\":{\"h\":\"DEV_DSF_FHIR_SERVER_PAGE_COUNT\",\"t\":[\"Property: dev.dsf.fhir.server.page.count\",\"Required: No\",\"Description: Page size returned by the DSF FHIR server when reading/searching fhir resources\",\"Default:20\"]},\"961\":{\"h\":\"DEV_DSF_FHIR_SERVER_ROLECONFIG\",\"t\":[\"Property: dev.dsf.fhir.server.roleConfig\",\"Required: No\",\"Description: Role config YAML as defined in FHIR Server: Access Control.\"]},\"962\":{\"h\":\"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE\",\"t\":[\"Property: dev.dsf.fhir.server.static.resource.cache\",\"Required: No\",\"Description: To disable static resource caching, set to false\",\"Recommendation: Only set to false for development\",\"Default:true\"]},\"963\":{\"h\":\"DEV_DSF_FHIR_SERVER_UI_THEME\",\"t\":[\"Property: dev.dsf.fhir.server.ui.theme\",\"Required: No\",\"Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod\"]},\"964\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"965\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"966\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"967\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"968\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"969\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"970\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"971\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"972\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"973\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"974\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"975\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"976\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"977\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"978\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"979\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"980\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"981\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"982\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"983\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"984\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"985\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"986\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"987\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"988\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"989\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"990\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"991\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"992\":{\"h\":\"OpenID Connect\"},\"993\":{\"h\":\"Overview\",\"t\":[\"Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.\",\"The DSF FHIR server supports Authorization Code Flow for the user interface as well as Bearer Token Authentication for the REST API. Back-Channel Logout is also supported.\",\"FHIR Reverse Proxy\",\"The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter needs to be set to optional.\"]},\"994\":{\"h\":\"Authorization Code Flow\",\"t\":[\"To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.\"]},\"995\":{\"h\":\"Bearer Token Authentication\",\"t\":[\"To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\"]},\"996\":{\"h\":\"Additional ODIC Configuration Parameter\",\"t\":[\"A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.\",\"For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.\"]},\"997\":{\"h\":\"Example\",\"t\":[\"services: app: image: ghcr.io/datasharingframework/fhir:1.5.2 # ... secrets: - keycloak_root_ca.pem # ... environment: # ... DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true' DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true' DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true' DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3 # ... secrets: keycloak_root_ca.pem: file: ./secrets/keycloak_root_ca.pem \"]},\"998\":{\"h\":\"FHIR Reverse Proxy\"},\"999\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"1000\":{\"h\":\"Configuration Parameters\"},\"1001\":{\"h\":\"APP_SERVER_IP\",\"t\":[\"Required: Yes\",\"Description: Hostname or IP-Address of the DSF FHIR server application container, the reverse proxy target\",\"Example:app, 172.28.1.3\"]},\"1002\":{\"h\":\"HTTPS_SERVER_NAME_PORT\",\"t\":[\"Required: Yes\",\"Description: External FQDN of your DSF FHIR server with port, typically 443\",\"Example:my-external.fqdn:443\"]},\"1003\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"1004\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"1005\":{\"h\":\"PROXY_PASS_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"1006\":{\"h\":\"PROXY_PASS_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"1007\":{\"h\":\"SERVER_CONTEXT_PATH\",\"t\":[\"Required: No\",\"Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.\",\"Default:/fhir\"]},\"1008\":{\"h\":\"SSL_CA_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_certificate_file.pem\"]},\"1009\":{\"h\":\"SSL_CA_DN_REQUEST_FILE\",\"t\":[\"Required: No\",\"Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_dn_request_file.pem\"]},\"1010\":{\"h\":\"SSL_CERTIFICATE_CHAIN_FILE\",\"t\":[\"Required: No\",\"Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_chain_file.pem\"]},\"1011\":{\"h\":\"SSL_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_file.pem\"]},\"1012\":{\"h\":\"SSL_CERTIFICATE_KEY_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_key_file.pem\"]},\"1013\":{\"h\":\"SSL_VERIFY_CLIENT\",\"t\":[\"Required: No\",\"Description: Modifies the apache mod_ssl config parameter SSLVerifyClient\",\"Recommendation: Set to optional when using OIDC authentication\",\"Default:require\"]},\"1014\":{\"h\":\"Configuration Parameters\"},\"1015\":{\"h\":\"Overview\",\"t\":[\"Common Parameters\",\"Parameters FHIR Server\",\"Parameters BPE Server\",\"Parameters FHIR Reverse Proxy\"]},\"1016\":{\"h\":\"Parameters BPE Server\",\"t\":[\"Please also check common parameters for additional configuration options.\"]},\"1017\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"1018\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"1019\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"1020\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server to execute database migrations\",\"Default:liquibase_user\"]},\"1021\":{\"h\":\"DEV_DSF_BPE_DB_URL\",\"t\":[\"Property: dev.dsf.bpe.db.url\",\"Required: Yes\",\"Description: The address of the database used for the DSF BPE server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/bpe\"]},\"1022\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server for camunda processes\",\"Default:camunda_users\"]},\"1023\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"Example:/run/secrets/db_user_camunda.password\"]},\"1024\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME\",\"Default:camunda_server_user\"]},\"1025\":{\"h\":\"DEV_DSF_BPE_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server\",\"Default:bpe_users\"]},\"1026\":{\"h\":\"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"1027\":{\"h\":\"DEV_DSF_BPE_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server\",\"Default:bpe_server_user\"]},\"1028\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityEnd\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity end, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"1029\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityStart\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity start, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"1030\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variables\",\"Required: No\",\"Description: To enable loging bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"1031\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"1032\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"1033\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"1034\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"1035\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"1036\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true\",\"Default:false\"]},\"1037\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:5000\"]},\"1038\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"1039\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"1040\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_server_trust_certificates.pem\"]},\"1041\":{\"h\":\"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server\",\"Default:?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"1042\":{\"h\":\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.bpe.fhir.server.base.url\",\"Required: Yes\",\"Description: The base address of the local DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"1043\":{\"h\":\"DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE\",\"t\":[\"Property: dev.dsf.bpe.fhir.server.organization.identifier.value\",\"Required: Yes\",\"Description: The local identifier value used in the Allow-List\",\"Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization\",\"Example:hospital.com\"]},\"1044\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.max\",\"Required: No\",\"Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries\",\"Default:-1\"]},\"1045\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server\",\"Default:5000\"]},\"1046\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about task resources from the DSF FHIR server\",\"Default:?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"1047\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate.pem\"]},\"1048\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem\"]},\"1049\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem.password\"]},\"1050\":{\"h\":\"DEV_DSF_BPE_MAIL_FROMADDRESS\",\"t\":[\"Property: dev.dsf.bpe.mail.fromAddress\",\"Required: No\",\"Description: Mail service sender address\",\"Example:sender@localhost\"]},\"1051\":{\"h\":\"DEV_DSF_BPE_MAIL_HOST\",\"t\":[\"Property: dev.dsf.bpe.mail.host\",\"Required: No\",\"Description: SMTP server hostname\",\"Example:smtp.server.de\"]},\"1052\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize\",\"Required: No\",\"Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:4\"]},\"1053\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation\",\"Required: No\",\"Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:/opt/bpe/log/bpe.log\"]},\"1054\":{\"h\":\"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.password\",\"Required: No\",\"Description: SMTP server authentication password\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"1055\":{\"h\":\"DEV_DSF_BPE_MAIL_PORT\",\"t\":[\"Property: dev.dsf.bpe.mail.port\",\"Required: No\",\"Description: SMTP server port\",\"Example:465\",\"Default:0\"]},\"1056\":{\"h\":\"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.replyToAddresses\",\"Required: No\",\"Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported\",\"Example:reply.to@localhost\"]},\"1057\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT\",\"t\":[\"Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent\",\"Required: No\",\"Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"1058\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP\",\"t\":[\"Property: dev.dsf.bpe.mail.sendTestMailOnStartup\",\"Required: No\",\"Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"1059\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore\",\"Required: No\",\"Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smime_certificate.p12\"]},\"1060\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore.password\",\"Required: No\",\"Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"Example:/run/secrets/smime_certificate.p12.password\"]},\"1061\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddresses\",\"Required: No\",\"Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported\",\"Example:recipient@localhost\"]},\"1062\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSESCC\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddressesCc\",\"Required: No\",\"Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported\",\"Example:cc.recipient@localhost\"]},\"1063\":{\"h\":\"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.mail.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_trust_certificates.pem\"]},\"1064\":{\"h\":\"DEV_DSF_BPE_MAIL_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.mail.username\",\"Required: No\",\"Description: SMTP server authentication username\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"1065\":{\"h\":\"DEV_DSF_BPE_MAIL_USESMTPS\",\"t\":[\"Property: dev.dsf.bpe.mail.useSmtps\",\"Required: No\",\"Description: To enable SMTP over TLS (smtps), set to true\",\"Default:false\"]},\"1066\":{\"h\":\"DEV_DSF_BPE_PROCESS_EXCLUDED\",\"t\":[\"Property: dev.dsf.bpe.process.excluded\",\"Required: No\",\"Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List\"]},\"1067\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.max\",\"Required: No\",\"Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries\",\"Default:-1\"]},\"1068\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment\",\"Default:5000\"]},\"1069\":{\"h\":\"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY\",\"t\":[\"Property: dev.dsf.bpe.process.plugin.directroy\",\"Required: No\",\"Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server\",\"Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit\",\"Default:process\"]},\"1070\":{\"h\":\"DEV_DSF_BPE_PROCESS_RETIRED\",\"t\":[\"Property: dev.dsf.bpe.process.retired\",\"Required: No\",\"Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Retire processes that where deployed previously but are not anymore available\"]},\"1071\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"1072\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"1073\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"1074\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"1075\":{\"h\":\"Common Parameters\"},\"1076\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"1077\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"1078\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"1079\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"1080\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"1081\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"1082\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"1083\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1084\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1085\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"1086\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"1087\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"1088\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"1089\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"1090\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"1091\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"1092\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"1093\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1094\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1095\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1096\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1097\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"1098\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"1099\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"1100\":{\"h\":\"Parameters FHIR Server\",\"t\":[\"Please also check common parameters for additional configuration options.\"]},\"1101\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"1102\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"1103\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"1104\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"1105\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:10000\"]},\"1106\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_server_trust_certificates.pem\"]},\"1107\":{\"h\":\"DEV_DSF_FHIR_CLIENT_VERBOSE\",\"t\":[\"Property: dev.dsf.fhir.client.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"1108\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"1109\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"1110\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"1111\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server to execute database migrations\",\"Default:liquibase_user\"]},\"1112\":{\"h\":\"DEV_DSF_FHIR_DB_URL\",\"t\":[\"Property: dev.dsf.fhir.db.url\",\"Required: Yes\",\"Description: The address of the database used for the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/fhir\"]},\"1113\":{\"h\":\"DEV_DSF_FHIR_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server\",\"Default:fhir_users\"]},\"1114\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"1115\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes\",\"Default:fhir_permanent_delete_users\"]},\"1116\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"Example:/run/secrets/db_user_permanent_delete.password\"]},\"1117\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME\",\"Default:fhir_server_permanent_delete_user\"]},\"1118\":{\"h\":\"DEV_DSF_FHIR_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server\",\"Default:fhir_server_user\"]},\"1119\":{\"h\":\"DEV_DSF_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.fhir.server.base.url\",\"Required: Yes\",\"Description: The base address of this DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"1120\":{\"h\":\"DEV_DSF_FHIR_SERVER_INIT_BUNDLE\",\"t\":[\"Property: dev.dsf.fhir.server.init.bundle\",\"Required: No\",\"Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source\",\"Default:conf/bundle.xml\"]},\"1121\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE\",\"t\":[\"Property: dev.dsf.fhir.server.organization.identifier.value\",\"Required: Yes\",\"Description: The local identifier value used in the Allow-List\",\"Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization\",\"Example:hospital.com\"]},\"1122\":{\"h\":\"DEV_DSF_FHIR_SERVER_PAGE_COUNT\",\"t\":[\"Property: dev.dsf.fhir.server.page.count\",\"Required: No\",\"Description: The page size returned by the DSF FHIR server when reading/searching fhir resources\",\"Default:20\"]},\"1123\":{\"h\":\"DEV_DSF_FHIR_SERVER_ROLECONFIG\",\"t\":[\"Property: dev.dsf.fhir.server.roleConfig\",\"Required: Yes\",\"Description: Role config YAML\"]},\"1124\":{\"h\":\"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE\",\"t\":[\"Property: dev.dsf.fhir.server.static.resource.cache\",\"Required: No\",\"Description: To disable static resource caching, set to false\",\"Recommendation: Only set to false for development\",\"Default:true\"]},\"1125\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"1126\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"1127\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"1128\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"1129\":{\"h\":\"Parameters FHIR Reverse Proxy\"},\"1130\":{\"h\":\"APP_SERVER_IP\",\"t\":[\"Required: Yes\",\"Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target\",\"Example:app, 172.28.1.3\"]},\"1131\":{\"h\":\"HTTPS_SERVER_NAME_PORT\",\"t\":[\"Required: Yes\",\"Description: External FQDN of your DSF FHIR server with port, typically 443\",\"Example:my-external.fqdn:443\"]},\"1132\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"1133\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"1134\":{\"h\":\"PROXY_PASS_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"1135\":{\"h\":\"PROXY_PASS_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"1136\":{\"h\":\"SSL_CA_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_certificate_file.pem\"]},\"1137\":{\"h\":\"SSL_CA_DN_REQUEST_FILE\",\"t\":[\"Required: No\",\"Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_dn_request_file.pem\"]},\"1138\":{\"h\":\"SSL_CERTIFICATE_CHAIN_FILE\",\"t\":[\"Required: No\",\"Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_chain_file.pem\"]},\"1139\":{\"h\":\"SSL_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_file.pem\"]},\"1140\":{\"h\":\"SSL_CERTIFICATE_KEY_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_key_file.pem\"]},\"1141\":{\"h\":\"BPE Server\"},\"1142\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"1143\":{\"h\":\"Configuration Parameters\"},\"1144\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"1145\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"1146\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"1147\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"1148\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"1149\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"1150\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"1151\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1152\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1153\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"1154\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"1155\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"1156\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"1157\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"1158\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"1159\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"1160\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"1161\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1162\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1163\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1164\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1165\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"1166\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"1167\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"1168\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"1169\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"1170\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"1171\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server to execute database migrations\",\"Default:liquibase_user\"]},\"1172\":{\"h\":\"DEV_DSF_BPE_DB_URL\",\"t\":[\"Property: dev.dsf.bpe.db.url\",\"Required: Yes\",\"Description: The address of the database used for the DSF BPE server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/bpe\"]},\"1173\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server for camunda processes\",\"Default:camunda_users\"]},\"1174\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"Example:/run/secrets/db_user_camunda.password\"]},\"1175\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME\",\"Default:camunda_server_user\"]},\"1176\":{\"h\":\"DEV_DSF_BPE_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server\",\"Default:bpe_users\"]},\"1177\":{\"h\":\"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"1178\":{\"h\":\"DEV_DSF_BPE_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server\",\"Default:bpe_server_user\"]},\"1179\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityEnd\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity end, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"1180\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityStart\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity start, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"1181\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variables\",\"Required: No\",\"Description: To enable loging bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"1182\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"1183\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"1184\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"1185\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"1186\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"1187\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true\",\"Default:false\"]},\"1188\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:5000\"]},\"1189\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"1190\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"1191\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_server_trust_certificates.pem\"]},\"1192\":{\"h\":\"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server\",\"Default:?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"1193\":{\"h\":\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.bpe.fhir.server.base.url\",\"Required: Yes\",\"Description: The base address of the local DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"1194\":{\"h\":\"DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE\",\"t\":[\"Property: dev.dsf.bpe.fhir.server.organization.identifier.value\",\"Required: Yes\",\"Description: The local identifier value used in the Allow-List\",\"Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization\",\"Example:hospital.com\"]},\"1195\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.max\",\"Required: No\",\"Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries\",\"Default:-1\"]},\"1196\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server\",\"Default:5000\"]},\"1197\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about task resources from the DSF FHIR server\",\"Default:?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"1198\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate.pem\"]},\"1199\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem\"]},\"1200\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem.password\"]},\"1201\":{\"h\":\"DEV_DSF_BPE_MAIL_FROMADDRESS\",\"t\":[\"Property: dev.dsf.bpe.mail.fromAddress\",\"Required: No\",\"Description: Mail service sender address\",\"Example:sender@localhost\"]},\"1202\":{\"h\":\"DEV_DSF_BPE_MAIL_HOST\",\"t\":[\"Property: dev.dsf.bpe.mail.host\",\"Required: No\",\"Description: SMTP server hostname\",\"Example:smtp.server.de\"]},\"1203\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize\",\"Required: No\",\"Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:4\"]},\"1204\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation\",\"Required: No\",\"Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:/opt/bpe/log/bpe.log\"]},\"1205\":{\"h\":\"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.password\",\"Required: No\",\"Description: SMTP server authentication password\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"1206\":{\"h\":\"DEV_DSF_BPE_MAIL_PORT\",\"t\":[\"Property: dev.dsf.bpe.mail.port\",\"Required: No\",\"Description: SMTP server port\",\"Example:465\",\"Default:0\"]},\"1207\":{\"h\":\"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.replyToAddresses\",\"Required: No\",\"Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported\",\"Example:reply.to@localhost\"]},\"1208\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT\",\"t\":[\"Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent\",\"Required: No\",\"Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"1209\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP\",\"t\":[\"Property: dev.dsf.bpe.mail.sendTestMailOnStartup\",\"Required: No\",\"Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"1210\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore\",\"Required: No\",\"Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smime_certificate.p12\"]},\"1211\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore.password\",\"Required: No\",\"Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"Example:/run/secrets/smime_certificate.p12.password\"]},\"1212\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddresses\",\"Required: No\",\"Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported\",\"Example:recipient@localhost\"]},\"1213\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSESCC\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddressesCc\",\"Required: No\",\"Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported\",\"Example:cc.recipient@localhost\"]},\"1214\":{\"h\":\"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.mail.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_trust_certificates.pem\"]},\"1215\":{\"h\":\"DEV_DSF_BPE_MAIL_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.mail.username\",\"Required: No\",\"Description: SMTP server authentication username\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"1216\":{\"h\":\"DEV_DSF_BPE_MAIL_USESMTPS\",\"t\":[\"Property: dev.dsf.bpe.mail.useSmtps\",\"Required: No\",\"Description: To enable SMTP over TLS (smtps), set to true\",\"Default:false\"]},\"1217\":{\"h\":\"DEV_DSF_BPE_PROCESS_EXCLUDED\",\"t\":[\"Property: dev.dsf.bpe.process.excluded\",\"Required: No\",\"Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List\"]},\"1218\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.max\",\"Required: No\",\"Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries\",\"Default:-1\"]},\"1219\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment\",\"Default:5000\"]},\"1220\":{\"h\":\"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY\",\"t\":[\"Property: dev.dsf.bpe.process.plugin.directroy\",\"Required: No\",\"Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server\",\"Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit\",\"Default:process\"]},\"1221\":{\"h\":\"DEV_DSF_BPE_PROCESS_RETIRED\",\"t\":[\"Property: dev.dsf.bpe.process.retired\",\"Required: No\",\"Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Retire processes that where deployed previously but are not anymore available\"]},\"1222\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"1223\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"1224\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"1225\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"1226\":{\"h\":\"FHIR Server\"},\"1227\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\"]},\"1228\":{\"h\":\"Access Control\"},\"1229\":{\"h\":\"Overview\",\"t\":[\"The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"OpenID Connect\",\"To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.\",\"Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.\",\"The listing below shows a minimal configuration to enable read access for a specific client-certificate:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - example_read_only_role: thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128} dsf-role: - READ - SEARCH - HISTORY \",\"The list of user roles above contains a single entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles.\",\"Certificate Thumbprints\",\"SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:\",\"certtool --fingerprint --hash=sha512 --infile=certificate.pem \",\"Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string \\\"\\\" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.\"]},\"1230\":{\"h\":\"Matching Users\",\"t\":[\"To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.\"]},\"1231\":{\"h\":\"thumbprint\",\"t\":[\"The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.\"]},\"1232\":{\"h\":\"email\",\"t\":[\"Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the emailclaim from the access token will be matched against the property values.\"]},\"1233\":{\"h\":\"token-role and token-group\",\"t\":[\"With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.\"]},\"1234\":{\"h\":\"DSF and Practitioner Roles\",\"t\":[\"To types of roles can be applied to matched users.\"]},\"1235\":{\"h\":\"dsf-role\",\"t\":[\"DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:\",\"CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.\"]},\"1236\":{\"h\":\"practitioner-role\",\"t\":[\"In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystem resources. Codes are specified in the form system-url|code. If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinition resource, the user can start the process if he also has the dsf-roleCREATE.\",\"Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:\",\"UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.\"]},\"1237\":{\"h\":\"Examples\",\"t\":[\"The first example defines a group of DSF administrators. Two client certificates match against this role:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - certificate-admins: thumbprint: - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - token-role-admins: token-role: admin dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - read-only: email: - first.user@test.org - second.user@test.org dsf-role: - READ - SEARCH - HISTORY \"]},\"1238\":{\"h\":\"Configuration Parameters\"},\"1239\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"1240\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"1241\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"1242\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"1243\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:10000\"]},\"1244\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_server_trust_certificates.pem\"]},\"1245\":{\"h\":\"DEV_DSF_FHIR_CLIENT_VERBOSE\",\"t\":[\"Property: dev.dsf.fhir.client.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"1246\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"1247\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"1248\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"1249\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server to execute database migrations\",\"Default:liquibase_user\"]},\"1250\":{\"h\":\"DEV_DSF_FHIR_DB_URL\",\"t\":[\"Property: dev.dsf.fhir.db.url\",\"Required: Yes\",\"Description: The address of the database used for the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/fhir\"]},\"1251\":{\"h\":\"DEV_DSF_FHIR_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server\",\"Default:fhir_users\"]},\"1252\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"1253\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes\",\"Default:fhir_permanent_delete_users\"]},\"1254\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"Example:/run/secrets/db_user_permanent_delete.password\"]},\"1255\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME\",\"Default:fhir_server_permanent_delete_user\"]},\"1256\":{\"h\":\"DEV_DSF_FHIR_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server\",\"Default:fhir_server_user\"]},\"1257\":{\"h\":\"DEV_DSF_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.fhir.server.base.url\",\"Required: Yes\",\"Description: The base address of this DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"1258\":{\"h\":\"DEV_DSF_FHIR_SERVER_INIT_BUNDLE\",\"t\":[\"Property: dev.dsf.fhir.server.init.bundle\",\"Required: No\",\"Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source\",\"Default:conf/bundle.xml\"]},\"1259\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE\",\"t\":[\"Property: dev.dsf.fhir.server.organization.identifier.value\",\"Required: Yes\",\"Description: The local identifier value used in the Allow-List\",\"Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization\",\"Example:hospital.com\"]},\"1260\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"t\":[\"Property: dev.dsf.fhir.server.organization.thumbprint\",\"Required: Yes\",\"Description: The SHA-512 thumbprint of the local organization client certificate\",\"Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem\"]},\"1261\":{\"h\":\"DEV_DSF_FHIR_SERVER_PAGE_COUNT\",\"t\":[\"Property: dev.dsf.fhir.server.page.count\",\"Required: No\",\"Description: The page size returned by the DSF FHIR server when reading/searching fhir resources\",\"Default:20\"]},\"1262\":{\"h\":\"DEV_DSF_FHIR_SERVER_ROLECONFIG\",\"t\":[\"Property: dev.dsf.fhir.server.roleConfig\",\"Required: Yes\",\"Description: Role config YAML as defined in FHIR Server: Access Control.\",\"Recommendation: Use an empty string \\\"\\\" or a single block scalar | character if no roles should be configured\"]},\"1263\":{\"h\":\"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE\",\"t\":[\"Property: dev.dsf.fhir.server.static.resource.cache\",\"Required: No\",\"Description: To disable static resource caching, set to false\",\"Recommendation: Only set to false for development\",\"Default:true\"]},\"1264\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"1265\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"1266\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"1267\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"1268\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"1269\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"1270\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"1271\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"1272\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"1273\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"1274\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"1275\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1276\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1277\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"1278\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"1279\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"1280\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"1281\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"1282\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"1283\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"1284\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"1285\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1286\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1287\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1288\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1289\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"1290\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"1291\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"1292\":{\"h\":\"OpenID Connect\"},\"1293\":{\"h\":\"Overview\",\"t\":[\"Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.\",\"The DSF FHIR server supports Authorization Code Flow for the user interface as well as Bearer Token Authentication for the REST API. Back-Channel Logout is also supported.\",\"FHIR Reverse Proxy\",\"The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter needs to be set to optional.\"]},\"1294\":{\"h\":\"Authorization Code Flow\",\"t\":[\"To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.\"]},\"1295\":{\"h\":\"Bearer Token Authentication\",\"t\":[\"To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\"]},\"1296\":{\"h\":\"Additional ODIC Configuration Parameter\",\"t\":[\"A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.\",\"For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.\"]},\"1297\":{\"h\":\"Example\",\"t\":[\"services: app: image: ghcr.io/datasharingframework/fhir:1.1.0 # ... secrets: - keycloak_root_ca.pem # ... environment: # ... DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true' DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true' DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true' DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3 # ... secrets: keycloak_root_ca.pem: file: ./secrets/keycloak_root_ca.pem \"]},\"1298\":{\"h\":\"FHIR Reverse Proxy\"},\"1299\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"1300\":{\"h\":\"Configuration Parameters\"},\"1301\":{\"h\":\"APP_SERVER_IP\",\"t\":[\"Required: Yes\",\"Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target\",\"Example:app, 172.28.1.3\"]},\"1302\":{\"h\":\"HTTPS_SERVER_NAME_PORT\",\"t\":[\"Required: Yes\",\"Description: External FQDN of your DSF FHIR server with port, typically 443\",\"Example:my-external.fqdn:443\"]},\"1303\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"1304\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"1305\":{\"h\":\"PROXY_PASS_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"1306\":{\"h\":\"PROXY_PASS_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"1307\":{\"h\":\"SSL_CA_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_certificate_file.pem\"]},\"1308\":{\"h\":\"SSL_CA_DN_REQUEST_FILE\",\"t\":[\"Required: No\",\"Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_dn_request_file.pem\"]},\"1309\":{\"h\":\"SSL_CERTIFICATE_CHAIN_FILE\",\"t\":[\"Required: No\",\"Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_chain_file.pem\"]},\"1310\":{\"h\":\"SSL_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_file.pem\"]},\"1311\":{\"h\":\"SSL_CERTIFICATE_KEY_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_key_file.pem\"]},\"1312\":{\"h\":\"SSL_VERIFY_CLIENT\",\"t\":[\"Required: No\",\"Description: Modifies the apache mod_ssl config parameter SSLVerifyClient \",\"Recommendation: Set to optional when using OIDC authentication\",\"Default:require\"]},\"1313\":{\"h\":\"BPE Server\"},\"1314\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"1315\":{\"h\":\"Configuration Parameters\"},\"1316\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"1317\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"1318\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"1319\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"1320\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"1321\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"1322\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"1323\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1324\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1325\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"1326\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"1327\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"1328\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"1329\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"1330\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"1331\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"1332\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"1333\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1334\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1335\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1336\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1337\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"1338\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"1339\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"1340\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"1341\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"1342\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"1343\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server to execute database migrations\",\"Default:liquibase_user\"]},\"1344\":{\"h\":\"DEV_DSF_BPE_DB_URL\",\"t\":[\"Property: dev.dsf.bpe.db.url\",\"Required: Yes\",\"Description: The address of the database used for the DSF BPE server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/bpe\"]},\"1345\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server for camunda processes\",\"Default:camunda_users\"]},\"1346\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"Example:/run/secrets/db_user_camunda.password\"]},\"1347\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME\",\"Default:camunda_server_user\"]},\"1348\":{\"h\":\"DEV_DSF_BPE_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server\",\"Default:bpe_users\"]},\"1349\":{\"h\":\"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"1350\":{\"h\":\"DEV_DSF_BPE_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server\",\"Default:bpe_server_user\"]},\"1351\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityEnd\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity end, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"1352\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityStart\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity start, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"1353\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variables\",\"Required: No\",\"Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"1354\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variablesLocal\",\"Required: No\",\"Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"1355\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"1356\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"1357\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"1358\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"1359\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"1360\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true\",\"Default:false\"]},\"1361\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:5000\"]},\"1362\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"1363\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"1364\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_server_trust_certificates.pem\"]},\"1365\":{\"h\":\"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server\",\"Default:?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"1366\":{\"h\":\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.bpe.fhir.server.base.url\",\"Required: Yes\",\"Description: The base address of the local DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"1367\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.max\",\"Required: No\",\"Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries\",\"Default:-1\"]},\"1368\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server\",\"Default:5000\"]},\"1369\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about task resources from the DSF FHIR server\",\"Default:?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"1370\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate.pem\"]},\"1371\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem\"]},\"1372\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem.password\"]},\"1373\":{\"h\":\"DEV_DSF_BPE_MAIL_FROMADDRESS\",\"t\":[\"Property: dev.dsf.bpe.mail.fromAddress\",\"Required: No\",\"Description: Mail service sender address\",\"Example:sender@localhost\"]},\"1374\":{\"h\":\"DEV_DSF_BPE_MAIL_HOST\",\"t\":[\"Property: dev.dsf.bpe.mail.host\",\"Required: No\",\"Description: SMTP server hostname\",\"Example:smtp.server.de\"]},\"1375\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize\",\"Required: No\",\"Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:4\"]},\"1376\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation\",\"Required: No\",\"Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:/opt/bpe/log/bpe.log\"]},\"1377\":{\"h\":\"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.password\",\"Required: No\",\"Description: SMTP server authentication password\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"1378\":{\"h\":\"DEV_DSF_BPE_MAIL_PORT\",\"t\":[\"Property: dev.dsf.bpe.mail.port\",\"Required: No\",\"Description: SMTP server port\",\"Example:465\",\"Default:0\"]},\"1379\":{\"h\":\"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.replyToAddresses\",\"Required: No\",\"Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported\",\"Example:reply.to@localhost\"]},\"1380\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT\",\"t\":[\"Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent\",\"Required: No\",\"Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"1381\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP\",\"t\":[\"Property: dev.dsf.bpe.mail.sendTestMailOnStartup\",\"Required: No\",\"Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"1382\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore\",\"Required: No\",\"Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smime_certificate.p12\"]},\"1383\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore.password\",\"Required: No\",\"Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"Example:/run/secrets/smime_certificate.p12.password\"]},\"1384\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddresses\",\"Required: No\",\"Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported\",\"Example:recipient@localhost\"]},\"1385\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSESCC\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddressesCc\",\"Required: No\",\"Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported\",\"Example:cc.recipient@localhost\"]},\"1386\":{\"h\":\"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.mail.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_trust_certificates.pem\"]},\"1387\":{\"h\":\"DEV_DSF_BPE_MAIL_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.mail.username\",\"Required: No\",\"Description: SMTP server authentication username\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"1388\":{\"h\":\"DEV_DSF_BPE_MAIL_USESMTPS\",\"t\":[\"Property: dev.dsf.bpe.mail.useSmtps\",\"Required: No\",\"Description: To enable SMTP over TLS (smtps), set to true\",\"Default:false\"]},\"1389\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.corePoolSize\",\"Required: No\",\"Description: Process engine job executor core pool size\",\"Default:4\"]},\"1390\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.maxPoolSize\",\"Required: No\",\"Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full\",\"Default:10\"]},\"1391\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.queueSize\",\"Required: No\",\"Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy\",\"Default:40\"]},\"1392\":{\"h\":\"DEV_DSF_BPE_PROCESS_EXCLUDED\",\"t\":[\"Property: dev.dsf.bpe.process.excluded\",\"Required: No\",\"Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List\",\"Example:dsfdev_updateAllowList|1.0, another_process|x.y\"]},\"1393\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.max\",\"Required: No\",\"Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries\",\"Default:-1\"]},\"1394\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment\",\"Default:5000\"]},\"1395\":{\"h\":\"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY\",\"t\":[\"Property: dev.dsf.bpe.process.plugin.directroy\",\"Required: No\",\"Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server\",\"Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit\",\"Default:process\"]},\"1396\":{\"h\":\"DEV_DSF_BPE_PROCESS_RETIRED\",\"t\":[\"Property: dev.dsf.bpe.process.retired\",\"Required: No\",\"Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Retire processes that where deployed previously but are not anymore available\",\"Example:old_process|x.y\"]},\"1397\":{\"h\":\"DEV_DSF_BPE_PROCESS_THREADS\",\"t\":[\"Property: dev.dsf.bpe.process.threads\",\"Required: No\",\"Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores\",\"Default:-1\"]},\"1398\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"1399\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"1400\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"1401\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"1402\":{\"h\":\"FHIR Server\"},\"1403\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\"]},\"1404\":{\"h\":\"Access Control\"},\"1405\":{\"h\":\"Overview\",\"t\":[\"The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"OpenID Connect\",\"To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.\",\"Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.\",\"The listing below shows a minimal configuration to enable read access for a specific client-certificate:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - example_read_only_role: thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128} dsf-role: - READ - SEARCH - HISTORY \",\"The list of user roles above contains a single entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles.\",\"Certificate Thumbprints\",\"SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:\",\"certtool --fingerprint --hash=sha512 --infile=certificate.pem \",\"Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string \\\"\\\" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.\"]},\"1406\":{\"h\":\"Matching Users\",\"t\":[\"To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.\"]},\"1407\":{\"h\":\"thumbprint\",\"t\":[\"The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.\"]},\"1408\":{\"h\":\"email\",\"t\":[\"Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the emailclaim from the access token will be matched against the property values.\"]},\"1409\":{\"h\":\"token-role and token-group\",\"t\":[\"With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.\"]},\"1410\":{\"h\":\"DSF and Practitioner Roles\",\"t\":[\"To types of roles can be applied to matched users.\"]},\"1411\":{\"h\":\"dsf-role\",\"t\":[\"DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:\",\"CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.\"]},\"1412\":{\"h\":\"practitioner-role\",\"t\":[\"In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystem resources. Codes are specified in the form system-url|code. If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinition resource, the user can start the process if he also has the dsf-roleCREATE.\",\"Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:\",\"UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.\"]},\"1413\":{\"h\":\"Examples\",\"t\":[\"The first example defines a group of DSF administrators. Two client certificates match against this role:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - certificate-admins: thumbprint: - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - token-role-admins: token-role: admin dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - read-only: email: - first.user@test.org - second.user@test.org dsf-role: - READ - SEARCH - HISTORY \"]},\"1414\":{\"h\":\"Configuration Parameters\"},\"1415\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"1416\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"1417\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"1418\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"1419\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:10000\"]},\"1420\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_server_trust_certificates.pem\"]},\"1421\":{\"h\":\"DEV_DSF_FHIR_CLIENT_VERBOSE\",\"t\":[\"Property: dev.dsf.fhir.client.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"1422\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"1423\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"1424\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"1425\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server to execute database migrations\",\"Default:liquibase_user\"]},\"1426\":{\"h\":\"DEV_DSF_FHIR_DB_URL\",\"t\":[\"Property: dev.dsf.fhir.db.url\",\"Required: Yes\",\"Description: The address of the database used for the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/fhir\"]},\"1427\":{\"h\":\"DEV_DSF_FHIR_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server\",\"Default:fhir_users\"]},\"1428\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"1429\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes\",\"Default:fhir_permanent_delete_users\"]},\"1430\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"Example:/run/secrets/db_user_permanent_delete.password\"]},\"1431\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME\",\"Default:fhir_server_permanent_delete_user\"]},\"1432\":{\"h\":\"DEV_DSF_FHIR_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server\",\"Default:fhir_server_user\"]},\"1433\":{\"h\":\"DEV_DSF_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.fhir.server.base.url\",\"Required: Yes\",\"Description: The base address of this DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"1434\":{\"h\":\"DEV_DSF_FHIR_SERVER_INIT_BUNDLE\",\"t\":[\"Property: dev.dsf.fhir.server.init.bundle\",\"Required: No\",\"Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source\",\"Default:conf/bundle.xml\"]},\"1435\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE\",\"t\":[\"Property: dev.dsf.fhir.server.organization.identifier.value\",\"Required: Yes\",\"Description: The local identifier value used in the Allow-List\",\"Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization\",\"Example:hospital.com\"]},\"1436\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"t\":[\"Property: dev.dsf.fhir.server.organization.thumbprint\",\"Required: Yes\",\"Description: The SHA-512 thumbprint of the local organization client certificate\",\"Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem\"]},\"1437\":{\"h\":\"DEV_DSF_FHIR_SERVER_PAGE_COUNT\",\"t\":[\"Property: dev.dsf.fhir.server.page.count\",\"Required: No\",\"Description: The page size returned by the DSF FHIR server when reading/searching fhir resources\",\"Default:20\"]},\"1438\":{\"h\":\"DEV_DSF_FHIR_SERVER_ROLECONFIG\",\"t\":[\"Property: dev.dsf.fhir.server.roleConfig\",\"Required: No\",\"Description: Role config YAML as defined in FHIR Server: Access Control.\"]},\"1439\":{\"h\":\"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE\",\"t\":[\"Property: dev.dsf.fhir.server.static.resource.cache\",\"Required: No\",\"Description: To disable static resource caching, set to false\",\"Recommendation: Only set to false for development\",\"Default:true\"]},\"1440\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"1441\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"1442\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"1443\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"1444\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"1445\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"1446\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"1447\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"1448\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"1449\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"1450\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"1451\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1452\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1453\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"1454\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"1455\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"1456\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"1457\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"1458\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"1459\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"1460\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"1461\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1462\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1463\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1464\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1465\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"1466\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"1467\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"1468\":{\"h\":\"OpenID Connect\"},\"1469\":{\"h\":\"Overview\",\"t\":[\"Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.\",\"The DSF FHIR server supports Authorization Code Flow for the user interface as well as Bearer Token Authentication for the REST API. Back-Channel Logout is also supported.\",\"FHIR Reverse Proxy\",\"The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter needs to be set to optional.\"]},\"1470\":{\"h\":\"Authorization Code Flow\",\"t\":[\"To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.\"]},\"1471\":{\"h\":\"Bearer Token Authentication\",\"t\":[\"To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\"]},\"1472\":{\"h\":\"Additional ODIC Configuration Parameter\",\"t\":[\"A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.\",\"For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.\"]},\"1473\":{\"h\":\"Example\",\"t\":[\"services: app: image: ghcr.io/datasharingframework/fhir:1.2.0 # ... secrets: - keycloak_root_ca.pem # ... environment: # ... DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true' DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true' DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true' DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3 # ... secrets: keycloak_root_ca.pem: file: ./secrets/keycloak_root_ca.pem \"]},\"1474\":{\"h\":\"FHIR Reverse Proxy\"},\"1475\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"1476\":{\"h\":\"Configuration Parameters\"},\"1477\":{\"h\":\"APP_SERVER_IP\",\"t\":[\"Required: Yes\",\"Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target\",\"Example:app, 172.28.1.3\"]},\"1478\":{\"h\":\"HTTPS_SERVER_NAME_PORT\",\"t\":[\"Required: Yes\",\"Description: External FQDN of your DSF FHIR server with port, typically 443\",\"Example:my-external.fqdn:443\"]},\"1479\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"1480\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"1481\":{\"h\":\"PROXY_PASS_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"1482\":{\"h\":\"PROXY_PASS_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"1483\":{\"h\":\"SERVER_CONTEXT_PATH\",\"t\":[\"Required: No\",\"Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.\",\"Default:/fhir\"]},\"1484\":{\"h\":\"SSL_CA_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_certificate_file.pem\"]},\"1485\":{\"h\":\"SSL_CA_DN_REQUEST_FILE\",\"t\":[\"Required: No\",\"Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_dn_request_file.pem\"]},\"1486\":{\"h\":\"SSL_CERTIFICATE_CHAIN_FILE\",\"t\":[\"Required: No\",\"Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_chain_file.pem\"]},\"1487\":{\"h\":\"SSL_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_file.pem\"]},\"1488\":{\"h\":\"SSL_CERTIFICATE_KEY_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_key_file.pem\"]},\"1489\":{\"h\":\"SSL_VERIFY_CLIENT\",\"t\":[\"Required: No\",\"Description: Modifies the apache mod_ssl config parameter SSLVerifyClient\",\"Recommendation: Set to optional when using OIDC authentication\",\"Default:require\"]},\"1490\":{\"h\":\"BPE Server\"},\"1491\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"1492\":{\"h\":\"Configuration Parameters\"},\"1493\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"1494\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"1495\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"1496\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"1497\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"1498\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"1499\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"1500\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1501\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1502\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"1503\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"1504\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"1505\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"1506\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"1507\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"1508\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"1509\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"1510\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1511\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1512\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1513\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1514\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"1515\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"1516\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"1517\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"1518\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"1519\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"1520\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server to execute database migrations\",\"Default:liquibase_user\"]},\"1521\":{\"h\":\"DEV_DSF_BPE_DB_URL\",\"t\":[\"Property: dev.dsf.bpe.db.url\",\"Required: Yes\",\"Description: The address of the database used for the DSF BPE server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/bpe\"]},\"1522\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server for camunda processes\",\"Default:camunda_users\"]},\"1523\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"Example:/run/secrets/db_user_camunda.password\"]},\"1524\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME\",\"Default:camunda_server_user\"]},\"1525\":{\"h\":\"DEV_DSF_BPE_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server\",\"Default:bpe_users\"]},\"1526\":{\"h\":\"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"1527\":{\"h\":\"DEV_DSF_BPE_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server\",\"Default:bpe_server_user\"]},\"1528\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityEnd\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity end, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"1529\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityStart\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity start, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"1530\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variables\",\"Required: No\",\"Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"1531\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variablesLocal\",\"Required: No\",\"Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"1532\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"1533\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"1534\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"1535\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"1536\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"1537\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true\",\"Default:false\"]},\"1538\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:5000\"]},\"1539\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"1540\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"1541\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"1542\":{\"h\":\"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server\",\"Default:?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"1543\":{\"h\":\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.bpe.fhir.server.base.url\",\"Required: Yes\",\"Description: The base address of the local DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"1544\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.max\",\"Required: No\",\"Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries\",\"Default:-1\"]},\"1545\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server\",\"Default:5000\"]},\"1546\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about task resources from the DSF FHIR server\",\"Default:?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"1547\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate.pem\"]},\"1548\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem\"]},\"1549\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem.password\"]},\"1550\":{\"h\":\"DEV_DSF_BPE_MAIL_FROMADDRESS\",\"t\":[\"Property: dev.dsf.bpe.mail.fromAddress\",\"Required: No\",\"Description: Mail service sender address\",\"Example:sender@localhost\"]},\"1551\":{\"h\":\"DEV_DSF_BPE_MAIL_HOST\",\"t\":[\"Property: dev.dsf.bpe.mail.host\",\"Required: No\",\"Description: SMTP server hostname\",\"Example:smtp.server.de\"]},\"1552\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize\",\"Required: No\",\"Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:4\"]},\"1553\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation\",\"Required: No\",\"Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:/opt/bpe/log/bpe.log\"]},\"1554\":{\"h\":\"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.password\",\"Required: No\",\"Description: SMTP server authentication password\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"1555\":{\"h\":\"DEV_DSF_BPE_MAIL_PORT\",\"t\":[\"Property: dev.dsf.bpe.mail.port\",\"Required: No\",\"Description: SMTP server port\",\"Example:465\",\"Default:0\"]},\"1556\":{\"h\":\"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.replyToAddresses\",\"Required: No\",\"Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported\",\"Example:reply.to@localhost\"]},\"1557\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT\",\"t\":[\"Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent\",\"Required: No\",\"Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"1558\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP\",\"t\":[\"Property: dev.dsf.bpe.mail.sendTestMailOnStartup\",\"Required: No\",\"Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"1559\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore\",\"Required: No\",\"Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smime_certificate.p12\"]},\"1560\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore.password\",\"Required: No\",\"Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"Example:/run/secrets/smime_certificate.p12.password\"]},\"1561\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddresses\",\"Required: No\",\"Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported\",\"Example:recipient@localhost\"]},\"1562\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSESCC\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddressesCc\",\"Required: No\",\"Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported\",\"Example:cc.recipient@localhost\"]},\"1563\":{\"h\":\"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.mail.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_trust_certificates.pem\"]},\"1564\":{\"h\":\"DEV_DSF_BPE_MAIL_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.mail.username\",\"Required: No\",\"Description: SMTP server authentication username\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"1565\":{\"h\":\"DEV_DSF_BPE_MAIL_USESMTPS\",\"t\":[\"Property: dev.dsf.bpe.mail.useSmtps\",\"Required: No\",\"Description: To enable SMTP over TLS (smtps), set to true\",\"Default:false\"]},\"1566\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.corePoolSize\",\"Required: No\",\"Description: Process engine job executor core pool size\",\"Default:4\"]},\"1567\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.maxPoolSize\",\"Required: No\",\"Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full\",\"Default:10\"]},\"1568\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.queueSize\",\"Required: No\",\"Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy\",\"Default:40\"]},\"1569\":{\"h\":\"DEV_DSF_BPE_PROCESS_EXCLUDED\",\"t\":[\"Property: dev.dsf.bpe.process.excluded\",\"Required: No\",\"Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List\",\"Example:dsfdev_updateAllowList|1.0, another_process|x.y\"]},\"1570\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.max\",\"Required: No\",\"Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries\",\"Default:-1\"]},\"1571\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment\",\"Default:5000\"]},\"1572\":{\"h\":\"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY\",\"t\":[\"Property: dev.dsf.bpe.process.plugin.directroy\",\"Required: No\",\"Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server\",\"Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit\",\"Default:process\"]},\"1573\":{\"h\":\"DEV_DSF_BPE_PROCESS_RETIRED\",\"t\":[\"Property: dev.dsf.bpe.process.retired\",\"Required: No\",\"Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Retire processes that where deployed previously but are not anymore available\",\"Example:old_process|x.y\"]},\"1574\":{\"h\":\"DEV_DSF_BPE_PROCESS_THREADS\",\"t\":[\"Property: dev.dsf.bpe.process.threads\",\"Required: No\",\"Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores\",\"Default:-1\"]},\"1575\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"1576\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"1577\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"1578\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"1579\":{\"h\":\"FHIR Server\"},\"1580\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\"]},\"1581\":{\"h\":\"Access Control\"},\"1582\":{\"h\":\"Overview\",\"t\":[\"The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"OpenID Connect\",\"To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.\",\"Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.\",\"The listing below shows a minimal configuration to enable read access for a specific client-certificate:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - example_read_only_role: thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128} dsf-role: - READ - SEARCH - HISTORY \",\"The list of user roles above contains a single entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles.\",\"Certificate Thumbprints\",\"SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:\",\"certtool --fingerprint --hash=sha512 --infile=certificate.pem \",\"Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string \\\"\\\" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.\"]},\"1583\":{\"h\":\"Matching Users\",\"t\":[\"To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.\"]},\"1584\":{\"h\":\"thumbprint\",\"t\":[\"The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.\"]},\"1585\":{\"h\":\"email\",\"t\":[\"Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the emailclaim from the access token will be matched against the property values.\"]},\"1586\":{\"h\":\"token-role and token-group\",\"t\":[\"With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.\"]},\"1587\":{\"h\":\"DSF and Practitioner Roles\",\"t\":[\"To types of roles can be applied to matched users.\"]},\"1588\":{\"h\":\"dsf-role\",\"t\":[\"DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:\",\"CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.\"]},\"1589\":{\"h\":\"practitioner-role\",\"t\":[\"In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystem resources. Codes are specified in the form system-url|code. If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinition resource, the user can start the process if he also has the dsf-roleCREATE.\",\"Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:\",\"UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.\"]},\"1590\":{\"h\":\"Examples\",\"t\":[\"The first example defines a group of DSF administrators. Two client certificates match against this role:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - certificate-admins: thumbprint: - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - token-role-admins: token-role: admin dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - read-only: email: - first.user@test.org - second.user@test.org dsf-role: - READ - SEARCH - HISTORY \"]},\"1591\":{\"h\":\"Configuration Parameters\"},\"1592\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"1593\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"1594\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"1595\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"1596\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:10000\"]},\"1597\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client _trust_certificates.pem\"]},\"1598\":{\"h\":\"DEV_DSF_FHIR_CLIENT_VERBOSE\",\"t\":[\"Property: dev.dsf.fhir.client.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"1599\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"1600\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"1601\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"1602\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server to execute database migrations\",\"Default:liquibase_user\"]},\"1603\":{\"h\":\"DEV_DSF_FHIR_DB_URL\",\"t\":[\"Property: dev.dsf.fhir.db.url\",\"Required: Yes\",\"Description: The address of the database used for the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/fhir\"]},\"1604\":{\"h\":\"DEV_DSF_FHIR_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server\",\"Default:fhir_users\"]},\"1605\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"1606\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes\",\"Default:fhir_permanent_delete_users\"]},\"1607\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"Example:/run/secrets/db_user_permanent_delete.password\"]},\"1608\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME\",\"Default:fhir_server_permanent_delete_user\"]},\"1609\":{\"h\":\"DEV_DSF_FHIR_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server\",\"Default:fhir_server_user\"]},\"1610\":{\"h\":\"DEV_DSF_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.fhir.server.base.url\",\"Required: Yes\",\"Description: The base address of this DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"1611\":{\"h\":\"DEV_DSF_FHIR_SERVER_INIT_BUNDLE\",\"t\":[\"Property: dev.dsf.fhir.server.init.bundle\",\"Required: No\",\"Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source\",\"Default:conf/bundle.xml\"]},\"1612\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE\",\"t\":[\"Property: dev.dsf.fhir.server.organization.identifier.value\",\"Required: Yes\",\"Description: The local identifier value used in the Allow-List\",\"Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization\",\"Example:hospital.com\"]},\"1613\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"t\":[\"Property: dev.dsf.fhir.server.organization.thumbprint\",\"Required: Yes\",\"Description: The SHA-512 thumbprint of the local organization client certificate\",\"Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem\"]},\"1614\":{\"h\":\"DEV_DSF_FHIR_SERVER_PAGE_COUNT\",\"t\":[\"Property: dev.dsf.fhir.server.page.count\",\"Required: No\",\"Description: The page size returned by the DSF FHIR server when reading/searching fhir resources\",\"Default:20\"]},\"1615\":{\"h\":\"DEV_DSF_FHIR_SERVER_ROLECONFIG\",\"t\":[\"Property: dev.dsf.fhir.server.roleConfig\",\"Required: No\",\"Description: Role config YAML as defined in FHIR Server: Access Control.\"]},\"1616\":{\"h\":\"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE\",\"t\":[\"Property: dev.dsf.fhir.server.static.resource.cache\",\"Required: No\",\"Description: To disable static resource caching, set to false\",\"Recommendation: Only set to false for development\",\"Default:true\"]},\"1617\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"1618\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"1619\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"1620\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"1621\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"1622\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"1623\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"1624\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"1625\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"1626\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"1627\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"1628\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1629\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1630\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"1631\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"1632\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"1633\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"1634\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"1635\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"1636\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"1637\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"1638\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1639\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1640\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1641\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1642\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"1643\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"1644\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"1645\":{\"h\":\"OpenID Connect\"},\"1646\":{\"h\":\"Overview\",\"t\":[\"Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.\",\"The DSF FHIR server supports Authorization Code Flow for the user interface as well as Bearer Token Authentication for the REST API. Back-Channel Logout is also supported.\",\"FHIR Reverse Proxy\",\"The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter needs to be set to optional.\"]},\"1647\":{\"h\":\"Authorization Code Flow\",\"t\":[\"To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.\"]},\"1648\":{\"h\":\"Bearer Token Authentication\",\"t\":[\"To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\"]},\"1649\":{\"h\":\"Additional ODIC Configuration Parameter\",\"t\":[\"A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.\",\"For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.\"]},\"1650\":{\"h\":\"Example\",\"t\":[\"services: app: image: ghcr.io/datasharingframework/fhir:1.3.0 # ... secrets: - keycloak_root_ca.pem # ... environment: # ... DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true' DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true' DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true' DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3 # ... secrets: keycloak_root_ca.pem: file: ./secrets/keycloak_root_ca.pem \"]},\"1651\":{\"h\":\"FHIR Reverse Proxy\"},\"1652\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"1653\":{\"h\":\"Configuration Parameters\"},\"1654\":{\"h\":\"APP_SERVER_IP\",\"t\":[\"Required: Yes\",\"Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target\",\"Example:app, 172.28.1.3\"]},\"1655\":{\"h\":\"HTTPS_SERVER_NAME_PORT\",\"t\":[\"Required: Yes\",\"Description: External FQDN of your DSF FHIR server with port, typically 443\",\"Example:my-external.fqdn:443\"]},\"1656\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"1657\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"1658\":{\"h\":\"PROXY_PASS_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"1659\":{\"h\":\"PROXY_PASS_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"1660\":{\"h\":\"SERVER_CONTEXT_PATH\",\"t\":[\"Required: No\",\"Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.\",\"Default:/fhir\"]},\"1661\":{\"h\":\"SSL_CA_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_certificate_file.pem\"]},\"1662\":{\"h\":\"SSL_CA_DN_REQUEST_FILE\",\"t\":[\"Required: No\",\"Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_dn_request_file.pem\"]},\"1663\":{\"h\":\"SSL_CERTIFICATE_CHAIN_FILE\",\"t\":[\"Required: No\",\"Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_chain_file.pem\"]},\"1664\":{\"h\":\"SSL_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_file.pem\"]},\"1665\":{\"h\":\"SSL_CERTIFICATE_KEY_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_key_file.pem\"]},\"1666\":{\"h\":\"SSL_VERIFY_CLIENT\",\"t\":[\"Required: No\",\"Description: Modifies the apache mod_ssl config parameter SSLVerifyClient\",\"Recommendation: Set to optional when using OIDC authentication\",\"Default:require\"]},\"1667\":{\"h\":\"BPE Server\"},\"1668\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"1669\":{\"h\":\"Configuration Parameters\"},\"1670\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"1671\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"1672\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"1673\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"1674\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"1675\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"1676\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"1677\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1678\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1679\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"1680\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"1681\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"1682\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"1683\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"1684\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"1685\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"1686\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"1687\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1688\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1689\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1690\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1691\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"1692\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"1693\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"1694\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"1695\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"1696\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"1697\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server to execute database migrations\",\"Default:liquibase_user\"]},\"1698\":{\"h\":\"DEV_DSF_BPE_DB_URL\",\"t\":[\"Property: dev.dsf.bpe.db.url\",\"Required: Yes\",\"Description: The address of the database used for the DSF BPE server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/bpe\"]},\"1699\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server for camunda processes\",\"Default:camunda_users\"]},\"1700\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"Example:/run/secrets/db_user_camunda.password\"]},\"1701\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME\",\"Default:camunda_server_user\"]},\"1702\":{\"h\":\"DEV_DSF_BPE_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server\",\"Default:bpe_users\"]},\"1703\":{\"h\":\"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"1704\":{\"h\":\"DEV_DSF_BPE_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server\",\"Default:bpe_server_user\"]},\"1705\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityEnd\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity end, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"1706\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityStart\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity start, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"1707\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variables\",\"Required: No\",\"Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"1708\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variablesLocal\",\"Required: No\",\"Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"1709\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"1710\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"1711\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"1712\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"1713\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"1714\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true\",\"Default:false\"]},\"1715\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:5000\"]},\"1716\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"1717\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"1718\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"1719\":{\"h\":\"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server\",\"Default:?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"1720\":{\"h\":\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.bpe.fhir.server.base.url\",\"Required: Yes\",\"Description: The base address of the local DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"1721\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.max\",\"Required: No\",\"Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries\",\"Default:-1\"]},\"1722\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server\",\"Default:5000\"]},\"1723\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about task resources from the DSF FHIR server\",\"Default:?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"1724\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate.pem\"]},\"1725\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem\"]},\"1726\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem.password\"]},\"1727\":{\"h\":\"DEV_DSF_BPE_MAIL_FROMADDRESS\",\"t\":[\"Property: dev.dsf.bpe.mail.fromAddress\",\"Required: No\",\"Description: Mail service sender address\",\"Example:sender@localhost\"]},\"1728\":{\"h\":\"DEV_DSF_BPE_MAIL_HOST\",\"t\":[\"Property: dev.dsf.bpe.mail.host\",\"Required: No\",\"Description: SMTP server hostname\",\"Example:smtp.server.de\"]},\"1729\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize\",\"Required: No\",\"Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:4\"]},\"1730\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation\",\"Required: No\",\"Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:/opt/bpe/log/bpe.log\"]},\"1731\":{\"h\":\"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.password\",\"Required: No\",\"Description: SMTP server authentication password\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"1732\":{\"h\":\"DEV_DSF_BPE_MAIL_PORT\",\"t\":[\"Property: dev.dsf.bpe.mail.port\",\"Required: No\",\"Description: SMTP server port\",\"Example:465\",\"Default:0\"]},\"1733\":{\"h\":\"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.replyToAddresses\",\"Required: No\",\"Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported\",\"Example:reply.to@localhost\"]},\"1734\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT\",\"t\":[\"Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent\",\"Required: No\",\"Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"1735\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP\",\"t\":[\"Property: dev.dsf.bpe.mail.sendTestMailOnStartup\",\"Required: No\",\"Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"1736\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore\",\"Required: No\",\"Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smime_certificate.p12\"]},\"1737\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore.password\",\"Required: No\",\"Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"Example:/run/secrets/smime_certificate.p12.password\"]},\"1738\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddresses\",\"Required: No\",\"Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported\",\"Example:recipient@localhost\"]},\"1739\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSESCC\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddressesCc\",\"Required: No\",\"Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported\",\"Example:cc.recipient@localhost\"]},\"1740\":{\"h\":\"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.mail.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_trust_certificates.pem\"]},\"1741\":{\"h\":\"DEV_DSF_BPE_MAIL_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.mail.username\",\"Required: No\",\"Description: SMTP server authentication username\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"1742\":{\"h\":\"DEV_DSF_BPE_MAIL_USESMTPS\",\"t\":[\"Property: dev.dsf.bpe.mail.useSmtps\",\"Required: No\",\"Description: To enable SMTP over TLS (smtps), set to true\",\"Default:false\"]},\"1743\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.corePoolSize\",\"Required: No\",\"Description: Process engine job executor core pool size\",\"Default:4\"]},\"1744\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.maxPoolSize\",\"Required: No\",\"Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full\",\"Default:10\"]},\"1745\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.queueSize\",\"Required: No\",\"Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy\",\"Default:40\"]},\"1746\":{\"h\":\"DEV_DSF_BPE_PROCESS_EXCLUDED\",\"t\":[\"Property: dev.dsf.bpe.process.excluded\",\"Required: No\",\"Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List\",\"Example:dsfdev_updateAllowList|1.0, another_process|x.y\"]},\"1747\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.max\",\"Required: No\",\"Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries\",\"Default:-1\"]},\"1748\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment\",\"Default:5000\"]},\"1749\":{\"h\":\"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY\",\"t\":[\"Property: dev.dsf.bpe.process.plugin.directroy\",\"Required: No\",\"Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server\",\"Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit\",\"Default:process\"]},\"1750\":{\"h\":\"DEV_DSF_BPE_PROCESS_RETIRED\",\"t\":[\"Property: dev.dsf.bpe.process.retired\",\"Required: No\",\"Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Retire processes that where deployed previously but are not anymore available\",\"Example:old_process|x.y\"]},\"1751\":{\"h\":\"DEV_DSF_BPE_PROCESS_THREADS\",\"t\":[\"Property: dev.dsf.bpe.process.threads\",\"Required: No\",\"Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores\",\"Default:-1\"]},\"1752\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"1753\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"1754\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"1755\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"1756\":{\"h\":\"FHIR Server\"},\"1757\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\"]},\"1758\":{\"h\":\"Access Control\"},\"1759\":{\"h\":\"Overview\",\"t\":[\"The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"OpenID Connect\",\"To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.\",\"Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.\",\"The listing below shows a minimal configuration to enable read access for a specific client-certificate:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - example_read_only_role: thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128} dsf-role: - READ - SEARCH - HISTORY \",\"The list of user roles above contains a single entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles.\",\"Certificate Thumbprints\",\"SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:\",\"certtool --fingerprint --hash=sha512 --infile=certificate.pem \",\"Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string \\\"\\\" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.\"]},\"1760\":{\"h\":\"Matching Users\",\"t\":[\"To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.\"]},\"1761\":{\"h\":\"thumbprint\",\"t\":[\"The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.\"]},\"1762\":{\"h\":\"email\",\"t\":[\"Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the emailclaim from the access token will be matched against the property values.\"]},\"1763\":{\"h\":\"token-role and token-group\",\"t\":[\"With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.\"]},\"1764\":{\"h\":\"DSF and Practitioner Roles\",\"t\":[\"To types of roles can be applied to matched users.\"]},\"1765\":{\"h\":\"dsf-role\",\"t\":[\"DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:\",\"CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.\"]},\"1766\":{\"h\":\"practitioner-role\",\"t\":[\"In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystem resources. Codes are specified in the form system-url|code. If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinition resource, the user can start the process if he also has the dsf-roleCREATE.\",\"Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:\",\"UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.\"]},\"1767\":{\"h\":\"Examples\",\"t\":[\"The first example defines a group of DSF administrators. Two client certificates match against this role:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - certificate-admins: thumbprint: - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - token-role-admins: token-role: admin dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - read-only: email: - first.user@test.org - second.user@test.org dsf-role: - READ - SEARCH - HISTORY \"]},\"1768\":{\"h\":\"Configuration Parameters\"},\"1769\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"1770\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"1771\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"1772\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"1773\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:10000\"]},\"1774\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client _trust_certificates.pem\"]},\"1775\":{\"h\":\"DEV_DSF_FHIR_CLIENT_VERBOSE\",\"t\":[\"Property: dev.dsf.fhir.client.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"1776\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"1777\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"1778\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"1779\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server to execute database migrations\",\"Default:liquibase_user\"]},\"1780\":{\"h\":\"DEV_DSF_FHIR_DB_URL\",\"t\":[\"Property: dev.dsf.fhir.db.url\",\"Required: Yes\",\"Description: The address of the database used for the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/fhir\"]},\"1781\":{\"h\":\"DEV_DSF_FHIR_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server\",\"Default:fhir_users\"]},\"1782\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"1783\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes\",\"Default:fhir_permanent_delete_users\"]},\"1784\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"Example:/run/secrets/db_user_permanent_delete.password\"]},\"1785\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME\",\"Default:fhir_server_permanent_delete_user\"]},\"1786\":{\"h\":\"DEV_DSF_FHIR_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server\",\"Default:fhir_server_user\"]},\"1787\":{\"h\":\"DEV_DSF_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.fhir.server.base.url\",\"Required: Yes\",\"Description: The base address of this DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"1788\":{\"h\":\"DEV_DSF_FHIR_SERVER_INIT_BUNDLE\",\"t\":[\"Property: dev.dsf.fhir.server.init.bundle\",\"Required: No\",\"Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source\",\"Default:conf/bundle.xml\"]},\"1789\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE\",\"t\":[\"Property: dev.dsf.fhir.server.organization.identifier.value\",\"Required: Yes\",\"Description: The local identifier value used in the Allow-List\",\"Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization\",\"Example:hospital.com\"]},\"1790\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"t\":[\"Property: dev.dsf.fhir.server.organization.thumbprint\",\"Required: Yes\",\"Description: The SHA-512 thumbprint of the local organization client certificate\",\"Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem\"]},\"1791\":{\"h\":\"DEV_DSF_FHIR_SERVER_PAGE_COUNT\",\"t\":[\"Property: dev.dsf.fhir.server.page.count\",\"Required: No\",\"Description: The page size returned by the DSF FHIR server when reading/searching fhir resources\",\"Default:20\"]},\"1792\":{\"h\":\"DEV_DSF_FHIR_SERVER_ROLECONFIG\",\"t\":[\"Property: dev.dsf.fhir.server.roleConfig\",\"Required: No\",\"Description: Role config YAML as defined in FHIR Server: Access Control.\"]},\"1793\":{\"h\":\"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE\",\"t\":[\"Property: dev.dsf.fhir.server.static.resource.cache\",\"Required: No\",\"Description: To disable static resource caching, set to false\",\"Recommendation: Only set to false for development\",\"Default:true\"]},\"1794\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"1795\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"1796\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"1797\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"1798\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"1799\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"1800\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"1801\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"1802\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"1803\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"1804\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"1805\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1806\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1807\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"1808\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"1809\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"1810\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"1811\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"1812\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"1813\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"1814\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"1815\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1816\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1817\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1818\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1819\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"1820\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"1821\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"1822\":{\"h\":\"OpenID Connect\"},\"1823\":{\"h\":\"Overview\",\"t\":[\"Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.\",\"The DSF FHIR server supports Authorization Code Flow for the user interface as well as Bearer Token Authentication for the REST API. Back-Channel Logout is also supported.\",\"FHIR Reverse Proxy\",\"The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter needs to be set to optional.\"]},\"1824\":{\"h\":\"Authorization Code Flow\",\"t\":[\"To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.\"]},\"1825\":{\"h\":\"Bearer Token Authentication\",\"t\":[\"To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\"]},\"1826\":{\"h\":\"Additional ODIC Configuration Parameter\",\"t\":[\"A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.\",\"For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.\"]},\"1827\":{\"h\":\"Example\",\"t\":[\"services: app: image: ghcr.io/datasharingframework/fhir:1.3.1 # ... secrets: - keycloak_root_ca.pem # ... environment: # ... DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true' DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true' DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true' DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3 # ... secrets: keycloak_root_ca.pem: file: ./secrets/keycloak_root_ca.pem \"]},\"1828\":{\"h\":\"FHIR Reverse Proxy\"},\"1829\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"1830\":{\"h\":\"Configuration Parameters\"},\"1831\":{\"h\":\"APP_SERVER_IP\",\"t\":[\"Required: Yes\",\"Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target\",\"Example:app, 172.28.1.3\"]},\"1832\":{\"h\":\"HTTPS_SERVER_NAME_PORT\",\"t\":[\"Required: Yes\",\"Description: External FQDN of your DSF FHIR server with port, typically 443\",\"Example:my-external.fqdn:443\"]},\"1833\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"1834\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"1835\":{\"h\":\"PROXY_PASS_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"1836\":{\"h\":\"PROXY_PASS_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"1837\":{\"h\":\"SERVER_CONTEXT_PATH\",\"t\":[\"Required: No\",\"Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.\",\"Default:/fhir\"]},\"1838\":{\"h\":\"SSL_CA_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_certificate_file.pem\"]},\"1839\":{\"h\":\"SSL_CA_DN_REQUEST_FILE\",\"t\":[\"Required: No\",\"Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_dn_request_file.pem\"]},\"1840\":{\"h\":\"SSL_CERTIFICATE_CHAIN_FILE\",\"t\":[\"Required: No\",\"Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_chain_file.pem\"]},\"1841\":{\"h\":\"SSL_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_file.pem\"]},\"1842\":{\"h\":\"SSL_CERTIFICATE_KEY_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_key_file.pem\"]},\"1843\":{\"h\":\"SSL_VERIFY_CLIENT\",\"t\":[\"Required: No\",\"Description: Modifies the apache mod_ssl config parameter SSLVerifyClient\",\"Recommendation: Set to optional when using OIDC authentication\",\"Default:require\"]},\"1844\":{\"h\":\"BPE Server\"},\"1845\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"1846\":{\"h\":\"Configuration Parameters\"},\"1847\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"1848\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"1849\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"1850\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"1851\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"1852\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"1853\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"1854\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1855\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1856\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"1857\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"1858\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"1859\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"1860\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"1861\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"1862\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"1863\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"1864\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1865\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1866\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1867\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1868\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"1869\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"1870\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"1871\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"1872\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"1873\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"1874\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server to execute database migrations\",\"Default:liquibase_user\"]},\"1875\":{\"h\":\"DEV_DSF_BPE_DB_URL\",\"t\":[\"Property: dev.dsf.bpe.db.url\",\"Required: Yes\",\"Description: The address of the database used for the DSF BPE server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/bpe\"]},\"1876\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server for camunda processes\",\"Default:camunda_users\"]},\"1877\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"Example:/run/secrets/db_user_camunda.password\"]},\"1878\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME\",\"Default:camunda_server_user\"]},\"1879\":{\"h\":\"DEV_DSF_BPE_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server\",\"Default:bpe_users\"]},\"1880\":{\"h\":\"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"1881\":{\"h\":\"DEV_DSF_BPE_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server\",\"Default:bpe_server_user\"]},\"1882\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityEnd\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity end, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"1883\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityStart\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity start, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"1884\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variables\",\"Required: No\",\"Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"1885\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variablesLocal\",\"Required: No\",\"Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"1886\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"1887\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"1888\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"1889\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"1890\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"1891\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true\",\"Default:false\"]},\"1892\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:5000\"]},\"1893\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"1894\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"1895\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"1896\":{\"h\":\"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server\",\"Default:?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"1897\":{\"h\":\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.bpe.fhir.server.base.url\",\"Required: Yes\",\"Description: The base address of the local DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"1898\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.max\",\"Required: No\",\"Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries\",\"Default:-1\"]},\"1899\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server\",\"Default:5000\"]},\"1900\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about task resources from the DSF FHIR server\",\"Default:?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"1901\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate.pem\"]},\"1902\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem\"]},\"1903\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem.password\"]},\"1904\":{\"h\":\"DEV_DSF_BPE_MAIL_FROMADDRESS\",\"t\":[\"Property: dev.dsf.bpe.mail.fromAddress\",\"Required: No\",\"Description: Mail service sender address\",\"Example:sender@localhost\"]},\"1905\":{\"h\":\"DEV_DSF_BPE_MAIL_HOST\",\"t\":[\"Property: dev.dsf.bpe.mail.host\",\"Required: No\",\"Description: SMTP server hostname\",\"Example:smtp.server.de\"]},\"1906\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize\",\"Required: No\",\"Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:4\"]},\"1907\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation\",\"Required: No\",\"Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:/opt/bpe/log/bpe.log\"]},\"1908\":{\"h\":\"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.password\",\"Required: No\",\"Description: SMTP server authentication password\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"1909\":{\"h\":\"DEV_DSF_BPE_MAIL_PORT\",\"t\":[\"Property: dev.dsf.bpe.mail.port\",\"Required: No\",\"Description: SMTP server port\",\"Example:465\",\"Default:0\"]},\"1910\":{\"h\":\"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.replyToAddresses\",\"Required: No\",\"Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported\",\"Example:reply.to@localhost\"]},\"1911\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT\",\"t\":[\"Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent\",\"Required: No\",\"Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"1912\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP\",\"t\":[\"Property: dev.dsf.bpe.mail.sendTestMailOnStartup\",\"Required: No\",\"Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"1913\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore\",\"Required: No\",\"Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smime_certificate.p12\"]},\"1914\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore.password\",\"Required: No\",\"Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"Example:/run/secrets/smime_certificate.p12.password\"]},\"1915\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddresses\",\"Required: No\",\"Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported\",\"Example:recipient@localhost\"]},\"1916\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSESCC\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddressesCc\",\"Required: No\",\"Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported\",\"Example:cc.recipient@localhost\"]},\"1917\":{\"h\":\"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.mail.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_trust_certificates.pem\"]},\"1918\":{\"h\":\"DEV_DSF_BPE_MAIL_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.mail.username\",\"Required: No\",\"Description: SMTP server authentication username\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"1919\":{\"h\":\"DEV_DSF_BPE_MAIL_USESMTPS\",\"t\":[\"Property: dev.dsf.bpe.mail.useSmtps\",\"Required: No\",\"Description: To enable SMTP over TLS (smtps), set to true\",\"Default:false\"]},\"1920\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.corePoolSize\",\"Required: No\",\"Description: Process engine job executor core pool size\",\"Default:4\"]},\"1921\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.maxPoolSize\",\"Required: No\",\"Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full\",\"Default:10\"]},\"1922\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.queueSize\",\"Required: No\",\"Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy\",\"Default:40\"]},\"1923\":{\"h\":\"DEV_DSF_BPE_PROCESS_EXCLUDED\",\"t\":[\"Property: dev.dsf.bpe.process.excluded\",\"Required: No\",\"Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List\",\"Example:dsfdev_updateAllowList|1.0, another_process|x.y\"]},\"1924\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.max\",\"Required: No\",\"Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries\",\"Default:-1\"]},\"1925\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment\",\"Default:5000\"]},\"1926\":{\"h\":\"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY\",\"t\":[\"Property: dev.dsf.bpe.process.plugin.directroy\",\"Required: No\",\"Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server\",\"Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit\",\"Default:process\"]},\"1927\":{\"h\":\"DEV_DSF_BPE_PROCESS_RETIRED\",\"t\":[\"Property: dev.dsf.bpe.process.retired\",\"Required: No\",\"Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Retire processes that where deployed previously but are not anymore available\",\"Example:old_process|x.y\"]},\"1928\":{\"h\":\"DEV_DSF_BPE_PROCESS_THREADS\",\"t\":[\"Property: dev.dsf.bpe.process.threads\",\"Required: No\",\"Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores\",\"Default:-1\"]},\"1929\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"1930\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"1931\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"1932\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"1933\":{\"h\":\"FHIR Server\"},\"1934\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\"]},\"1935\":{\"h\":\"Access Control\"},\"1936\":{\"h\":\"Overview\",\"t\":[\"The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"OpenID Connect\",\"To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.\",\"Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.\",\"The listing below shows a minimal configuration to enable read access for a specific client-certificate:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - example_read_only_role: thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128} dsf-role: - READ - SEARCH - HISTORY \",\"The list of user roles above contains a single entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles.\",\"Certificate Thumbprints\",\"SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:\",\"certtool --fingerprint --hash=sha512 --infile=certificate.pem \",\"Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string \\\"\\\" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.\"]},\"1937\":{\"h\":\"Matching Users\",\"t\":[\"To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.\"]},\"1938\":{\"h\":\"thumbprint\",\"t\":[\"The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.\"]},\"1939\":{\"h\":\"email\",\"t\":[\"Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the emailclaim from the access token will be matched against the property values.\"]},\"1940\":{\"h\":\"token-role and token-group\",\"t\":[\"With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.\"]},\"1941\":{\"h\":\"DSF and Practitioner Roles\",\"t\":[\"To types of roles can be applied to matched users.\"]},\"1942\":{\"h\":\"dsf-role\",\"t\":[\"DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:\",\"CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.\"]},\"1943\":{\"h\":\"practitioner-role\",\"t\":[\"In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystem resources. Codes are specified in the form system-url|code. If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinition resource, the user can start the process if he also has the dsf-roleCREATE.\",\"Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:\",\"UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.\"]},\"1944\":{\"h\":\"Examples\",\"t\":[\"The first example defines a group of DSF administrators. Two client certificates match against this role:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - certificate-admins: thumbprint: - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - token-role-admins: token-role: admin dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - read-only: email: - first.user@test.org - second.user@test.org dsf-role: - READ - SEARCH - HISTORY \"]},\"1945\":{\"h\":\"Configuration Parameters\"},\"1946\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"1947\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"1948\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"1949\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"1950\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:10000\"]},\"1951\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client _trust_certificates.pem\"]},\"1952\":{\"h\":\"DEV_DSF_FHIR_CLIENT_VERBOSE\",\"t\":[\"Property: dev.dsf.fhir.client.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"1953\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"1954\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"1955\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"1956\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server to execute database migrations\",\"Default:liquibase_user\"]},\"1957\":{\"h\":\"DEV_DSF_FHIR_DB_URL\",\"t\":[\"Property: dev.dsf.fhir.db.url\",\"Required: Yes\",\"Description: The address of the database used for the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/fhir\"]},\"1958\":{\"h\":\"DEV_DSF_FHIR_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server\",\"Default:fhir_users\"]},\"1959\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"1960\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes\",\"Default:fhir_permanent_delete_users\"]},\"1961\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"Example:/run/secrets/db_user_permanent_delete.password\"]},\"1962\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME\",\"Default:fhir_server_permanent_delete_user\"]},\"1963\":{\"h\":\"DEV_DSF_FHIR_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server\",\"Default:fhir_server_user\"]},\"1964\":{\"h\":\"DEV_DSF_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.fhir.server.base.url\",\"Required: Yes\",\"Description: The base address of this DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"1965\":{\"h\":\"DEV_DSF_FHIR_SERVER_INIT_BUNDLE\",\"t\":[\"Property: dev.dsf.fhir.server.init.bundle\",\"Required: No\",\"Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source\",\"Default:conf/bundle.xml\"]},\"1966\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE\",\"t\":[\"Property: dev.dsf.fhir.server.organization.identifier.value\",\"Required: Yes\",\"Description: The local identifier value used in the Allow-List\",\"Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization\",\"Example:hospital.com\"]},\"1967\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"t\":[\"Property: dev.dsf.fhir.server.organization.thumbprint\",\"Required: Yes\",\"Description: The SHA-512 thumbprint of the local organization client certificate\",\"Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem\"]},\"1968\":{\"h\":\"DEV_DSF_FHIR_SERVER_PAGE_COUNT\",\"t\":[\"Property: dev.dsf.fhir.server.page.count\",\"Required: No\",\"Description: The page size returned by the DSF FHIR server when reading/searching fhir resources\",\"Default:20\"]},\"1969\":{\"h\":\"DEV_DSF_FHIR_SERVER_ROLECONFIG\",\"t\":[\"Property: dev.dsf.fhir.server.roleConfig\",\"Required: No\",\"Description: Role config YAML as defined in FHIR Server: Access Control.\"]},\"1970\":{\"h\":\"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE\",\"t\":[\"Property: dev.dsf.fhir.server.static.resource.cache\",\"Required: No\",\"Description: To disable static resource caching, set to false\",\"Recommendation: Only set to false for development\",\"Default:true\"]},\"1971\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"1972\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"1973\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"1974\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"1975\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"1976\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"1977\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"1978\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"1979\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"1980\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"1981\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"1982\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1983\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"1984\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"1985\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"1986\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"1987\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"1988\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"1989\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"1990\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"1991\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"1992\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1993\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1994\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1995\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"1996\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"1997\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"1998\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"1999\":{\"h\":\"OpenID Connect\"},\"2000\":{\"h\":\"Overview\",\"t\":[\"Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.\",\"The DSF FHIR server supports Authorization Code Flow for the user interface as well as Bearer Token Authentication for the REST API. Back-Channel Logout is also supported.\",\"FHIR Reverse Proxy\",\"The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter needs to be set to optional.\"]},\"2001\":{\"h\":\"Authorization Code Flow\",\"t\":[\"To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.\"]},\"2002\":{\"h\":\"Bearer Token Authentication\",\"t\":[\"To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\"]},\"2003\":{\"h\":\"Additional ODIC Configuration Parameter\",\"t\":[\"A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.\",\"For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.\"]},\"2004\":{\"h\":\"Example\",\"t\":[\"services: app: image: ghcr.io/datasharingframework/fhir:1.3.2 # ... secrets: - keycloak_root_ca.pem # ... environment: # ... DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true' DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true' DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true' DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3 # ... secrets: keycloak_root_ca.pem: file: ./secrets/keycloak_root_ca.pem \"]},\"2005\":{\"h\":\"FHIR Reverse Proxy\"},\"2006\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"2007\":{\"h\":\"Configuration Parameters\"},\"2008\":{\"h\":\"APP_SERVER_IP\",\"t\":[\"Required: Yes\",\"Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target\",\"Example:app, 172.28.1.3\"]},\"2009\":{\"h\":\"HTTPS_SERVER_NAME_PORT\",\"t\":[\"Required: Yes\",\"Description: External FQDN of your DSF FHIR server with port, typically 443\",\"Example:my-external.fqdn:443\"]},\"2010\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"2011\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"2012\":{\"h\":\"PROXY_PASS_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"2013\":{\"h\":\"PROXY_PASS_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"2014\":{\"h\":\"SERVER_CONTEXT_PATH\",\"t\":[\"Required: No\",\"Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.\",\"Default:/fhir\"]},\"2015\":{\"h\":\"SSL_CA_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_certificate_file.pem\"]},\"2016\":{\"h\":\"SSL_CA_DN_REQUEST_FILE\",\"t\":[\"Required: No\",\"Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_dn_request_file.pem\"]},\"2017\":{\"h\":\"SSL_CERTIFICATE_CHAIN_FILE\",\"t\":[\"Required: No\",\"Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_chain_file.pem\"]},\"2018\":{\"h\":\"SSL_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_file.pem\"]},\"2019\":{\"h\":\"SSL_CERTIFICATE_KEY_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_key_file.pem\"]},\"2020\":{\"h\":\"SSL_VERIFY_CLIENT\",\"t\":[\"Required: No\",\"Description: Modifies the apache mod_ssl config parameter SSLVerifyClient\",\"Recommendation: Set to optional when using OIDC authentication\",\"Default:require\"]},\"2021\":{\"h\":\"BPE Server\"},\"2022\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"2023\":{\"h\":\"Configuration Parameters\"},\"2024\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"2025\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"2026\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"2027\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"2028\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"2029\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"2030\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"2031\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"2032\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"2033\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"2034\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"2035\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"2036\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"2037\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"2038\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"2039\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"2040\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"2041\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2042\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2043\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2044\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2045\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"2046\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"2047\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"2048\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"2049\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"2050\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"2051\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server to execute database migrations\",\"Default:liquibase_user\"]},\"2052\":{\"h\":\"DEV_DSF_BPE_DB_URL\",\"t\":[\"Property: dev.dsf.bpe.db.url\",\"Required: Yes\",\"Description: The address of the database used for the DSF BPE server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/bpe\"]},\"2053\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server for camunda processes\",\"Default:camunda_users\"]},\"2054\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"Example:/run/secrets/db_user_camunda.password\"]},\"2055\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME\",\"Default:camunda_server_user\"]},\"2056\":{\"h\":\"DEV_DSF_BPE_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server\",\"Default:bpe_users\"]},\"2057\":{\"h\":\"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"2058\":{\"h\":\"DEV_DSF_BPE_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server\",\"Default:bpe_server_user\"]},\"2059\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityEnd\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity end, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"2060\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityStart\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity start, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"2061\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variables\",\"Required: No\",\"Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2062\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variablesLocal\",\"Required: No\",\"Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2063\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"2064\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"2065\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"2066\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"2067\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"2068\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true\",\"Default:false\"]},\"2069\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:5000\"]},\"2070\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"2071\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"2072\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"2073\":{\"h\":\"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server\",\"Default:?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"2074\":{\"h\":\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.bpe.fhir.server.base.url\",\"Required: Yes\",\"Description: The base address of the local DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"2075\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.max\",\"Required: No\",\"Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries\",\"Default:-1\"]},\"2076\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server\",\"Default:5000\"]},\"2077\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about task resources from the DSF FHIR server\",\"Default:?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"2078\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate.pem\"]},\"2079\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem\"]},\"2080\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem.password\"]},\"2081\":{\"h\":\"DEV_DSF_BPE_MAIL_FROMADDRESS\",\"t\":[\"Property: dev.dsf.bpe.mail.fromAddress\",\"Required: No\",\"Description: Mail service sender address\",\"Example:sender@localhost\"]},\"2082\":{\"h\":\"DEV_DSF_BPE_MAIL_HOST\",\"t\":[\"Property: dev.dsf.bpe.mail.host\",\"Required: No\",\"Description: SMTP server hostname\",\"Example:smtp.server.de\"]},\"2083\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize\",\"Required: No\",\"Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:4\"]},\"2084\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation\",\"Required: No\",\"Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:/opt/bpe/log/bpe.log\"]},\"2085\":{\"h\":\"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.password\",\"Required: No\",\"Description: SMTP server authentication password\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"2086\":{\"h\":\"DEV_DSF_BPE_MAIL_PORT\",\"t\":[\"Property: dev.dsf.bpe.mail.port\",\"Required: No\",\"Description: SMTP server port\",\"Example:465\",\"Default:0\"]},\"2087\":{\"h\":\"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.replyToAddresses\",\"Required: No\",\"Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported\",\"Example:reply.to@localhost\"]},\"2088\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT\",\"t\":[\"Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent\",\"Required: No\",\"Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"2089\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP\",\"t\":[\"Property: dev.dsf.bpe.mail.sendTestMailOnStartup\",\"Required: No\",\"Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"2090\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore\",\"Required: No\",\"Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smime_certificate.p12\"]},\"2091\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore.password\",\"Required: No\",\"Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"Example:/run/secrets/smime_certificate.p12.password\"]},\"2092\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddresses\",\"Required: No\",\"Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported\",\"Example:recipient@localhost\"]},\"2093\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSESCC\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddressesCc\",\"Required: No\",\"Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported\",\"Example:cc.recipient@localhost\"]},\"2094\":{\"h\":\"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.mail.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_trust_certificates.pem\"]},\"2095\":{\"h\":\"DEV_DSF_BPE_MAIL_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.mail.username\",\"Required: No\",\"Description: SMTP server authentication username\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"2096\":{\"h\":\"DEV_DSF_BPE_MAIL_USESMTPS\",\"t\":[\"Property: dev.dsf.bpe.mail.useSmtps\",\"Required: No\",\"Description: To enable SMTP over TLS (smtps), set to true\",\"Default:false\"]},\"2097\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.corePoolSize\",\"Required: No\",\"Description: Process engine job executor core pool size\",\"Default:4\"]},\"2098\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.maxPoolSize\",\"Required: No\",\"Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full\",\"Default:10\"]},\"2099\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.queueSize\",\"Required: No\",\"Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy\",\"Default:40\"]},\"2100\":{\"h\":\"DEV_DSF_BPE_PROCESS_EXCLUDED\",\"t\":[\"Property: dev.dsf.bpe.process.excluded\",\"Required: No\",\"Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List\",\"Example:dsfdev_updateAllowList|1.0, another_process|x.y\"]},\"2101\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.max\",\"Required: No\",\"Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries\",\"Default:-1\"]},\"2102\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment\",\"Default:5000\"]},\"2103\":{\"h\":\"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY\",\"t\":[\"Property: dev.dsf.bpe.process.plugin.directroy\",\"Required: No\",\"Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server\",\"Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit\",\"Default:process\"]},\"2104\":{\"h\":\"DEV_DSF_BPE_PROCESS_RETIRED\",\"t\":[\"Property: dev.dsf.bpe.process.retired\",\"Required: No\",\"Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Retire processes that where deployed previously but are not anymore available\",\"Example:old_process|x.y\"]},\"2105\":{\"h\":\"DEV_DSF_BPE_PROCESS_THREADS\",\"t\":[\"Property: dev.dsf.bpe.process.threads\",\"Required: No\",\"Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores\",\"Default:-1\"]},\"2106\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"2107\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"2108\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"2109\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"2110\":{\"h\":\"FHIR Server\"},\"2111\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\"]},\"2112\":{\"h\":\"Access Control\"},\"2113\":{\"h\":\"Overview\",\"t\":[\"The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"OpenID Connect\",\"To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.\",\"Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.\",\"The listing below shows a minimal configuration to enable read access for a specific client-certificate:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - example_read_only_role: thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128} dsf-role: - READ - SEARCH - HISTORY \",\"The list of user roles above contains a single entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles.\",\"Certificate Thumbprints\",\"SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:\",\"certtool --fingerprint --hash=sha512 --infile=certificate.pem \",\"Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string \\\"\\\" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.\"]},\"2114\":{\"h\":\"Matching Users\",\"t\":[\"To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.\"]},\"2115\":{\"h\":\"thumbprint\",\"t\":[\"The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.\"]},\"2116\":{\"h\":\"email\",\"t\":[\"Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the emailclaim from the access token will be matched against the property values.\"]},\"2117\":{\"h\":\"token-role and token-group\",\"t\":[\"With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.\"]},\"2118\":{\"h\":\"DSF and Practitioner Roles\",\"t\":[\"To types of roles can be applied to matched users.\"]},\"2119\":{\"h\":\"dsf-role\",\"t\":[\"DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:\",\"CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.\"]},\"2120\":{\"h\":\"practitioner-role\",\"t\":[\"In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystem resources. Codes are specified in the form system-url|code. If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinition resource, the user can start the process if he also has the dsf-roleCREATE.\",\"Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:\",\"UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.\"]},\"2121\":{\"h\":\"Examples\",\"t\":[\"The first example defines a group of DSF administrators. Two client certificates match against this role:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - certificate-admins: thumbprint: - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - token-role-admins: token-role: admin dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - read-only: email: - first.user@test.org - second.user@test.org dsf-role: - READ - SEARCH - HISTORY \"]},\"2122\":{\"h\":\"Configuration Parameters\"},\"2123\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"2124\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"2125\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"2126\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.connect\",\"Required: No\",\"Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"2127\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.read\",\"Required: No\",\"Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:10000\"]},\"2128\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client _trust_certificates.pem\"]},\"2129\":{\"h\":\"DEV_DSF_FHIR_CLIENT_VERBOSE\",\"t\":[\"Property: dev.dsf.fhir.client.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"2130\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"2131\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"2132\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"2133\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server to execute database migrations\",\"Default:liquibase_user\"]},\"2134\":{\"h\":\"DEV_DSF_FHIR_DB_URL\",\"t\":[\"Property: dev.dsf.fhir.db.url\",\"Required: Yes\",\"Description: The address of the database used for the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/fhir\"]},\"2135\":{\"h\":\"DEV_DSF_FHIR_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server\",\"Default:fhir_users\"]},\"2136\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"2137\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes\",\"Default:fhir_permanent_delete_users\"]},\"2138\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"Example:/run/secrets/db_user_permanent_delete.password\"]},\"2139\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME\",\"Default:fhir_server_permanent_delete_user\"]},\"2140\":{\"h\":\"DEV_DSF_FHIR_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server\",\"Default:fhir_server_user\"]},\"2141\":{\"h\":\"DEV_DSF_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.fhir.server.base.url\",\"Required: Yes\",\"Description: The base address of this DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"2142\":{\"h\":\"DEV_DSF_FHIR_SERVER_INIT_BUNDLE\",\"t\":[\"Property: dev.dsf.fhir.server.init.bundle\",\"Required: No\",\"Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source\",\"Default:conf/bundle.xml\"]},\"2143\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE\",\"t\":[\"Property: dev.dsf.fhir.server.organization.identifier.value\",\"Required: Yes\",\"Description: The local identifier value used in the Allow-List\",\"Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization\",\"Example:hospital.com\"]},\"2144\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"t\":[\"Property: dev.dsf.fhir.server.organization.thumbprint\",\"Required: Yes\",\"Description: The SHA-512 thumbprint of the local organization client certificate\",\"Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem\"]},\"2145\":{\"h\":\"DEV_DSF_FHIR_SERVER_PAGE_COUNT\",\"t\":[\"Property: dev.dsf.fhir.server.page.count\",\"Required: No\",\"Description: The page size returned by the DSF FHIR server when reading/searching fhir resources\",\"Default:20\"]},\"2146\":{\"h\":\"DEV_DSF_FHIR_SERVER_ROLECONFIG\",\"t\":[\"Property: dev.dsf.fhir.server.roleConfig\",\"Required: No\",\"Description: Role config YAML as defined in FHIR Server: Access Control.\"]},\"2147\":{\"h\":\"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE\",\"t\":[\"Property: dev.dsf.fhir.server.static.resource.cache\",\"Required: No\",\"Description: To disable static resource caching, set to false\",\"Recommendation: Only set to false for development\",\"Default:true\"]},\"2148\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"2149\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"2150\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"2151\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"2152\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"2153\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"2154\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"2155\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"2156\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"2157\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"2158\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"2159\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"2160\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"2161\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"2162\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"2163\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"2164\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"2165\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"2166\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"2167\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"2168\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"2169\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2170\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2171\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2172\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2173\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"2174\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"2175\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"2176\":{\"h\":\"OpenID Connect\"},\"2177\":{\"h\":\"Overview\",\"t\":[\"Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.\",\"The DSF FHIR server supports Authorization Code Flow for the user interface as well as Bearer Token Authentication for the REST API. Back-Channel Logout is also supported.\",\"FHIR Reverse Proxy\",\"The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter needs to be set to optional.\"]},\"2178\":{\"h\":\"Authorization Code Flow\",\"t\":[\"To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.\"]},\"2179\":{\"h\":\"Bearer Token Authentication\",\"t\":[\"To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\"]},\"2180\":{\"h\":\"Additional ODIC Configuration Parameter\",\"t\":[\"A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.\",\"For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.\"]},\"2181\":{\"h\":\"Example\",\"t\":[\"services: app: image: ghcr.io/datasharingframework/fhir:1.4.0 # ... secrets: - keycloak_root_ca.pem # ... environment: # ... DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true' DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true' DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true' DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3 # ... secrets: keycloak_root_ca.pem: file: ./secrets/keycloak_root_ca.pem \"]},\"2182\":{\"h\":\"FHIR Reverse Proxy\"},\"2183\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"2184\":{\"h\":\"Configuration Parameters\"},\"2185\":{\"h\":\"APP_SERVER_IP\",\"t\":[\"Required: Yes\",\"Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target\",\"Example:app, 172.28.1.3\"]},\"2186\":{\"h\":\"HTTPS_SERVER_NAME_PORT\",\"t\":[\"Required: Yes\",\"Description: External FQDN of your DSF FHIR server with port, typically 443\",\"Example:my-external.fqdn:443\"]},\"2187\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"2188\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"2189\":{\"h\":\"PROXY_PASS_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"2190\":{\"h\":\"PROXY_PASS_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"2191\":{\"h\":\"SERVER_CONTEXT_PATH\",\"t\":[\"Required: No\",\"Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.\",\"Default:/fhir\"]},\"2192\":{\"h\":\"SSL_CA_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_certificate_file.pem\"]},\"2193\":{\"h\":\"SSL_CA_DN_REQUEST_FILE\",\"t\":[\"Required: No\",\"Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_dn_request_file.pem\"]},\"2194\":{\"h\":\"SSL_CERTIFICATE_CHAIN_FILE\",\"t\":[\"Required: No\",\"Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_chain_file.pem\"]},\"2195\":{\"h\":\"SSL_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_file.pem\"]},\"2196\":{\"h\":\"SSL_CERTIFICATE_KEY_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_key_file.pem\"]},\"2197\":{\"h\":\"SSL_VERIFY_CLIENT\",\"t\":[\"Required: No\",\"Description: Modifies the apache mod_ssl config parameter SSLVerifyClient\",\"Recommendation: Set to optional when using OIDC authentication\",\"Default:require\"]},\"2198\":{\"h\":\"BPE Server\"},\"2199\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\"]},\"2200\":{\"h\":\"Access Control\"},\"2201\":{\"h\":\"Overview\",\"t\":[\"The DSF BPE server provides a user interface for administrators. Without any additional configuration the user interface is not accessible with the organizations X.509 client certificate or any other certificate or OpenID Connect authenticated user.\",\"OpenID Connect\",\"To enable OpenID Connect authentication of local user, see the DSF BPE server OpenID Connect configuration page.\",\"Access to the user interface can be enabled for client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.\",\"The listing below shows a minimal configuration to enable access for a specific client-certificate:\",\" DEV_DSF_BPE_SERVER_ROLECONFIG: | - example_read_only_role: thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128} dsf-role: - ADMIN \",\"The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.\",\"Certificate Thumbprints\",\"SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:\",\"certtool --fingerprint --hash=sha512 --infile=certificate.pem \",\"Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string \\\"\\\" or a single block scalar | character as the value for the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG if no roles should be configured.\"]},\"2202\":{\"h\":\"Matching Users\",\"t\":[\"To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.\"]},\"2203\":{\"h\":\"thumbprint\",\"t\":[\"The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.\"]},\"2204\":{\"h\":\"email\",\"t\":[\"Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the emailclaim from the access token will be matched against the property values.\"]},\"2205\":{\"h\":\"token-role and token-group\",\"t\":[\"With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.\"]},\"2206\":{\"h\":\"DSF and Practitioner Roles\",\"t\":[\"Two types of roles can be applied to matched users.\"]},\"2207\":{\"h\":\"dsf-role\",\"t\":[\"DSF roles specified via the dsf-role property define general access to the user interface. Allowed values are:\",\"ADMIN.\"]},\"2208\":{\"h\":\"practitioner-role\",\"t\":[\"The BPE server currently does not support any practionier-roles.\"]},\"2209\":{\"h\":\"Examples\",\"t\":[\"The first example defines a group of DSF administrators. Two client certificates match against this role:\",\" DEV_DSF_BPE_SERVER_ROLECONFIG: | - certificate-admins: thumbprint: - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c dsf-role: - ADMIN \",\"The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:\",\" DEV_DSF_BPE_SERVER_ROLECONFIG: | - token-role-admins: token-role: admin dsf-role: - ADMIN \",\"The third example allows administrator access and users e-mail addresses to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:\",\" DEV_DSF_BPE_SERVER_ROLECONFIG: | - email-admins: email: - first.user@test.org - second.user@test.org dsf-role: - ADMIN \"]},\"2210\":{\"h\":\"Configuration Parameters\"},\"2211\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"2212\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"2213\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"2214\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"2215\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"2216\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"2217\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"2218\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"2219\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"2220\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"2221\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"2222\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"2223\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"2224\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"2225\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"2226\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"2227\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"2228\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2229\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2230\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2231\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2232\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"2233\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"2234\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"2235\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"2236\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"2237\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"2238\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server to execute database migrations\",\"Default:liquibase_user\"]},\"2239\":{\"h\":\"DEV_DSF_BPE_DB_URL\",\"t\":[\"Property: dev.dsf.bpe.db.url\",\"Required: Yes\",\"Description: Address of the database used for the DSF BPE server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/bpe\"]},\"2240\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server for camunda processes\",\"Default:camunda_users\"]},\"2241\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.password\",\"Required: Yes\",\"Description: Password to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"Example:/run/secrets/db_user_camunda.password\"]},\"2242\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.username\",\"Required: No\",\"Description: Username to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME\",\"Default:camunda_server_user\"]},\"2243\":{\"h\":\"DEV_DSF_BPE_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server\",\"Default:bpe_users\"]},\"2244\":{\"h\":\"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.password\",\"Required: Yes\",\"Description: Password to access the database from the DSF BPE server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"2245\":{\"h\":\"DEV_DSF_BPE_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.username\",\"Required: No\",\"Description: Username to access the database from the DSF BPE server\",\"Default:bpe_server_user\"]},\"2246\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_CURRENTUSER\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.currentUser\",\"Required: No\",\"Description: To enable logging of the currently requesting user set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2247\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_DBSTATEMENT\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.dbStatement\",\"Required: No\",\"Description: To enable logging of DB queries set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2248\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityEnd\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity end, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"2249\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityStart\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity start, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"2250\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variables\",\"Required: No\",\"Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2251\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variablesLocal\",\"Required: No\",\"Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2252\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.webserviceRequest\",\"Required: No\",\"Description: To enable logging of webservices requests set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2253\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"2254\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"2255\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"2256\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.connect\",\"Required: No\",\"Description: Timeout in milliseconds until a connection is established with the local DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"2257\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.read\",\"Required: No\",\"Description: Timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"2258\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true\",\"Default:false\"]},\"2259\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.connect\",\"Required: No\",\"Description: Timeout in milliseconds until a connection is established with a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:5000\"]},\"2260\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.read\",\"Required: No\",\"Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"2261\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"2262\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"2263\":{\"h\":\"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server\",\"Default:?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"2264\":{\"h\":\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.bpe.fhir.server.base.url\",\"Required: Yes\",\"Description: Base address of the local DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"2265\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.max\",\"Required: No\",\"Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries\",\"Default:-1\"]},\"2266\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server\",\"Default:5000\"]},\"2267\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about task resources from the DSF FHIR server\",\"Default:?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"2268\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate.pem\"]},\"2269\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem\"]},\"2270\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem.password\"]},\"2271\":{\"h\":\"DEV_DSF_BPE_MAIL_FROMADDRESS\",\"t\":[\"Property: dev.dsf.bpe.mail.fromAddress\",\"Required: No\",\"Description: Mail service sender address\",\"Example:sender@localhost\"]},\"2272\":{\"h\":\"DEV_DSF_BPE_MAIL_HOST\",\"t\":[\"Property: dev.dsf.bpe.mail.host\",\"Required: No\",\"Description: SMTP server hostname\",\"Example:smtp.server.de\"]},\"2273\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize\",\"Required: No\",\"Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:4\"]},\"2274\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation\",\"Required: No\",\"Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:/opt/bpe/log/bpe.log\"]},\"2275\":{\"h\":\"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.password\",\"Required: No\",\"Description: SMTP server authentication password\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"2276\":{\"h\":\"DEV_DSF_BPE_MAIL_PORT\",\"t\":[\"Property: dev.dsf.bpe.mail.port\",\"Required: No\",\"Description: SMTP server port\",\"Example:465\",\"Default:0\"]},\"2277\":{\"h\":\"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.replyToAddresses\",\"Required: No\",\"Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported\",\"Example:reply.to@localhost\"]},\"2278\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT\",\"t\":[\"Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent\",\"Required: No\",\"Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"2279\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP\",\"t\":[\"Property: dev.dsf.bpe.mail.sendTestMailOnStartup\",\"Required: No\",\"Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"2280\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore\",\"Required: No\",\"Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smime_certificate.p12\"]},\"2281\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore.password\",\"Required: No\",\"Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"Example:/run/secrets/smime_certificate.p12.password\"]},\"2282\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddresses\",\"Required: No\",\"Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported\",\"Example:recipient@localhost\"]},\"2283\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSESCC\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddressesCc\",\"Required: No\",\"Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported\",\"Example:cc.recipient@localhost\"]},\"2284\":{\"h\":\"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.mail.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_trust_certificates.pem\"]},\"2285\":{\"h\":\"DEV_DSF_BPE_MAIL_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.mail.username\",\"Required: No\",\"Description: SMTP server authentication username\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"2286\":{\"h\":\"DEV_DSF_BPE_MAIL_USESMTPS\",\"t\":[\"Property: dev.dsf.bpe.mail.useSmtps\",\"Required: No\",\"Description: To enable SMTP over TLS (smtps), set to true\",\"Default:false\"]},\"2287\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.corePoolSize\",\"Required: No\",\"Description: Process engine job executor core pool size\",\"Default:4\"]},\"2288\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.maxPoolSize\",\"Required: No\",\"Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full\",\"Default:10\"]},\"2289\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.queueSize\",\"Required: No\",\"Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy\",\"Default:40\"]},\"2290\":{\"h\":\"DEV_DSF_BPE_PROCESS_EXCLUDED\",\"t\":[\"Property: dev.dsf.bpe.process.excluded\",\"Required: No\",\"Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List\",\"Example:dsfdev_updateAllowList|1.0, another_process|x.y\"]},\"2291\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.max\",\"Required: No\",\"Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries\",\"Default:-1\"]},\"2292\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment\",\"Default:5000\"]},\"2293\":{\"h\":\"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY\",\"t\":[\"Property: dev.dsf.bpe.process.plugin.directroy\",\"Required: No\",\"Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server\",\"Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit\",\"Default:process\"]},\"2294\":{\"h\":\"DEV_DSF_BPE_PROCESS_RETIRED\",\"t\":[\"Property: dev.dsf.bpe.process.retired\",\"Required: No\",\"Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Retire processes that where deployed previously but are not anymore available\",\"Example:old_process|x.y\"]},\"2295\":{\"h\":\"DEV_DSF_BPE_PROCESS_THREADS\",\"t\":[\"Property: dev.dsf.bpe.process.threads\",\"Required: No\",\"Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores\",\"Default:-1\"]},\"2296\":{\"h\":\"DEV_DSF_BPE_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.bpe.server.base.url\",\"Required: No\",\"Description: Base address of the BPE server, configure when exposing the web-ui\",\"Example:https://foo.bar/bpe\",\"Default:https\"]},\"2297\":{\"h\":\"DEV_DSF_BPE_SERVER_ROLECONFIG\",\"t\":[\"Property: dev.dsf.bpe.server.roleConfig\",\"Required: No\",\"Description: Role config YAML as defined in FHIR Server: Access Control.\"]},\"2298\":{\"h\":\"DEV_DSF_BPE_SERVER_STATIC_RESOURCE_CACHE\",\"t\":[\"Property: dev.dsf.bpe.server.static.resource.cache\",\"Required: No\",\"Description: To disable static resource caching, set to false\",\"Recommendation: Only set to false for development\",\"Default:true\"]},\"2299\":{\"h\":\"DEV_DSF_BPE_SERVER_UI_THEME\",\"t\":[\"Property: dev.dsf.bpe.server.ui.theme\",\"Required: No\",\"Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod\"]},\"2300\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"2301\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"2302\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"2303\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"2304\":{\"h\":\"OpenID Connect\"},\"2305\":{\"h\":\"Overview\",\"t\":[\"Access to the DSF BPE server user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.\",\"The DSF BPE server supports Authorization Code Flow for the user interface. Back-Channel Logout is also supported.\",\"BPE Reverse Proxy\",\"The DSF BPE reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter needs to be set to optional.\"]},\"2306\":{\"h\":\"Authorization Code Flow\",\"t\":[\"To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF BPE server accepts logout tokens at DEV_DSF_BPE_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.\"]},\"2307\":{\"h\":\"Additional ODIC Configuration Parameter\",\"t\":[\"A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF BPE server configuration parameter page.\",\"For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.\"]},\"2308\":{\"h\":\"Example\",\"t\":[\"services: app: image: ghcr.io/datasharingframework/bpe:1.5.0 # ... secrets: - keycloak_root_ca.pem # ... environment: # ... DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true' DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true' DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true' DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-bpe DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3 # ... secrets: keycloak_root_ca.pem: file: ./secrets/keycloak_root_ca.pem \"]},\"2309\":{\"h\":\"BPE Reverse Proxy\"},\"2310\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"2311\":{\"h\":\"Configuration Parameters\"},\"2312\":{\"h\":\"APP_SERVER_IP\",\"t\":[\"Required: Yes\",\"Description: Hostname or IP-Address of the DSF BPE server application container, the reverse proxy target\",\"Example:app, 172.28.1.3\"]},\"2313\":{\"h\":\"HTTPS_SERVER_NAME_PORT\",\"t\":[\"Required: Yes\",\"Description: External FQDN of your DSF BPE server with port, typically 443\",\"Example:my-external.fqdn:443\"]},\"2314\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"2315\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"2316\":{\"h\":\"PROXY_PASS_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"2317\":{\"h\":\"PROXY_PASS_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"2318\":{\"h\":\"SERVER_CONTEXT_PATH\",\"t\":[\"Required: No\",\"Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.\",\"Default:/bpe\"]},\"2319\":{\"h\":\"SSL_CA_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_certificate_file.pem\"]},\"2320\":{\"h\":\"SSL_CA_DN_REQUEST_FILE\",\"t\":[\"Required: No\",\"Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_dn_request_file.pem\"]},\"2321\":{\"h\":\"SSL_CERTIFICATE_CHAIN_FILE\",\"t\":[\"Required: No\",\"Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_chain_file.pem\"]},\"2322\":{\"h\":\"SSL_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_file.pem\"]},\"2323\":{\"h\":\"SSL_CERTIFICATE_KEY_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_key_file.pem\"]},\"2324\":{\"h\":\"SSL_VERIFY_CLIENT\",\"t\":[\"Required: No\",\"Description: Modifies the apache mod_ssl config parameter SSLVerifyClient\",\"Recommendation: Set to optional when using OIDC authentication\",\"Default:require\"]},\"2325\":{\"h\":\"FHIR Server\"},\"2326\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\"]},\"2327\":{\"h\":\"Access Control\"},\"2328\":{\"h\":\"Overview\",\"t\":[\"The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"OpenID Connect\",\"To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.\",\"Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.\",\"The listing below shows a minimal configuration to enable read access for a specific client-certificate:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - example_read_only_role: thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128} dsf-role: - READ - SEARCH - HISTORY \",\"The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.\",\"Certificate Thumbprints\",\"SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:\",\"certtool --fingerprint --hash=sha512 --infile=certificate.pem \",\"Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string \\\"\\\" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.\"]},\"2329\":{\"h\":\"Matching Users\",\"t\":[\"To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.\"]},\"2330\":{\"h\":\"thumbprint\",\"t\":[\"The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.\"]},\"2331\":{\"h\":\"email\",\"t\":[\"Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the emailclaim from the access token will be matched against the property values.\"]},\"2332\":{\"h\":\"token-role and token-group\",\"t\":[\"With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.\"]},\"2333\":{\"h\":\"DSF and Practitioner Roles\",\"t\":[\"Two types of roles can be applied to matched users.\"]},\"2334\":{\"h\":\"dsf-role\",\"t\":[\"DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:\",\"CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.\"]},\"2335\":{\"h\":\"practitioner-role\",\"t\":[\"In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystem resources. Codes are specified in the form system-url|code. If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinition resource, the user can start the process if he also has the dsf-roleCREATE.\",\"Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:\",\"UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.\"]},\"2336\":{\"h\":\"Examples\",\"t\":[\"The first example defines a group of DSF administrators. Two client certificates match against this role:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - certificate-admins: thumbprint: - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - token-role-admins: token-role: admin dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - read-only: email: - first.user@test.org - second.user@test.org dsf-role: - READ - SEARCH - HISTORY \"]},\"2337\":{\"h\":\"Configuration Parameters\"},\"2338\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"2339\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"2340\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"2341\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.connect\",\"Required: No\",\"Description: Timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"2342\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.read\",\"Required: No\",\"Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:10000\"]},\"2343\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client _trust_certificates.pem\"]},\"2344\":{\"h\":\"DEV_DSF_FHIR_CLIENT_VERBOSE\",\"t\":[\"Property: dev.dsf.fhir.client.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"2345\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"2346\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"2347\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"2348\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server to execute database migrations\",\"Default:liquibase_user\"]},\"2349\":{\"h\":\"DEV_DSF_FHIR_DB_URL\",\"t\":[\"Property: dev.dsf.fhir.db.url\",\"Required: Yes\",\"Description: Address of the database used for the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/fhir\"]},\"2350\":{\"h\":\"DEV_DSF_FHIR_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server\",\"Default:fhir_users\"]},\"2351\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.password\",\"Required: Yes\",\"Description: Password to access the database from the DSF FHIR server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"2352\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes\",\"Default:fhir_permanent_delete_users\"]},\"2353\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.password\",\"Required: Yes\",\"Description: Password to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"Example:/run/secrets/db_user_permanent_delete.password\"]},\"2354\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.username\",\"Required: No\",\"Description: Username to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME\",\"Default:fhir_server_permanent_delete_user\"]},\"2355\":{\"h\":\"DEV_DSF_FHIR_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.username\",\"Required: No\",\"Description: Username to access the database from the DSF FHIR server\",\"Default:fhir_server_user\"]},\"2356\":{\"h\":\"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_CURRENTUSER\",\"t\":[\"Property: dev.dsf.fhir.debug.log.message.currentUser\",\"Required: No\",\"Description: To enable logging of the currently requesting user set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2357\":{\"h\":\"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_DBSTATEMENT\",\"t\":[\"Property: dev.dsf.fhir.debug.log.message.dbStatement\",\"Required: No\",\"Description: To enable logging of DB queries set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2358\":{\"h\":\"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST\",\"t\":[\"Property: dev.dsf.fhir.debug.log.message.webserviceRequest\",\"Required: No\",\"Description: To enable logging of webservices requests set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2359\":{\"h\":\"DEV_DSF_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.fhir.server.base.url\",\"Required: Yes\",\"Description: Base address of this DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"2360\":{\"h\":\"DEV_DSF_FHIR_SERVER_INIT_BUNDLE\",\"t\":[\"Property: dev.dsf.fhir.server.init.bundle\",\"Required: No\",\"Description: Fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source\",\"Default:conf/bundle.xml\"]},\"2361\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE\",\"t\":[\"Property: dev.dsf.fhir.server.organization.identifier.value\",\"Required: Yes\",\"Description: Local identifier value used in the Allow-List\",\"Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization\",\"Example:hospital.com\"]},\"2362\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"t\":[\"Property: dev.dsf.fhir.server.organization.thumbprint\",\"Required: Yes\",\"Description: The SHA-512 thumbprint of the local organization client certificate\",\"Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem\"]},\"2363\":{\"h\":\"DEV_DSF_FHIR_SERVER_PAGE_COUNT\",\"t\":[\"Property: dev.dsf.fhir.server.page.count\",\"Required: No\",\"Description: Page size returned by the DSF FHIR server when reading/searching fhir resources\",\"Default:20\"]},\"2364\":{\"h\":\"DEV_DSF_FHIR_SERVER_ROLECONFIG\",\"t\":[\"Property: dev.dsf.fhir.server.roleConfig\",\"Required: No\",\"Description: Role config YAML as defined in FHIR Server: Access Control.\"]},\"2365\":{\"h\":\"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE\",\"t\":[\"Property: dev.dsf.fhir.server.static.resource.cache\",\"Required: No\",\"Description: To disable static resource caching, set to false\",\"Recommendation: Only set to false for development\",\"Default:true\"]},\"2366\":{\"h\":\"DEV_DSF_FHIR_SERVER_UI_THEME\",\"t\":[\"Property: dev.dsf.fhir.server.ui.theme\",\"Required: No\",\"Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod\"]},\"2367\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"2368\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"2369\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"2370\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"2371\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"2372\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"2373\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"2374\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"2375\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"2376\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"2377\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"2378\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"2379\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"2380\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"2381\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"2382\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"2383\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"2384\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"2385\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"2386\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"2387\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"2388\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2389\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2390\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2391\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2392\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"2393\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"2394\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"2395\":{\"h\":\"OpenID Connect\"},\"2396\":{\"h\":\"Overview\",\"t\":[\"Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.\",\"The DSF FHIR server supports Authorization Code Flow for the user interface as well as Bearer Token Authentication for the REST API. Back-Channel Logout is also supported.\",\"FHIR Reverse Proxy\",\"The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter needs to be set to optional.\"]},\"2397\":{\"h\":\"Authorization Code Flow\",\"t\":[\"To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.\"]},\"2398\":{\"h\":\"Bearer Token Authentication\",\"t\":[\"To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\"]},\"2399\":{\"h\":\"Additional ODIC Configuration Parameter\",\"t\":[\"A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.\",\"For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.\"]},\"2400\":{\"h\":\"Example\",\"t\":[\"services: app: image: ghcr.io/datasharingframework/fhir:1.5.0 # ... secrets: - keycloak_root_ca.pem # ... environment: # ... DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true' DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true' DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true' DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3 # ... secrets: keycloak_root_ca.pem: file: ./secrets/keycloak_root_ca.pem \"]},\"2401\":{\"h\":\"FHIR Reverse Proxy\"},\"2402\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"2403\":{\"h\":\"Configuration Parameters\"},\"2404\":{\"h\":\"APP_SERVER_IP\",\"t\":[\"Required: Yes\",\"Description: Hostname or IP-Address of the DSF FHIR server application container, the reverse proxy target\",\"Example:app, 172.28.1.3\"]},\"2405\":{\"h\":\"HTTPS_SERVER_NAME_PORT\",\"t\":[\"Required: Yes\",\"Description: External FQDN of your DSF FHIR server with port, typically 443\",\"Example:my-external.fqdn:443\"]},\"2406\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"2407\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"2408\":{\"h\":\"PROXY_PASS_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"2409\":{\"h\":\"PROXY_PASS_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"2410\":{\"h\":\"SERVER_CONTEXT_PATH\",\"t\":[\"Required: No\",\"Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.\",\"Default:/fhir\"]},\"2411\":{\"h\":\"SSL_CA_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_certificate_file.pem\"]},\"2412\":{\"h\":\"SSL_CA_DN_REQUEST_FILE\",\"t\":[\"Required: No\",\"Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_dn_request_file.pem\"]},\"2413\":{\"h\":\"SSL_CERTIFICATE_CHAIN_FILE\",\"t\":[\"Required: No\",\"Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_chain_file.pem\"]},\"2414\":{\"h\":\"SSL_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_file.pem\"]},\"2415\":{\"h\":\"SSL_CERTIFICATE_KEY_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_key_file.pem\"]},\"2416\":{\"h\":\"SSL_VERIFY_CLIENT\",\"t\":[\"Required: No\",\"Description: Modifies the apache mod_ssl config parameter SSLVerifyClient\",\"Recommendation: Set to optional when using OIDC authentication\",\"Default:require\"]},\"2417\":{\"h\":\"BPE Server\"},\"2418\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\"]},\"2419\":{\"h\":\"Access Control\"},\"2420\":{\"h\":\"Overview\",\"t\":[\"The DSF BPE server provides a user interface for administrators. Without any additional configuration the user interface is not accessible with the organizations X.509 client certificate or any other certificate or OpenID Connect authenticated user.\",\"OpenID Connect\",\"To enable OpenID Connect authentication of local user, see the DSF BPE server OpenID Connect configuration page.\",\"Access to the user interface can be enabled for client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.\",\"The listing below shows a minimal configuration to enable access for a specific client-certificate:\",\" DEV_DSF_BPE_SERVER_ROLECONFIG: | - example_read_only_role: thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128} dsf-role: - ADMIN \",\"The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.\",\"Certificate Thumbprints\",\"SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:\",\"certtool --fingerprint --hash=sha512 --infile=certificate.pem \",\"Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string \\\"\\\" or a single block scalar | character as the value for the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG if no roles should be configured.\"]},\"2421\":{\"h\":\"Matching Users\",\"t\":[\"To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.\"]},\"2422\":{\"h\":\"thumbprint\",\"t\":[\"The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.\"]},\"2423\":{\"h\":\"email\",\"t\":[\"Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the emailclaim from the access token will be matched against the property values.\"]},\"2424\":{\"h\":\"token-role and token-group\",\"t\":[\"With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.\"]},\"2425\":{\"h\":\"DSF and Practitioner Roles\",\"t\":[\"Two types of roles can be applied to matched users.\"]},\"2426\":{\"h\":\"dsf-role\",\"t\":[\"DSF roles specified via the dsf-role property define general access to the user interface. Allowed values are:\",\"ADMIN.\"]},\"2427\":{\"h\":\"practitioner-role\",\"t\":[\"The BPE server currently does not support any practionier-roles.\"]},\"2428\":{\"h\":\"Examples\",\"t\":[\"The first example defines a group of DSF administrators. Two client certificates match against this role:\",\" DEV_DSF_BPE_SERVER_ROLECONFIG: | - certificate-admins: thumbprint: - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c dsf-role: - ADMIN \",\"The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:\",\" DEV_DSF_BPE_SERVER_ROLECONFIG: | - token-role-admins: token-role: admin dsf-role: - ADMIN \",\"The third example allows administrator access and users e-mail addresses to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:\",\" DEV_DSF_BPE_SERVER_ROLECONFIG: | - email-admins: email: - first.user@test.org - second.user@test.org dsf-role: - ADMIN \"]},\"2429\":{\"h\":\"Configuration Parameters\"},\"2430\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"2431\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"2432\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"2433\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"2434\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"2435\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"2436\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"2437\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"2438\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"2439\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"2440\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"2441\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"2442\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"2443\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"2444\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"2445\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"2446\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"2447\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2448\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2449\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2450\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2451\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"2452\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"2453\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"2454\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"2455\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"2456\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"2457\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server to execute database migrations\",\"Default:liquibase_user\"]},\"2458\":{\"h\":\"DEV_DSF_BPE_DB_URL\",\"t\":[\"Property: dev.dsf.bpe.db.url\",\"Required: Yes\",\"Description: Address of the database used for the DSF BPE server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/bpe\"]},\"2459\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server for camunda processes\",\"Default:camunda_users\"]},\"2460\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.password\",\"Required: Yes\",\"Description: Password to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"Example:/run/secrets/db_user_camunda.password\"]},\"2461\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.username\",\"Required: No\",\"Description: Username to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME\",\"Default:camunda_server_user\"]},\"2462\":{\"h\":\"DEV_DSF_BPE_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server\",\"Default:bpe_users\"]},\"2463\":{\"h\":\"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.password\",\"Required: Yes\",\"Description: Password to access the database from the DSF BPE server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"2464\":{\"h\":\"DEV_DSF_BPE_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.username\",\"Required: No\",\"Description: Username to access the database from the DSF BPE server\",\"Default:bpe_server_user\"]},\"2465\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_CURRENTUSER\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.currentUser\",\"Required: No\",\"Description: To enable logging of the currently requesting user set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2466\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_DBSTATEMENT\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.dbStatement\",\"Required: No\",\"Description: To enable logging of DB queries set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2467\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityEnd\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity end, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"2468\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityStart\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity start, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"2469\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variables\",\"Required: No\",\"Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2470\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variablesLocal\",\"Required: No\",\"Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2471\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.webserviceRequest\",\"Required: No\",\"Description: To enable logging of webservices requests set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2472\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"2473\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"2474\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"2475\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.connect\",\"Required: No\",\"Description: Timeout in milliseconds until a connection is established with the local DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"2476\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.read\",\"Required: No\",\"Description: Timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"2477\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true\",\"Default:false\"]},\"2478\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.connect\",\"Required: No\",\"Description: Timeout in milliseconds until a connection is established with a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:5000\"]},\"2479\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.read\",\"Required: No\",\"Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"2480\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"2481\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"2482\":{\"h\":\"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server\",\"Default:?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"2483\":{\"h\":\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.bpe.fhir.server.base.url\",\"Required: Yes\",\"Description: Base address of the local DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"2484\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.max\",\"Required: No\",\"Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries\",\"Default:-1\"]},\"2485\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server\",\"Default:5000\"]},\"2486\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about task resources from the DSF FHIR server\",\"Default:?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"2487\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate.pem\"]},\"2488\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem\"]},\"2489\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem.password\"]},\"2490\":{\"h\":\"DEV_DSF_BPE_MAIL_FROMADDRESS\",\"t\":[\"Property: dev.dsf.bpe.mail.fromAddress\",\"Required: No\",\"Description: Mail service sender address\",\"Example:sender@localhost\"]},\"2491\":{\"h\":\"DEV_DSF_BPE_MAIL_HOST\",\"t\":[\"Property: dev.dsf.bpe.mail.host\",\"Required: No\",\"Description: SMTP server hostname\",\"Example:smtp.server.de\"]},\"2492\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize\",\"Required: No\",\"Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:4\"]},\"2493\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation\",\"Required: No\",\"Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:/opt/bpe/log/bpe.log\"]},\"2494\":{\"h\":\"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.password\",\"Required: No\",\"Description: SMTP server authentication password\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"2495\":{\"h\":\"DEV_DSF_BPE_MAIL_PORT\",\"t\":[\"Property: dev.dsf.bpe.mail.port\",\"Required: No\",\"Description: SMTP server port\",\"Example:465\",\"Default:0\"]},\"2496\":{\"h\":\"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.replyToAddresses\",\"Required: No\",\"Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported\",\"Example:reply.to@localhost\"]},\"2497\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT\",\"t\":[\"Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent\",\"Required: No\",\"Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"2498\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP\",\"t\":[\"Property: dev.dsf.bpe.mail.sendTestMailOnStartup\",\"Required: No\",\"Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"2499\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore\",\"Required: No\",\"Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smime_certificate.p12\"]},\"2500\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore.password\",\"Required: No\",\"Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"Example:/run/secrets/smime_certificate.p12.password\"]},\"2501\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddresses\",\"Required: No\",\"Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported\",\"Example:recipient@localhost\"]},\"2502\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSESCC\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddressesCc\",\"Required: No\",\"Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported\",\"Example:cc.recipient@localhost\"]},\"2503\":{\"h\":\"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.mail.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_trust_certificates.pem\"]},\"2504\":{\"h\":\"DEV_DSF_BPE_MAIL_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.mail.username\",\"Required: No\",\"Description: SMTP server authentication username\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"2505\":{\"h\":\"DEV_DSF_BPE_MAIL_USESMTPS\",\"t\":[\"Property: dev.dsf.bpe.mail.useSmtps\",\"Required: No\",\"Description: To enable SMTP over TLS (smtps), set to true\",\"Default:false\"]},\"2506\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.corePoolSize\",\"Required: No\",\"Description: Process engine job executor core pool size\",\"Default:4\"]},\"2507\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.maxPoolSize\",\"Required: No\",\"Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full\",\"Default:10\"]},\"2508\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.queueSize\",\"Required: No\",\"Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy\",\"Default:40\"]},\"2509\":{\"h\":\"DEV_DSF_BPE_PROCESS_EXCLUDED\",\"t\":[\"Property: dev.dsf.bpe.process.excluded\",\"Required: No\",\"Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List\",\"Example:dsfdev_updateAllowList|1.0, another_process|x.y\"]},\"2510\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.max\",\"Required: No\",\"Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries\",\"Default:-1\"]},\"2511\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment\",\"Default:5000\"]},\"2512\":{\"h\":\"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY\",\"t\":[\"Property: dev.dsf.bpe.process.plugin.directroy\",\"Required: No\",\"Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server\",\"Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit\",\"Default:process\"]},\"2513\":{\"h\":\"DEV_DSF_BPE_PROCESS_RETIRED\",\"t\":[\"Property: dev.dsf.bpe.process.retired\",\"Required: No\",\"Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Retire processes that where deployed previously but are not anymore available\",\"Example:old_process|x.y\"]},\"2514\":{\"h\":\"DEV_DSF_BPE_PROCESS_THREADS\",\"t\":[\"Property: dev.dsf.bpe.process.threads\",\"Required: No\",\"Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores\",\"Default:-1\"]},\"2515\":{\"h\":\"DEV_DSF_BPE_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.bpe.server.base.url\",\"Required: No\",\"Description: Base address of the BPE server, configure when exposing the web-ui\",\"Example:https://foo.bar/bpe\",\"Default:https\"]},\"2516\":{\"h\":\"DEV_DSF_BPE_SERVER_ROLECONFIG\",\"t\":[\"Property: dev.dsf.bpe.server.roleConfig\",\"Required: No\",\"Description: Role config YAML as defined in FHIR Server: Access Control.\"]},\"2517\":{\"h\":\"DEV_DSF_BPE_SERVER_STATIC_RESOURCE_CACHE\",\"t\":[\"Property: dev.dsf.bpe.server.static.resource.cache\",\"Required: No\",\"Description: To disable static resource caching, set to false\",\"Recommendation: Only set to false for development\",\"Default:true\"]},\"2518\":{\"h\":\"DEV_DSF_BPE_SERVER_UI_THEME\",\"t\":[\"Property: dev.dsf.bpe.server.ui.theme\",\"Required: No\",\"Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod\"]},\"2519\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"2520\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"2521\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"2522\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"2523\":{\"h\":\"OpenID Connect\"},\"2524\":{\"h\":\"Overview\",\"t\":[\"Access to the DSF BPE server user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.\",\"The DSF BPE server supports Authorization Code Flow for the user interface. Back-Channel Logout is also supported.\",\"BPE Reverse Proxy\",\"The DSF BPE reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter needs to be set to optional.\"]},\"2525\":{\"h\":\"Authorization Code Flow\",\"t\":[\"To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF BPE server accepts logout tokens at DEV_DSF_BPE_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.\"]},\"2526\":{\"h\":\"Additional ODIC Configuration Parameter\",\"t\":[\"A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF BPE server configuration parameter page.\",\"For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.\"]},\"2527\":{\"h\":\"Example\",\"t\":[\"services: app: image: ghcr.io/datasharingframework/bpe:1.5.1 # ... secrets: - keycloak_root_ca.pem # ... environment: # ... DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true' DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true' DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true' DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-bpe DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3 # ... secrets: keycloak_root_ca.pem: file: ./secrets/keycloak_root_ca.pem \"]},\"2528\":{\"h\":\"BPE Reverse Proxy\"},\"2529\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"2530\":{\"h\":\"Configuration Parameters\"},\"2531\":{\"h\":\"APP_SERVER_IP\",\"t\":[\"Required: Yes\",\"Description: Hostname or IP-Address of the DSF BPE server application container, the reverse proxy target\",\"Example:app, 172.28.1.3\"]},\"2532\":{\"h\":\"HTTPS_SERVER_NAME_PORT\",\"t\":[\"Required: Yes\",\"Description: External FQDN of your DSF BPE server with port, typically 443\",\"Example:my-external.fqdn:443\"]},\"2533\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"2534\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"2535\":{\"h\":\"PROXY_PASS_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"2536\":{\"h\":\"PROXY_PASS_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"2537\":{\"h\":\"SERVER_CONTEXT_PATH\",\"t\":[\"Required: No\",\"Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.\",\"Default:/bpe\"]},\"2538\":{\"h\":\"SSL_CA_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_certificate_file.pem\"]},\"2539\":{\"h\":\"SSL_CA_DN_REQUEST_FILE\",\"t\":[\"Required: No\",\"Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_dn_request_file.pem\"]},\"2540\":{\"h\":\"SSL_CERTIFICATE_CHAIN_FILE\",\"t\":[\"Required: No\",\"Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_chain_file.pem\"]},\"2541\":{\"h\":\"SSL_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_file.pem\"]},\"2542\":{\"h\":\"SSL_CERTIFICATE_KEY_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_key_file.pem\"]},\"2543\":{\"h\":\"SSL_VERIFY_CLIENT\",\"t\":[\"Required: No\",\"Description: Modifies the apache mod_ssl config parameter SSLVerifyClient\",\"Recommendation: Set to optional when using OIDC authentication\",\"Default:require\"]},\"2544\":{\"h\":\"FHIR Server\"},\"2545\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\"]},\"2546\":{\"h\":\"Access Control\"},\"2547\":{\"h\":\"Overview\",\"t\":[\"The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"OpenID Connect\",\"To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.\",\"Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.\",\"The listing below shows a minimal configuration to enable read access for a specific client-certificate:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - example_read_only_role: thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128} dsf-role: - READ - SEARCH - HISTORY \",\"The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.\",\"Certificate Thumbprints\",\"SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:\",\"certtool --fingerprint --hash=sha512 --infile=certificate.pem \",\"Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string \\\"\\\" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.\"]},\"2548\":{\"h\":\"Matching Users\",\"t\":[\"To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.\"]},\"2549\":{\"h\":\"thumbprint\",\"t\":[\"The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.\"]},\"2550\":{\"h\":\"email\",\"t\":[\"Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the emailclaim from the access token will be matched against the property values.\"]},\"2551\":{\"h\":\"token-role and token-group\",\"t\":[\"With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.\"]},\"2552\":{\"h\":\"DSF and Practitioner Roles\",\"t\":[\"Two types of roles can be applied to matched users.\"]},\"2553\":{\"h\":\"dsf-role\",\"t\":[\"DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:\",\"CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.\"]},\"2554\":{\"h\":\"practitioner-role\",\"t\":[\"In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystem resources. Codes are specified in the form system-url|code. If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinition resource, the user can start the process if he also has the dsf-roleCREATE.\",\"Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:\",\"UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.\"]},\"2555\":{\"h\":\"Examples\",\"t\":[\"The first example defines a group of DSF administrators. Two client certificates match against this role:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - certificate-admins: thumbprint: - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - token-role-admins: token-role: admin dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - read-only: email: - first.user@test.org - second.user@test.org dsf-role: - READ - SEARCH - HISTORY \"]},\"2556\":{\"h\":\"Configuration Parameters\"},\"2557\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"2558\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"2559\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"2560\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.connect\",\"Required: No\",\"Description: Timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"2561\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.read\",\"Required: No\",\"Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:10000\"]},\"2562\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client _trust_certificates.pem\"]},\"2563\":{\"h\":\"DEV_DSF_FHIR_CLIENT_VERBOSE\",\"t\":[\"Property: dev.dsf.fhir.client.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"2564\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"2565\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"2566\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"2567\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server to execute database migrations\",\"Default:liquibase_user\"]},\"2568\":{\"h\":\"DEV_DSF_FHIR_DB_URL\",\"t\":[\"Property: dev.dsf.fhir.db.url\",\"Required: Yes\",\"Description: Address of the database used for the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/fhir\"]},\"2569\":{\"h\":\"DEV_DSF_FHIR_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server\",\"Default:fhir_users\"]},\"2570\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.password\",\"Required: Yes\",\"Description: Password to access the database from the DSF FHIR server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"2571\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes\",\"Default:fhir_permanent_delete_users\"]},\"2572\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.password\",\"Required: Yes\",\"Description: Password to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"Example:/run/secrets/db_user_permanent_delete.password\"]},\"2573\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.username\",\"Required: No\",\"Description: Username to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME\",\"Default:fhir_server_permanent_delete_user\"]},\"2574\":{\"h\":\"DEV_DSF_FHIR_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.username\",\"Required: No\",\"Description: Username to access the database from the DSF FHIR server\",\"Default:fhir_server_user\"]},\"2575\":{\"h\":\"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_CURRENTUSER\",\"t\":[\"Property: dev.dsf.fhir.debug.log.message.currentUser\",\"Required: No\",\"Description: To enable logging of the currently requesting user set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2576\":{\"h\":\"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_DBSTATEMENT\",\"t\":[\"Property: dev.dsf.fhir.debug.log.message.dbStatement\",\"Required: No\",\"Description: To enable logging of DB queries set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2577\":{\"h\":\"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST\",\"t\":[\"Property: dev.dsf.fhir.debug.log.message.webserviceRequest\",\"Required: No\",\"Description: To enable logging of webservices requests set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2578\":{\"h\":\"DEV_DSF_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.fhir.server.base.url\",\"Required: Yes\",\"Description: Base address of this DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"2579\":{\"h\":\"DEV_DSF_FHIR_SERVER_INIT_BUNDLE\",\"t\":[\"Property: dev.dsf.fhir.server.init.bundle\",\"Required: No\",\"Description: Fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source\",\"Default:conf/bundle.xml\"]},\"2580\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE\",\"t\":[\"Property: dev.dsf.fhir.server.organization.identifier.value\",\"Required: Yes\",\"Description: Local identifier value used in the Allow-List\",\"Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization\",\"Example:hospital.com\"]},\"2581\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"t\":[\"Property: dev.dsf.fhir.server.organization.thumbprint\",\"Required: Yes\",\"Description: The SHA-512 thumbprint of the local organization client certificate\",\"Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem\"]},\"2582\":{\"h\":\"DEV_DSF_FHIR_SERVER_PAGE_COUNT\",\"t\":[\"Property: dev.dsf.fhir.server.page.count\",\"Required: No\",\"Description: Page size returned by the DSF FHIR server when reading/searching fhir resources\",\"Default:20\"]},\"2583\":{\"h\":\"DEV_DSF_FHIR_SERVER_ROLECONFIG\",\"t\":[\"Property: dev.dsf.fhir.server.roleConfig\",\"Required: No\",\"Description: Role config YAML as defined in FHIR Server: Access Control.\"]},\"2584\":{\"h\":\"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE\",\"t\":[\"Property: dev.dsf.fhir.server.static.resource.cache\",\"Required: No\",\"Description: To disable static resource caching, set to false\",\"Recommendation: Only set to false for development\",\"Default:true\"]},\"2585\":{\"h\":\"DEV_DSF_FHIR_SERVER_UI_THEME\",\"t\":[\"Property: dev.dsf.fhir.server.ui.theme\",\"Required: No\",\"Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod\"]},\"2586\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"2587\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"2588\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"2589\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"2590\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"2591\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"2592\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"2593\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"2594\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"2595\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"2596\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"2597\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"2598\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"2599\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"2600\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"2601\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"2602\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"2603\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"2604\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"2605\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"2606\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"2607\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2608\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2609\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2610\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2611\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"2612\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"2613\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"2614\":{\"h\":\"OpenID Connect\"},\"2615\":{\"h\":\"Overview\",\"t\":[\"Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.\",\"The DSF FHIR server supports Authorization Code Flow for the user interface as well as Bearer Token Authentication for the REST API. Back-Channel Logout is also supported.\",\"FHIR Reverse Proxy\",\"The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter needs to be set to optional.\"]},\"2616\":{\"h\":\"Authorization Code Flow\",\"t\":[\"To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.\"]},\"2617\":{\"h\":\"Bearer Token Authentication\",\"t\":[\"To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\"]},\"2618\":{\"h\":\"Additional ODIC Configuration Parameter\",\"t\":[\"A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.\",\"For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.\"]},\"2619\":{\"h\":\"Example\",\"t\":[\"services: app: image: ghcr.io/datasharingframework/fhir:1.5.1 # ... secrets: - keycloak_root_ca.pem # ... environment: # ... DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true' DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true' DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true' DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3 # ... secrets: keycloak_root_ca.pem: file: ./secrets/keycloak_root_ca.pem \"]},\"2620\":{\"h\":\"FHIR Reverse Proxy\"},\"2621\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"2622\":{\"h\":\"Configuration Parameters\"},\"2623\":{\"h\":\"APP_SERVER_IP\",\"t\":[\"Required: Yes\",\"Description: Hostname or IP-Address of the DSF FHIR server application container, the reverse proxy target\",\"Example:app, 172.28.1.3\"]},\"2624\":{\"h\":\"HTTPS_SERVER_NAME_PORT\",\"t\":[\"Required: Yes\",\"Description: External FQDN of your DSF FHIR server with port, typically 443\",\"Example:my-external.fqdn:443\"]},\"2625\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"2626\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"2627\":{\"h\":\"PROXY_PASS_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"2628\":{\"h\":\"PROXY_PASS_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"2629\":{\"h\":\"SERVER_CONTEXT_PATH\",\"t\":[\"Required: No\",\"Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.\",\"Default:/fhir\"]},\"2630\":{\"h\":\"SSL_CA_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_certificate_file.pem\"]},\"2631\":{\"h\":\"SSL_CA_DN_REQUEST_FILE\",\"t\":[\"Required: No\",\"Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_dn_request_file.pem\"]},\"2632\":{\"h\":\"SSL_CERTIFICATE_CHAIN_FILE\",\"t\":[\"Required: No\",\"Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_chain_file.pem\"]},\"2633\":{\"h\":\"SSL_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_file.pem\"]},\"2634\":{\"h\":\"SSL_CERTIFICATE_KEY_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_key_file.pem\"]},\"2635\":{\"h\":\"SSL_VERIFY_CLIENT\",\"t\":[\"Required: No\",\"Description: Modifies the apache mod_ssl config parameter SSLVerifyClient\",\"Recommendation: Set to optional when using OIDC authentication\",\"Default:require\"]},\"2636\":{\"h\":\"BPE Server\"},\"2637\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\"]},\"2638\":{\"h\":\"Access Control\"},\"2639\":{\"h\":\"Overview\",\"t\":[\"The DSF BPE server provides a user interface for administrators. Without any additional configuration the user interface is not accessible with the organizations X.509 client certificate or any other certificate or OpenID Connect authenticated user.\",\"OpenID Connect\",\"To enable OpenID Connect authentication of local user, see the DSF BPE server OpenID Connect configuration page.\",\"Access to the user interface can be enabled for client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.\",\"The listing below shows a minimal configuration to enable access for a specific client-certificate:\",\" DEV_DSF_BPE_SERVER_ROLECONFIG: | - example_read_only_role: thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128} dsf-role: - ADMIN \",\"The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.\",\"Certificate Thumbprints\",\"SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:\",\"certtool --fingerprint --hash=sha512 --infile=certificate.pem \",\"Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string \\\"\\\" or a single block scalar | character as the value for the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG if no roles should be configured.\"]},\"2640\":{\"h\":\"Matching Users\",\"t\":[\"To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.\"]},\"2641\":{\"h\":\"thumbprint\",\"t\":[\"The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.\"]},\"2642\":{\"h\":\"email\",\"t\":[\"Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the emailclaim from the access token will be matched against the property values.\"]},\"2643\":{\"h\":\"token-role and token-group\",\"t\":[\"With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.\"]},\"2644\":{\"h\":\"DSF and Practitioner Roles\",\"t\":[\"Two types of roles can be applied to matched users.\"]},\"2645\":{\"h\":\"dsf-role\",\"t\":[\"DSF roles specified via the dsf-role property define general access to the user interface. Allowed values are:\",\"ADMIN.\"]},\"2646\":{\"h\":\"practitioner-role\",\"t\":[\"The BPE server currently does not support any practionier-roles.\"]},\"2647\":{\"h\":\"Examples\",\"t\":[\"The first example defines a group of DSF administrators. Two client certificates match against this role:\",\" DEV_DSF_BPE_SERVER_ROLECONFIG: | - certificate-admins: thumbprint: - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c dsf-role: - ADMIN \",\"The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:\",\" DEV_DSF_BPE_SERVER_ROLECONFIG: | - token-role-admins: token-role: admin dsf-role: - ADMIN \",\"The third example allows administrator access and users e-mail addresses to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:\",\" DEV_DSF_BPE_SERVER_ROLECONFIG: | - email-admins: email: - first.user@test.org - second.user@test.org dsf-role: - ADMIN \"]},\"2648\":{\"h\":\"Configuration Parameters\"},\"2649\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"2650\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"2651\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"2652\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"2653\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"2654\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"2655\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"2656\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"2657\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"2658\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"2659\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"2660\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"2661\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"2662\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"2663\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"2664\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"2665\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"2666\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2667\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2668\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2669\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2670\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"2671\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"2672\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"2673\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"2674\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"2675\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF BPE server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"2676\":{\"h\":\"DEV_DSF_BPE_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF BPE server to execute database migrations\",\"Default:liquibase_user\"]},\"2677\":{\"h\":\"DEV_DSF_BPE_DB_URL\",\"t\":[\"Property: dev.dsf.bpe.db.url\",\"Required: Yes\",\"Description: Address of the database used for the DSF BPE server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/bpe\"]},\"2678\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server for camunda processes\",\"Default:camunda_users\"]},\"2679\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.password\",\"Required: Yes\",\"Description: Password to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE\",\"Example:/run/secrets/db_user_camunda.password\"]},\"2680\":{\"h\":\"DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.camunda.username\",\"Required: No\",\"Description: Username to access the database from the DSF BPE server for camunda processes\",\"Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME\",\"Default:camunda_server_user\"]},\"2681\":{\"h\":\"DEV_DSF_BPE_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.bpe.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF BPE server\",\"Default:bpe_users\"]},\"2682\":{\"h\":\"DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.db.user.password\",\"Required: Yes\",\"Description: Password to access the database from the DSF BPE server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"2683\":{\"h\":\"DEV_DSF_BPE_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.db.user.username\",\"Required: No\",\"Description: Username to access the database from the DSF BPE server\",\"Default:bpe_server_user\"]},\"2684\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_CURRENTUSER\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.currentUser\",\"Required: No\",\"Description: To enable logging of the currently requesting user set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2685\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_DBSTATEMENT\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.dbStatement\",\"Required: No\",\"Description: To enable logging of DB queries set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2686\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityEnd\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity end, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"2687\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.onActivityStart\",\"Required: No\",\"Description: To enable debug log messages for every bpmn activity start, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development.\",\"Default:false\"]},\"2688\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variables\",\"Required: No\",\"Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2689\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.variablesLocal\",\"Required: No\",\"Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.\",\"Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2690\":{\"h\":\"DEV_DSF_BPE_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST\",\"t\":[\"Property: dev.dsf.bpe.debug.log.message.webserviceRequest\",\"Required: No\",\"Description: To enable logging of webservices requests set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2691\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"2692\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"2693\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"2694\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.connect\",\"Required: No\",\"Description: Timeout in milliseconds until a connection is established with the local DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"2695\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.timeout.read\",\"Required: No\",\"Description: Timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"2696\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.local.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true\",\"Default:false\"]},\"2697\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.connect\",\"Required: No\",\"Description: Timeout in milliseconds until a connection is established with a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:5000\"]},\"2698\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.timeout.read\",\"Required: No\",\"Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:60000\"]},\"2699\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.remote.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"2700\":{\"h\":\"DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"2701\":{\"h\":\"DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server\",\"Default:?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"2702\":{\"h\":\"DEV_DSF_BPE_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.bpe.fhir.server.base.url\",\"Required: Yes\",\"Description: Base address of the local DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"2703\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.max\",\"Required: No\",\"Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries\",\"Default:-1\"]},\"2704\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server\",\"Default:5000\"]},\"2705\":{\"h\":\"DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER\",\"t\":[\"Property: dev.dsf.bpe.fhir.task.subscription.search.parameter\",\"Required: No\",\"Description: Subscription to receive notifications about task resources from the DSF FHIR server\",\"Default:?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson\"]},\"2706\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate.pem\"]},\"2707\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem\"]},\"2708\":{\"h\":\"DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/smtp_server_client_certificate_private_key.pem.password\"]},\"2709\":{\"h\":\"DEV_DSF_BPE_MAIL_FROMADDRESS\",\"t\":[\"Property: dev.dsf.bpe.mail.fromAddress\",\"Required: No\",\"Description: Mail service sender address\",\"Example:sender@localhost\"]},\"2710\":{\"h\":\"DEV_DSF_BPE_MAIL_HOST\",\"t\":[\"Property: dev.dsf.bpe.mail.host\",\"Required: No\",\"Description: SMTP server hostname\",\"Example:smtp.server.de\"]},\"2711\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize\",\"Required: No\",\"Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:4\"]},\"2712\":{\"h\":\"DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION\",\"t\":[\"Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation\",\"Required: No\",\"Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.\",\"Default:/opt/bpe/log/bpe.log\"]},\"2713\":{\"h\":\"DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.password\",\"Required: No\",\"Description: SMTP server authentication password\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"2714\":{\"h\":\"DEV_DSF_BPE_MAIL_PORT\",\"t\":[\"Property: dev.dsf.bpe.mail.port\",\"Required: No\",\"Description: SMTP server port\",\"Example:465\",\"Default:0\"]},\"2715\":{\"h\":\"DEV_DSF_BPE_MAIL_REPLYTOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.replyToAddresses\",\"Required: No\",\"Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported\",\"Example:reply.to@localhost\"]},\"2716\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT\",\"t\":[\"Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent\",\"Required: No\",\"Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"2717\":{\"h\":\"DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP\",\"t\":[\"Property: dev.dsf.bpe.mail.sendTestMailOnStartup\",\"Required: No\",\"Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.\",\"Default:false\"]},\"2718\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore\",\"Required: No\",\"Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smime_certificate.p12\"]},\"2719\":{\"h\":\"DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.bpe.mail.smime.p12Keystore.password\",\"Required: No\",\"Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file\",\"Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE\",\"Example:/run/secrets/smime_certificate.p12.password\"]},\"2720\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSES\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddresses\",\"Required: No\",\"Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported\",\"Example:recipient@localhost\"]},\"2721\":{\"h\":\"DEV_DSF_BPE_MAIL_TOADDRESSESCC\",\"t\":[\"Property: dev.dsf.bpe.mail.toAddressesCc\",\"Required: No\",\"Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported\",\"Example:cc.recipient@localhost\"]},\"2722\":{\"h\":\"DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.bpe.mail.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/smtp_server_trust_certificates.pem\"]},\"2723\":{\"h\":\"DEV_DSF_BPE_MAIL_USERNAME\",\"t\":[\"Property: dev.dsf.bpe.mail.username\",\"Required: No\",\"Description: SMTP server authentication username\",\"Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS\"]},\"2724\":{\"h\":\"DEV_DSF_BPE_MAIL_USESMTPS\",\"t\":[\"Property: dev.dsf.bpe.mail.useSmtps\",\"Required: No\",\"Description: To enable SMTP over TLS (smtps), set to true\",\"Default:false\"]},\"2725\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.corePoolSize\",\"Required: No\",\"Description: Process engine job executor core pool size\",\"Default:4\"]},\"2726\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.maxPoolSize\",\"Required: No\",\"Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full\",\"Default:10\"]},\"2727\":{\"h\":\"DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE\",\"t\":[\"Property: dev.dsf.bpe.process.engine.queueSize\",\"Required: No\",\"Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy\",\"Default:40\"]},\"2728\":{\"h\":\"DEV_DSF_BPE_PROCESS_EXCLUDED\",\"t\":[\"Property: dev.dsf.bpe.process.excluded\",\"Required: No\",\"Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List\",\"Example:dsfdev_updateAllowList|1.0, another_process|x.y\"]},\"2729\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.max\",\"Required: No\",\"Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries\",\"Default:-1\"]},\"2730\":{\"h\":\"DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP\",\"t\":[\"Property: dev.dsf.bpe.process.fhir.server.retry.sleep\",\"Required: No\",\"Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment\",\"Default:5000\"]},\"2731\":{\"h\":\"DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY\",\"t\":[\"Property: dev.dsf.bpe.process.plugin.directroy\",\"Required: No\",\"Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server\",\"Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit\",\"Default:process\"]},\"2732\":{\"h\":\"DEV_DSF_BPE_PROCESS_RETIRED\",\"t\":[\"Property: dev.dsf.bpe.process.retired\",\"Required: No\",\"Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported\",\"Recommendation: Retire processes that where deployed previously but are not anymore available\",\"Example:old_process|x.y\"]},\"2733\":{\"h\":\"DEV_DSF_BPE_PROCESS_THREADS\",\"t\":[\"Property: dev.dsf.bpe.process.threads\",\"Required: No\",\"Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores\",\"Default:-1\"]},\"2734\":{\"h\":\"DEV_DSF_BPE_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.bpe.server.base.url\",\"Required: No\",\"Description: Base address of the BPE server, configure when exposing the web-ui\",\"Example:https://foo.bar/bpe\",\"Default:https\"]},\"2735\":{\"h\":\"DEV_DSF_BPE_SERVER_ROLECONFIG\",\"t\":[\"Property: dev.dsf.bpe.server.roleConfig\",\"Required: No\",\"Description: Role config YAML as defined in FHIR Server: Access Control.\"]},\"2736\":{\"h\":\"DEV_DSF_BPE_SERVER_STATIC_RESOURCE_CACHE\",\"t\":[\"Property: dev.dsf.bpe.server.static.resource.cache\",\"Required: No\",\"Description: To disable static resource caching, set to false\",\"Recommendation: Only set to false for development\",\"Default:true\"]},\"2737\":{\"h\":\"DEV_DSF_BPE_SERVER_UI_THEME\",\"t\":[\"Property: dev.dsf.bpe.server.ui.theme\",\"Required: No\",\"Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod\"]},\"2738\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"2739\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"2740\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"2741\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"2742\":{\"h\":\"OpenID Connect\"},\"2743\":{\"h\":\"Overview\",\"t\":[\"Access to the DSF BPE server user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.\",\"The DSF BPE server supports Authorization Code Flow for the user interface. Back-Channel Logout is also supported.\",\"BPE Reverse Proxy\",\"The DSF BPE reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter needs to be set to optional.\"]},\"2744\":{\"h\":\"Authorization Code Flow\",\"t\":[\"To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF BPE server accepts logout tokens at DEV_DSF_BPE_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.\"]},\"2745\":{\"h\":\"Additional ODIC Configuration Parameter\",\"t\":[\"A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF BPE server configuration parameter page.\",\"For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.\"]},\"2746\":{\"h\":\"Example\",\"t\":[\"services: app: image: ghcr.io/datasharingframework/bpe:1.5.2 # ... secrets: - keycloak_root_ca.pem # ... environment: # ... DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true' DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true' DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true' DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-bpe DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3 # ... secrets: keycloak_root_ca.pem: file: ./secrets/keycloak_root_ca.pem \"]},\"2747\":{\"h\":\"BPE Reverse Proxy\"},\"2748\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"2749\":{\"h\":\"Configuration Parameters\"},\"2750\":{\"h\":\"APP_SERVER_IP\",\"t\":[\"Required: Yes\",\"Description: Hostname or IP-Address of the DSF BPE server application container, the reverse proxy target\",\"Example:app, 172.28.1.3\"]},\"2751\":{\"h\":\"HTTPS_SERVER_NAME_PORT\",\"t\":[\"Required: Yes\",\"Description: External FQDN of your DSF BPE server with port, typically 443\",\"Example:my-external.fqdn:443\"]},\"2752\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"2753\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"2754\":{\"h\":\"PROXY_PASS_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"2755\":{\"h\":\"PROXY_PASS_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"2756\":{\"h\":\"SERVER_CONTEXT_PATH\",\"t\":[\"Required: No\",\"Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.\",\"Default:/bpe\"]},\"2757\":{\"h\":\"SSL_CA_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_certificate_file.pem\"]},\"2758\":{\"h\":\"SSL_CA_DN_REQUEST_FILE\",\"t\":[\"Required: No\",\"Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_dn_request_file.pem\"]},\"2759\":{\"h\":\"SSL_CERTIFICATE_CHAIN_FILE\",\"t\":[\"Required: No\",\"Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_chain_file.pem\"]},\"2760\":{\"h\":\"SSL_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_file.pem\"]},\"2761\":{\"h\":\"SSL_CERTIFICATE_KEY_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_key_file.pem\"]},\"2762\":{\"h\":\"SSL_VERIFY_CLIENT\",\"t\":[\"Required: No\",\"Description: Modifies the apache mod_ssl config parameter SSLVerifyClient\",\"Recommendation: Set to optional when using OIDC authentication\",\"Default:require\"]},\"2763\":{\"h\":\"FHIR Server\"},\"2764\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\",\"Access Control\",\"OpenID Connect\"]},\"2765\":{\"h\":\"Access Control\"},\"2766\":{\"h\":\"Overview\",\"t\":[\"The DSF FHIR server implements a subset of the FHIR R4 REST API. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"OpenID Connect\",\"To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.\",\"Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.\",\"The listing below shows a minimal configuration to enable read access for a specific client-certificate:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - example_read_only_role: thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128} dsf-role: - READ - SEARCH - HISTORY \",\"The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.\",\"Certificate Thumbprints\",\"SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:\",\"certtool --fingerprint --hash=sha512 --infile=certificate.pem \",\"Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string \\\"\\\" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.\"]},\"2767\":{\"h\":\"Matching Users\",\"t\":[\"To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.\"]},\"2768\":{\"h\":\"thumbprint\",\"t\":[\"The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.\"]},\"2769\":{\"h\":\"email\",\"t\":[\"Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the emailclaim from the access token will be matched against the property values.\"]},\"2770\":{\"h\":\"token-role and token-group\",\"t\":[\"With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.\"]},\"2771\":{\"h\":\"DSF and Practitioner Roles\",\"t\":[\"Two types of roles can be applied to matched users.\"]},\"2772\":{\"h\":\"dsf-role\",\"t\":[\"DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:\",\"CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.\"]},\"2773\":{\"h\":\"practitioner-role\",\"t\":[\"In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystem resources. Codes are specified in the form system-url|code. If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinition resource, the user can start the process if he also has the dsf-roleCREATE.\",\"Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:\",\"UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.\"]},\"2774\":{\"h\":\"Examples\",\"t\":[\"The first example defines a group of DSF administrators. Two client certificates match against this role:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - certificate-admins: thumbprint: - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - token-role-admins: token-role: admin dsf-role: - CREATE - READ - UPDATE - DELETE - SEARCH - HISTORY practitioner-role: - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN \",\"The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:\",\" DEV_DSF_FHIR_SERVER_ROLECONFIG: | - read-only: email: - first.user@test.org - second.user@test.org dsf-role: - READ - SEARCH - HISTORY \"]},\"2775\":{\"h\":\"Configuration Parameters\"},\"2776\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate\",\"Required: Yes\",\"Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate.pem\"]},\"2777\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key\",\"Required: Yes\",\"Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_certificate_private_key.pem\"]},\"2778\":{\"h\":\"DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the local client certificate encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/app_client_certificate_private_key.pem.password\"]},\"2779\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.connect\",\"Required: No\",\"Description: Timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:2000\"]},\"2780\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TIMEOUT_READ\",\"t\":[\"Property: dev.dsf.fhir.client.timeout.read\",\"Required: No\",\"Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted\",\"Recommendation: Change default value only if timeout exceptions occur\",\"Default:10000\"]},\"2781\":{\"h\":\"DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.fhir.client.trust.server.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client _trust_certificates.pem\"]},\"2782\":{\"h\":\"DEV_DSF_FHIR_CLIENT_VERBOSE\",\"t\":[\"Property: dev.dsf.fhir.client.verbose\",\"Required: No\",\"Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true\",\"Default:false\"]},\"2783\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.forceUnlock\",\"Required: No\",\"Description: To force liquibase to unlock the migration lock set to true\",\"Recommendation: Only use this option temporarily to unlock a stuck DB migration step\",\"Default:false\"]},\"2784\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.lockWaitTime\",\"Required: No\",\"Description: Liquibase change lock wait time in minutes, default 2 minutes\",\"Default:2\"]},\"2785\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.password\",\"Required: Yes\",\"Description: The password to access the database from the DSF FHIR server to execute database migrations\",\"Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE\",\"Example:/run/secrets/db_liquibase.password\"]},\"2786\":{\"h\":\"DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.liquibase.username\",\"Required: No\",\"Description: The user name to access the database from the DSF FHIR server to execute database migrations\",\"Default:liquibase_user\"]},\"2787\":{\"h\":\"DEV_DSF_FHIR_DB_URL\",\"t\":[\"Property: dev.dsf.fhir.db.url\",\"Required: Yes\",\"Description: Address of the database used for the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose\",\"Example:jdbc:postgresql://db/fhir\"]},\"2788\":{\"h\":\"DEV_DSF_FHIR_DB_USER_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server\",\"Default:fhir_users\"]},\"2789\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.password\",\"Required: Yes\",\"Description: Password to access the database from the DSF FHIR server\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE\",\"Example:/run/secrets/db_user.password\"]},\"2790\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.group\",\"Required: No\",\"Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes\",\"Default:fhir_permanent_delete_users\"]},\"2791\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.password\",\"Required: Yes\",\"Description: Password to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE\",\"Example:/run/secrets/db_user_permanent_delete.password\"]},\"2792\":{\"h\":\"DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.permanent.delete.username\",\"Required: No\",\"Description: Username to access the database from the DSF FHIR server for permanent deletes\",\"Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME\",\"Default:fhir_server_permanent_delete_user\"]},\"2793\":{\"h\":\"DEV_DSF_FHIR_DB_USER_USERNAME\",\"t\":[\"Property: dev.dsf.fhir.db.user.username\",\"Required: No\",\"Description: Username to access the database from the DSF FHIR server\",\"Default:fhir_server_user\"]},\"2794\":{\"h\":\"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_CURRENTUSER\",\"t\":[\"Property: dev.dsf.fhir.debug.log.message.currentUser\",\"Required: No\",\"Description: To enable logging of the currently requesting user set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2795\":{\"h\":\"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_DBSTATEMENT\",\"t\":[\"Property: dev.dsf.fhir.debug.log.message.dbStatement\",\"Required: No\",\"Description: To enable logging of DB queries set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2796\":{\"h\":\"DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST\",\"t\":[\"Property: dev.dsf.fhir.debug.log.message.webserviceRequest\",\"Required: No\",\"Description: To enable logging of webservices requests set to true.\",\"Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!\",\"Default:false\"]},\"2797\":{\"h\":\"DEV_DSF_FHIR_SERVER_BASE_URL\",\"t\":[\"Property: dev.dsf.fhir.server.base.url\",\"Required: Yes\",\"Description: Base address of this DSF FHIR server to read/store fhir resources\",\"Example:https://foo.bar/fhir\"]},\"2798\":{\"h\":\"DEV_DSF_FHIR_SERVER_INIT_BUNDLE\",\"t\":[\"Property: dev.dsf.fhir.server.init.bundle\",\"Required: No\",\"Description: Fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server\",\"Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source\",\"Default:conf/bundle.xml\"]},\"2799\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE\",\"t\":[\"Property: dev.dsf.fhir.server.organization.identifier.value\",\"Required: Yes\",\"Description: Local identifier value used in the Allow-List\",\"Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization\",\"Example:hospital.com\"]},\"2800\":{\"h\":\"DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT\",\"t\":[\"Property: dev.dsf.fhir.server.organization.thumbprint\",\"Required: Yes\",\"Description: The SHA-512 thumbprint of the local organization client certificate\",\"Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem\"]},\"2801\":{\"h\":\"DEV_DSF_FHIR_SERVER_PAGE_COUNT\",\"t\":[\"Property: dev.dsf.fhir.server.page.count\",\"Required: No\",\"Description: Page size returned by the DSF FHIR server when reading/searching fhir resources\",\"Default:20\"]},\"2802\":{\"h\":\"DEV_DSF_FHIR_SERVER_ROLECONFIG\",\"t\":[\"Property: dev.dsf.fhir.server.roleConfig\",\"Required: No\",\"Description: Role config YAML as defined in FHIR Server: Access Control.\"]},\"2803\":{\"h\":\"DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE\",\"t\":[\"Property: dev.dsf.fhir.server.static.resource.cache\",\"Required: No\",\"Description: To disable static resource caching, set to false\",\"Recommendation: Only set to false for development\",\"Default:true\"]},\"2804\":{\"h\":\"DEV_DSF_FHIR_SERVER_UI_THEME\",\"t\":[\"Property: dev.dsf.fhir.server.ui.theme\",\"Required: No\",\"Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod\"]},\"2805\":{\"h\":\"DEV_DSF_PROXY_NOPROXY\",\"t\":[\"Property: dev.dsf.proxy.noProxy\",\"Required: No\",\"Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported\",\"Example:foo.bar, test.com:8080\"]},\"2806\":{\"h\":\"DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.proxy.password\",\"Required: No\",\"Description: Forward Proxy password\",\"Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE\"]},\"2807\":{\"h\":\"DEV_DSF_PROXY_URL\",\"t\":[\"Property: dev.dsf.proxy.url\",\"Required: No\",\"Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy\",\"Example:http://proxy.foo:8080\"]},\"2808\":{\"h\":\"DEV_DSF_PROXY_USERNAME\",\"t\":[\"Property: dev.dsf.proxy.username\",\"Required: No\",\"Description: Forward proxy username\",\"Recommendation: Configure username if proxy requires authentication\"]},\"2809\":{\"h\":\"DEV_DSF_SERVER_API_HOST\",\"t\":[\"Property: dev.dsf.server.api.host\",\"Required: Yes\",\"Description: API connector host, default in docker image: 0.0.0.0\",\"Default:127.0.0.1\"]},\"2810\":{\"h\":\"DEV_DSF_SERVER_API_PORT\",\"t\":[\"Property: dev.dsf.server.api.port\",\"Required: Yes\",\"Description: API connector port, default in docker image: 8080\"]},\"2811\":{\"h\":\"DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER\",\"t\":[\"Property: dev.dsf.server.auth.client.certificate.header\",\"Required: Yes\",\"Description: Name of HTTP header with client certificate from reverse proxy\",\"Default:X-ClientCert\"]},\"2812\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW\",\"t\":[\"Property: dev.dsf.server.auth.oidc.authorization.code.flow\",\"Required: No\",\"Description: Set to true to enable OIDC authorization code flow\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified\",\"Default:false\"]},\"2813\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout\",\"Required: No\",\"Description: Set to true to enable OIDC back-channel logout\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified\",\"Default:false\"]},\"2814\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH\",\"t\":[\"Property: dev.dsf.server.auth.oidc.back.channel.logout.path\",\"Required: No\",\"Description: Path called by the OIDC provide to request back-channel logout\",\"Default:/back-channel-logout\"]},\"2815\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN\",\"t\":[\"Property: dev.dsf.server.auth.oidc.bearer.token\",\"Required: No\",\"Description: Set to true to enable OIDC bearer token authentication\",\"Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified\",\"Default:false\"]},\"2816\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"t\":[\"Property:dev.dsf.server.auth.oidc.client.id\",\"Required: No\",\"Description: OIDC provider client_id, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"2817\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"t\":[\"Property: dev.dsf.server.auth.oidc.client.secret\",\"Required: No\",\"Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled\"]},\"2818\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate\",\"Required: No\",\"Description: PEM encoded file with client certificate for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate.pem\"]},\"2819\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key\",\"Required: No\",\"Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem\"]},\"2820\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password\",\"Required: No\",\"Description: Password to decrypt the client certificate for the OIDC provider encrypted private key\",\"Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE\",\"Example:/run/secrets/oidc_provider_client_certificate_private_key.pem.password\"]},\"2821\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout\",\"Required: No\",\"Description: OIDC provider client connect timeout in milliseconds\",\"Default:5000\"]},\"2822\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout\",\"Required: No\",\"Description: OIDC provider client idle timeout in milliseconds\",\"Default:30000\"]},\"2823\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas\",\"Required: No\",\"Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/oidc_provider_trust_certificates.pem\"]},\"2824\":{\"h\":\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"t\":[\"Property: dev.dsf.server.auth.oidc.provider.realm.base.url\",\"Required: No\",\"Description: OIDC provider realm base url\",\"Example:https://keycloak.test.com:8443/realms/example-realm-name\"]},\"2825\":{\"h\":\"DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS\",\"t\":[\"Property: dev.dsf.server.auth.trust.client.certificate.cas\",\"Required: Yes\",\"Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/app_client_trust_certificates.pem\"]},\"2826\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE\",\"t\":[\"Property: dev.dsf.server.certificate\",\"Required: No\",\"Description: Server certificate file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2827\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_CHAIN\",\"t\":[\"Property: dev.dsf.server.certificate.chain\",\"Required: No\",\"Description: Server certificate chain file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2828\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY\",\"t\":[\"Property: dev.dsf.server.certificate.key\",\"Required: No\",\"Description: Server certificate private key file for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2829\":{\"h\":\"DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE\",\"t\":[\"Property: dev.dsf.server.certificate.key.password\",\"Required: No\",\"Description: Server certificate private key file password for testing\",\"Recommendation: Only specify For testing when terminating TLS in jetty server\"]},\"2830\":{\"h\":\"DEV_DSF_SERVER_CONTEXT_PATH\",\"t\":[\"Property: dev.dsf.server.context.path\",\"Required: Yes\",\"Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir\",\"Recommendation: Only modify for testing\"]},\"2831\":{\"h\":\"DEV_DSF_SERVER_STATUS_HOST\",\"t\":[\"Property: dev.dsf.server.status.host\",\"Required: Yes\",\"Description: Status connector host\",\"Default:127.0.0.1\"]},\"2832\":{\"h\":\"DEV_DSF_SERVER_STATUS_PORT\",\"t\":[\"Property: dev.dsf.server.status.port\",\"Required: Yes\",\"Description: Status connector port, default in docker image: 10000\"]},\"2833\":{\"h\":\"OpenID Connect\"},\"2834\":{\"h\":\"Overview\",\"t\":[\"Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.\",\"The DSF FHIR server supports Authorization Code Flow for the user interface as well as Bearer Token Authentication for the REST API. Back-Channel Logout is also supported.\",\"FHIR Reverse Proxy\",\"The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter needs to be set to optional.\"]},\"2835\":{\"h\":\"Authorization Code Flow\",\"t\":[\"To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID\",\"DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET\",\"Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.\"]},\"2836\":{\"h\":\"Bearer Token Authentication\",\"t\":[\"To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:\",\"DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL\"]},\"2837\":{\"h\":\"Additional ODIC Configuration Parameter\",\"t\":[\"A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.\",\"For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.\"]},\"2838\":{\"h\":\"Example\",\"t\":[\"services: app: image: ghcr.io/datasharingframework/fhir:1.5.2 # ... secrets: - keycloak_root_ca.pem # ... environment: # ... DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true' DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true' DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true' DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3 # ... secrets: keycloak_root_ca.pem: file: ./secrets/keycloak_root_ca.pem \"]},\"2839\":{\"h\":\"FHIR Reverse Proxy\"},\"2840\":{\"h\":\"Overview\",\"t\":[\"Configuration Parameters\"]},\"2841\":{\"h\":\"Configuration Parameters\"},\"2842\":{\"h\":\"APP_SERVER_IP\",\"t\":[\"Required: Yes\",\"Description: Hostname or IP-Address of the DSF FHIR server application container, the reverse proxy target\",\"Example:app, 172.28.1.3\"]},\"2843\":{\"h\":\"HTTPS_SERVER_NAME_PORT\",\"t\":[\"Required: Yes\",\"Description: External FQDN of your DSF FHIR server with port, typically 443\",\"Example:my-external.fqdn:443\"]},\"2844\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"2845\":{\"h\":\"PROXY_PASS_CONNECTION_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established\",\"Default:30 seconds\"]},\"2846\":{\"h\":\"PROXY_PASS_TIMEOUT_HTTP\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"2847\":{\"h\":\"PROXY_PASS_TIMEOUT_WS\",\"t\":[\"Required: No\",\"Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply\",\"Default:60 seconds\"]},\"2848\":{\"h\":\"SERVER_CONTEXT_PATH\",\"t\":[\"Required: No\",\"Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.\",\"Default:/fhir\"]},\"2849\":{\"h\":\"SSL_CA_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_certificate_file.pem\"]},\"2850\":{\"h\":\"SSL_CA_DN_REQUEST_FILE\",\"t\":[\"Required: No\",\"Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_ca_dn_request_file.pem\"]},\"2851\":{\"h\":\"SSL_CERTIFICATE_CHAIN_FILE\",\"t\":[\"Required: No\",\"Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_chain_file.pem\"]},\"2852\":{\"h\":\"SSL_CERTIFICATE_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_file.pem\"]},\"2853\":{\"h\":\"SSL_CERTIFICATE_KEY_FILE\",\"t\":[\"Required: Yes\",\"Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile\",\"Recommendation: Use docker secret file to configure\",\"Example:/run/secrets/ssl_certificate_key_file.pem\"]},\"2854\":{\"h\":\"SSL_VERIFY_CLIENT\",\"t\":[\"Required: No\",\"Description: Modifies the apache mod_ssl config parameter SSLVerifyClient\",\"Recommendation: Set to optional when using OIDC authentication\",\"Default:require\"]},\"2855\":{\"h\":\"\",\"t\":[\"404 Not Found\"]},\"2856\":{\"h\":\"Info\"}},\"dirtCount\":0,\"index\":[[\"=\",{\"1\":{\"369\":1}}],[\"^\",{\"1\":{\"353\":2}}],[\"`chown\",{\"1\":{\"306\":1}}],[\"`chmod\",{\"1\":{\"306\":1}}],[\"`\",{\"1\":{\"306\":1}}],[\"`daoprovider\",{\"1\":{\"143\":1}}],[\"+$\",{\"1\":{\"353\":1}}],[\"+48\",{\"1\":{\"300\":1,\"303\":1}}],[\"+45\",{\"1\":{\"300\":1}}],[\"+29\",{\"1\":{\"300\":2}}],[\"+27\",{\"1\":{\"299\":1,\"302\":1,\"305\":1,\"308\":1,\"311\":1}}],[\"+\",{\"1\":{\"299\":2,\"300\":9,\"302\":2,\"303\":5,\"305\":2,\"306\":2,\"308\":2,\"309\":1,\"311\":2,\"312\":1,\"353\":1,\"442\":1,\"444\":2,\"445\":1,\"493\":2,\"494\":1,\"519\":2,\"520\":1,\"547\":1,\"549\":2,\"550\":1,\"577\":1,\"579\":2,\"580\":1,\"607\":1,\"609\":2,\"610\":1,\"653\":1,\"655\":2,\"656\":1,\"699\":1,\"701\":2,\"702\":1,\"745\":1,\"747\":2,\"748\":1,\"791\":1,\"793\":2,\"794\":1,\"903\":1,\"994\":1,\"1294\":1,\"1470\":1,\"1647\":1,\"1824\":1,\"2001\":1,\"2178\":1,\"2306\":1,\"2397\":1,\"2525\":1,\"2616\":1,\"2744\":1,\"2835\":1}}],[\"+1\",{\"1\":{\"299\":1,\"300\":2,\"302\":1,\"303\":2,\"305\":1,\"306\":2,\"308\":1,\"309\":1,\"311\":1,\"312\":1}}],[\"+x\",{\"1\":{\"279\":1,\"290\":1}}],[\"7\",{\"0\":{\"298\":1},\"1\":{\"286\":14,\"297\":4,\"298\":2,\"299\":7,\"300\":27,\"301\":3,\"302\":4,\"303\":22,\"305\":4,\"306\":7,\"308\":4,\"309\":3,\"311\":4,\"312\":3,\"323\":6,\"328\":1,\"378\":1}}],[\"72\",{\"1\":{\"26\":1}}],[\"$\",{\"1\":{\"279\":3,\"290\":3,\"323\":6,\"342\":2,\"368\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"$name\",{\"1\":{\"166\":2}}],[\"$ssl\",{\"1\":{\"166\":1}}],[\"<=\",{\"1\":{\"892\":1,\"1397\":1,\"1574\":1,\"1751\":1,\"1928\":1,\"2105\":1,\"2295\":1,\"2514\":1,\"2733\":1}}],[\"\",{\"1\":{\"344\":1}}],[\"\",{\"1\":{\"344\":1}}],[\"dsf\",{\"1\":{\"159\":1}}],[\"github<\",{\"1\":{\"158\":1}}],[\"\",{\"1\":{\"158\":1}}],[\"org\",{\"1\":{\"159\":1}}],[\"\",{\"1\":{\"159\":1}}],[\"\",{\"1\":{\"159\":2}}],[\"username<\",{\"1\":{\"158\":1,\"394\":1}}],[\"https\",{\"1\":{\"158\":1}}],[\"\",{\"1\":{\"158\":1,\"394\":1}}],[\"\",{\"1\":{\"158\":1,\"394\":1}}],[\"true<\",{\"1\":{\"158\":1}}],[\"true<\",{\"1\":{\"158\":1}}],[\"\",{\"1\":{\"158\":1}}],[\"\",{\"1\":{\"158\":1}}],[\"github\",{\"1\":{\"158\":1}}],[\"github<\",{\"1\":{\"158\":3,\"394\":1}}],[\"\",{\"1\":{\"156\":1}}],[\"token<\",{\"1\":{\"158\":1,\"394\":1}}],[\"\",{\"1\":{\"158\":1}}],[\"\",{\"1\":{\"158\":1}}],[\"\",{\"1\":{\"359\":2,\"385\":2}}],[\"\",{\"1\":{\"359\":2,\"385\":4}}],[\"\",{\"1\":{\"156\":1}}],[\"version<\",{\"1\":{\"159\":1}}],[\"\",{\"1\":{\"154\":1,\"405\":2,\"616\":2,\"662\":2,\"708\":2,\"754\":2}}],[\"\",{\"1\":{\"156\":1}}],[\"=\",{\"1\":{\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\">=0\",{\"1\":{\"213\":1,\"870\":1,\"1052\":1,\"1203\":1,\"1375\":1,\"1552\":1,\"1729\":1,\"1906\":1,\"2083\":1,\"2273\":1,\"2492\":1,\"2711\":1}}],[\">\",{\"1\":{\"137\":1,\"141\":11,\"142\":3,\"143\":33,\"144\":6,\"145\":6,\"146\":20,\"147\":4,\"150\":2,\"155\":320,\"156\":57,\"158\":1,\"279\":1,\"285\":6,\"286\":4,\"290\":1,\"296\":6,\"297\":4,\"344\":2,\"359\":17,\"368\":1,\"385\":25,\"394\":1,\"433\":1,\"438\":6,\"439\":3,\"459\":1,\"464\":6,\"465\":3,\"482\":1,\"487\":6,\"488\":3,\"508\":1,\"513\":6,\"514\":3,\"538\":1,\"543\":6,\"544\":3,\"568\":1,\"573\":6,\"574\":3,\"598\":1,\"603\":6,\"604\":3,\"644\":1,\"649\":6,\"650\":3,\"690\":1,\"695\":6,\"696\":3,\"736\":1,\"741\":6,\"742\":3,\"782\":1,\"787\":6,\"788\":3}}],[\"q\",{\"1\":{\"132\":1}}],[\"quick\",{\"1\":{\"281\":1,\"292\":1,\"435\":1,\"461\":1,\"484\":1,\"510\":1,\"540\":1,\"570\":1,\"600\":1,\"646\":1,\"692\":1,\"738\":1,\"784\":1}}],[\"quickly\",{\"1\":{\"94\":1}}],[\"qualified\",{\"1\":{\"155\":1,\"328\":1}}],[\"quality\",{\"1\":{\"9\":1,\"77\":1,\"411\":2,\"415\":1,\"622\":2,\"626\":1,\"668\":2,\"672\":1,\"714\":2,\"718\":1,\"760\":2,\"764\":1}}],[\"queuesize\",{\"0\":{\"886\":1,\"1391\":1,\"1568\":1,\"1745\":1,\"1922\":1,\"2099\":1,\"2289\":1,\"2508\":1,\"2727\":1},\"1\":{\"886\":1,\"1391\":1,\"1568\":1,\"1745\":1,\"1922\":1,\"2099\":1,\"2289\":1,\"2508\":1,\"2727\":1}}],[\"queue\",{\"1\":{\"885\":1,\"886\":2,\"1390\":1,\"1391\":2,\"1567\":1,\"1568\":2,\"1744\":1,\"1745\":2,\"1921\":1,\"1922\":2,\"2098\":1,\"2099\":2,\"2288\":1,\"2289\":2,\"2507\":1,\"2508\":2,\"2726\":1,\"2727\":2}}],[\"question\",{\"1\":{\"155\":4}}],[\"questionnaires\",{\"1\":{\"141\":1}}],[\"questionnaire\",{\"0\":{\"202\":1,\"860\":1,\"1041\":1,\"1192\":1,\"1365\":1,\"1542\":1,\"1719\":1,\"1896\":1,\"2073\":1,\"2263\":1,\"2482\":1,\"2701\":1},\"1\":{\"93\":1,\"202\":2,\"860\":2,\"1041\":2,\"1192\":2,\"1365\":2,\"1542\":2,\"1719\":2,\"1896\":2,\"2073\":2,\"2263\":2,\"2482\":2,\"2701\":2}}],[\"questionnaireresponse\",{\"1\":{\"86\":2,\"93\":1,\"892\":1,\"1397\":1,\"1574\":1,\"1751\":1,\"1928\":1,\"2105\":1,\"2295\":1,\"2514\":1,\"2733\":1}}],[\"questions\",{\"0\":{\"40\":1},\"1\":{\"12\":1,\"40\":1,\"123\":1,\"415\":1,\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"626\":1,\"651\":1,\"672\":1,\"697\":1,\"718\":1,\"743\":1,\"764\":1,\"789\":1}}],[\"query\",{\"1\":{\"81\":1,\"122\":2,\"123\":1,\"124\":2,\"149\":1}}],[\"queries\",{\"1\":{\"26\":2,\"29\":1,\"94\":1,\"98\":1,\"122\":1,\"123\":1,\"124\":2,\"844\":1,\"954\":1,\"2247\":1,\"2357\":1,\"2466\":1,\"2576\":1,\"2685\":1,\"2795\":1}}],[\"840\",{\"1\":{\"801\":1,\"928\":1,\"1232\":1,\"1408\":1,\"1585\":1,\"1762\":1,\"1939\":1,\"2116\":1,\"2204\":1,\"2331\":1,\"2423\":1,\"2550\":1,\"2642\":1,\"2769\":1}}],[\"8443\",{\"1\":{\"131\":1,\"823\":1,\"983\":1,\"1091\":1,\"1159\":1,\"1283\":1,\"1331\":1,\"1459\":1,\"1508\":1,\"1636\":1,\"1685\":1,\"1813\":1,\"1862\":1,\"1990\":1,\"2039\":1,\"2167\":1,\"2226\":1,\"2386\":1,\"2445\":1,\"2605\":1,\"2664\":1,\"2824\":1}}],[\"8601\",{\"1\":{\"378\":1}}],[\"83\",{\"1\":{\"323\":1}}],[\"822\",{\"1\":{\"801\":1,\"928\":1,\"1232\":1,\"1408\":1,\"1585\":1,\"1762\":1,\"1939\":1,\"2116\":1,\"2204\":1,\"2331\":1,\"2423\":1,\"2550\":1,\"2642\":1,\"2769\":1}}],[\"82\",{\"1\":{\"323\":1}}],[\"80\",{\"1\":{\"155\":2,\"299\":2,\"302\":2,\"305\":2,\"308\":2,\"311\":2,\"323\":1}}],[\"8080\",{\"1\":{\"135\":1,\"187\":1,\"193\":1,\"196\":1,\"241\":1,\"809\":1,\"897\":1,\"899\":1,\"964\":1,\"966\":1,\"969\":1,\"1071\":1,\"1073\":1,\"1077\":1,\"1125\":1,\"1127\":1,\"1145\":1,\"1222\":1,\"1224\":1,\"1264\":1,\"1266\":1,\"1269\":1,\"1317\":1,\"1398\":1,\"1400\":1,\"1440\":1,\"1442\":1,\"1445\":1,\"1494\":1,\"1575\":1,\"1577\":1,\"1617\":1,\"1619\":1,\"1622\":1,\"1671\":1,\"1752\":1,\"1754\":1,\"1794\":1,\"1796\":1,\"1799\":1,\"1848\":1,\"1929\":1,\"1931\":1,\"1971\":1,\"1973\":1,\"1976\":1,\"2025\":1,\"2106\":1,\"2108\":1,\"2148\":1,\"2150\":1,\"2153\":1,\"2212\":1,\"2300\":1,\"2302\":1,\"2367\":1,\"2369\":1,\"2372\":1,\"2431\":1,\"2519\":1,\"2521\":1,\"2586\":1,\"2588\":1,\"2591\":1,\"2650\":1,\"2738\":1,\"2740\":1,\"2805\":1,\"2807\":1,\"2810\":1}}],[\"8002\",{\"1\":{\"130\":1}}],[\"8001\",{\"1\":{\"130\":1}}],[\"802\",{\"1\":{\"106\":1,\"109\":1,\"161\":1,\"164\":1,\"280\":1,\"291\":1,\"434\":1,\"460\":1,\"483\":1,\"509\":1,\"539\":1,\"569\":1,\"599\":1,\"645\":1,\"691\":1,\"737\":1,\"783\":1}}],[\"8\",{\"0\":{\"301\":1,\"393\":1},\"1\":{\"122\":1,\"155\":1,\"299\":1,\"300\":4,\"301\":1,\"302\":4,\"303\":5,\"304\":1,\"305\":1,\"306\":3,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"315\":1,\"323\":1,\"390\":1,\"393\":2,\"444\":1,\"445\":1,\"493\":1,\"494\":1,\"519\":1,\"520\":1,\"549\":1,\"550\":1,\"579\":1,\"580\":1,\"609\":1,\"610\":1,\"655\":1,\"656\":1,\"701\":1,\"702\":1,\"747\":1,\"748\":1,\"793\":1,\"794\":1}}],[\"yaml\",{\"1\":{\"217\":1,\"222\":1,\"223\":1,\"229\":1,\"233\":1,\"257\":1,\"261\":1,\"262\":1,\"798\":1,\"874\":1,\"879\":1,\"880\":1,\"887\":1,\"891\":1,\"894\":1,\"897\":1,\"925\":1,\"961\":1,\"964\":1,\"1056\":1,\"1061\":1,\"1062\":1,\"1066\":1,\"1070\":1,\"1071\":1,\"1123\":1,\"1125\":1,\"1207\":1,\"1212\":1,\"1213\":1,\"1217\":1,\"1221\":1,\"1222\":1,\"1229\":1,\"1262\":1,\"1264\":1,\"1379\":1,\"1384\":1,\"1385\":1,\"1392\":1,\"1396\":1,\"1398\":1,\"1405\":1,\"1438\":1,\"1440\":1,\"1556\":1,\"1561\":1,\"1562\":1,\"1569\":1,\"1573\":1,\"1575\":1,\"1582\":1,\"1615\":1,\"1617\":1,\"1733\":1,\"1738\":1,\"1739\":1,\"1746\":1,\"1750\":1,\"1752\":1,\"1759\":1,\"1792\":1,\"1794\":1,\"1910\":1,\"1915\":1,\"1916\":1,\"1923\":1,\"1927\":1,\"1929\":1,\"1936\":1,\"1969\":1,\"1971\":1,\"2087\":1,\"2092\":1,\"2093\":1,\"2100\":1,\"2104\":1,\"2106\":1,\"2113\":1,\"2146\":1,\"2148\":1,\"2201\":1,\"2277\":1,\"2282\":1,\"2283\":1,\"2290\":1,\"2294\":1,\"2297\":1,\"2300\":1,\"2328\":1,\"2364\":1,\"2367\":1,\"2420\":1,\"2496\":1,\"2501\":1,\"2502\":1,\"2509\":1,\"2513\":1,\"2516\":1,\"2519\":1,\"2547\":1,\"2583\":1,\"2586\":1,\"2639\":1,\"2715\":1,\"2720\":1,\"2721\":1,\"2728\":1,\"2732\":1,\"2735\":1,\"2738\":1,\"2766\":1,\"2802\":1,\"2805\":1}}],[\"y\",{\"1\":{\"137\":4,\"138\":3,\"887\":1,\"891\":1,\"1392\":1,\"1396\":1,\"1569\":1,\"1573\":1,\"1746\":1,\"1750\":1,\"1923\":1,\"1927\":1,\"2100\":1,\"2104\":1,\"2290\":1,\"2294\":1,\"2509\":1,\"2513\":1,\"2728\":1,\"2732\":1}}],[\"yml\",{\"0\":{\"323\":1},\"1\":{\"131\":4,\"285\":2,\"286\":2,\"296\":2,\"297\":2,\"298\":1,\"299\":1,\"300\":1,\"301\":1,\"302\":1,\"303\":1,\"304\":1,\"305\":1,\"306\":1,\"307\":1,\"308\":1,\"309\":1,\"310\":1,\"311\":1,\"312\":1,\"327\":1,\"345\":1,\"348\":1,\"429\":2,\"438\":2,\"439\":2,\"443\":1,\"444\":1,\"445\":1,\"464\":2,\"465\":2,\"487\":2,\"488\":2,\"492\":1,\"493\":1,\"494\":1,\"513\":2,\"514\":2,\"518\":1,\"519\":1,\"520\":1,\"543\":2,\"544\":2,\"548\":1,\"549\":1,\"550\":1,\"573\":2,\"574\":2,\"578\":1,\"579\":1,\"580\":1,\"603\":2,\"604\":2,\"608\":1,\"609\":1,\"610\":1,\"649\":2,\"650\":2,\"654\":1,\"655\":1,\"656\":1,\"695\":2,\"696\":2,\"700\":1,\"701\":1,\"702\":1,\"741\":2,\"742\":2,\"746\":1,\"747\":1,\"748\":1,\"778\":2,\"787\":2,\"788\":2,\"792\":1,\"793\":1,\"794\":1}}],[\"yes\",{\"1\":{\"171\":1,\"173\":1,\"175\":1,\"178\":1,\"183\":1,\"184\":1,\"201\":1,\"203\":1,\"204\":1,\"237\":1,\"238\":1,\"245\":1,\"247\":1,\"249\":1,\"251\":1,\"253\":1,\"256\":1,\"259\":1,\"261\":1,\"262\":1,\"265\":1,\"266\":1,\"271\":1,\"274\":1,\"275\":1,\"808\":1,\"809\":1,\"810\":1,\"824\":1,\"829\":1,\"830\":1,\"831\":1,\"834\":1,\"836\":1,\"838\":1,\"841\":1,\"850\":1,\"851\":1,\"859\":1,\"861\":1,\"909\":1,\"910\":1,\"916\":1,\"919\":1,\"920\":1,\"935\":1,\"936\":1,\"940\":1,\"944\":1,\"946\":1,\"948\":1,\"950\":1,\"956\":1,\"958\":1,\"959\":1,\"968\":1,\"969\":1,\"970\":1,\"984\":1,\"989\":1,\"990\":1,\"991\":1,\"1001\":1,\"1002\":1,\"1008\":1,\"1011\":1,\"1012\":1,\"1019\":1,\"1021\":1,\"1023\":1,\"1026\":1,\"1031\":1,\"1032\":1,\"1040\":1,\"1042\":1,\"1043\":1,\"1076\":1,\"1077\":1,\"1078\":1,\"1092\":1,\"1097\":1,\"1098\":1,\"1099\":1,\"1101\":1,\"1102\":1,\"1106\":1,\"1110\":1,\"1112\":1,\"1114\":1,\"1116\":1,\"1119\":1,\"1121\":1,\"1123\":1,\"1130\":1,\"1131\":1,\"1136\":1,\"1139\":1,\"1140\":1,\"1144\":1,\"1145\":1,\"1146\":1,\"1160\":1,\"1165\":1,\"1166\":1,\"1167\":1,\"1170\":1,\"1172\":1,\"1174\":1,\"1177\":1,\"1182\":1,\"1183\":1,\"1191\":1,\"1193\":1,\"1194\":1,\"1239\":1,\"1240\":1,\"1244\":1,\"1248\":1,\"1250\":1,\"1252\":1,\"1254\":1,\"1257\":1,\"1259\":1,\"1260\":1,\"1262\":1,\"1268\":1,\"1269\":1,\"1270\":1,\"1284\":1,\"1289\":1,\"1290\":1,\"1291\":1,\"1301\":1,\"1302\":1,\"1307\":1,\"1310\":1,\"1311\":1,\"1316\":1,\"1317\":1,\"1318\":1,\"1332\":1,\"1337\":1,\"1338\":1,\"1339\":1,\"1342\":1,\"1344\":1,\"1346\":1,\"1349\":1,\"1355\":1,\"1356\":1,\"1364\":1,\"1366\":1,\"1415\":1,\"1416\":1,\"1420\":1,\"1424\":1,\"1426\":1,\"1428\":1,\"1430\":1,\"1433\":1,\"1435\":1,\"1436\":1,\"1444\":1,\"1445\":1,\"1446\":1,\"1460\":1,\"1465\":1,\"1466\":1,\"1467\":1,\"1477\":1,\"1478\":1,\"1484\":1,\"1487\":1,\"1488\":1,\"1493\":1,\"1494\":1,\"1495\":1,\"1509\":1,\"1514\":1,\"1515\":1,\"1516\":1,\"1519\":1,\"1521\":1,\"1523\":1,\"1526\":1,\"1532\":1,\"1533\":1,\"1541\":1,\"1543\":1,\"1592\":1,\"1593\":1,\"1597\":1,\"1601\":1,\"1603\":1,\"1605\":1,\"1607\":1,\"1610\":1,\"1612\":1,\"1613\":1,\"1621\":1,\"1622\":1,\"1623\":1,\"1637\":1,\"1642\":1,\"1643\":1,\"1644\":1,\"1654\":1,\"1655\":1,\"1661\":1,\"1664\":1,\"1665\":1,\"1670\":1,\"1671\":1,\"1672\":1,\"1686\":1,\"1691\":1,\"1692\":1,\"1693\":1,\"1696\":1,\"1698\":1,\"1700\":1,\"1703\":1,\"1709\":1,\"1710\":1,\"1718\":1,\"1720\":1,\"1769\":1,\"1770\":1,\"1774\":1,\"1778\":1,\"1780\":1,\"1782\":1,\"1784\":1,\"1787\":1,\"1789\":1,\"1790\":1,\"1798\":1,\"1799\":1,\"1800\":1,\"1814\":1,\"1819\":1,\"1820\":1,\"1821\":1,\"1831\":1,\"1832\":1,\"1838\":1,\"1841\":1,\"1842\":1,\"1847\":1,\"1848\":1,\"1849\":1,\"1863\":1,\"1868\":1,\"1869\":1,\"1870\":1,\"1873\":1,\"1875\":1,\"1877\":1,\"1880\":1,\"1886\":1,\"1887\":1,\"1895\":1,\"1897\":1,\"1946\":1,\"1947\":1,\"1951\":1,\"1955\":1,\"1957\":1,\"1959\":1,\"1961\":1,\"1964\":1,\"1966\":1,\"1967\":1,\"1975\":1,\"1976\":1,\"1977\":1,\"1991\":1,\"1996\":1,\"1997\":1,\"1998\":1,\"2008\":1,\"2009\":1,\"2015\":1,\"2018\":1,\"2019\":1,\"2024\":1,\"2025\":1,\"2026\":1,\"2040\":1,\"2045\":1,\"2046\":1,\"2047\":1,\"2050\":1,\"2052\":1,\"2054\":1,\"2057\":1,\"2063\":1,\"2064\":1,\"2072\":1,\"2074\":1,\"2123\":1,\"2124\":1,\"2128\":1,\"2132\":1,\"2134\":1,\"2136\":1,\"2138\":1,\"2141\":1,\"2143\":1,\"2144\":1,\"2152\":1,\"2153\":1,\"2154\":1,\"2168\":1,\"2173\":1,\"2174\":1,\"2175\":1,\"2185\":1,\"2186\":1,\"2192\":1,\"2195\":1,\"2196\":1,\"2211\":1,\"2212\":1,\"2213\":1,\"2227\":1,\"2232\":1,\"2233\":1,\"2234\":1,\"2237\":1,\"2239\":1,\"2241\":1,\"2244\":1,\"2253\":1,\"2254\":1,\"2262\":1,\"2264\":1,\"2312\":1,\"2313\":1,\"2319\":1,\"2322\":1,\"2323\":1,\"2338\":1,\"2339\":1,\"2343\":1,\"2347\":1,\"2349\":1,\"2351\":1,\"2353\":1,\"2359\":1,\"2361\":1,\"2362\":1,\"2371\":1,\"2372\":1,\"2373\":1,\"2387\":1,\"2392\":1,\"2393\":1,\"2394\":1,\"2404\":1,\"2405\":1,\"2411\":1,\"2414\":1,\"2415\":1,\"2430\":1,\"2431\":1,\"2432\":1,\"2446\":1,\"2451\":1,\"2452\":1,\"2453\":1,\"2456\":1,\"2458\":1,\"2460\":1,\"2463\":1,\"2472\":1,\"2473\":1,\"2481\":1,\"2483\":1,\"2531\":1,\"2532\":1,\"2538\":1,\"2541\":1,\"2542\":1,\"2557\":1,\"2558\":1,\"2562\":1,\"2566\":1,\"2568\":1,\"2570\":1,\"2572\":1,\"2578\":1,\"2580\":1,\"2581\":1,\"2590\":1,\"2591\":1,\"2592\":1,\"2606\":1,\"2611\":1,\"2612\":1,\"2613\":1,\"2623\":1,\"2624\":1,\"2630\":1,\"2633\":1,\"2634\":1,\"2649\":1,\"2650\":1,\"2651\":1,\"2665\":1,\"2670\":1,\"2671\":1,\"2672\":1,\"2675\":1,\"2677\":1,\"2679\":1,\"2682\":1,\"2691\":1,\"2692\":1,\"2700\":1,\"2702\":1,\"2750\":1,\"2751\":1,\"2757\":1,\"2760\":1,\"2761\":1,\"2776\":1,\"2777\":1,\"2781\":1,\"2785\":1,\"2787\":1,\"2789\":1,\"2791\":1,\"2797\":1,\"2799\":1,\"2800\":1,\"2809\":1,\"2810\":1,\"2811\":1,\"2825\":1,\"2830\":1,\"2831\":1,\"2832\":1,\"2842\":1,\"2843\":1,\"2849\":1,\"2852\":1,\"2853\":1}}],[\"yet\",{\"1\":{\"123\":1,\"410\":1,\"413\":1,\"424\":2,\"454\":2,\"477\":2,\"503\":2,\"529\":2,\"559\":2,\"589\":2,\"621\":1,\"624\":1,\"635\":2,\"667\":1,\"670\":1,\"681\":2,\"713\":1,\"716\":1,\"727\":2,\"759\":1,\"762\":1,\"773\":2}}],[\"years\",{\"1\":{\"113\":1}}],[\"youtube\",{\"1\":{\"314\":1}}],[\"you´re\",{\"1\":{\"71\":1}}],[\"you\",{\"0\":{\"115\":1,\"116\":1},\"1\":{\"12\":4,\"13\":1,\"33\":3,\"37\":5,\"38\":1,\"40\":3,\"69\":1,\"70\":2,\"71\":1,\"82\":2,\"88\":1,\"89\":2,\"93\":1,\"98\":1,\"115\":1,\"116\":1,\"130\":1,\"131\":1,\"132\":1,\"135\":1,\"150\":1,\"158\":2,\"173\":1,\"232\":1,\"249\":1,\"258\":1,\"276\":1,\"282\":3,\"285\":2,\"286\":3,\"287\":1,\"293\":3,\"296\":2,\"297\":3,\"298\":1,\"300\":2,\"301\":2,\"303\":2,\"304\":1,\"306\":2,\"307\":1,\"310\":1,\"328\":1,\"334\":5,\"348\":3,\"363\":2,\"389\":3,\"392\":1,\"394\":2,\"396\":1,\"403\":1,\"404\":1,\"407\":1,\"409\":2,\"410\":3,\"413\":7,\"414\":3,\"415\":9,\"422\":1,\"423\":3,\"425\":6,\"426\":1,\"427\":1,\"430\":2,\"434\":1,\"438\":3,\"439\":2,\"440\":6,\"441\":3,\"442\":7,\"452\":2,\"453\":3,\"455\":7,\"456\":3,\"460\":1,\"464\":5,\"465\":2,\"466\":6,\"467\":3,\"468\":1,\"475\":2,\"476\":3,\"478\":7,\"479\":3,\"483\":1,\"487\":3,\"488\":2,\"489\":6,\"490\":3,\"491\":1,\"492\":1,\"501\":2,\"502\":3,\"504\":7,\"505\":3,\"509\":1,\"513\":3,\"514\":2,\"515\":6,\"516\":3,\"517\":1,\"518\":1,\"519\":2,\"527\":1,\"528\":3,\"530\":7,\"531\":1,\"535\":2,\"539\":1,\"543\":3,\"544\":2,\"545\":6,\"546\":3,\"547\":7,\"548\":1,\"557\":1,\"558\":3,\"560\":6,\"561\":1,\"565\":2,\"569\":1,\"573\":3,\"574\":2,\"575\":6,\"576\":3,\"577\":7,\"587\":1,\"588\":3,\"590\":6,\"591\":1,\"595\":2,\"599\":1,\"603\":3,\"604\":2,\"605\":6,\"606\":3,\"607\":7,\"614\":1,\"615\":1,\"618\":1,\"620\":2,\"621\":3,\"624\":7,\"625\":3,\"626\":9,\"633\":1,\"634\":3,\"636\":6,\"637\":1,\"641\":2,\"645\":1,\"649\":3,\"650\":2,\"651\":6,\"652\":3,\"653\":7,\"660\":1,\"661\":1,\"664\":1,\"666\":2,\"667\":3,\"670\":7,\"671\":3,\"672\":9,\"679\":1,\"680\":3,\"682\":6,\"683\":1,\"687\":2,\"691\":1,\"695\":3,\"696\":2,\"697\":6,\"698\":3,\"699\":7,\"706\":1,\"707\":1,\"710\":1,\"712\":2,\"713\":3,\"716\":7,\"717\":3,\"718\":9,\"725\":1,\"726\":3,\"728\":6,\"729\":1,\"733\":2,\"737\":1,\"741\":3,\"742\":2,\"743\":6,\"744\":3,\"745\":7,\"752\":1,\"753\":1,\"756\":1,\"758\":2,\"759\":3,\"762\":7,\"763\":3,\"764\":9,\"771\":1,\"772\":3,\"774\":6,\"775\":1,\"776\":1,\"779\":2,\"783\":1,\"787\":3,\"788\":2,\"789\":6,\"790\":3,\"791\":7,\"836\":1,\"890\":1,\"946\":1,\"957\":1,\"1021\":1,\"1069\":1,\"1112\":1,\"1120\":1,\"1172\":1,\"1220\":1,\"1250\":1,\"1258\":1,\"1344\":1,\"1395\":1,\"1426\":1,\"1434\":1,\"1521\":1,\"1572\":1,\"1603\":1,\"1611\":1,\"1698\":1,\"1749\":1,\"1780\":1,\"1788\":1,\"1875\":1,\"1926\":1,\"1957\":1,\"1965\":1,\"2052\":1,\"2103\":1,\"2134\":1,\"2142\":1,\"2239\":1,\"2293\":1,\"2349\":1,\"2360\":1,\"2458\":1,\"2512\":1,\"2568\":1,\"2579\":1,\"2677\":1,\"2731\":1,\"2787\":1,\"2798\":1}}],[\"yourself\",{\"1\":{\"334\":1,\"363\":1,\"389\":1,\"425\":1,\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"560\":1,\"575\":1,\"590\":1,\"605\":1,\"636\":1,\"651\":1,\"682\":1,\"697\":1,\"728\":1,\"743\":1,\"774\":1,\"789\":1}}],[\"your\",{\"0\":{\"2\":1,\"5\":1,\"13\":1,\"71\":1,\"83\":1},\"1\":{\"12\":5,\"38\":3,\"67\":1,\"71\":1,\"100\":1,\"102\":2,\"116\":1,\"124\":1,\"130\":5,\"131\":3,\"132\":1,\"150\":1,\"158\":3,\"170\":1,\"227\":1,\"228\":1,\"229\":1,\"234\":1,\"266\":1,\"280\":2,\"281\":1,\"282\":1,\"285\":10,\"286\":5,\"291\":2,\"292\":1,\"293\":1,\"296\":11,\"297\":5,\"300\":4,\"303\":4,\"306\":4,\"309\":4,\"312\":4,\"317\":1,\"327\":1,\"334\":2,\"336\":1,\"338\":4,\"348\":2,\"373\":1,\"392\":1,\"394\":2,\"396\":2,\"400\":1,\"401\":1,\"403\":3,\"407\":1,\"410\":3,\"413\":4,\"414\":1,\"415\":12,\"423\":3,\"424\":3,\"425\":2,\"429\":3,\"430\":1,\"434\":2,\"435\":1,\"438\":6,\"439\":4,\"440\":2,\"441\":1,\"442\":14,\"445\":4,\"453\":6,\"454\":3,\"455\":2,\"456\":1,\"460\":2,\"461\":1,\"464\":8,\"465\":5,\"466\":2,\"467\":1,\"468\":5,\"476\":6,\"477\":3,\"478\":2,\"479\":1,\"483\":2,\"484\":1,\"487\":6,\"488\":5,\"489\":2,\"490\":1,\"491\":5,\"494\":4,\"502\":6,\"503\":3,\"504\":2,\"505\":1,\"509\":2,\"510\":1,\"513\":6,\"514\":5,\"515\":2,\"516\":1,\"517\":5,\"520\":4,\"528\":5,\"529\":3,\"530\":2,\"535\":1,\"539\":2,\"540\":1,\"543\":6,\"544\":5,\"545\":2,\"546\":1,\"547\":14,\"550\":4,\"558\":3,\"559\":3,\"560\":2,\"565\":1,\"569\":2,\"570\":1,\"573\":6,\"574\":4,\"575\":2,\"576\":1,\"577\":14,\"580\":4,\"588\":3,\"589\":3,\"590\":2,\"595\":1,\"599\":2,\"600\":1,\"603\":6,\"604\":4,\"605\":2,\"606\":1,\"607\":14,\"610\":4,\"611\":1,\"612\":1,\"614\":3,\"618\":1,\"621\":3,\"624\":4,\"625\":1,\"626\":12,\"634\":3,\"635\":3,\"636\":2,\"641\":1,\"645\":2,\"646\":1,\"649\":6,\"650\":4,\"651\":2,\"652\":1,\"653\":14,\"656\":4,\"657\":1,\"658\":1,\"660\":3,\"664\":1,\"667\":3,\"670\":4,\"671\":1,\"672\":12,\"680\":3,\"681\":3,\"682\":2,\"687\":1,\"691\":2,\"692\":1,\"695\":6,\"696\":4,\"697\":2,\"698\":1,\"699\":14,\"702\":4,\"703\":1,\"704\":1,\"706\":3,\"710\":1,\"713\":3,\"716\":4,\"717\":1,\"718\":12,\"726\":3,\"727\":3,\"728\":2,\"733\":1,\"737\":2,\"738\":1,\"741\":6,\"742\":4,\"743\":2,\"744\":1,\"745\":14,\"748\":4,\"749\":1,\"750\":1,\"752\":3,\"756\":1,\"759\":3,\"762\":4,\"763\":1,\"764\":12,\"772\":3,\"773\":3,\"774\":2,\"778\":3,\"779\":1,\"783\":2,\"784\":1,\"787\":6,\"788\":4,\"789\":2,\"790\":1,\"791\":14,\"794\":4,\"887\":1,\"910\":1,\"1002\":1,\"1066\":1,\"1131\":1,\"1217\":1,\"1302\":1,\"1392\":1,\"1478\":1,\"1569\":1,\"1655\":1,\"1746\":1,\"1832\":1,\"1923\":1,\"2009\":1,\"2100\":1,\"2186\":1,\"2290\":1,\"2313\":1,\"2405\":1,\"2509\":1,\"2532\":1,\"2624\":1,\"2728\":1,\"2751\":1,\"2843\":1}}],[\"​\",{\"1\":{\"94\":1}}],[\"|\",{\"0\":{\"73\":1,\"74\":1,\"75\":1},\"1\":{\"125\":1,\"132\":1,\"279\":2,\"290\":2,\"300\":4,\"303\":3,\"306\":2,\"309\":2,\"312\":2,\"321\":6,\"322\":6,\"323\":6,\"324\":6,\"334\":6,\"335\":6,\"338\":6,\"339\":6,\"348\":6,\"349\":6,\"363\":6,\"364\":6,\"373\":6,\"374\":6,\"389\":6,\"399\":6,\"433\":2,\"438\":1,\"440\":2,\"445\":2,\"459\":2,\"466\":2,\"482\":2,\"487\":1,\"489\":2,\"494\":2,\"508\":2,\"513\":1,\"515\":2,\"519\":1,\"520\":2,\"538\":2,\"543\":1,\"545\":2,\"550\":2,\"568\":2,\"573\":1,\"575\":2,\"580\":2,\"598\":2,\"603\":1,\"605\":2,\"610\":2,\"644\":2,\"649\":1,\"651\":2,\"656\":2,\"690\":2,\"695\":1,\"697\":2,\"702\":2,\"736\":2,\"741\":1,\"743\":2,\"748\":2,\"782\":2,\"787\":1,\"789\":2,\"794\":2,\"798\":3,\"806\":3,\"925\":3,\"933\":3,\"1229\":3,\"1237\":3,\"1262\":1,\"1405\":3,\"1413\":3,\"1582\":3,\"1590\":3,\"1759\":3,\"1767\":3,\"1936\":3,\"1944\":3,\"2113\":3,\"2121\":3,\"2201\":3,\"2209\":3,\"2328\":3,\"2336\":3,\"2420\":3,\"2428\":3,\"2547\":3,\"2555\":3,\"2639\":3,\"2647\":3,\"2766\":3,\"2774\":3}}],[\"🔒\",{\"0\":{\"107\":1}}],[\"🔥\",{\"0\":{\"91\":1}}],[\"📫\",{\"0\":{\"85\":1}}],[\"🚀\",{\"1\":{\"68\":1}}],[\"👥\",{\"0\":{\"68\":1}}],[\"96\",{\"1\":{\"323\":1}}],[\"98\",{\"1\":{\"323\":1}}],[\"99\",{\"1\":{\"156\":2,\"323\":1}}],[\"9\",{\"0\":{\"30\":1,\"31\":1,\"169\":1,\"236\":1,\"264\":1,\"298\":1,\"301\":1,\"304\":2,\"307\":1,\"310\":1,\"419\":1,\"442\":1,\"449\":1,\"468\":1,\"472\":1,\"491\":1,\"498\":1,\"517\":1,\"524\":1,\"547\":1,\"554\":1,\"577\":1,\"584\":1,\"607\":1,\"630\":1,\"653\":1,\"676\":1,\"699\":1,\"722\":1,\"745\":1,\"768\":1,\"791\":1},\"1\":{\"30\":1,\"42\":3,\"44\":3,\"46\":3,\"48\":3,\"50\":3,\"52\":3,\"54\":3,\"56\":3,\"58\":3,\"60\":3,\"62\":3,\"276\":1,\"285\":8,\"286\":7,\"287\":1,\"296\":8,\"297\":7,\"298\":1,\"299\":16,\"300\":13,\"301\":2,\"302\":4,\"303\":13,\"304\":2,\"305\":7,\"306\":14,\"307\":4,\"308\":8,\"309\":10,\"310\":6,\"311\":9,\"312\":11,\"353\":2,\"417\":1,\"421\":1,\"430\":1,\"442\":8,\"447\":1,\"451\":1,\"456\":2,\"468\":4,\"470\":1,\"474\":1,\"479\":2,\"491\":4,\"492\":2,\"496\":1,\"500\":1,\"505\":2,\"517\":4,\"518\":2,\"522\":1,\"526\":1,\"535\":1,\"547\":8,\"548\":2,\"552\":1,\"556\":1,\"565\":1,\"577\":8,\"582\":1,\"586\":1,\"595\":1,\"607\":8,\"628\":1,\"632\":1,\"641\":1,\"653\":8,\"674\":1,\"678\":1,\"687\":1,\"699\":8,\"720\":1,\"724\":1,\"733\":1,\"745\":8,\"766\":1,\"770\":1,\"779\":1,\"791\":8,\"798\":2,\"801\":2,\"925\":2,\"928\":2,\"1229\":2,\"1232\":2,\"1405\":2,\"1408\":2,\"1582\":2,\"1585\":2,\"1759\":2,\"1762\":2,\"1936\":2,\"1939\":2,\"2113\":2,\"2116\":2,\"2201\":2,\"2204\":2,\"2328\":2,\"2331\":2,\"2420\":2,\"2423\":2,\"2547\":2,\"2550\":2,\"2639\":2,\"2642\":2,\"2766\":2,\"2769\":2}}],[\"64\",{\"1\":{\"323\":1}}],[\"66\",{\"1\":{\"323\":1}}],[\"60\",{\"1\":{\"269\":1,\"270\":1,\"913\":1,\"914\":1,\"1005\":1,\"1006\":1,\"1134\":1,\"1135\":1,\"1305\":1,\"1306\":1,\"1481\":1,\"1482\":1,\"1658\":1,\"1659\":1,\"1835\":1,\"1836\":1,\"2012\":1,\"2013\":1,\"2189\":1,\"2190\":1,\"2316\":1,\"2317\":1,\"2408\":1,\"2409\":1,\"2535\":1,\"2536\":1,\"2627\":1,\"2628\":1,\"2754\":1,\"2755\":1,\"2846\":1,\"2847\":1}}],[\"60000\",{\"1\":{\"190\":1,\"199\":1,\"854\":1,\"857\":1,\"1035\":1,\"1038\":1,\"1186\":1,\"1189\":1,\"1359\":1,\"1362\":1,\"1536\":1,\"1539\":1,\"1713\":1,\"1716\":1,\"1890\":1,\"1893\":1,\"2067\":1,\"2070\":1,\"2257\":1,\"2260\":1,\"2476\":1,\"2479\":1,\"2695\":1,\"2698\":1}}],[\"6\",{\"1\":{\"129\":1,\"130\":1,\"131\":1,\"141\":1,\"298\":2,\"300\":18,\"301\":2,\"303\":12}}],[\"68\",{\"1\":{\"26\":1}}],[\"67\",{\"1\":{\"323\":1}}],[\"678\",{\"1\":{\"26\":1}}],[\"674\",{\"1\":{\"26\":1}}],[\"440`\",{\"1\":{\"306\":1}}],[\"440\",{\"1\":{\"285\":4,\"286\":4,\"296\":4,\"297\":4,\"300\":3,\"303\":3,\"429\":2,\"438\":7,\"439\":2,\"464\":7,\"465\":2,\"487\":7,\"488\":2,\"513\":7,\"514\":2,\"543\":7,\"544\":2,\"573\":7,\"574\":2,\"603\":7,\"604\":2,\"649\":7,\"650\":2,\"695\":7,\"696\":2,\"741\":7,\"742\":2,\"778\":2,\"787\":7,\"788\":2}}],[\"443\",{\"1\":{\"95\":1,\"165\":1,\"166\":4,\"266\":2,\"281\":5,\"285\":2,\"286\":1,\"292\":5,\"296\":2,\"297\":1,\"323\":2,\"435\":5,\"438\":2,\"439\":1,\"461\":5,\"464\":2,\"465\":1,\"484\":5,\"487\":2,\"488\":1,\"510\":5,\"513\":2,\"514\":1,\"540\":5,\"543\":2,\"544\":1,\"570\":5,\"573\":2,\"574\":1,\"600\":5,\"603\":2,\"604\":1,\"646\":5,\"649\":2,\"650\":1,\"692\":5,\"695\":2,\"696\":1,\"738\":5,\"741\":2,\"742\":1,\"784\":5,\"787\":2,\"788\":1,\"910\":2,\"1002\":2,\"1131\":2,\"1302\":2,\"1478\":2,\"1655\":2,\"1832\":2,\"2009\":2,\"2186\":2,\"2313\":2,\"2405\":2,\"2532\":2,\"2624\":2,\"2751\":2,\"2843\":2}}],[\"465\",{\"1\":{\"216\":1,\"873\":1,\"1055\":1,\"1206\":1,\"1378\":1,\"1555\":1,\"1732\":1,\"1909\":1,\"2086\":1,\"2276\":1,\"2495\":1,\"2714\":1}}],[\"404\",{\"1\":{\"2855\":1}}],[\"4096\",{\"1\":{\"286\":1,\"297\":1}}],[\"40\",{\"1\":{\"122\":1,\"886\":1,\"1391\":1,\"1568\":1,\"1745\":1,\"1922\":1,\"2099\":1,\"2289\":1,\"2508\":1,\"2727\":1}}],[\"4\",{\"0\":{\"56\":1,\"320\":1,\"364\":1,\"365\":1,\"641\":1,\"700\":1},\"1\":{\"56\":1,\"58\":1,\"94\":1,\"150\":1,\"155\":2,\"159\":1,\"213\":1,\"278\":4,\"289\":4,\"320\":1,\"364\":1,\"365\":1,\"372\":1,\"373\":1,\"432\":4,\"458\":4,\"481\":4,\"507\":4,\"537\":4,\"567\":4,\"597\":4,\"632\":1,\"643\":4,\"649\":2,\"650\":2,\"654\":1,\"655\":4,\"656\":7,\"689\":4,\"700\":1,\"701\":2,\"702\":1,\"735\":4,\"781\":4,\"870\":1,\"884\":1,\"1052\":1,\"1203\":1,\"1375\":1,\"1389\":1,\"1552\":1,\"1566\":1,\"1729\":1,\"1743\":1,\"1906\":1,\"1920\":1,\"2083\":1,\"2097\":1,\"2181\":1,\"2273\":1,\"2287\":1,\"2492\":1,\"2506\":1,\"2711\":1,\"2725\":1}}],[\"48\",{\"1\":{\"38\":1,\"300\":1,\"303\":1}}],[\"49\",{\"1\":{\"26\":1}}],[\"41\",{\"1\":{\"26\":1}}],[\"über\",{\"1\":{\"22\":1}}],[\"x509v3\",{\"1\":{\"434\":1,\"460\":1,\"483\":1,\"509\":1,\"539\":1,\"569\":1,\"599\":1,\"645\":1,\"691\":1,\"737\":1,\"783\":1}}],[\"xor\",{\"1\":{\"367\":1}}],[\"xsd\",{\"1\":{\"158\":2,\"394\":2}}],[\"xsi\",{\"1\":{\"158\":1,\"394\":1}}],[\"xsi=\",{\"1\":{\"158\":1,\"394\":1}}],[\"xargs\",{\"1\":{\"132\":1}}],[\"xmltask\",{\"1\":{\"345\":1}}],[\"xmlschema\",{\"1\":{\"158\":1,\"394\":1}}],[\"xmlns\",{\"1\":{\"158\":1,\"394\":1}}],[\"xmlns=\",{\"1\":{\"158\":1,\"394\":1}}],[\"xml\",{\"0\":{\"142\":1},\"1\":{\"22\":1,\"90\":1,\"91\":1,\"137\":1,\"138\":1,\"141\":3,\"142\":2,\"155\":1,\"158\":1,\"159\":1,\"258\":1,\"299\":6,\"323\":6,\"342\":1,\"386\":2,\"394\":1,\"957\":1,\"1120\":1,\"1258\":1,\"1434\":1,\"1611\":1,\"1788\":1,\"1965\":1,\"2142\":1,\"2360\":1,\"2579\":1,\"2798\":1}}],[\"x\",{\"0\":{\"30\":1,\"31\":1,\"419\":1,\"442\":1,\"449\":1,\"468\":1,\"472\":1,\"491\":1,\"492\":1,\"498\":1,\"517\":1,\"524\":1,\"547\":1,\"554\":1,\"577\":1,\"584\":1,\"607\":1,\"630\":1,\"653\":1,\"676\":1,\"699\":1,\"722\":1,\"745\":1,\"768\":1,\"791\":1},\"1\":{\"20\":2,\"30\":1,\"32\":1,\"42\":4,\"43\":1,\"44\":3,\"46\":5,\"47\":1,\"48\":5,\"49\":1,\"50\":5,\"51\":1,\"52\":4,\"53\":1,\"54\":4,\"55\":1,\"56\":4,\"57\":1,\"58\":4,\"59\":1,\"60\":4,\"61\":1,\"62\":4,\"63\":1,\"106\":1,\"137\":4,\"138\":3,\"161\":1,\"327\":1,\"417\":1,\"421\":1,\"428\":1,\"430\":1,\"442\":7,\"447\":1,\"451\":1,\"456\":2,\"468\":4,\"470\":1,\"474\":1,\"479\":2,\"491\":4,\"492\":2,\"496\":1,\"500\":1,\"505\":2,\"517\":4,\"518\":2,\"522\":1,\"526\":1,\"535\":1,\"547\":7,\"548\":2,\"552\":1,\"556\":1,\"565\":1,\"577\":7,\"582\":1,\"586\":1,\"595\":1,\"607\":7,\"628\":1,\"632\":1,\"641\":1,\"653\":7,\"674\":1,\"678\":1,\"687\":1,\"699\":7,\"720\":1,\"724\":1,\"733\":1,\"745\":7,\"766\":1,\"770\":1,\"777\":1,\"779\":1,\"791\":7,\"798\":1,\"801\":1,\"806\":1,\"810\":1,\"902\":1,\"925\":1,\"928\":1,\"933\":1,\"970\":1,\"993\":1,\"1078\":1,\"1146\":1,\"1229\":1,\"1232\":1,\"1237\":1,\"1270\":1,\"1293\":1,\"1318\":1,\"1405\":1,\"1408\":1,\"1413\":1,\"1446\":1,\"1469\":1,\"1495\":1,\"1582\":1,\"1585\":1,\"1590\":1,\"1623\":1,\"1646\":1,\"1672\":1,\"1759\":1,\"1762\":1,\"1767\":1,\"1800\":1,\"1823\":1,\"1849\":1,\"1936\":1,\"1939\":1,\"1944\":1,\"1977\":1,\"2000\":1,\"2026\":1,\"2113\":1,\"2116\":1,\"2121\":1,\"2154\":1,\"2177\":1,\"2201\":1,\"2204\":1,\"2209\":1,\"2213\":1,\"2305\":1,\"2328\":1,\"2331\":1,\"2336\":1,\"2373\":1,\"2396\":1,\"2420\":1,\"2423\":1,\"2428\":1,\"2432\":1,\"2524\":1,\"2547\":1,\"2550\":1,\"2555\":1,\"2592\":1,\"2615\":1,\"2639\":1,\"2642\":1,\"2647\":1,\"2651\":1,\"2743\":1,\"2766\":1,\"2769\":1,\"2774\":1,\"2811\":1,\"2834\":1}}],[\"51\",{\"1\":{\"300\":1}}],[\"512\",{\"1\":{\"285\":3,\"296\":3,\"438\":1,\"464\":2,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1,\"798\":2,\"800\":1,\"925\":2,\"927\":1,\"959\":1,\"1229\":2,\"1231\":1,\"1260\":1,\"1405\":2,\"1407\":1,\"1436\":1,\"1582\":2,\"1584\":1,\"1613\":1,\"1759\":2,\"1761\":1,\"1790\":1,\"1936\":2,\"1938\":1,\"1967\":1,\"2113\":2,\"2115\":1,\"2144\":1,\"2201\":2,\"2203\":1,\"2328\":2,\"2330\":1,\"2362\":1,\"2420\":2,\"2422\":1,\"2547\":2,\"2549\":1,\"2581\":1,\"2639\":2,\"2641\":1,\"2766\":2,\"2768\":1,\"2800\":1}}],[\"5004\",{\"1\":{\"323\":3}}],[\"5001\",{\"1\":{\"323\":3}}],[\"5003\",{\"1\":{\"323\":3}}],[\"5005\",{\"1\":{\"323\":3}}],[\"5002\",{\"1\":{\"323\":3}}],[\"5000\",{\"1\":{\"198\":1,\"206\":1,\"231\":1,\"323\":3,\"820\":1,\"856\":1,\"863\":1,\"889\":1,\"980\":1,\"1037\":1,\"1045\":1,\"1068\":1,\"1088\":1,\"1156\":1,\"1188\":1,\"1196\":1,\"1219\":1,\"1280\":1,\"1328\":1,\"1361\":1,\"1368\":1,\"1394\":1,\"1456\":1,\"1505\":1,\"1538\":1,\"1545\":1,\"1571\":1,\"1633\":1,\"1682\":1,\"1715\":1,\"1722\":1,\"1748\":1,\"1810\":1,\"1859\":1,\"1892\":1,\"1899\":1,\"1925\":1,\"1987\":1,\"2036\":1,\"2069\":1,\"2076\":1,\"2102\":1,\"2164\":1,\"2223\":1,\"2259\":1,\"2266\":1,\"2292\":1,\"2383\":1,\"2442\":1,\"2478\":1,\"2485\":1,\"2511\":1,\"2602\":1,\"2661\":1,\"2697\":1,\"2704\":1,\"2730\":1,\"2821\":1}}],[\"509\",{\"1\":{\"32\":1,\"106\":1,\"161\":1,\"327\":1,\"798\":1,\"801\":1,\"806\":1,\"902\":1,\"925\":1,\"928\":1,\"933\":1,\"993\":1,\"1229\":1,\"1232\":1,\"1237\":1,\"1293\":1,\"1405\":1,\"1408\":1,\"1413\":1,\"1469\":1,\"1582\":1,\"1585\":1,\"1590\":1,\"1646\":1,\"1759\":1,\"1762\":1,\"1767\":1,\"1823\":1,\"1936\":1,\"1939\":1,\"1944\":1,\"2000\":1,\"2113\":1,\"2116\":1,\"2121\":1,\"2177\":1,\"2201\":1,\"2204\":1,\"2209\":1,\"2305\":1,\"2328\":1,\"2331\":1,\"2336\":1,\"2396\":1,\"2420\":1,\"2423\":1,\"2428\":1,\"2524\":1,\"2547\":1,\"2550\":1,\"2555\":1,\"2615\":1,\"2639\":1,\"2642\":1,\"2647\":1,\"2743\":1,\"2766\":1,\"2769\":1,\"2774\":1,\"2834\":1}}],[\"5s\",{\"1\":{\"166\":2,\"323\":1}}],[\"5432\",{\"1\":{\"130\":1}}],[\"5\",{\"0\":{\"42\":1,\"58\":1,\"60\":1,\"62\":1,\"321\":1,\"374\":1,\"375\":1,\"430\":1,\"443\":1,\"687\":1,\"733\":1,\"746\":1,\"779\":1,\"792\":1},\"1\":{\"20\":1,\"42\":2,\"58\":1,\"60\":2,\"62\":2,\"94\":1,\"133\":2,\"156\":2,\"323\":1,\"374\":1,\"388\":1,\"389\":1,\"421\":1,\"427\":2,\"438\":2,\"439\":2,\"443\":2,\"444\":6,\"445\":8,\"519\":1,\"520\":1,\"678\":1,\"695\":2,\"696\":2,\"700\":1,\"701\":4,\"702\":7,\"724\":1,\"741\":2,\"742\":2,\"746\":2,\"747\":6,\"748\":8,\"770\":1,\"776\":2,\"787\":2,\"788\":2,\"792\":2,\"793\":6,\"794\":8,\"905\":1,\"997\":1,\"2308\":1,\"2400\":1,\"2527\":1,\"2619\":1,\"2746\":1,\"2838\":1}}],[\"z0\",{\"1\":{\"353\":2}}],[\"za\",{\"1\":{\"353\":2}}],[\"zxvf\",{\"1\":{\"285\":2,\"286\":2,\"296\":2,\"297\":2,\"299\":4,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"zertifikatprofile\",{\"1\":{\"106\":1,\"161\":1}}],[\"zone\",{\"1\":{\"84\":1}}],[\"zip\",{\"1\":{\"300\":2,\"303\":2,\"306\":2}}],[\"zilske\",{\"1\":{\"26\":3,\"79\":1}}],[\"ziel\",{\"1\":{\"14\":1}}],[\"z\",{\"1\":{\"17\":2,\"137\":4,\"138\":3}}],[\"zulip\",{\"1\":{\"22\":1,\"69\":1,\"415\":2,\"425\":1,\"455\":1,\"478\":1,\"504\":1,\"530\":1,\"560\":1,\"590\":1,\"626\":2,\"636\":1,\"672\":2,\"682\":1,\"718\":2,\"728\":1,\"764\":2,\"774\":1}}],[\"zugriff\",{\"1\":{\"16\":1}}],[\"zum\",{\"1\":{\"16\":1,\"17\":1,\"22\":1}}],[\"zur\",{\"1\":{\"16\":1,\"17\":2}}],[\"zu\",{\"1\":{\"14\":4,\"16\":1,\"17\":1}}],[\"zusammenfassung\",{\"1\":{\"14\":1}}],[\"änderungen\",{\"1\":{\"14\":1}}],[\"37\",{\"1\":{\"440\":2,\"466\":2,\"489\":2,\"515\":2,\"545\":2,\"575\":2,\"605\":2,\"651\":2,\"697\":2,\"743\":2,\"789\":2}}],[\"37ff\",{\"1\":{\"285\":2,\"296\":2}}],[\"3drequested\",{\"1\":{\"207\":1,\"864\":1,\"1046\":1,\"1197\":1,\"1369\":1,\"1546\":1,\"1723\":1,\"1900\":1,\"2077\":1,\"2267\":1,\"2486\":1,\"2705\":1}}],[\"3dcompleted\",{\"1\":{\"202\":1,\"860\":1,\"1041\":1,\"1192\":1,\"1365\":1,\"1542\":1,\"1719\":1,\"1896\":1,\"2073\":1,\"2263\":1,\"2482\":1,\"2701\":1}}],[\"3fstatus\",{\"1\":{\"202\":1,\"207\":1,\"860\":1,\"864\":1,\"1041\":1,\"1046\":1,\"1192\":1,\"1197\":1,\"1365\":1,\"1369\":1,\"1542\":1,\"1546\":1,\"1719\":1,\"1723\":1,\"1896\":1,\"1900\":1,\"2073\":1,\"2077\":1,\"2263\":1,\"2267\":1,\"2482\":1,\"2486\":1,\"2701\":1,\"2705\":1}}],[\"3medic\",{\"1\":{\"137\":1,\"138\":1}}],[\"36\",{\"1\":{\"125\":2}}],[\"3\",{\"0\":{\"50\":1,\"52\":1,\"54\":1,\"133\":1,\"169\":1,\"236\":1,\"264\":1,\"319\":1,\"349\":1,\"350\":1,\"393\":1,\"535\":1,\"565\":1,\"578\":1,\"595\":1,\"608\":1,\"654\":1},\"1\":{\"50\":1,\"52\":2,\"54\":2,\"56\":1,\"77\":1,\"94\":1,\"95\":1,\"100\":1,\"129\":1,\"130\":1,\"131\":1,\"165\":1,\"265\":1,\"276\":1,\"279\":2,\"285\":8,\"286\":7,\"287\":1,\"290\":2,\"296\":8,\"297\":7,\"299\":1,\"300\":4,\"302\":1,\"303\":4,\"305\":1,\"306\":4,\"308\":1,\"309\":1,\"310\":1,\"311\":5,\"312\":8,\"315\":1,\"323\":1,\"327\":1,\"349\":1,\"362\":1,\"363\":1,\"390\":1,\"393\":2,\"428\":1,\"444\":1,\"445\":1,\"493\":1,\"494\":1,\"519\":1,\"520\":1,\"526\":1,\"543\":2,\"544\":2,\"548\":1,\"549\":5,\"550\":8,\"556\":1,\"573\":2,\"574\":2,\"578\":2,\"579\":7,\"580\":9,\"586\":1,\"603\":2,\"604\":2,\"608\":2,\"609\":7,\"610\":9,\"654\":1,\"655\":3,\"656\":2,\"701\":1,\"702\":1,\"747\":1,\"748\":1,\"777\":1,\"793\":1,\"794\":1,\"909\":1,\"1001\":1,\"1130\":1,\"1301\":1,\"1477\":1,\"1650\":1,\"1654\":1,\"1827\":1,\"1831\":1,\"2004\":1,\"2008\":1,\"2185\":1,\"2312\":1,\"2404\":1,\"2531\":1,\"2623\":1,\"2750\":1,\"2842\":1}}],[\"32\",{\"1\":{\"26\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"3233\",{\"1\":{\"1\":1,\"26\":9}}],[\"310\",{\"1\":{\"26\":1}}],[\"30000\",{\"1\":{\"821\":1,\"981\":1,\"1089\":1,\"1157\":1,\"1281\":1,\"1329\":1,\"1457\":1,\"1506\":1,\"1634\":1,\"1683\":1,\"1811\":1,\"1860\":1,\"1988\":1,\"2037\":1,\"2165\":1,\"2224\":1,\"2384\":1,\"2443\":1,\"2603\":1,\"2662\":1,\"2822\":1}}],[\"30s\",{\"1\":{\"166\":2}}],[\"302\",{\"1\":{\"26\":2}}],[\"30\",{\"1\":{\"14\":1,\"267\":1,\"268\":1,\"911\":1,\"912\":1,\"1003\":1,\"1004\":1,\"1132\":1,\"1133\":1,\"1303\":1,\"1304\":1,\"1479\":1,\"1480\":1,\"1656\":1,\"1657\":1,\"1833\":1,\"1834\":1,\"2010\":1,\"2011\":1,\"2187\":1,\"2188\":1,\"2314\":1,\"2315\":1,\"2406\":1,\"2407\":1,\"2533\":1,\"2534\":1,\"2625\":1,\"2626\":1,\"2752\":1,\"2753\":1,\"2844\":1,\"2845\":1}}],[\"just\",{\"1\":{\"414\":1,\"442\":1,\"547\":1,\"577\":1,\"607\":1,\"625\":1,\"653\":1,\"671\":1,\"699\":1,\"717\":1,\"745\":1,\"763\":1,\"791\":1}}],[\"junit\",{\"1\":{\"327\":1}}],[\"jre\",{\"1\":{\"337\":1}}],[\"jvm\",{\"1\":{\"323\":6,\"337\":4,\"904\":1,\"996\":1,\"1296\":1,\"1472\":1,\"1649\":1,\"1826\":1,\"2003\":1,\"2180\":1,\"2307\":1,\"2399\":1,\"2526\":1,\"2618\":1,\"2745\":1,\"2837\":1}}],[\"jdk\",{\"1\":{\"392\":1,\"407\":1,\"618\":1,\"664\":1,\"710\":1,\"756\":1}}],[\"jdwp=transport=dt\",{\"1\":{\"323\":6}}],[\"jdt\",{\"1\":{\"155\":317}}],[\"jdbc\",{\"1\":{\"95\":1,\"143\":2,\"165\":1,\"173\":1,\"249\":1,\"323\":6,\"836\":1,\"946\":1,\"1021\":1,\"1112\":1,\"1172\":1,\"1250\":1,\"1344\":1,\"1426\":1,\"1521\":1,\"1603\":1,\"1698\":1,\"1780\":1,\"1875\":1,\"1957\":1,\"2052\":1,\"2134\":1,\"2239\":1,\"2349\":1,\"2458\":1,\"2568\":1,\"2677\":1,\"2787\":1}}],[\"jersey\",{\"1\":{\"149\":1}}],[\"jetty\",{\"1\":{\"130\":2,\"300\":2,\"303\":2,\"306\":2,\"309\":2,\"312\":2,\"445\":2,\"494\":2,\"520\":2,\"550\":2,\"580\":2,\"610\":2,\"656\":2,\"702\":2,\"748\":2,\"794\":2,\"825\":1,\"826\":1,\"827\":1,\"828\":1,\"985\":1,\"986\":1,\"987\":1,\"988\":1,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":1,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":1,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":1,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":1,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":1,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":1,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":1,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":1,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":1,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":1,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":1,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":1,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":1,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":1,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":1,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":1,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":1,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":1,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":1}}],[\"jedoch\",{\"1\":{\"15\":1}}],[\"jaxrs\",{\"1\":{\"146\":1}}],[\"jar\",{\"1\":{\"98\":1,\"135\":1,\"148\":1,\"149\":1,\"286\":1,\"297\":1,\"299\":1,\"300\":24,\"302\":1,\"303\":24,\"305\":1,\"306\":6,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"334\":2,\"348\":2,\"363\":2,\"373\":2,\"389\":2,\"427\":1,\"429\":9,\"519\":1,\"520\":3,\"776\":1,\"778\":9}}],[\"javacodestylesettings>\",{\"1\":{\"156\":1}}],[\"javax\",{\"1\":{\"156\":1}}],[\"javadoc\",{\"1\":{\"155\":3}}],[\"javaregister\",{\"1\":{\"142\":1}}],[\"java\",{\"0\":{\"392\":1,\"397\":1,\"407\":1,\"618\":1,\"664\":1,\"710\":1,\"756\":1},\"1\":{\"86\":1,\"98\":1,\"129\":1,\"130\":1,\"131\":1,\"142\":2,\"143\":13,\"144\":4,\"145\":3,\"146\":7,\"147\":2,\"156\":2,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"299\":1,\"300\":2,\"302\":1,\"303\":2,\"305\":1,\"306\":2,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"315\":2,\"317\":1,\"327\":4,\"328\":5,\"329\":1,\"336\":1,\"337\":1,\"338\":2,\"368\":1,\"390\":2,\"392\":2,\"403\":2,\"407\":1,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"519\":1,\"520\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"614\":2,\"618\":1,\"649\":1,\"650\":1,\"660\":2,\"664\":1,\"695\":1,\"696\":1,\"706\":2,\"710\":1,\"741\":1,\"742\":1,\"752\":2,\"756\":1,\"787\":1,\"788\":1}}],[\"json\",{\"0\":{\"142\":1},\"1\":{\"90\":1,\"91\":1,\"142\":2}}],[\"jobs\",{\"1\":{\"886\":1,\"1391\":1,\"1568\":1,\"1745\":1,\"1922\":1,\"2099\":1,\"2289\":1,\"2508\":1,\"2727\":1}}],[\"job\",{\"1\":{\"884\":1,\"885\":1,\"886\":1,\"1389\":1,\"1390\":1,\"1391\":1,\"1566\":1,\"1567\":1,\"1568\":1,\"1743\":1,\"1744\":1,\"1745\":1,\"1920\":1,\"1921\":1,\"1922\":1,\"2097\":1,\"2098\":1,\"2099\":1,\"2287\":1,\"2288\":1,\"2289\":1,\"2506\":1,\"2507\":1,\"2508\":1,\"2725\":1,\"2726\":1,\"2727\":1}}],[\"join\",{\"1\":{\"68\":1,\"155\":2,\"413\":1,\"415\":1,\"624\":1,\"626\":1,\"670\":1,\"672\":1,\"716\":1,\"718\":1,\"762\":1,\"764\":1}}],[\"journey\",{\"1\":{\"12\":2}}],[\"j\",{\"1\":{\"26\":2}}],[\"jxx2\",{\"1\":{\"14\":1}}],[\"jxh4\",{\"1\":{\"14\":1}}],[\"klinikum\",{\"1\":{\"135\":1}}],[\"klicken\",{\"1\":{\"41\":1}}],[\"knowledge\",{\"1\":{\"89\":1,\"116\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"known\",{\"1\":{\"1\":1}}],[\"kit\",{\"1\":{\"392\":1}}],[\"kind\",{\"1\":{\"330\":2,\"353\":2}}],[\"kind=\",{\"1\":{\"155\":1}}],[\"kindly\",{\"1\":{\"36\":1,\"37\":1}}],[\"kiel\",{\"1\":{\"79\":1}}],[\"kurscheidt\",{\"1\":{\"26\":3,\"79\":1}}],[\"kussel\",{\"1\":{\"26\":1}}],[\"k\",{\"1\":{\"26\":1}}],[\"kann\",{\"1\":{\"17\":3}}],[\"keep\",{\"1\":{\"33\":1,\"38\":1,\"155\":18,\"156\":6}}],[\"keiner\",{\"1\":{\"15\":1}}],[\"keycloak\",{\"1\":{\"823\":1,\"905\":5,\"983\":1,\"997\":5,\"1091\":1,\"1159\":1,\"1283\":1,\"1297\":5,\"1331\":1,\"1459\":1,\"1473\":5,\"1508\":1,\"1636\":1,\"1650\":5,\"1685\":1,\"1813\":1,\"1827\":5,\"1862\":1,\"1990\":1,\"2004\":5,\"2039\":1,\"2167\":1,\"2181\":5,\"2226\":1,\"2308\":5,\"2386\":1,\"2400\":5,\"2445\":1,\"2527\":5,\"2605\":1,\"2619\":5,\"2664\":1,\"2746\":5,\"2824\":1,\"2838\":5}}],[\"keyring\",{\"1\":{\"279\":2,\"290\":2,\"433\":2,\"459\":2,\"482\":2,\"508\":2,\"538\":2,\"568\":2,\"598\":2,\"644\":2,\"690\":2,\"736\":2,\"782\":2}}],[\"keyrings\",{\"1\":{\"279\":2,\"290\":2,\"433\":2,\"459\":2,\"482\":2,\"508\":2,\"538\":2,\"568\":2,\"598\":2,\"644\":2,\"690\":2,\"736\":2,\"782\":2}}],[\"keyword\",{\"1\":{\"156\":2}}],[\"keys\",{\"0\":{\"379\":1},\"1\":{\"130\":1,\"131\":1,\"285\":1,\"286\":3,\"296\":1,\"297\":3,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"key\",{\"0\":{\"7\":1,\"184\":1,\"185\":2,\"209\":1,\"210\":2,\"238\":1,\"239\":2,\"275\":1,\"353\":1,\"818\":1,\"819\":2,\"827\":1,\"828\":2,\"851\":1,\"852\":2,\"866\":1,\"867\":2,\"920\":1,\"936\":1,\"937\":2,\"978\":1,\"979\":2,\"987\":1,\"988\":2,\"1012\":1,\"1032\":1,\"1033\":2,\"1048\":1,\"1049\":2,\"1086\":1,\"1087\":2,\"1095\":1,\"1096\":2,\"1102\":1,\"1103\":2,\"1140\":1,\"1154\":1,\"1155\":2,\"1163\":1,\"1164\":2,\"1183\":1,\"1184\":2,\"1199\":1,\"1200\":2,\"1240\":1,\"1241\":2,\"1278\":1,\"1279\":2,\"1287\":1,\"1288\":2,\"1311\":1,\"1326\":1,\"1327\":2,\"1335\":1,\"1336\":2,\"1356\":1,\"1357\":2,\"1371\":1,\"1372\":2,\"1416\":1,\"1417\":2,\"1454\":1,\"1455\":2,\"1463\":1,\"1464\":2,\"1488\":1,\"1503\":1,\"1504\":2,\"1512\":1,\"1513\":2,\"1533\":1,\"1534\":2,\"1548\":1,\"1549\":2,\"1593\":1,\"1594\":2,\"1631\":1,\"1632\":2,\"1640\":1,\"1641\":2,\"1665\":1,\"1680\":1,\"1681\":2,\"1689\":1,\"1690\":2,\"1710\":1,\"1711\":2,\"1725\":1,\"1726\":2,\"1770\":1,\"1771\":2,\"1808\":1,\"1809\":2,\"1817\":1,\"1818\":2,\"1842\":1,\"1857\":1,\"1858\":2,\"1866\":1,\"1867\":2,\"1887\":1,\"1888\":2,\"1902\":1,\"1903\":2,\"1947\":1,\"1948\":2,\"1985\":1,\"1986\":2,\"1994\":1,\"1995\":2,\"2019\":1,\"2034\":1,\"2035\":2,\"2043\":1,\"2044\":2,\"2064\":1,\"2065\":2,\"2079\":1,\"2080\":2,\"2124\":1,\"2125\":2,\"2162\":1,\"2163\":2,\"2171\":1,\"2172\":2,\"2196\":1,\"2221\":1,\"2222\":2,\"2230\":1,\"2231\":2,\"2254\":1,\"2255\":2,\"2269\":1,\"2270\":2,\"2323\":1,\"2339\":1,\"2340\":2,\"2381\":1,\"2382\":2,\"2390\":1,\"2391\":2,\"2415\":1,\"2440\":1,\"2441\":2,\"2449\":1,\"2450\":2,\"2473\":1,\"2474\":2,\"2488\":1,\"2489\":2,\"2542\":1,\"2558\":1,\"2559\":2,\"2600\":1,\"2601\":2,\"2609\":1,\"2610\":2,\"2634\":1,\"2659\":1,\"2660\":2,\"2668\":1,\"2669\":2,\"2692\":1,\"2693\":2,\"2707\":1,\"2708\":2,\"2761\":1,\"2777\":1,\"2778\":2,\"2819\":1,\"2820\":2,\"2828\":1,\"2829\":2,\"2853\":1},\"1\":{\"112\":1,\"113\":1,\"116\":1,\"130\":2,\"131\":2,\"184\":6,\"185\":4,\"209\":6,\"210\":4,\"220\":1,\"238\":6,\"239\":4,\"275\":2,\"284\":7,\"285\":12,\"286\":15,\"295\":7,\"296\":12,\"297\":15,\"323\":47,\"334\":2,\"343\":2,\"352\":2,\"353\":1,\"360\":1,\"379\":3,\"386\":1,\"434\":1,\"437\":7,\"438\":12,\"439\":10,\"460\":1,\"463\":7,\"464\":12,\"465\":10,\"483\":1,\"486\":7,\"487\":12,\"488\":10,\"509\":1,\"512\":7,\"513\":12,\"514\":10,\"539\":1,\"542\":7,\"543\":12,\"544\":10,\"569\":1,\"572\":7,\"573\":12,\"574\":10,\"599\":1,\"602\":7,\"603\":12,\"604\":10,\"645\":1,\"648\":7,\"649\":12,\"650\":10,\"691\":1,\"694\":7,\"695\":12,\"696\":10,\"737\":1,\"740\":7,\"741\":12,\"742\":10,\"783\":1,\"786\":7,\"787\":12,\"788\":10,\"818\":6,\"819\":4,\"827\":2,\"828\":2,\"851\":6,\"852\":4,\"866\":6,\"867\":4,\"877\":1,\"920\":2,\"936\":6,\"937\":4,\"978\":6,\"979\":4,\"987\":2,\"988\":2,\"1012\":2,\"1032\":6,\"1033\":4,\"1048\":6,\"1049\":4,\"1059\":1,\"1086\":6,\"1087\":4,\"1095\":2,\"1096\":2,\"1102\":6,\"1103\":4,\"1140\":2,\"1154\":6,\"1155\":4,\"1163\":2,\"1164\":2,\"1183\":6,\"1184\":4,\"1199\":6,\"1200\":4,\"1210\":1,\"1240\":6,\"1241\":4,\"1278\":6,\"1279\":4,\"1287\":2,\"1288\":2,\"1311\":2,\"1326\":6,\"1327\":4,\"1335\":2,\"1336\":2,\"1356\":6,\"1357\":4,\"1371\":6,\"1372\":4,\"1382\":1,\"1416\":6,\"1417\":4,\"1454\":6,\"1455\":4,\"1463\":2,\"1464\":2,\"1488\":2,\"1503\":6,\"1504\":4,\"1512\":2,\"1513\":2,\"1533\":6,\"1534\":4,\"1548\":6,\"1549\":4,\"1559\":1,\"1593\":6,\"1594\":4,\"1631\":6,\"1632\":4,\"1640\":2,\"1641\":2,\"1665\":2,\"1680\":6,\"1681\":4,\"1689\":2,\"1690\":2,\"1710\":6,\"1711\":4,\"1725\":6,\"1726\":4,\"1736\":1,\"1770\":6,\"1771\":4,\"1808\":6,\"1809\":4,\"1817\":2,\"1818\":2,\"1842\":2,\"1857\":6,\"1858\":4,\"1866\":2,\"1867\":2,\"1887\":6,\"1888\":4,\"1902\":6,\"1903\":4,\"1913\":1,\"1947\":6,\"1948\":4,\"1985\":6,\"1986\":4,\"1994\":2,\"1995\":2,\"2019\":2,\"2034\":6,\"2035\":4,\"2043\":2,\"2044\":2,\"2064\":6,\"2065\":4,\"2079\":6,\"2080\":4,\"2090\":1,\"2124\":6,\"2125\":4,\"2162\":6,\"2163\":4,\"2171\":2,\"2172\":2,\"2196\":2,\"2221\":6,\"2222\":4,\"2230\":2,\"2231\":2,\"2254\":6,\"2255\":4,\"2269\":6,\"2270\":4,\"2280\":1,\"2323\":2,\"2339\":6,\"2340\":4,\"2381\":6,\"2382\":4,\"2390\":2,\"2391\":2,\"2415\":2,\"2440\":6,\"2441\":4,\"2449\":2,\"2450\":2,\"2473\":6,\"2474\":4,\"2488\":6,\"2489\":4,\"2499\":1,\"2542\":2,\"2558\":6,\"2559\":4,\"2600\":6,\"2601\":4,\"2609\":2,\"2610\":2,\"2634\":2,\"2659\":6,\"2660\":4,\"2668\":2,\"2669\":2,\"2692\":6,\"2693\":4,\"2707\":6,\"2708\":4,\"2718\":1,\"2761\":2,\"2777\":6,\"2778\":4,\"2819\":6,\"2820\":4,\"2828\":2,\"2829\":2,\"2853\":2}}],[\"kds\",{\"1\":{\"14\":2,\"533\":1,\"563\":1,\"593\":1,\"639\":1,\"685\":1,\"731\":1}}],[\"können\",{\"1\":{\"14\":1}}],[\"kobylinski\",{\"1\":{\"26\":1}}],[\"kontext\",{\"1\":{\"16\":1,\"17\":1}}],[\"konferenz\",{\"1\":{\"14\":1}}],[\"komponenten\",{\"1\":{\"14\":2}}],[\"kommenden\",{\"1\":{\"14\":1}}],[\"uac\",{\"1\":{\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"uri\",{\"1\":{\"466\":2,\"489\":2,\"515\":2,\"545\":2,\"575\":2,\"605\":2,\"651\":2,\"697\":2}}],[\"url|code\",{\"1\":{\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"url=\",{\"1\":{\"359\":7,\"385\":11}}],[\"url=http\",{\"1\":{\"334\":1,\"363\":1,\"389\":1}}],[\"url>\",{\"1\":{\"158\":1}}],[\"url\",{\"0\":{\"173\":1,\"187\":1,\"193\":1,\"196\":1,\"203\":1,\"241\":1,\"249\":1,\"256\":1,\"353\":1,\"823\":1,\"836\":1,\"861\":1,\"893\":1,\"899\":1,\"946\":1,\"956\":1,\"966\":1,\"983\":1,\"1021\":1,\"1042\":1,\"1073\":1,\"1091\":1,\"1112\":1,\"1119\":1,\"1127\":1,\"1159\":1,\"1172\":1,\"1193\":1,\"1224\":1,\"1250\":1,\"1257\":1,\"1266\":1,\"1283\":1,\"1331\":1,\"1344\":1,\"1366\":1,\"1400\":1,\"1426\":1,\"1433\":1,\"1442\":1,\"1459\":1,\"1508\":1,\"1521\":1,\"1543\":1,\"1577\":1,\"1603\":1,\"1610\":1,\"1619\":1,\"1636\":1,\"1685\":1,\"1698\":1,\"1720\":1,\"1754\":1,\"1780\":1,\"1787\":1,\"1796\":1,\"1813\":1,\"1862\":1,\"1875\":1,\"1897\":1,\"1931\":1,\"1957\":1,\"1964\":1,\"1973\":1,\"1990\":1,\"2039\":1,\"2052\":1,\"2074\":1,\"2108\":1,\"2134\":1,\"2141\":1,\"2150\":1,\"2167\":1,\"2226\":1,\"2239\":1,\"2264\":1,\"2296\":1,\"2302\":1,\"2349\":1,\"2359\":1,\"2369\":1,\"2386\":1,\"2445\":1,\"2458\":1,\"2483\":1,\"2515\":1,\"2521\":1,\"2568\":1,\"2578\":1,\"2588\":1,\"2605\":1,\"2664\":1,\"2677\":1,\"2702\":1,\"2734\":1,\"2740\":1,\"2787\":1,\"2797\":1,\"2807\":1,\"2824\":1},\"1\":{\"135\":2,\"173\":1,\"187\":1,\"193\":1,\"196\":1,\"203\":1,\"241\":1,\"249\":1,\"256\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"300\":2,\"303\":1,\"323\":12,\"345\":2,\"353\":3,\"356\":1,\"382\":1,\"424\":1,\"438\":1,\"439\":1,\"454\":1,\"464\":1,\"465\":1,\"477\":1,\"487\":1,\"488\":1,\"503\":1,\"513\":1,\"514\":1,\"529\":1,\"543\":1,\"544\":1,\"559\":1,\"573\":1,\"574\":1,\"589\":1,\"603\":1,\"604\":1,\"635\":1,\"649\":1,\"650\":1,\"681\":1,\"695\":1,\"696\":1,\"727\":1,\"741\":1,\"742\":1,\"773\":1,\"787\":1,\"788\":1,\"811\":1,\"814\":1,\"823\":2,\"836\":1,\"861\":1,\"893\":1,\"899\":2,\"903\":2,\"905\":1,\"946\":1,\"956\":1,\"966\":2,\"971\":1,\"974\":1,\"983\":2,\"994\":2,\"995\":1,\"997\":1,\"1021\":1,\"1042\":1,\"1073\":2,\"1079\":1,\"1082\":1,\"1091\":2,\"1112\":1,\"1119\":1,\"1127\":2,\"1147\":1,\"1150\":1,\"1159\":2,\"1172\":1,\"1193\":1,\"1224\":2,\"1250\":1,\"1257\":1,\"1266\":2,\"1271\":1,\"1274\":1,\"1283\":2,\"1294\":2,\"1295\":1,\"1297\":1,\"1319\":1,\"1322\":1,\"1331\":2,\"1344\":1,\"1366\":1,\"1400\":2,\"1426\":1,\"1433\":1,\"1442\":2,\"1447\":1,\"1450\":1,\"1459\":2,\"1470\":2,\"1471\":1,\"1473\":1,\"1496\":1,\"1499\":1,\"1508\":2,\"1521\":1,\"1543\":1,\"1577\":2,\"1603\":1,\"1610\":1,\"1619\":2,\"1624\":1,\"1627\":1,\"1636\":2,\"1647\":2,\"1648\":1,\"1650\":1,\"1673\":1,\"1676\":1,\"1685\":2,\"1698\":1,\"1720\":1,\"1754\":2,\"1780\":1,\"1787\":1,\"1796\":2,\"1801\":1,\"1804\":1,\"1813\":2,\"1824\":2,\"1825\":1,\"1827\":1,\"1850\":1,\"1853\":1,\"1862\":2,\"1875\":1,\"1897\":1,\"1931\":2,\"1957\":1,\"1964\":1,\"1973\":2,\"1978\":1,\"1981\":1,\"1990\":2,\"2001\":2,\"2002\":1,\"2004\":1,\"2027\":1,\"2030\":1,\"2039\":2,\"2052\":1,\"2074\":1,\"2108\":2,\"2134\":1,\"2141\":1,\"2150\":2,\"2155\":1,\"2158\":1,\"2167\":2,\"2178\":2,\"2179\":1,\"2181\":1,\"2214\":1,\"2217\":1,\"2226\":2,\"2239\":1,\"2264\":1,\"2296\":1,\"2302\":2,\"2306\":2,\"2308\":1,\"2349\":1,\"2359\":1,\"2369\":2,\"2374\":1,\"2377\":1,\"2386\":2,\"2397\":2,\"2398\":1,\"2400\":1,\"2433\":1,\"2436\":1,\"2445\":2,\"2458\":1,\"2483\":1,\"2515\":1,\"2521\":2,\"2525\":2,\"2527\":1,\"2568\":1,\"2578\":1,\"2588\":2,\"2593\":1,\"2596\":1,\"2605\":2,\"2616\":2,\"2617\":1,\"2619\":1,\"2652\":1,\"2655\":1,\"2664\":2,\"2677\":1,\"2702\":1,\"2734\":1,\"2740\":2,\"2744\":2,\"2746\":1,\"2787\":1,\"2797\":1,\"2807\":2,\"2812\":1,\"2815\":1,\"2824\":2,\"2835\":2,\"2836\":1,\"2838\":1}}],[\"uuid2\",{\"1\":{\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"651\":1,\"697\":1,\"743\":1,\"789\":1}}],[\"uuid1\",{\"1\":{\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"651\":1,\"697\":1,\"743\":1,\"789\":1}}],[\"utf\",{\"1\":{\"155\":1}}],[\"utilizes\",{\"1\":{\"6\":1}}],[\"ubuntu\",{\"1\":{\"133\":2,\"279\":2,\"285\":1,\"286\":1,\"290\":2,\"296\":1,\"297\":1,\"433\":2,\"438\":1,\"439\":1,\"459\":2,\"464\":1,\"465\":1,\"482\":2,\"487\":1,\"488\":1,\"508\":2,\"513\":1,\"514\":1,\"538\":2,\"543\":1,\"544\":1,\"568\":2,\"573\":1,\"574\":1,\"598\":2,\"603\":1,\"604\":1,\"644\":2,\"649\":1,\"650\":1,\"690\":2,\"695\":1,\"696\":1,\"736\":2,\"741\":1,\"742\":1,\"782\":2,\"787\":1,\"788\":1}}],[\"uid\",{\"1\":{\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"ui\",{\"0\":{\"896\":1,\"963\":1,\"2299\":1,\"2366\":1,\"2518\":1,\"2585\":1,\"2737\":1,\"2804\":1},\"1\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"519\":1,\"893\":1,\"896\":3,\"963\":3,\"2296\":1,\"2299\":3,\"2366\":3,\"2515\":1,\"2518\":3,\"2585\":3,\"2734\":1,\"2737\":3,\"2804\":3}}],[\"upper\",{\"1\":{\"342\":1}}],[\"upgrading\",{\"0\":{\"298\":1,\"301\":1,\"304\":1,\"307\":1,\"310\":1},\"1\":{\"298\":2,\"301\":3,\"304\":2,\"307\":1,\"310\":1,\"443\":2,\"492\":1,\"518\":1,\"548\":2,\"578\":2,\"608\":2,\"654\":2,\"700\":2,\"746\":2,\"792\":2}}],[\"upgraded\",{\"1\":{\"418\":1,\"419\":1,\"448\":1,\"449\":1,\"471\":1,\"472\":1,\"497\":1,\"498\":1,\"523\":1,\"524\":1,\"553\":1,\"554\":1,\"583\":1,\"584\":1,\"629\":1,\"630\":1,\"675\":1,\"676\":1,\"721\":1,\"722\":1,\"767\":1,\"768\":1}}],[\"upgrade\",{\"0\":{\"419\":1,\"442\":1,\"443\":1,\"449\":1,\"468\":1,\"472\":1,\"491\":1,\"492\":1,\"498\":1,\"517\":1,\"518\":1,\"524\":1,\"547\":1,\"548\":1,\"554\":1,\"577\":1,\"578\":1,\"584\":1,\"607\":1,\"608\":1,\"630\":1,\"653\":1,\"654\":1,\"676\":1,\"699\":1,\"700\":1,\"722\":1,\"745\":1,\"746\":1,\"768\":1,\"791\":1,\"792\":1},\"1\":{\"33\":1,\"42\":3,\"44\":2,\"46\":3,\"48\":3,\"50\":3,\"52\":3,\"54\":3,\"56\":3,\"58\":3,\"60\":3,\"62\":3,\"298\":1,\"299\":3,\"300\":5,\"301\":2,\"302\":3,\"303\":5,\"305\":3,\"306\":5,\"307\":1,\"308\":3,\"309\":4,\"310\":1,\"311\":3,\"312\":4,\"417\":1,\"419\":1,\"421\":1,\"442\":1,\"444\":3,\"445\":4,\"447\":1,\"449\":1,\"451\":1,\"468\":3,\"470\":1,\"472\":1,\"474\":1,\"491\":3,\"492\":1,\"493\":3,\"494\":4,\"496\":1,\"498\":1,\"500\":1,\"517\":3,\"518\":1,\"519\":3,\"520\":6,\"522\":1,\"524\":1,\"526\":1,\"547\":1,\"548\":1,\"549\":3,\"550\":4,\"552\":1,\"554\":1,\"556\":1,\"577\":1,\"579\":3,\"580\":4,\"582\":1,\"584\":1,\"586\":1,\"607\":1,\"609\":3,\"610\":4,\"628\":1,\"630\":1,\"632\":1,\"653\":1,\"655\":3,\"656\":4,\"674\":1,\"676\":1,\"678\":1,\"699\":1,\"701\":3,\"702\":4,\"720\":1,\"722\":1,\"724\":1,\"745\":1,\"747\":3,\"748\":4,\"766\":1,\"768\":1,\"770\":1,\"791\":1,\"793\":3,\"794\":4}}],[\"upload\",{\"1\":{\"286\":2}}],[\"updating\",{\"1\":{\"95\":1,\"165\":1,\"415\":1,\"418\":1,\"419\":1,\"448\":1,\"449\":1,\"471\":1,\"472\":1,\"497\":1,\"498\":1,\"523\":1,\"524\":1,\"553\":1,\"554\":1,\"583\":1,\"584\":1,\"626\":1,\"629\":1,\"630\":1,\"672\":1,\"675\":1,\"676\":1,\"718\":1,\"721\":1,\"722\":1,\"764\":1,\"767\":1,\"768\":1}}],[\"updateallowlist|1\",{\"1\":{\"887\":1,\"1392\":1,\"1569\":1,\"1746\":1,\"1923\":1,\"2100\":1,\"2290\":1,\"2509\":1,\"2728\":1}}],[\"updateallowlist\",{\"1\":{\"300\":2,\"303\":2}}],[\"updated\",{\"1\":{\"86\":1,\"427\":1,\"776\":1}}],[\"update\",{\"1\":{\"19\":1,\"82\":1,\"137\":3,\"138\":3,\"141\":2,\"279\":2,\"286\":1,\"290\":2,\"299\":1,\"300\":4,\"303\":4,\"418\":1,\"419\":1,\"423\":1,\"429\":1,\"433\":2,\"442\":1,\"443\":1,\"448\":1,\"449\":1,\"453\":1,\"459\":2,\"468\":1,\"471\":1,\"472\":1,\"476\":1,\"482\":2,\"491\":1,\"497\":1,\"498\":1,\"502\":1,\"508\":2,\"517\":1,\"523\":1,\"524\":1,\"528\":1,\"538\":2,\"547\":1,\"548\":1,\"553\":1,\"554\":1,\"558\":1,\"568\":2,\"577\":1,\"578\":1,\"583\":1,\"584\":1,\"588\":1,\"598\":2,\"607\":1,\"608\":1,\"629\":1,\"630\":1,\"634\":1,\"644\":2,\"653\":1,\"654\":1,\"675\":1,\"676\":1,\"680\":1,\"690\":2,\"699\":1,\"700\":1,\"721\":1,\"722\":1,\"726\":1,\"736\":2,\"745\":1,\"746\":1,\"767\":1,\"768\":1,\"772\":1,\"778\":1,\"782\":2,\"791\":1,\"792\":1,\"931\":1,\"933\":2,\"1235\":1,\"1237\":2,\"1411\":1,\"1413\":2,\"1588\":1,\"1590\":2,\"1765\":1,\"1767\":2,\"1942\":1,\"1944\":2,\"2119\":1,\"2121\":2,\"2334\":1,\"2336\":2,\"2553\":1,\"2555\":2,\"2772\":1,\"2774\":2}}],[\"updates\",{\"1\":{\"14\":2,\"38\":1}}],[\"upstream\",{\"1\":{\"87\":1,\"166\":1}}],[\"up\",{\"0\":{\"69\":1,\"406\":1,\"617\":1,\"663\":1,\"709\":1,\"755\":1},\"1\":{\"33\":1,\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"124\":1,\"131\":4,\"132\":1,\"133\":2,\"285\":1,\"286\":2,\"296\":1,\"297\":2,\"299\":1,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"316\":1,\"325\":1,\"334\":2,\"338\":2,\"348\":2,\"363\":4,\"373\":3,\"389\":6,\"438\":1,\"439\":1,\"444\":1,\"445\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"493\":1,\"494\":1,\"513\":1,\"514\":1,\"519\":1,\"520\":1,\"543\":1,\"544\":1,\"549\":1,\"550\":1,\"573\":1,\"574\":1,\"579\":1,\"580\":1,\"603\":1,\"604\":1,\"609\":1,\"610\":1,\"649\":1,\"650\":1,\"655\":1,\"656\":1,\"695\":1,\"696\":1,\"701\":1,\"702\":1,\"741\":1,\"742\":1,\"747\":1,\"748\":1,\"787\":1,\"788\":1,\"793\":1,\"794\":1}}],[\"usr\",{\"1\":{\"279\":4,\"290\":4,\"433\":2,\"459\":2,\"482\":2,\"508\":2,\"538\":2,\"568\":2,\"598\":2,\"644\":2,\"690\":2,\"736\":2,\"782\":2}}],[\"usages\",{\"1\":{\"434\":1,\"460\":1,\"483\":1,\"509\":1,\"539\":1,\"569\":1,\"599\":1,\"645\":1,\"691\":1,\"737\":1,\"783\":1}}],[\"usage\",{\"1\":{\"113\":1,\"442\":1,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"791\":1}}],[\"usually\",{\"1\":{\"38\":1,\"285\":1,\"296\":1}}],[\"us\",{\"1\":{\"33\":1,\"36\":2,\"37\":2,\"40\":2,\"67\":1,\"69\":1,\"395\":1,\"401\":1,\"411\":1,\"413\":5,\"415\":3,\"423\":1,\"425\":2,\"441\":1,\"453\":2,\"455\":2,\"467\":1,\"476\":2,\"478\":2,\"490\":1,\"502\":2,\"504\":2,\"516\":1,\"528\":1,\"530\":2,\"546\":1,\"558\":1,\"560\":2,\"576\":1,\"588\":1,\"590\":2,\"606\":1,\"612\":1,\"622\":1,\"624\":5,\"626\":3,\"634\":1,\"636\":2,\"652\":1,\"658\":1,\"668\":1,\"670\":5,\"672\":3,\"680\":1,\"682\":2,\"698\":1,\"704\":1,\"714\":1,\"716\":5,\"718\":3,\"726\":1,\"728\":2,\"744\":1,\"750\":1,\"760\":1,\"762\":5,\"764\":3,\"772\":1,\"774\":2,\"790\":1}}],[\"using\",{\"0\":{\"93\":1,\"157\":1},\"1\":{\"32\":1,\"37\":1,\"40\":1,\"89\":1,\"94\":1,\"95\":1,\"96\":2,\"112\":1,\"113\":3,\"132\":2,\"135\":1,\"148\":2,\"149\":2,\"150\":1,\"158\":1,\"165\":1,\"166\":2,\"171\":1,\"175\":1,\"178\":1,\"185\":1,\"186\":1,\"192\":1,\"195\":1,\"210\":1,\"215\":1,\"221\":1,\"239\":1,\"240\":1,\"247\":1,\"251\":1,\"253\":1,\"285\":1,\"286\":3,\"296\":1,\"297\":3,\"299\":1,\"300\":3,\"302\":1,\"303\":3,\"305\":1,\"306\":3,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"319\":1,\"320\":1,\"327\":1,\"328\":1,\"341\":2,\"345\":2,\"350\":1,\"354\":1,\"357\":4,\"358\":3,\"360\":1,\"365\":1,\"367\":1,\"378\":1,\"379\":1,\"380\":1,\"383\":4,\"384\":3,\"392\":1,\"394\":1,\"412\":1,\"438\":1,\"439\":1,\"444\":1,\"445\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"493\":1,\"494\":1,\"513\":1,\"514\":1,\"519\":1,\"520\":1,\"543\":1,\"544\":1,\"549\":1,\"550\":1,\"573\":1,\"574\":1,\"579\":1,\"580\":1,\"603\":1,\"604\":1,\"609\":1,\"610\":1,\"623\":1,\"649\":1,\"650\":1,\"655\":1,\"656\":1,\"669\":1,\"695\":1,\"696\":1,\"701\":1,\"702\":1,\"715\":1,\"741\":1,\"742\":1,\"747\":1,\"748\":1,\"761\":1,\"787\":1,\"788\":1,\"793\":1,\"794\":1,\"798\":3,\"801\":1,\"819\":1,\"834\":1,\"838\":1,\"841\":1,\"852\":1,\"867\":1,\"872\":1,\"878\":1,\"898\":1,\"902\":1,\"921\":1,\"925\":3,\"928\":1,\"937\":1,\"944\":1,\"948\":1,\"950\":1,\"965\":1,\"979\":1,\"993\":1,\"1013\":1,\"1019\":1,\"1023\":1,\"1026\":1,\"1033\":1,\"1049\":1,\"1054\":1,\"1060\":1,\"1072\":1,\"1087\":1,\"1103\":1,\"1110\":1,\"1114\":1,\"1116\":1,\"1126\":1,\"1155\":1,\"1170\":1,\"1174\":1,\"1177\":1,\"1184\":1,\"1200\":1,\"1205\":1,\"1211\":1,\"1223\":1,\"1229\":3,\"1232\":1,\"1241\":1,\"1248\":1,\"1252\":1,\"1254\":1,\"1265\":1,\"1279\":1,\"1293\":1,\"1312\":1,\"1327\":1,\"1342\":1,\"1346\":1,\"1349\":1,\"1357\":1,\"1372\":1,\"1377\":1,\"1383\":1,\"1399\":1,\"1405\":3,\"1408\":1,\"1417\":1,\"1424\":1,\"1428\":1,\"1430\":1,\"1441\":1,\"1455\":1,\"1469\":1,\"1489\":1,\"1504\":1,\"1519\":1,\"1523\":1,\"1526\":1,\"1534\":1,\"1549\":1,\"1554\":1,\"1560\":1,\"1576\":1,\"1582\":3,\"1585\":1,\"1594\":1,\"1601\":1,\"1605\":1,\"1607\":1,\"1618\":1,\"1632\":1,\"1646\":1,\"1666\":1,\"1681\":1,\"1696\":1,\"1700\":1,\"1703\":1,\"1711\":1,\"1726\":1,\"1731\":1,\"1737\":1,\"1753\":1,\"1759\":3,\"1762\":1,\"1771\":1,\"1778\":1,\"1782\":1,\"1784\":1,\"1795\":1,\"1809\":1,\"1823\":1,\"1843\":1,\"1858\":1,\"1873\":1,\"1877\":1,\"1880\":1,\"1888\":1,\"1903\":1,\"1908\":1,\"1914\":1,\"1930\":1,\"1936\":3,\"1939\":1,\"1948\":1,\"1955\":1,\"1959\":1,\"1961\":1,\"1972\":1,\"1986\":1,\"2000\":1,\"2020\":1,\"2035\":1,\"2050\":1,\"2054\":1,\"2057\":1,\"2065\":1,\"2080\":1,\"2085\":1,\"2091\":1,\"2107\":1,\"2113\":3,\"2116\":1,\"2125\":1,\"2132\":1,\"2136\":1,\"2138\":1,\"2149\":1,\"2163\":1,\"2177\":1,\"2197\":1,\"2201\":3,\"2204\":1,\"2222\":1,\"2237\":1,\"2241\":1,\"2244\":1,\"2255\":1,\"2270\":1,\"2275\":1,\"2281\":1,\"2301\":1,\"2305\":1,\"2324\":1,\"2328\":3,\"2331\":1,\"2340\":1,\"2347\":1,\"2351\":1,\"2353\":1,\"2368\":1,\"2382\":1,\"2396\":1,\"2416\":1,\"2420\":3,\"2423\":1,\"2441\":1,\"2456\":1,\"2460\":1,\"2463\":1,\"2474\":1,\"2489\":1,\"2494\":1,\"2500\":1,\"2520\":1,\"2524\":1,\"2543\":1,\"2547\":3,\"2550\":1,\"2559\":1,\"2566\":1,\"2570\":1,\"2572\":1,\"2587\":1,\"2601\":1,\"2615\":1,\"2635\":1,\"2639\":3,\"2642\":1,\"2660\":1,\"2675\":1,\"2679\":1,\"2682\":1,\"2693\":1,\"2708\":1,\"2713\":1,\"2719\":1,\"2739\":1,\"2743\":1,\"2762\":1,\"2766\":3,\"2769\":1,\"2778\":1,\"2785\":1,\"2789\":1,\"2791\":1,\"2806\":1,\"2820\":1,\"2834\":1,\"2854\":1}}],[\"useful\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"useradd\",{\"1\":{\"438\":1,\"439\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"username>\",{\"1\":{\"158\":1,\"394\":1}}],[\"username\",{\"0\":{\"172\":1,\"176\":1,\"179\":1,\"188\":1,\"194\":1,\"197\":1,\"225\":1,\"242\":1,\"248\":1,\"254\":1,\"255\":1,\"835\":1,\"839\":1,\"842\":1,\"882\":1,\"900\":1,\"945\":1,\"951\":1,\"952\":1,\"967\":1,\"1020\":1,\"1024\":1,\"1027\":1,\"1064\":1,\"1074\":1,\"1111\":1,\"1117\":1,\"1118\":1,\"1128\":1,\"1171\":1,\"1175\":1,\"1178\":1,\"1215\":1,\"1225\":1,\"1249\":1,\"1255\":1,\"1256\":1,\"1267\":1,\"1343\":1,\"1347\":1,\"1350\":1,\"1387\":1,\"1401\":1,\"1425\":1,\"1431\":1,\"1432\":1,\"1443\":1,\"1520\":1,\"1524\":1,\"1527\":1,\"1564\":1,\"1578\":1,\"1602\":1,\"1608\":1,\"1609\":1,\"1620\":1,\"1697\":1,\"1701\":1,\"1704\":1,\"1741\":1,\"1755\":1,\"1779\":1,\"1785\":1,\"1786\":1,\"1797\":1,\"1874\":1,\"1878\":1,\"1881\":1,\"1918\":1,\"1932\":1,\"1956\":1,\"1962\":1,\"1963\":1,\"1974\":1,\"2051\":1,\"2055\":1,\"2058\":1,\"2095\":1,\"2109\":1,\"2133\":1,\"2139\":1,\"2140\":1,\"2151\":1,\"2238\":1,\"2242\":1,\"2245\":1,\"2285\":1,\"2303\":1,\"2348\":1,\"2354\":1,\"2355\":1,\"2370\":1,\"2457\":1,\"2461\":1,\"2464\":1,\"2504\":1,\"2522\":1,\"2567\":1,\"2573\":1,\"2574\":1,\"2589\":1,\"2676\":1,\"2680\":1,\"2683\":1,\"2723\":1,\"2741\":1,\"2786\":1,\"2792\":1,\"2793\":1,\"2808\":1},\"1\":{\"135\":1,\"158\":2,\"172\":1,\"176\":2,\"179\":1,\"188\":2,\"194\":2,\"197\":2,\"215\":1,\"225\":3,\"242\":2,\"248\":1,\"254\":2,\"255\":1,\"323\":12,\"394\":2,\"835\":1,\"839\":3,\"842\":2,\"872\":1,\"882\":3,\"900\":3,\"945\":1,\"951\":3,\"952\":2,\"967\":3,\"1020\":1,\"1024\":2,\"1027\":1,\"1054\":1,\"1064\":3,\"1074\":3,\"1111\":1,\"1117\":2,\"1118\":1,\"1128\":3,\"1171\":1,\"1175\":2,\"1178\":1,\"1205\":1,\"1215\":3,\"1225\":3,\"1249\":1,\"1255\":2,\"1256\":1,\"1267\":3,\"1343\":1,\"1347\":2,\"1350\":1,\"1377\":1,\"1387\":3,\"1401\":3,\"1425\":1,\"1431\":2,\"1432\":1,\"1443\":3,\"1520\":1,\"1524\":2,\"1527\":1,\"1554\":1,\"1564\":3,\"1578\":3,\"1602\":1,\"1608\":2,\"1609\":1,\"1620\":3,\"1697\":1,\"1701\":2,\"1704\":1,\"1731\":1,\"1741\":3,\"1755\":3,\"1779\":1,\"1785\":2,\"1786\":1,\"1797\":3,\"1874\":1,\"1878\":2,\"1881\":1,\"1908\":1,\"1918\":3,\"1932\":3,\"1956\":1,\"1962\":2,\"1963\":1,\"1974\":3,\"2051\":1,\"2055\":2,\"2058\":1,\"2085\":1,\"2095\":3,\"2109\":3,\"2133\":1,\"2139\":2,\"2140\":1,\"2151\":3,\"2238\":1,\"2242\":3,\"2245\":2,\"2275\":1,\"2285\":3,\"2303\":3,\"2348\":1,\"2354\":3,\"2355\":2,\"2370\":3,\"2457\":1,\"2461\":3,\"2464\":2,\"2494\":1,\"2504\":3,\"2522\":3,\"2567\":1,\"2573\":3,\"2574\":2,\"2589\":3,\"2676\":1,\"2680\":3,\"2683\":2,\"2713\":1,\"2723\":3,\"2741\":3,\"2786\":1,\"2792\":3,\"2793\":2,\"2808\":3}}],[\"users\",{\"0\":{\"799\":1,\"926\":1,\"1230\":1,\"1406\":1,\"1583\":1,\"1760\":1,\"1937\":1,\"2114\":1,\"2202\":1,\"2329\":1,\"2421\":1,\"2548\":1,\"2640\":1,\"2767\":1},\"1\":{\"36\":1,\"112\":1,\"113\":1,\"174\":1,\"177\":1,\"250\":1,\"252\":1,\"323\":12,\"400\":1,\"415\":2,\"438\":1,\"464\":1,\"487\":1,\"513\":1,\"519\":1,\"543\":1,\"573\":1,\"603\":1,\"611\":1,\"626\":2,\"649\":1,\"657\":1,\"672\":2,\"695\":1,\"703\":1,\"718\":2,\"741\":1,\"749\":1,\"764\":2,\"787\":1,\"798\":2,\"799\":1,\"801\":1,\"803\":1,\"806\":1,\"837\":1,\"840\":1,\"902\":2,\"925\":2,\"926\":1,\"928\":1,\"930\":1,\"932\":1,\"947\":1,\"949\":1,\"993\":2,\"1022\":1,\"1025\":1,\"1113\":1,\"1115\":1,\"1173\":1,\"1176\":1,\"1229\":2,\"1230\":1,\"1232\":1,\"1234\":1,\"1236\":1,\"1251\":1,\"1253\":1,\"1293\":2,\"1345\":1,\"1348\":1,\"1405\":2,\"1406\":1,\"1408\":1,\"1410\":1,\"1412\":1,\"1427\":1,\"1429\":1,\"1469\":2,\"1522\":1,\"1525\":1,\"1582\":2,\"1583\":1,\"1585\":1,\"1587\":1,\"1589\":1,\"1604\":1,\"1606\":1,\"1646\":2,\"1699\":1,\"1702\":1,\"1759\":2,\"1760\":1,\"1762\":1,\"1764\":1,\"1766\":1,\"1781\":1,\"1783\":1,\"1823\":2,\"1876\":1,\"1879\":1,\"1936\":2,\"1937\":1,\"1939\":1,\"1941\":1,\"1943\":1,\"1958\":1,\"1960\":1,\"2000\":2,\"2053\":1,\"2056\":1,\"2113\":2,\"2114\":1,\"2116\":1,\"2118\":1,\"2120\":1,\"2135\":1,\"2137\":1,\"2177\":2,\"2201\":2,\"2202\":1,\"2204\":1,\"2206\":1,\"2209\":1,\"2240\":1,\"2243\":1,\"2305\":2,\"2328\":2,\"2329\":1,\"2331\":1,\"2333\":1,\"2335\":1,\"2350\":1,\"2352\":1,\"2396\":2,\"2420\":2,\"2421\":1,\"2423\":1,\"2425\":1,\"2428\":1,\"2459\":1,\"2462\":1,\"2524\":2,\"2547\":2,\"2548\":1,\"2550\":1,\"2552\":1,\"2554\":1,\"2569\":1,\"2571\":1,\"2615\":2,\"2639\":2,\"2640\":1,\"2642\":1,\"2644\":1,\"2647\":1,\"2678\":1,\"2681\":1,\"2743\":2,\"2766\":2,\"2767\":1,\"2769\":1,\"2771\":1,\"2773\":1,\"2788\":1,\"2790\":1,\"2834\":2}}],[\"user\",{\"0\":{\"174\":1,\"175\":2,\"176\":1,\"177\":1,\"178\":2,\"179\":1,\"250\":1,\"251\":2,\"252\":1,\"253\":2,\"254\":1,\"255\":1,\"261\":1,\"262\":1,\"837\":1,\"838\":2,\"839\":1,\"840\":1,\"841\":2,\"842\":1,\"947\":1,\"948\":2,\"949\":1,\"950\":2,\"951\":1,\"952\":1,\"1022\":1,\"1023\":2,\"1024\":1,\"1025\":1,\"1026\":2,\"1027\":1,\"1113\":1,\"1114\":2,\"1115\":1,\"1116\":2,\"1117\":1,\"1118\":1,\"1173\":1,\"1174\":2,\"1175\":1,\"1176\":1,\"1177\":2,\"1178\":1,\"1251\":1,\"1252\":2,\"1253\":1,\"1254\":2,\"1255\":1,\"1256\":1,\"1345\":1,\"1346\":2,\"1347\":1,\"1348\":1,\"1349\":2,\"1350\":1,\"1427\":1,\"1428\":2,\"1429\":1,\"1430\":2,\"1431\":1,\"1432\":1,\"1522\":1,\"1523\":2,\"1524\":1,\"1525\":1,\"1526\":2,\"1527\":1,\"1604\":1,\"1605\":2,\"1606\":1,\"1607\":2,\"1608\":1,\"1609\":1,\"1699\":1,\"1700\":2,\"1701\":1,\"1702\":1,\"1703\":2,\"1704\":1,\"1781\":1,\"1782\":2,\"1783\":1,\"1784\":2,\"1785\":1,\"1786\":1,\"1876\":1,\"1877\":2,\"1878\":1,\"1879\":1,\"1880\":2,\"1881\":1,\"1958\":1,\"1959\":2,\"1960\":1,\"1961\":2,\"1962\":1,\"1963\":1,\"2053\":1,\"2054\":2,\"2055\":1,\"2056\":1,\"2057\":2,\"2058\":1,\"2135\":1,\"2136\":2,\"2137\":1,\"2138\":2,\"2139\":1,\"2140\":1,\"2240\":1,\"2241\":2,\"2242\":1,\"2243\":1,\"2244\":2,\"2245\":1,\"2350\":1,\"2351\":2,\"2352\":1,\"2353\":2,\"2354\":1,\"2355\":1,\"2459\":1,\"2460\":2,\"2461\":1,\"2462\":1,\"2463\":2,\"2464\":1,\"2569\":1,\"2570\":2,\"2571\":1,\"2572\":2,\"2573\":1,\"2574\":1,\"2678\":1,\"2679\":2,\"2680\":1,\"2681\":1,\"2682\":2,\"2683\":1,\"2788\":1,\"2789\":2,\"2790\":1,\"2791\":2,\"2792\":1,\"2793\":1},\"1\":{\"28\":1,\"37\":1,\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"90\":1,\"94\":1,\"130\":10,\"131\":3,\"134\":2,\"143\":3,\"172\":2,\"174\":2,\"175\":3,\"176\":5,\"177\":2,\"178\":3,\"179\":3,\"248\":2,\"250\":2,\"251\":3,\"252\":2,\"253\":3,\"254\":5,\"255\":3,\"261\":1,\"262\":1,\"285\":7,\"286\":6,\"296\":7,\"297\":6,\"323\":111,\"334\":4,\"338\":1,\"363\":2,\"389\":2,\"413\":1,\"415\":2,\"429\":1,\"438\":6,\"439\":5,\"464\":6,\"465\":5,\"487\":6,\"488\":5,\"513\":6,\"514\":5,\"543\":6,\"544\":5,\"573\":6,\"574\":5,\"603\":6,\"604\":5,\"624\":1,\"626\":2,\"649\":6,\"650\":5,\"670\":1,\"672\":2,\"695\":6,\"696\":5,\"716\":1,\"718\":2,\"741\":6,\"742\":5,\"762\":1,\"764\":2,\"778\":1,\"787\":6,\"788\":5,\"798\":8,\"800\":1,\"801\":1,\"804\":1,\"806\":2,\"835\":2,\"837\":2,\"838\":3,\"839\":4,\"840\":2,\"841\":3,\"842\":2,\"843\":1,\"902\":2,\"925\":7,\"927\":1,\"928\":1,\"931\":1,\"932\":10,\"933\":2,\"945\":2,\"947\":2,\"948\":3,\"949\":2,\"950\":3,\"951\":4,\"952\":2,\"953\":1,\"993\":2,\"1020\":2,\"1022\":2,\"1023\":3,\"1024\":5,\"1025\":2,\"1026\":3,\"1027\":3,\"1111\":2,\"1113\":2,\"1114\":3,\"1115\":2,\"1116\":3,\"1117\":5,\"1118\":3,\"1171\":2,\"1173\":2,\"1174\":3,\"1175\":5,\"1176\":2,\"1177\":3,\"1178\":3,\"1229\":7,\"1231\":1,\"1232\":1,\"1235\":1,\"1236\":10,\"1237\":2,\"1249\":2,\"1251\":2,\"1252\":3,\"1253\":2,\"1254\":3,\"1255\":5,\"1256\":3,\"1293\":2,\"1343\":2,\"1345\":2,\"1346\":3,\"1347\":5,\"1348\":2,\"1349\":3,\"1350\":3,\"1405\":7,\"1407\":1,\"1408\":1,\"1411\":1,\"1412\":10,\"1413\":2,\"1425\":2,\"1427\":2,\"1428\":3,\"1429\":2,\"1430\":3,\"1431\":5,\"1432\":3,\"1469\":2,\"1520\":2,\"1522\":2,\"1523\":3,\"1524\":5,\"1525\":2,\"1526\":3,\"1527\":3,\"1582\":7,\"1584\":1,\"1585\":1,\"1588\":1,\"1589\":10,\"1590\":2,\"1602\":2,\"1604\":2,\"1605\":3,\"1606\":2,\"1607\":3,\"1608\":5,\"1609\":3,\"1646\":2,\"1697\":2,\"1699\":2,\"1700\":3,\"1701\":5,\"1702\":2,\"1703\":3,\"1704\":3,\"1759\":7,\"1761\":1,\"1762\":1,\"1765\":1,\"1766\":10,\"1767\":2,\"1779\":2,\"1781\":2,\"1782\":3,\"1783\":2,\"1784\":3,\"1785\":5,\"1786\":3,\"1823\":2,\"1874\":2,\"1876\":2,\"1877\":3,\"1878\":5,\"1879\":2,\"1880\":3,\"1881\":3,\"1936\":7,\"1938\":1,\"1939\":1,\"1942\":1,\"1943\":10,\"1944\":2,\"1956\":2,\"1958\":2,\"1959\":3,\"1960\":2,\"1961\":3,\"1962\":5,\"1963\":3,\"2000\":2,\"2051\":2,\"2053\":2,\"2054\":3,\"2055\":5,\"2056\":2,\"2057\":3,\"2058\":3,\"2113\":7,\"2115\":1,\"2116\":1,\"2119\":1,\"2120\":10,\"2121\":2,\"2133\":2,\"2135\":2,\"2136\":3,\"2137\":2,\"2138\":3,\"2139\":5,\"2140\":3,\"2177\":2,\"2201\":8,\"2203\":1,\"2204\":1,\"2207\":1,\"2209\":2,\"2238\":2,\"2240\":2,\"2241\":3,\"2242\":4,\"2243\":2,\"2244\":3,\"2245\":2,\"2246\":1,\"2305\":2,\"2328\":7,\"2330\":1,\"2331\":1,\"2334\":1,\"2335\":10,\"2336\":2,\"2348\":2,\"2350\":2,\"2351\":3,\"2352\":2,\"2353\":3,\"2354\":4,\"2355\":2,\"2356\":1,\"2396\":2,\"2420\":8,\"2422\":1,\"2423\":1,\"2426\":1,\"2428\":2,\"2457\":2,\"2459\":2,\"2460\":3,\"2461\":4,\"2462\":2,\"2463\":3,\"2464\":2,\"2465\":1,\"2524\":2,\"2547\":7,\"2549\":1,\"2550\":1,\"2553\":1,\"2554\":10,\"2555\":2,\"2567\":2,\"2569\":2,\"2570\":3,\"2571\":2,\"2572\":3,\"2573\":4,\"2574\":2,\"2575\":1,\"2615\":2,\"2639\":8,\"2641\":1,\"2642\":1,\"2645\":1,\"2647\":2,\"2676\":2,\"2678\":2,\"2679\":3,\"2680\":4,\"2681\":2,\"2682\":3,\"2683\":2,\"2684\":1,\"2743\":2,\"2766\":7,\"2768\":1,\"2769\":1,\"2772\":1,\"2773\":10,\"2774\":2,\"2786\":2,\"2788\":2,\"2789\":3,\"2790\":2,\"2791\":3,\"2792\":4,\"2793\":2,\"2794\":1,\"2834\":2}}],[\"usesmtps\",{\"0\":{\"226\":1,\"883\":1,\"1065\":1,\"1216\":1,\"1388\":1,\"1565\":1,\"1742\":1,\"1919\":1,\"2096\":1,\"2286\":1,\"2505\":1,\"2724\":1},\"1\":{\"208\":1,\"209\":1,\"215\":1,\"224\":1,\"225\":1,\"226\":1,\"865\":1,\"866\":1,\"872\":1,\"881\":1,\"882\":1,\"883\":1,\"1047\":1,\"1048\":1,\"1054\":1,\"1063\":1,\"1064\":1,\"1065\":1,\"1198\":1,\"1199\":1,\"1205\":1,\"1214\":1,\"1215\":1,\"1216\":1,\"1370\":1,\"1371\":1,\"1377\":1,\"1386\":1,\"1387\":1,\"1388\":1,\"1547\":1,\"1548\":1,\"1554\":1,\"1563\":1,\"1564\":1,\"1565\":1,\"1724\":1,\"1725\":1,\"1731\":1,\"1740\":1,\"1741\":1,\"1742\":1,\"1901\":1,\"1902\":1,\"1908\":1,\"1917\":1,\"1918\":1,\"1919\":1,\"2078\":1,\"2079\":1,\"2085\":1,\"2094\":1,\"2095\":1,\"2096\":1,\"2268\":1,\"2269\":1,\"2275\":1,\"2284\":1,\"2285\":1,\"2286\":1,\"2487\":1,\"2488\":1,\"2494\":1,\"2503\":1,\"2504\":1,\"2505\":1,\"2706\":1,\"2707\":1,\"2713\":1,\"2722\":1,\"2723\":1,\"2724\":1}}],[\"uses\",{\"1\":{\"9\":1,\"86\":1,\"276\":1,\"285\":1,\"287\":1,\"296\":1,\"327\":1,\"334\":1,\"342\":1,\"363\":1,\"368\":1,\"389\":1,\"407\":1,\"423\":1,\"453\":1,\"476\":1,\"502\":1,\"528\":1,\"558\":1,\"588\":1,\"618\":1,\"634\":1,\"664\":1,\"680\":1,\"710\":1,\"726\":1,\"756\":1,\"772\":1,\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"use\",{\"0\":{\"13\":1,\"119\":1},\"1\":{\"0\":1,\"1\":1,\"5\":1,\"13\":1,\"20\":1,\"26\":2,\"32\":1,\"33\":2,\"37\":2,\"77\":1,\"78\":1,\"81\":1,\"84\":1,\"90\":1,\"91\":1,\"93\":2,\"94\":1,\"98\":3,\"106\":1,\"108\":1,\"112\":1,\"113\":3,\"126\":1,\"148\":1,\"149\":1,\"152\":1,\"155\":2,\"156\":4,\"161\":1,\"163\":1,\"166\":1,\"171\":1,\"173\":1,\"175\":1,\"176\":1,\"178\":1,\"183\":1,\"184\":2,\"185\":1,\"186\":1,\"192\":1,\"195\":1,\"201\":1,\"208\":1,\"209\":2,\"210\":1,\"215\":1,\"220\":1,\"221\":1,\"224\":1,\"232\":1,\"237\":1,\"238\":2,\"239\":1,\"240\":1,\"245\":1,\"247\":1,\"249\":1,\"251\":1,\"253\":1,\"254\":1,\"258\":1,\"271\":1,\"272\":1,\"273\":1,\"274\":1,\"275\":1,\"285\":2,\"286\":1,\"296\":2,\"297\":1,\"317\":1,\"329\":1,\"334\":1,\"336\":1,\"337\":1,\"345\":1,\"360\":1,\"363\":1,\"386\":2,\"389\":2,\"393\":1,\"395\":1,\"397\":1,\"403\":1,\"412\":1,\"423\":1,\"425\":1,\"430\":1,\"434\":1,\"438\":2,\"439\":1,\"440\":1,\"442\":7,\"452\":2,\"453\":1,\"456\":1,\"460\":1,\"464\":2,\"465\":1,\"466\":1,\"475\":2,\"476\":1,\"479\":1,\"483\":1,\"487\":2,\"488\":1,\"489\":1,\"501\":2,\"502\":1,\"505\":1,\"509\":1,\"513\":2,\"514\":1,\"515\":1,\"519\":1,\"528\":1,\"530\":1,\"535\":1,\"539\":1,\"543\":2,\"544\":1,\"545\":1,\"547\":7,\"558\":1,\"560\":1,\"565\":1,\"569\":1,\"573\":2,\"574\":1,\"575\":1,\"577\":7,\"588\":1,\"590\":1,\"595\":1,\"599\":1,\"603\":2,\"604\":1,\"605\":1,\"607\":7,\"614\":1,\"623\":1,\"634\":1,\"636\":1,\"641\":1,\"645\":1,\"649\":2,\"650\":1,\"651\":1,\"653\":7,\"660\":1,\"669\":1,\"680\":1,\"682\":1,\"687\":1,\"691\":1,\"695\":2,\"696\":1,\"697\":1,\"699\":7,\"706\":1,\"715\":1,\"726\":1,\"728\":1,\"733\":1,\"737\":1,\"741\":2,\"742\":1,\"743\":1,\"745\":7,\"752\":1,\"761\":1,\"772\":1,\"774\":1,\"779\":1,\"783\":1,\"787\":2,\"788\":1,\"789\":1,\"791\":7,\"798\":1,\"817\":1,\"818\":2,\"819\":1,\"822\":1,\"824\":1,\"832\":1,\"834\":1,\"836\":1,\"838\":1,\"839\":1,\"841\":1,\"850\":1,\"851\":2,\"852\":1,\"859\":1,\"865\":1,\"866\":2,\"867\":1,\"872\":1,\"877\":1,\"878\":1,\"881\":1,\"890\":1,\"898\":1,\"899\":1,\"902\":1,\"915\":1,\"916\":1,\"917\":1,\"918\":1,\"919\":1,\"920\":1,\"925\":1,\"932\":1,\"935\":1,\"936\":2,\"937\":1,\"940\":1,\"942\":1,\"944\":1,\"946\":1,\"948\":1,\"950\":1,\"951\":1,\"957\":1,\"965\":1,\"966\":1,\"977\":1,\"978\":2,\"979\":1,\"982\":1,\"984\":1,\"993\":1,\"1007\":1,\"1008\":1,\"1009\":1,\"1010\":1,\"1011\":1,\"1012\":1,\"1017\":1,\"1019\":1,\"1021\":1,\"1023\":1,\"1024\":1,\"1026\":1,\"1031\":1,\"1032\":2,\"1033\":1,\"1040\":1,\"1047\":1,\"1048\":2,\"1049\":1,\"1054\":1,\"1059\":1,\"1060\":1,\"1063\":1,\"1069\":1,\"1072\":1,\"1073\":1,\"1085\":1,\"1086\":2,\"1087\":1,\"1090\":1,\"1092\":1,\"1101\":1,\"1102\":2,\"1103\":1,\"1106\":1,\"1108\":1,\"1110\":1,\"1112\":1,\"1114\":1,\"1116\":1,\"1117\":1,\"1120\":1,\"1126\":1,\"1127\":1,\"1136\":1,\"1137\":1,\"1138\":1,\"1139\":1,\"1140\":1,\"1153\":1,\"1154\":2,\"1155\":1,\"1158\":1,\"1160\":1,\"1168\":1,\"1170\":1,\"1172\":1,\"1174\":1,\"1175\":1,\"1177\":1,\"1182\":1,\"1183\":2,\"1184\":1,\"1191\":1,\"1198\":1,\"1199\":2,\"1200\":1,\"1205\":1,\"1210\":1,\"1211\":1,\"1214\":1,\"1220\":1,\"1223\":1,\"1224\":1,\"1229\":1,\"1236\":1,\"1239\":1,\"1240\":2,\"1241\":1,\"1244\":1,\"1246\":1,\"1248\":1,\"1250\":1,\"1252\":1,\"1254\":1,\"1255\":1,\"1258\":1,\"1262\":1,\"1265\":1,\"1266\":1,\"1277\":1,\"1278\":2,\"1279\":1,\"1282\":1,\"1284\":1,\"1293\":1,\"1307\":1,\"1308\":1,\"1309\":1,\"1310\":1,\"1311\":1,\"1325\":1,\"1326\":2,\"1327\":1,\"1330\":1,\"1332\":1,\"1340\":1,\"1342\":1,\"1344\":1,\"1346\":1,\"1347\":1,\"1349\":1,\"1355\":1,\"1356\":2,\"1357\":1,\"1364\":1,\"1370\":1,\"1371\":2,\"1372\":1,\"1377\":1,\"1382\":1,\"1383\":1,\"1386\":1,\"1395\":1,\"1399\":1,\"1400\":1,\"1405\":1,\"1412\":1,\"1415\":1,\"1416\":2,\"1417\":1,\"1420\":1,\"1422\":1,\"1424\":1,\"1426\":1,\"1428\":1,\"1430\":1,\"1431\":1,\"1434\":1,\"1441\":1,\"1442\":1,\"1453\":1,\"1454\":2,\"1455\":1,\"1458\":1,\"1460\":1,\"1469\":1,\"1483\":1,\"1484\":1,\"1485\":1,\"1486\":1,\"1487\":1,\"1488\":1,\"1502\":1,\"1503\":2,\"1504\":1,\"1507\":1,\"1509\":1,\"1517\":1,\"1519\":1,\"1521\":1,\"1523\":1,\"1524\":1,\"1526\":1,\"1532\":1,\"1533\":2,\"1534\":1,\"1541\":1,\"1547\":1,\"1548\":2,\"1549\":1,\"1554\":1,\"1559\":1,\"1560\":1,\"1563\":1,\"1572\":1,\"1576\":1,\"1577\":1,\"1582\":1,\"1589\":1,\"1592\":1,\"1593\":2,\"1594\":1,\"1597\":1,\"1599\":1,\"1601\":1,\"1603\":1,\"1605\":1,\"1607\":1,\"1608\":1,\"1611\":1,\"1618\":1,\"1619\":1,\"1630\":1,\"1631\":2,\"1632\":1,\"1635\":1,\"1637\":1,\"1646\":1,\"1660\":1,\"1661\":1,\"1662\":1,\"1663\":1,\"1664\":1,\"1665\":1,\"1679\":1,\"1680\":2,\"1681\":1,\"1684\":1,\"1686\":1,\"1694\":1,\"1696\":1,\"1698\":1,\"1700\":1,\"1701\":1,\"1703\":1,\"1709\":1,\"1710\":2,\"1711\":1,\"1718\":1,\"1724\":1,\"1725\":2,\"1726\":1,\"1731\":1,\"1736\":1,\"1737\":1,\"1740\":1,\"1749\":1,\"1753\":1,\"1754\":1,\"1759\":1,\"1766\":1,\"1769\":1,\"1770\":2,\"1771\":1,\"1774\":1,\"1776\":1,\"1778\":1,\"1780\":1,\"1782\":1,\"1784\":1,\"1785\":1,\"1788\":1,\"1795\":1,\"1796\":1,\"1807\":1,\"1808\":2,\"1809\":1,\"1812\":1,\"1814\":1,\"1823\":1,\"1837\":1,\"1838\":1,\"1839\":1,\"1840\":1,\"1841\":1,\"1842\":1,\"1856\":1,\"1857\":2,\"1858\":1,\"1861\":1,\"1863\":1,\"1871\":1,\"1873\":1,\"1875\":1,\"1877\":1,\"1878\":1,\"1880\":1,\"1886\":1,\"1887\":2,\"1888\":1,\"1895\":1,\"1901\":1,\"1902\":2,\"1903\":1,\"1908\":1,\"1913\":1,\"1914\":1,\"1917\":1,\"1926\":1,\"1930\":1,\"1931\":1,\"1936\":1,\"1943\":1,\"1946\":1,\"1947\":2,\"1948\":1,\"1951\":1,\"1953\":1,\"1955\":1,\"1957\":1,\"1959\":1,\"1961\":1,\"1962\":1,\"1965\":1,\"1972\":1,\"1973\":1,\"1984\":1,\"1985\":2,\"1986\":1,\"1989\":1,\"1991\":1,\"2000\":1,\"2014\":1,\"2015\":1,\"2016\":1,\"2017\":1,\"2018\":1,\"2019\":1,\"2033\":1,\"2034\":2,\"2035\":1,\"2038\":1,\"2040\":1,\"2048\":1,\"2050\":1,\"2052\":1,\"2054\":1,\"2055\":1,\"2057\":1,\"2063\":1,\"2064\":2,\"2065\":1,\"2072\":1,\"2078\":1,\"2079\":2,\"2080\":1,\"2085\":1,\"2090\":1,\"2091\":1,\"2094\":1,\"2103\":1,\"2107\":1,\"2108\":1,\"2113\":1,\"2120\":1,\"2123\":1,\"2124\":2,\"2125\":1,\"2128\":1,\"2130\":1,\"2132\":1,\"2134\":1,\"2136\":1,\"2138\":1,\"2139\":1,\"2142\":1,\"2149\":1,\"2150\":1,\"2161\":1,\"2162\":2,\"2163\":1,\"2166\":1,\"2168\":1,\"2177\":1,\"2191\":1,\"2192\":1,\"2193\":1,\"2194\":1,\"2195\":1,\"2196\":1,\"2201\":1,\"2220\":1,\"2221\":2,\"2222\":1,\"2225\":1,\"2227\":1,\"2235\":1,\"2237\":1,\"2239\":1,\"2241\":1,\"2242\":1,\"2244\":1,\"2253\":1,\"2254\":2,\"2255\":1,\"2262\":1,\"2268\":1,\"2269\":2,\"2270\":1,\"2275\":1,\"2280\":1,\"2281\":1,\"2284\":1,\"2293\":1,\"2301\":1,\"2302\":1,\"2305\":1,\"2318\":1,\"2319\":1,\"2320\":1,\"2321\":1,\"2322\":1,\"2323\":1,\"2328\":1,\"2335\":1,\"2338\":1,\"2339\":2,\"2340\":1,\"2343\":1,\"2345\":1,\"2347\":1,\"2349\":1,\"2351\":1,\"2353\":1,\"2354\":1,\"2360\":1,\"2368\":1,\"2369\":1,\"2380\":1,\"2381\":2,\"2382\":1,\"2385\":1,\"2387\":1,\"2396\":1,\"2410\":1,\"2411\":1,\"2412\":1,\"2413\":1,\"2414\":1,\"2415\":1,\"2420\":1,\"2439\":1,\"2440\":2,\"2441\":1,\"2444\":1,\"2446\":1,\"2454\":1,\"2456\":1,\"2458\":1,\"2460\":1,\"2461\":1,\"2463\":1,\"2472\":1,\"2473\":2,\"2474\":1,\"2481\":1,\"2487\":1,\"2488\":2,\"2489\":1,\"2494\":1,\"2499\":1,\"2500\":1,\"2503\":1,\"2512\":1,\"2520\":1,\"2521\":1,\"2524\":1,\"2537\":1,\"2538\":1,\"2539\":1,\"2540\":1,\"2541\":1,\"2542\":1,\"2547\":1,\"2554\":1,\"2557\":1,\"2558\":2,\"2559\":1,\"2562\":1,\"2564\":1,\"2566\":1,\"2568\":1,\"2570\":1,\"2572\":1,\"2573\":1,\"2579\":1,\"2587\":1,\"2588\":1,\"2599\":1,\"2600\":2,\"2601\":1,\"2604\":1,\"2606\":1,\"2615\":1,\"2629\":1,\"2630\":1,\"2631\":1,\"2632\":1,\"2633\":1,\"2634\":1,\"2639\":1,\"2658\":1,\"2659\":2,\"2660\":1,\"2663\":1,\"2665\":1,\"2673\":1,\"2675\":1,\"2677\":1,\"2679\":1,\"2680\":1,\"2682\":1,\"2691\":1,\"2692\":2,\"2693\":1,\"2700\":1,\"2706\":1,\"2707\":2,\"2708\":1,\"2713\":1,\"2718\":1,\"2719\":1,\"2722\":1,\"2731\":1,\"2739\":1,\"2740\":1,\"2743\":1,\"2756\":1,\"2757\":1,\"2758\":1,\"2759\":1,\"2760\":1,\"2761\":1,\"2766\":1,\"2773\":1,\"2776\":1,\"2777\":2,\"2778\":1,\"2781\":1,\"2783\":1,\"2785\":1,\"2787\":1,\"2789\":1,\"2791\":1,\"2792\":1,\"2798\":1,\"2806\":1,\"2807\":1,\"2818\":1,\"2819\":2,\"2820\":1,\"2823\":1,\"2825\":1,\"2834\":1,\"2848\":1,\"2849\":1,\"2850\":1,\"2851\":1,\"2852\":1,\"2853\":1}}],[\"used\",{\"1\":{\"0\":1,\"32\":1,\"33\":1,\"84\":1,\"85\":1,\"86\":1,\"89\":1,\"90\":3,\"91\":2,\"92\":2,\"94\":1,\"95\":4,\"100\":1,\"101\":1,\"102\":1,\"103\":1,\"105\":1,\"106\":1,\"108\":3,\"109\":3,\"113\":1,\"126\":1,\"134\":1,\"148\":2,\"149\":1,\"161\":1,\"163\":2,\"164\":1,\"165\":4,\"169\":1,\"170\":1,\"173\":1,\"204\":1,\"208\":1,\"227\":1,\"228\":1,\"234\":1,\"236\":1,\"249\":1,\"257\":1,\"259\":1,\"261\":1,\"262\":1,\"271\":1,\"272\":2,\"284\":2,\"285\":1,\"286\":2,\"295\":2,\"296\":1,\"297\":2,\"316\":1,\"325\":1,\"327\":2,\"328\":6,\"330\":3,\"334\":1,\"337\":2,\"342\":1,\"343\":4,\"344\":2,\"352\":2,\"353\":3,\"354\":1,\"380\":1,\"404\":1,\"408\":1,\"409\":1,\"412\":1,\"423\":1,\"435\":1,\"437\":2,\"438\":1,\"439\":1,\"453\":1,\"461\":1,\"463\":2,\"464\":1,\"465\":1,\"476\":1,\"484\":1,\"486\":2,\"487\":1,\"488\":1,\"502\":1,\"510\":1,\"512\":2,\"513\":1,\"514\":1,\"528\":1,\"540\":1,\"542\":2,\"543\":1,\"544\":1,\"558\":1,\"570\":1,\"572\":2,\"573\":1,\"574\":1,\"588\":1,\"600\":1,\"602\":2,\"603\":1,\"604\":1,\"615\":1,\"619\":1,\"620\":1,\"623\":1,\"634\":1,\"646\":1,\"648\":2,\"649\":1,\"650\":1,\"661\":1,\"665\":1,\"666\":1,\"669\":1,\"680\":1,\"692\":1,\"694\":2,\"695\":1,\"696\":1,\"707\":1,\"711\":1,\"712\":1,\"715\":1,\"726\":1,\"738\":1,\"740\":2,\"741\":1,\"742\":1,\"753\":1,\"757\":1,\"758\":1,\"761\":1,\"772\":1,\"784\":1,\"786\":2,\"787\":1,\"788\":1,\"798\":1,\"800\":1,\"836\":1,\"865\":1,\"904\":3,\"916\":1,\"917\":2,\"925\":1,\"927\":1,\"932\":1,\"933\":1,\"946\":1,\"958\":1,\"996\":3,\"1008\":1,\"1009\":2,\"1021\":1,\"1043\":1,\"1047\":1,\"1112\":1,\"1121\":1,\"1136\":1,\"1137\":2,\"1172\":1,\"1194\":1,\"1198\":1,\"1231\":1,\"1236\":1,\"1237\":1,\"1250\":1,\"1259\":1,\"1296\":3,\"1307\":1,\"1308\":2,\"1344\":1,\"1370\":1,\"1407\":1,\"1412\":1,\"1413\":1,\"1426\":1,\"1435\":1,\"1472\":3,\"1484\":1,\"1485\":2,\"1521\":1,\"1547\":1,\"1584\":1,\"1589\":1,\"1590\":1,\"1603\":1,\"1612\":1,\"1649\":3,\"1661\":1,\"1662\":2,\"1698\":1,\"1724\":1,\"1761\":1,\"1766\":1,\"1767\":1,\"1780\":1,\"1789\":1,\"1826\":3,\"1838\":1,\"1839\":2,\"1875\":1,\"1901\":1,\"1938\":1,\"1943\":1,\"1944\":1,\"1957\":1,\"1966\":1,\"2003\":3,\"2015\":1,\"2016\":2,\"2052\":1,\"2078\":1,\"2115\":1,\"2120\":1,\"2121\":1,\"2134\":1,\"2143\":1,\"2180\":3,\"2192\":1,\"2193\":2,\"2201\":1,\"2203\":1,\"2239\":1,\"2268\":1,\"2307\":3,\"2319\":1,\"2320\":2,\"2328\":1,\"2330\":1,\"2335\":1,\"2336\":1,\"2349\":1,\"2361\":1,\"2399\":3,\"2411\":1,\"2412\":2,\"2420\":1,\"2422\":1,\"2458\":1,\"2487\":1,\"2526\":3,\"2538\":1,\"2539\":2,\"2547\":1,\"2549\":1,\"2554\":1,\"2555\":1,\"2568\":1,\"2580\":1,\"2618\":3,\"2630\":1,\"2631\":2,\"2639\":1,\"2641\":1,\"2677\":1,\"2706\":1,\"2745\":3,\"2757\":1,\"2758\":2,\"2766\":1,\"2768\":1,\"2773\":1,\"2774\":1,\"2787\":1,\"2799\":1,\"2837\":3,\"2849\":1,\"2850\":2}}],[\"u\",{\"1\":{\"26\":1,\"323\":1}}],[\"um\",{\"1\":{\"14\":1,\"41\":1}}],[\"uhr\",{\"1\":{\"14\":6,\"41\":1}}],[\"unlock\",{\"1\":{\"832\":2,\"942\":2,\"1017\":2,\"1108\":2,\"1168\":2,\"1246\":2,\"1340\":2,\"1422\":2,\"1517\":2,\"1599\":2,\"1694\":2,\"1776\":2,\"1871\":2,\"1953\":2,\"2048\":2,\"2130\":2,\"2235\":2,\"2345\":2,\"2454\":2,\"2564\":2,\"2673\":2,\"2783\":2}}],[\"unless\",{\"1\":{\"468\":2,\"491\":2,\"517\":2}}],[\"unclear\",{\"1\":{\"413\":1,\"425\":1,\"441\":1,\"455\":1,\"467\":1,\"478\":1,\"490\":1,\"504\":1,\"516\":1,\"530\":1,\"546\":1,\"560\":1,\"576\":1,\"590\":1,\"606\":1,\"624\":1,\"636\":1,\"652\":1,\"670\":1,\"682\":1,\"698\":1,\"716\":1,\"728\":1,\"744\":1,\"762\":1,\"774\":1,\"790\":1}}],[\"uncomment\",{\"1\":{\"285\":1,\"296\":1,\"438\":1,\"464\":1,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1}}],[\"unpack\",{\"1\":{\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"438\":2,\"439\":1,\"464\":2,\"465\":1,\"487\":2,\"488\":1,\"513\":2,\"514\":1,\"543\":2,\"544\":1,\"573\":2,\"574\":1,\"603\":2,\"604\":1,\"649\":2,\"650\":1,\"695\":2,\"696\":1,\"741\":2,\"742\":1,\"787\":2,\"788\":1}}],[\"uname\",{\"1\":{\"279\":2,\"290\":2}}],[\"unary\",{\"1\":{\"155\":2}}],[\"unencrypted\",{\"1\":{\"275\":1,\"284\":1,\"295\":1,\"437\":1,\"463\":1,\"486\":1,\"512\":1,\"542\":1,\"572\":1,\"602\":1,\"648\":1,\"694\":1,\"740\":1,\"786\":1,\"920\":1,\"1012\":1,\"1140\":1,\"1311\":1,\"1488\":1,\"1665\":1,\"1842\":1,\"2019\":1,\"2196\":1,\"2323\":1,\"2415\":1,\"2542\":1,\"2634\":1,\"2761\":1,\"2853\":1}}],[\"unused\",{\"1\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1}}],[\"until\",{\"1\":{\"37\":1,\"189\":1,\"190\":1,\"198\":1,\"199\":1,\"205\":1,\"230\":1,\"243\":1,\"244\":1,\"378\":1,\"853\":1,\"854\":1,\"856\":1,\"857\":1,\"862\":1,\"885\":1,\"888\":1,\"938\":1,\"939\":1,\"1034\":1,\"1035\":1,\"1037\":1,\"1038\":1,\"1044\":1,\"1067\":1,\"1104\":1,\"1105\":1,\"1185\":1,\"1186\":1,\"1188\":1,\"1189\":1,\"1195\":1,\"1218\":1,\"1242\":1,\"1243\":1,\"1358\":1,\"1359\":1,\"1361\":1,\"1362\":1,\"1367\":1,\"1390\":1,\"1393\":1,\"1418\":1,\"1419\":1,\"1535\":1,\"1536\":1,\"1538\":1,\"1539\":1,\"1544\":1,\"1567\":1,\"1570\":1,\"1595\":1,\"1596\":1,\"1712\":1,\"1713\":1,\"1715\":1,\"1716\":1,\"1721\":1,\"1744\":1,\"1747\":1,\"1772\":1,\"1773\":1,\"1889\":1,\"1890\":1,\"1892\":1,\"1893\":1,\"1898\":1,\"1921\":1,\"1924\":1,\"1949\":1,\"1950\":1,\"2066\":1,\"2067\":1,\"2069\":1,\"2070\":1,\"2075\":1,\"2098\":1,\"2101\":1,\"2126\":1,\"2127\":1,\"2256\":1,\"2257\":1,\"2259\":1,\"2260\":1,\"2265\":1,\"2288\":1,\"2291\":1,\"2341\":1,\"2342\":1,\"2475\":1,\"2476\":1,\"2478\":1,\"2479\":1,\"2484\":1,\"2507\":1,\"2510\":1,\"2560\":1,\"2561\":1,\"2694\":1,\"2695\":1,\"2697\":1,\"2698\":1,\"2703\":1,\"2726\":1,\"2729\":1,\"2779\":1,\"2780\":1}}],[\"unter\",{\"1\":{\"16\":1}}],[\"unserer\",{\"1\":{\"14\":2}}],[\"unserem\",{\"1\":{\"14\":1}}],[\"universitaetsmedizinde\",{\"1\":{\"300\":8,\"303\":2}}],[\"university\",{\"0\":{\"73\":1,\"74\":1,\"75\":1,\"78\":2,\"125\":1},\"1\":{\"5\":1,\"11\":1,\"26\":1,\"73\":1,\"74\":1,\"75\":1,\"77\":4,\"78\":1,\"94\":2,\"120\":1,\"125\":3,\"423\":1,\"453\":1,\"476\":1,\"502\":1,\"528\":1,\"558\":1,\"588\":1,\"634\":1,\"680\":1,\"726\":1,\"772\":1}}],[\"union\",{\"1\":{\"155\":1}}],[\"unix\",{\"1\":{\"131\":1}}],[\"uniform\",{\"1\":{\"125\":1}}],[\"unified\",{\"1\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"430\":1,\"456\":1,\"479\":1,\"505\":1,\"535\":1,\"565\":1,\"595\":1,\"641\":1,\"687\":1,\"733\":1,\"779\":1}}],[\"unique\",{\"1\":{\"116\":1,\"379\":1}}],[\"unit\",{\"1\":{\"94\":1}}],[\"units\",{\"1\":{\"91\":1}}],[\"uni\",{\"1\":{\"14\":1}}],[\"under\",{\"1\":{\"430\":1,\"456\":1,\"479\":1,\"505\":1,\"535\":1,\"565\":1,\"595\":1,\"641\":1,\"687\":1,\"733\":1,\"779\":1}}],[\"underscore\",{\"1\":{\"342\":1}}],[\"understood\",{\"1\":{\"91\":1}}],[\"understanding\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"understand\",{\"1\":{\"35\":1,\"85\":1,\"93\":2,\"98\":1,\"116\":2}}],[\"underlying\",{\"1\":{\"123\":1}}],[\"und\",{\"1\":{\"14\":6,\"15\":1,\"16\":1,\"41\":1}}],[\"17\",{\"1\":{\"279\":2,\"290\":2,\"407\":1,\"618\":1,\"664\":1,\"710\":1,\"756\":1}}],[\"172\",{\"1\":{\"265\":1,\"323\":9,\"909\":1,\"1001\":1,\"1130\":1,\"1301\":1,\"1477\":1,\"1654\":1,\"1831\":1,\"2008\":1,\"2185\":1,\"2312\":1,\"2404\":1,\"2531\":1,\"2623\":1,\"2750\":1,\"2842\":1}}],[\"173\",{\"1\":{\"156\":1}}],[\"128\",{\"1\":{\"798\":2,\"925\":2,\"1229\":2,\"1405\":2,\"1582\":2,\"1759\":2,\"1936\":2,\"2113\":2,\"2201\":2,\"2328\":2,\"2420\":2,\"2547\":2,\"2639\":2,\"2766\":2}}],[\"127\",{\"1\":{\"299\":1,\"302\":1,\"305\":1,\"308\":1,\"311\":1,\"323\":7,\"396\":3,\"808\":1,\"830\":1,\"968\":1,\"990\":1,\"1076\":1,\"1098\":1,\"1144\":1,\"1166\":1,\"1268\":1,\"1290\":1,\"1316\":1,\"1338\":1,\"1444\":1,\"1466\":1,\"1493\":1,\"1515\":1,\"1621\":1,\"1643\":1,\"1670\":1,\"1692\":1,\"1798\":1,\"1820\":1,\"1847\":1,\"1869\":1,\"1975\":1,\"1997\":1,\"2024\":1,\"2046\":1,\"2152\":1,\"2174\":1,\"2211\":1,\"2233\":1,\"2371\":1,\"2393\":1,\"2430\":1,\"2452\":1,\"2590\":1,\"2612\":1,\"2649\":1,\"2671\":1,\"2809\":1,\"2831\":1}}],[\"120\",{\"1\":{\"155\":2}}],[\"126\",{\"1\":{\"26\":1}}],[\"16gb\",{\"1\":{\"315\":1,\"390\":1}}],[\"168\",{\"1\":{\"166\":2}}],[\"16\",{\"1\":{\"155\":20,\"285\":2,\"286\":2,\"296\":2,\"297\":2,\"399\":1,\"438\":2,\"439\":2,\"464\":2,\"465\":2,\"487\":2,\"488\":2,\"513\":2,\"514\":2,\"543\":2,\"544\":2,\"573\":2,\"574\":2,\"603\":2,\"604\":2,\"649\":2,\"650\":2,\"695\":2,\"696\":2,\"741\":2,\"742\":2,\"787\":2,\"788\":2}}],[\"1x\",{\"1\":{\"106\":1,\"109\":1,\"161\":1,\"164\":1,\"280\":1,\"291\":1,\"434\":1,\"460\":1,\"483\":1,\"509\":1,\"539\":1,\"569\":1,\"599\":1,\"645\":1,\"691\":1,\"737\":1,\"783\":1}}],[\"1\",{\"0\":{\"42\":1,\"44\":1,\"46\":2,\"48\":1,\"50\":1,\"52\":2,\"54\":1,\"56\":1,\"58\":1,\"60\":2,\"62\":1,\"304\":1,\"307\":1,\"316\":1,\"317\":2,\"322\":2,\"324\":1,\"325\":1,\"335\":2,\"336\":2,\"355\":2,\"356\":2,\"357\":1,\"358\":1,\"381\":2,\"382\":2,\"383\":1,\"384\":1,\"430\":1,\"443\":2,\"456\":1,\"479\":2,\"492\":1,\"505\":1,\"518\":2,\"535\":1,\"548\":1,\"565\":2,\"578\":1,\"595\":1,\"608\":2,\"641\":1,\"654\":1,\"687\":1,\"700\":1,\"733\":2,\"746\":1,\"779\":1,\"792\":2},\"1\":{\"20\":12,\"21\":1,\"42\":4,\"43\":1,\"44\":2,\"46\":4,\"47\":1,\"48\":3,\"49\":1,\"50\":3,\"51\":1,\"52\":4,\"53\":1,\"54\":3,\"55\":1,\"56\":3,\"57\":1,\"58\":3,\"59\":1,\"60\":4,\"61\":1,\"62\":4,\"63\":1,\"94\":1,\"134\":1,\"135\":2,\"153\":1,\"155\":10,\"156\":13,\"158\":3,\"166\":3,\"205\":2,\"230\":2,\"265\":1,\"299\":2,\"300\":2,\"302\":2,\"303\":2,\"304\":1,\"305\":6,\"306\":14,\"307\":2,\"308\":5,\"309\":3,\"310\":2,\"311\":3,\"312\":2,\"317\":2,\"323\":8,\"324\":1,\"333\":1,\"334\":2,\"335\":2,\"338\":2,\"343\":4,\"345\":2,\"352\":1,\"353\":2,\"379\":4,\"394\":3,\"396\":3,\"419\":1,\"421\":1,\"424\":3,\"427\":12,\"428\":1,\"429\":7,\"438\":2,\"439\":2,\"440\":4,\"442\":3,\"443\":8,\"444\":8,\"445\":9,\"449\":1,\"451\":1,\"454\":3,\"464\":2,\"465\":2,\"466\":2,\"468\":2,\"472\":1,\"474\":2,\"477\":3,\"487\":4,\"488\":4,\"489\":2,\"491\":2,\"492\":3,\"493\":10,\"494\":15,\"498\":1,\"500\":1,\"503\":3,\"513\":2,\"514\":2,\"515\":2,\"517\":2,\"518\":3,\"519\":8,\"520\":13,\"524\":1,\"526\":1,\"529\":3,\"543\":2,\"544\":2,\"545\":2,\"547\":3,\"548\":7,\"549\":6,\"550\":8,\"554\":1,\"556\":2,\"559\":3,\"573\":4,\"574\":4,\"575\":2,\"577\":3,\"578\":8,\"579\":10,\"580\":15,\"584\":1,\"586\":2,\"589\":3,\"603\":2,\"604\":2,\"605\":2,\"607\":3,\"608\":8,\"609\":8,\"610\":9,\"630\":1,\"632\":1,\"635\":3,\"649\":2,\"650\":2,\"651\":2,\"653\":3,\"654\":7,\"655\":6,\"656\":8,\"676\":1,\"678\":1,\"681\":3,\"695\":2,\"696\":2,\"697\":2,\"699\":3,\"700\":7,\"701\":6,\"702\":8,\"722\":1,\"724\":2,\"727\":3,\"741\":4,\"742\":4,\"743\":4,\"745\":3,\"746\":8,\"747\":10,\"748\":15,\"768\":1,\"770\":1,\"773\":3,\"776\":12,\"777\":1,\"778\":7,\"787\":2,\"788\":2,\"789\":4,\"791\":3,\"792\":8,\"793\":8,\"794\":9,\"801\":3,\"808\":1,\"830\":1,\"862\":2,\"888\":2,\"892\":1,\"905\":1,\"909\":1,\"928\":3,\"968\":1,\"990\":1,\"997\":1,\"1001\":1,\"1044\":2,\"1067\":2,\"1076\":1,\"1098\":1,\"1130\":1,\"1144\":1,\"1166\":1,\"1195\":2,\"1218\":2,\"1232\":3,\"1268\":1,\"1290\":1,\"1297\":2,\"1301\":1,\"1316\":1,\"1338\":1,\"1367\":2,\"1393\":2,\"1397\":1,\"1408\":3,\"1444\":1,\"1466\":1,\"1473\":1,\"1477\":1,\"1493\":1,\"1515\":1,\"1544\":2,\"1570\":2,\"1574\":1,\"1585\":3,\"1621\":1,\"1643\":1,\"1650\":1,\"1654\":1,\"1670\":1,\"1692\":1,\"1721\":2,\"1747\":2,\"1751\":1,\"1762\":3,\"1798\":1,\"1820\":1,\"1827\":2,\"1831\":1,\"1847\":1,\"1869\":1,\"1898\":2,\"1924\":2,\"1928\":1,\"1939\":3,\"1975\":1,\"1997\":1,\"2004\":1,\"2008\":1,\"2024\":1,\"2046\":1,\"2075\":2,\"2101\":2,\"2105\":1,\"2116\":3,\"2152\":1,\"2174\":1,\"2181\":1,\"2185\":1,\"2204\":3,\"2211\":1,\"2233\":1,\"2265\":2,\"2291\":2,\"2295\":1,\"2308\":1,\"2312\":1,\"2331\":3,\"2371\":1,\"2393\":1,\"2400\":1,\"2404\":1,\"2423\":3,\"2430\":1,\"2452\":1,\"2484\":2,\"2510\":2,\"2514\":1,\"2527\":2,\"2531\":1,\"2550\":3,\"2590\":1,\"2612\":1,\"2619\":2,\"2623\":1,\"2642\":3,\"2649\":1,\"2671\":1,\"2703\":2,\"2729\":2,\"2733\":1,\"2746\":1,\"2750\":1,\"2769\":3,\"2809\":1,\"2831\":1,\"2838\":1,\"2842\":1}}],[\"113549\",{\"1\":{\"801\":1,\"928\":1,\"1232\":1,\"1408\":1,\"1585\":1,\"1762\":1,\"1939\":1,\"2116\":1,\"2204\":1,\"2331\":1,\"2423\":1,\"2550\":1,\"2642\":1,\"2769\":1}}],[\"118\",{\"1\":{\"26\":1}}],[\"111\",{\"1\":{\"26\":1}}],[\"11\",{\"0\":{\"392\":1},\"1\":{\"14\":2,\"129\":1,\"130\":3,\"131\":1,\"300\":2,\"315\":1,\"337\":1,\"390\":1,\"392\":2}}],[\"15s\",{\"1\":{\"519\":1,\"520\":1}}],[\"150\",{\"1\":{\"91\":1,\"93\":1}}],[\"15\",{\"1\":{\"14\":2,\"155\":2}}],[\"18\",{\"1\":{\"14\":1,\"131\":1}}],[\"149\",{\"1\":{\"26\":1}}],[\"142\",{\"1\":{\"26\":1}}],[\"141\",{\"1\":{\"26\":1}}],[\"14\",{\"1\":{\"14\":2,\"41\":1}}],[\"137\",{\"1\":{\"300\":2,\"303\":2,\"306\":2,\"309\":2,\"312\":2,\"445\":2,\"494\":2,\"520\":2,\"550\":2,\"580\":2,\"610\":2,\"656\":2,\"702\":2,\"748\":2,\"794\":2}}],[\"134\",{\"1\":{\"26\":1}}],[\"133\",{\"1\":{\"26\":1}}],[\"13\",{\"1\":{\"14\":1,\"41\":1,\"323\":1}}],[\"100\",{\"1\":{\"368\":2}}],[\"10000\",{\"1\":{\"244\":1,\"831\":1,\"939\":1,\"991\":1,\"1099\":1,\"1105\":1,\"1167\":1,\"1243\":1,\"1291\":1,\"1339\":1,\"1419\":1,\"1467\":1,\"1516\":1,\"1596\":1,\"1644\":1,\"1693\":1,\"1773\":1,\"1821\":1,\"1870\":1,\"1950\":1,\"1998\":1,\"2047\":1,\"2127\":1,\"2175\":1,\"2234\":1,\"2342\":1,\"2394\":1,\"2453\":1,\"2561\":1,\"2613\":1,\"2672\":1,\"2780\":1,\"2832\":1}}],[\"10s\",{\"1\":{\"323\":1,\"519\":1,\"520\":1}}],[\"10\",{\"1\":{\"1\":1,\"14\":2,\"26\":9,\"133\":1,\"885\":1,\"1390\":1,\"1567\":1,\"1744\":1,\"1921\":1,\"2098\":1,\"2288\":1,\"2507\":1,\"2726\":1}}],[\"192\",{\"1\":{\"166\":2}}],[\"19\",{\"1\":{\"26\":1,\"125\":5}}],[\"1993\",{\"1\":{\"1\":1}}],[\"1931\",{\"1\":{\"1\":1}}],[\"v1\",{\"1\":{\"427\":14,\"429\":1,\"520\":6,\"776\":14,\"778\":1}}],[\"vs\",{\"0\":{\"353\":1}}],[\"v0\",{\"1\":{\"286\":7,\"297\":2}}],[\"v25\",{\"1\":{\"300\":1,\"303\":1,\"306\":1}}],[\"v2\",{\"1\":{\"279\":1,\"290\":1}}],[\"vcpu\",{\"1\":{\"278\":2,\"289\":2,\"432\":2,\"458\":2,\"481\":2,\"507\":2,\"537\":2,\"567\":2,\"597\":2,\"643\":2,\"689\":2,\"735\":2,\"781\":2}}],[\"vm\",{\"1\":{\"278\":2,\"289\":2,\"432\":2,\"458\":2,\"481\":2,\"507\":2,\"537\":2,\"567\":2,\"597\":2,\"643\":2,\"689\":2,\"735\":2,\"781\":2}}],[\"vms\",{\"0\":{\"133\":1},\"1\":{\"133\":2,\"279\":1,\"290\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"vectors\",{\"1\":{\"95\":1,\"165\":1}}],[\"versatile\",{\"1\":{\"401\":1,\"612\":1,\"658\":1,\"704\":1,\"750\":1}}],[\"versiongpg\",{\"1\":{\"409\":1,\"620\":1,\"666\":1,\"712\":1,\"758\":1}}],[\"version>\",{\"1\":{\"159\":1}}],[\"version=\",{\"1\":{\"155\":3,\"156\":1}}],[\"versioning\",{\"1\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1}}],[\"versions\",{\"1\":{\"33\":1,\"98\":1,\"137\":1,\"138\":2,\"167\":1,\"300\":2}}],[\"version\",{\"0\":{\"30\":1,\"136\":1,\"137\":1,\"138\":1,\"344\":1,\"353\":1},\"1\":{\"30\":1,\"33\":3,\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"70\":1,\"95\":1,\"137\":3,\"138\":1,\"150\":1,\"159\":2,\"165\":1,\"276\":1,\"286\":7,\"287\":1,\"297\":2,\"299\":1,\"300\":8,\"302\":1,\"303\":8,\"305\":1,\"306\":8,\"307\":1,\"308\":1,\"309\":5,\"310\":1,\"311\":1,\"312\":5,\"323\":1,\"328\":1,\"344\":2,\"353\":2,\"359\":1,\"360\":1,\"385\":1,\"386\":1,\"391\":1,\"392\":1,\"418\":1,\"428\":1,\"433\":2,\"442\":1,\"444\":2,\"445\":6,\"448\":1,\"452\":3,\"456\":1,\"459\":2,\"471\":1,\"475\":3,\"479\":1,\"482\":2,\"493\":2,\"494\":6,\"497\":1,\"501\":3,\"505\":1,\"508\":2,\"519\":2,\"520\":7,\"523\":1,\"538\":2,\"547\":1,\"549\":2,\"550\":6,\"553\":1,\"568\":2,\"577\":1,\"579\":2,\"580\":6,\"583\":1,\"598\":2,\"607\":1,\"609\":2,\"610\":6,\"629\":1,\"644\":2,\"653\":1,\"655\":2,\"656\":6,\"675\":1,\"690\":2,\"699\":1,\"701\":2,\"702\":6,\"721\":1,\"736\":2,\"745\":1,\"747\":2,\"748\":6,\"767\":1,\"777\":1,\"782\":2,\"791\":1,\"793\":2,\"794\":6}}],[\"verification\",{\"0\":{\"332\":1,\"346\":1,\"361\":1,\"371\":1,\"387\":1},\"1\":{\"424\":1,\"454\":1,\"477\":1,\"503\":1,\"529\":1,\"559\":1,\"589\":1,\"635\":1,\"681\":1,\"727\":1,\"773\":1}}],[\"verify\",{\"0\":{\"921\":1,\"1013\":1,\"1312\":1,\"1489\":1,\"1666\":1,\"1843\":1,\"2020\":1,\"2197\":1,\"2324\":1,\"2416\":1,\"2543\":1,\"2635\":1,\"2762\":1,\"2854\":1},\"1\":{\"33\":1,\"37\":1,\"38\":1,\"137\":1,\"138\":1,\"285\":1,\"286\":2,\"296\":1,\"297\":2,\"300\":8,\"303\":8,\"306\":8,\"309\":7,\"312\":7,\"327\":1,\"333\":1,\"334\":5,\"347\":1,\"348\":4,\"362\":1,\"363\":7,\"372\":1,\"373\":5,\"388\":1,\"389\":10,\"429\":1,\"438\":1,\"439\":2,\"445\":7,\"464\":1,\"465\":2,\"487\":1,\"488\":2,\"494\":7,\"513\":1,\"514\":2,\"520\":7,\"543\":1,\"544\":2,\"550\":7,\"573\":1,\"574\":2,\"580\":7,\"603\":1,\"604\":2,\"610\":7,\"649\":1,\"650\":2,\"656\":7,\"695\":1,\"696\":2,\"702\":7,\"741\":1,\"742\":2,\"748\":7,\"778\":1,\"787\":1,\"788\":2,\"794\":7}}],[\"verein\",{\"1\":{\"285\":2,\"296\":2,\"438\":2,\"464\":2,\"487\":2,\"513\":2,\"543\":2,\"573\":2,\"603\":2,\"649\":2,\"695\":2,\"741\":2,\"787\":2}}],[\"verbose\",{\"0\":{\"191\":1,\"200\":1,\"246\":1,\"855\":1,\"858\":1,\"941\":1,\"1036\":1,\"1039\":1,\"1107\":1,\"1187\":1,\"1190\":1,\"1245\":1,\"1360\":1,\"1363\":1,\"1421\":1,\"1537\":1,\"1540\":1,\"1598\":1,\"1714\":1,\"1717\":1,\"1775\":1,\"1891\":1,\"1894\":1,\"1952\":1,\"2068\":1,\"2071\":1,\"2129\":1,\"2258\":1,\"2261\":1,\"2344\":1,\"2477\":1,\"2480\":1,\"2563\":1,\"2696\":1,\"2699\":1,\"2782\":1},\"1\":{\"191\":2,\"200\":2,\"246\":2,\"855\":2,\"858\":2,\"941\":2,\"1036\":2,\"1039\":2,\"1107\":2,\"1187\":2,\"1190\":2,\"1245\":2,\"1360\":2,\"1363\":2,\"1421\":2,\"1537\":2,\"1540\":2,\"1598\":2,\"1714\":2,\"1717\":2,\"1775\":2,\"1891\":2,\"1894\":2,\"1952\":2,\"2068\":2,\"2071\":2,\"2129\":2,\"2258\":2,\"2261\":2,\"2344\":2,\"2477\":2,\"2480\":2,\"2563\":2,\"2696\":2,\"2699\":2,\"2782\":2}}],[\"verbesserungen\",{\"1\":{\"14\":1}}],[\"verwendet\",{\"1\":{\"17\":2}}],[\"verwenden\",{\"1\":{\"16\":1}}],[\"verfügung\",{\"1\":{\"17\":1}}],[\"verlängerter\",{\"1\":{\"14\":1}}],[\"vertraut\",{\"1\":{\"14\":1}}],[\"veranstaltung\",{\"1\":{\"14\":2}}],[\"very\",{\"1\":{\"1\":1,\"33\":1,\"35\":1,\"391\":1,\"425\":1,\"441\":1,\"455\":1,\"467\":1,\"478\":1,\"490\":1,\"504\":1,\"516\":1,\"530\":1,\"546\":1,\"560\":1,\"576\":1,\"590\":1,\"606\":1,\"636\":1,\"652\":1,\"682\":1,\"698\":1,\"728\":1,\"744\":1,\"774\":1,\"790\":1}}],[\"view\",{\"1\":{\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"651\":1,\"697\":1,\"743\":1,\"789\":1}}],[\"virtual\",{\"0\":{\"278\":1,\"289\":1,\"432\":1,\"458\":1,\"481\":1,\"507\":1,\"537\":1,\"567\":1,\"597\":1,\"643\":1,\"689\":1,\"735\":1,\"781\":1},\"1\":{\"442\":2,\"547\":2,\"577\":2,\"607\":2,\"653\":2,\"699\":2,\"745\":2,\"791\":2}}],[\"virtualbox\",{\"1\":{\"133\":1}}],[\"via\",{\"1\":{\"67\":1,\"81\":1,\"86\":3,\"105\":1,\"106\":2,\"108\":3,\"109\":3,\"126\":1,\"130\":1,\"131\":1,\"137\":1,\"161\":2,\"163\":3,\"164\":3,\"182\":1,\"192\":1,\"193\":1,\"194\":1,\"208\":1,\"209\":1,\"215\":1,\"224\":1,\"225\":1,\"273\":1,\"280\":3,\"281\":2,\"291\":3,\"292\":2,\"300\":1,\"303\":1,\"306\":1,\"309\":1,\"312\":1,\"328\":1,\"329\":1,\"331\":1,\"333\":1,\"334\":2,\"343\":1,\"347\":1,\"357\":2,\"358\":1,\"362\":1,\"369\":1,\"372\":1,\"383\":2,\"384\":1,\"386\":1,\"388\":1,\"415\":1,\"425\":1,\"434\":2,\"435\":2,\"445\":1,\"460\":2,\"461\":2,\"483\":2,\"484\":2,\"494\":1,\"509\":2,\"510\":2,\"519\":1,\"520\":1,\"539\":2,\"540\":2,\"550\":1,\"560\":1,\"569\":2,\"570\":2,\"580\":1,\"590\":1,\"599\":2,\"600\":2,\"610\":1,\"626\":1,\"636\":1,\"645\":2,\"646\":2,\"656\":1,\"672\":1,\"682\":1,\"691\":2,\"692\":2,\"702\":1,\"718\":1,\"728\":1,\"737\":2,\"738\":2,\"748\":1,\"764\":1,\"774\":1,\"783\":2,\"784\":2,\"794\":1,\"798\":2,\"799\":1,\"801\":2,\"804\":1,\"843\":1,\"844\":1,\"847\":1,\"848\":1,\"849\":1,\"865\":1,\"866\":1,\"872\":1,\"881\":1,\"882\":1,\"902\":2,\"903\":2,\"918\":1,\"925\":3,\"926\":1,\"928\":2,\"931\":1,\"953\":1,\"954\":1,\"955\":1,\"959\":1,\"993\":2,\"994\":2,\"1010\":1,\"1030\":1,\"1047\":1,\"1048\":1,\"1054\":1,\"1063\":1,\"1064\":1,\"1138\":1,\"1181\":1,\"1198\":1,\"1199\":1,\"1205\":1,\"1214\":1,\"1215\":1,\"1229\":3,\"1230\":1,\"1232\":2,\"1235\":1,\"1260\":1,\"1293\":2,\"1294\":2,\"1309\":1,\"1353\":1,\"1354\":1,\"1370\":1,\"1371\":1,\"1377\":1,\"1386\":1,\"1387\":1,\"1405\":3,\"1406\":1,\"1408\":2,\"1411\":1,\"1436\":1,\"1469\":2,\"1470\":2,\"1486\":1,\"1530\":1,\"1531\":1,\"1547\":1,\"1548\":1,\"1554\":1,\"1563\":1,\"1564\":1,\"1582\":3,\"1583\":1,\"1585\":2,\"1588\":1,\"1613\":1,\"1646\":2,\"1647\":2,\"1663\":1,\"1707\":1,\"1708\":1,\"1724\":1,\"1725\":1,\"1731\":1,\"1740\":1,\"1741\":1,\"1759\":3,\"1760\":1,\"1762\":2,\"1765\":1,\"1790\":1,\"1823\":2,\"1824\":2,\"1840\":1,\"1884\":1,\"1885\":1,\"1901\":1,\"1902\":1,\"1908\":1,\"1917\":1,\"1918\":1,\"1936\":3,\"1937\":1,\"1939\":2,\"1942\":1,\"1967\":1,\"2000\":2,\"2001\":2,\"2017\":1,\"2061\":1,\"2062\":1,\"2078\":1,\"2079\":1,\"2085\":1,\"2094\":1,\"2095\":1,\"2113\":3,\"2114\":1,\"2116\":2,\"2119\":1,\"2144\":1,\"2177\":2,\"2178\":2,\"2194\":1,\"2201\":2,\"2202\":1,\"2204\":2,\"2207\":1,\"2246\":1,\"2247\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2268\":1,\"2269\":1,\"2275\":1,\"2284\":1,\"2285\":1,\"2305\":2,\"2306\":2,\"2321\":1,\"2328\":3,\"2329\":1,\"2331\":2,\"2334\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2362\":1,\"2396\":2,\"2397\":2,\"2413\":1,\"2420\":2,\"2421\":1,\"2423\":2,\"2426\":1,\"2465\":1,\"2466\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2487\":1,\"2488\":1,\"2494\":1,\"2503\":1,\"2504\":1,\"2524\":2,\"2525\":2,\"2540\":1,\"2547\":3,\"2548\":1,\"2550\":2,\"2553\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2581\":1,\"2615\":2,\"2616\":2,\"2632\":1,\"2639\":2,\"2640\":1,\"2642\":2,\"2645\":1,\"2684\":1,\"2685\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2706\":1,\"2707\":1,\"2713\":1,\"2722\":1,\"2723\":1,\"2743\":2,\"2744\":2,\"2759\":1,\"2766\":3,\"2767\":1,\"2769\":2,\"2772\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2800\":1,\"2834\":2,\"2835\":2,\"2851\":1}}],[\"visiting\",{\"1\":{\"89\":1,\"401\":1,\"612\":1,\"658\":1,\"704\":1,\"750\":1}}],[\"visit\",{\"1\":{\"12\":1,\"13\":1,\"301\":1,\"411\":1,\"413\":1,\"418\":1,\"426\":1,\"441\":1,\"467\":1,\"490\":1,\"516\":1,\"546\":1,\"576\":1,\"606\":1,\"622\":1,\"624\":1,\"629\":1,\"652\":1,\"668\":1,\"670\":1,\"675\":1,\"698\":1,\"714\":1,\"716\":1,\"721\":1,\"744\":1,\"760\":1,\"762\":1,\"767\":1,\"775\":1,\"790\":1}}],[\"vulnerabilities\",{\"1\":{\"35\":2,\"36\":1,\"39\":1}}],[\"vulnerability\",{\"0\":{\"34\":1,\"37\":1},\"1\":{\"36\":1,\"37\":4,\"38\":3}}],[\"v\",{\"0\":{\"31\":1},\"1\":{\"106\":1,\"108\":3,\"109\":3,\"132\":1,\"133\":1,\"161\":1,\"163\":3,\"164\":3,\"280\":3,\"291\":3,\"434\":2,\"460\":2,\"483\":2,\"509\":2,\"539\":2,\"569\":2,\"599\":2,\"645\":2,\"691\":2,\"737\":2,\"783\":2}}],[\"volumes\",{\"1\":{\"323\":9}}],[\"volume\",{\"1\":{\"132\":1,\"323\":1}}],[\"vocabulary\",{\"1\":{\"91\":1}}],[\"vom\",{\"1\":{\"16\":1}}],[\"vorhanden\",{\"1\":{\"16\":1}}],[\"vor\",{\"1\":{\"15\":1,\"17\":1}}],[\"voraussetzungen\",{\"1\":{\"15\":1}}],[\"vorbereitung\",{\"0\":{\"15\":1},\"1\":{\"14\":1,\"15\":1}}],[\"von\",{\"1\":{\"14\":2}}],[\"varying\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"variableslocal\",{\"0\":{\"848\":1,\"1354\":1,\"1531\":1,\"1708\":1,\"1885\":1,\"2062\":1,\"2251\":1,\"2470\":1,\"2689\":1},\"1\":{\"848\":1,\"1354\":1,\"1531\":1,\"1708\":1,\"1885\":1,\"2062\":1,\"2251\":1,\"2470\":1,\"2689\":1}}],[\"variables\",{\"0\":{\"182\":1,\"342\":1,\"369\":1,\"847\":1,\"1030\":1,\"1181\":1,\"1353\":1,\"1530\":1,\"1707\":1,\"1884\":1,\"2061\":1,\"2250\":1,\"2469\":1,\"2688\":1},\"1\":{\"135\":1,\"182\":2,\"285\":3,\"286\":2,\"296\":3,\"297\":2,\"300\":2,\"320\":1,\"334\":1,\"341\":1,\"342\":3,\"358\":1,\"365\":1,\"368\":1,\"369\":3,\"370\":1,\"384\":1,\"438\":3,\"439\":2,\"464\":3,\"465\":2,\"487\":3,\"488\":2,\"513\":3,\"514\":2,\"543\":3,\"544\":2,\"573\":3,\"574\":2,\"603\":3,\"604\":2,\"649\":3,\"650\":2,\"695\":3,\"696\":2,\"741\":3,\"742\":2,\"787\":3,\"788\":2,\"847\":2,\"848\":1,\"1030\":2,\"1181\":2,\"1353\":2,\"1354\":1,\"1530\":2,\"1531\":1,\"1707\":2,\"1708\":1,\"1884\":2,\"1885\":1,\"2061\":2,\"2062\":1,\"2250\":2,\"2251\":1,\"2469\":2,\"2470\":1,\"2688\":2,\"2689\":1}}],[\"variable\",{\"1\":{\"134\":2,\"155\":2,\"156\":1,\"337\":2,\"342\":3,\"345\":4,\"348\":3,\"360\":1,\"368\":1,\"369\":4,\"370\":2,\"427\":1,\"464\":1,\"776\":1,\"798\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"various\",{\"1\":{\"5\":1,\"116\":2,\"392\":1}}],[\"var\",{\"1\":{\"132\":1,\"323\":1}}],[\"valuable\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"valued\",{\"1\":{\"414\":1,\"625\":1,\"671\":1,\"717\":1,\"763\":1}}],[\"valuecoding>\",{\"1\":{\"359\":2,\"385\":4}}],[\"valueidentifier>\",{\"1\":{\"359\":2,\"385\":2}}],[\"value>\",{\"1\":{\"156\":1}}],[\"value=\",{\"1\":{\"155\":317,\"156\":36,\"344\":2,\"359\":10,\"385\":14}}],[\"values\",{\"1\":{\"122\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"334\":1,\"341\":1,\"342\":1,\"343\":1,\"344\":1,\"386\":2,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1,\"799\":1,\"801\":2,\"804\":1,\"896\":1,\"926\":1,\"928\":2,\"931\":1,\"963\":1,\"1230\":1,\"1232\":2,\"1235\":1,\"1406\":1,\"1408\":2,\"1411\":1,\"1583\":1,\"1585\":2,\"1588\":1,\"1760\":1,\"1762\":2,\"1765\":1,\"1937\":1,\"1939\":2,\"1942\":1,\"2114\":1,\"2116\":2,\"2119\":1,\"2202\":1,\"2204\":2,\"2207\":1,\"2299\":1,\"2329\":1,\"2331\":2,\"2334\":1,\"2366\":1,\"2421\":1,\"2423\":2,\"2426\":1,\"2518\":1,\"2548\":1,\"2550\":2,\"2553\":1,\"2585\":1,\"2640\":1,\"2642\":2,\"2645\":1,\"2737\":1,\"2767\":1,\"2769\":2,\"2772\":1,\"2804\":1}}],[\"valueset\",{\"1\":{\"93\":1,\"343\":1,\"344\":1,\"345\":3,\"357\":2,\"358\":2,\"383\":2,\"384\":2}}],[\"value\",{\"0\":{\"204\":1,\"259\":1,\"958\":1,\"1043\":1,\"1121\":1,\"1194\":1,\"1259\":1,\"1435\":1,\"1612\":1,\"1789\":1,\"1966\":1,\"2143\":1,\"2361\":1,\"2580\":1,\"2799\":1},\"1\":{\"38\":1,\"148\":1,\"149\":1,\"170\":1,\"189\":1,\"190\":1,\"198\":1,\"199\":1,\"204\":2,\"227\":1,\"228\":1,\"234\":1,\"243\":1,\"244\":1,\"259\":2,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"300\":2,\"303\":1,\"323\":6,\"342\":2,\"344\":1,\"345\":5,\"348\":2,\"355\":1,\"356\":1,\"357\":1,\"358\":3,\"360\":2,\"368\":1,\"381\":1,\"382\":1,\"383\":1,\"384\":3,\"386\":1,\"389\":1,\"438\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1,\"798\":2,\"799\":1,\"853\":1,\"854\":1,\"856\":1,\"857\":1,\"892\":1,\"925\":2,\"926\":1,\"938\":1,\"939\":1,\"958\":2,\"1034\":1,\"1035\":1,\"1037\":1,\"1038\":1,\"1043\":2,\"1104\":1,\"1105\":1,\"1121\":2,\"1185\":1,\"1186\":1,\"1188\":1,\"1189\":1,\"1194\":2,\"1229\":2,\"1230\":1,\"1242\":1,\"1243\":1,\"1259\":2,\"1358\":1,\"1359\":1,\"1361\":1,\"1362\":1,\"1397\":1,\"1405\":2,\"1406\":1,\"1418\":1,\"1419\":1,\"1435\":2,\"1535\":1,\"1536\":1,\"1538\":1,\"1539\":1,\"1574\":1,\"1582\":2,\"1583\":1,\"1595\":1,\"1596\":1,\"1612\":2,\"1712\":1,\"1713\":1,\"1715\":1,\"1716\":1,\"1751\":1,\"1759\":2,\"1760\":1,\"1772\":1,\"1773\":1,\"1789\":2,\"1889\":1,\"1890\":1,\"1892\":1,\"1893\":1,\"1928\":1,\"1936\":2,\"1937\":1,\"1949\":1,\"1950\":1,\"1966\":2,\"2066\":1,\"2067\":1,\"2069\":1,\"2070\":1,\"2105\":1,\"2113\":2,\"2114\":1,\"2126\":1,\"2127\":1,\"2143\":2,\"2201\":2,\"2202\":1,\"2256\":1,\"2257\":1,\"2259\":1,\"2260\":1,\"2295\":1,\"2328\":2,\"2329\":1,\"2341\":1,\"2342\":1,\"2361\":2,\"2420\":2,\"2421\":1,\"2475\":1,\"2476\":1,\"2478\":1,\"2479\":1,\"2514\":1,\"2547\":2,\"2548\":1,\"2560\":1,\"2561\":1,\"2580\":2,\"2639\":2,\"2640\":1,\"2694\":1,\"2695\":1,\"2697\":1,\"2698\":1,\"2733\":1,\"2766\":2,\"2767\":1,\"2779\":1,\"2780\":1,\"2799\":2}}],[\"valid\",{\"1\":{\"106\":1,\"161\":1,\"425\":1,\"560\":1,\"590\":1,\"636\":1,\"682\":1,\"728\":1,\"774\":1}}],[\"validating\",{\"1\":{\"281\":1,\"292\":1}}],[\"validation\",{\"1\":{\"1\":1,\"26\":1}}],[\"validate\",{\"1\":{\"95\":1,\"165\":1,\"201\":1,\"224\":1,\"245\":1,\"271\":1,\"822\":1,\"824\":1,\"859\":1,\"881\":1,\"916\":1,\"940\":1,\"982\":1,\"984\":1,\"1008\":1,\"1040\":1,\"1063\":1,\"1090\":1,\"1092\":1,\"1106\":1,\"1136\":1,\"1158\":1,\"1160\":1,\"1191\":1,\"1214\":1,\"1244\":1,\"1282\":1,\"1284\":1,\"1307\":1,\"1330\":1,\"1332\":1,\"1364\":1,\"1386\":1,\"1420\":1,\"1458\":1,\"1460\":1,\"1484\":1,\"1507\":1,\"1509\":1,\"1541\":1,\"1563\":1,\"1597\":1,\"1635\":1,\"1637\":1,\"1661\":1,\"1684\":1,\"1686\":1,\"1718\":1,\"1740\":1,\"1774\":1,\"1812\":1,\"1814\":1,\"1838\":1,\"1861\":1,\"1863\":1,\"1895\":1,\"1917\":1,\"1951\":1,\"1989\":1,\"1991\":1,\"2015\":1,\"2038\":1,\"2040\":1,\"2072\":1,\"2094\":1,\"2128\":1,\"2166\":1,\"2168\":1,\"2192\":1,\"2225\":1,\"2227\":1,\"2262\":1,\"2284\":1,\"2319\":1,\"2343\":1,\"2385\":1,\"2387\":1,\"2411\":1,\"2444\":1,\"2446\":1,\"2481\":1,\"2503\":1,\"2538\":1,\"2562\":1,\"2604\":1,\"2606\":1,\"2630\":1,\"2663\":1,\"2665\":1,\"2700\":1,\"2722\":1,\"2757\":1,\"2781\":1,\"2823\":1,\"2825\":1,\"2849\":1}}],[\"validated\",{\"1\":{\"5\":1,\"91\":1,\"282\":1,\"293\":1}}],[\"hrp\",{\"1\":{\"323\":65,\"375\":1,\"386\":5,\"389\":9,\"396\":1,\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"hdd\",{\"1\":{\"278\":2,\"289\":2,\"432\":2,\"458\":2,\"481\":2,\"507\":2,\"537\":2,\"567\":2,\"597\":2,\"643\":2,\"689\":2,\"735\":2,\"781\":2}}],[\"html\",{\"1\":{\"142\":2,\"155\":1}}],[\"httpd\",{\"1\":{\"271\":1,\"272\":1,\"273\":1,\"274\":1,\"275\":1,\"916\":1,\"917\":1,\"918\":1,\"919\":1,\"920\":1,\"1008\":1,\"1009\":1,\"1010\":1,\"1011\":1,\"1012\":1,\"1136\":1,\"1137\":1,\"1138\":1,\"1139\":1,\"1140\":1,\"1307\":1,\"1308\":1,\"1309\":1,\"1310\":1,\"1311\":1,\"1484\":1,\"1485\":1,\"1486\":1,\"1487\":1,\"1488\":1,\"1661\":1,\"1662\":1,\"1663\":1,\"1664\":1,\"1665\":1,\"1838\":1,\"1839\":1,\"1840\":1,\"1841\":1,\"1842\":1,\"2015\":1,\"2016\":1,\"2017\":1,\"2018\":1,\"2019\":1,\"2192\":1,\"2193\":1,\"2194\":1,\"2195\":1,\"2196\":1,\"2319\":1,\"2320\":1,\"2321\":1,\"2322\":1,\"2323\":1,\"2411\":1,\"2412\":1,\"2413\":1,\"2414\":1,\"2415\":1,\"2538\":1,\"2539\":1,\"2540\":1,\"2541\":1,\"2542\":1,\"2630\":1,\"2631\":1,\"2632\":1,\"2633\":1,\"2634\":1,\"2757\":1,\"2758\":1,\"2759\":1,\"2760\":1,\"2761\":1,\"2849\":1,\"2850\":1,\"2851\":1,\"2852\":1,\"2853\":1}}],[\"http\",{\"0\":{\"267\":1,\"269\":1,\"911\":1,\"913\":1,\"1003\":1,\"1005\":1,\"1132\":1,\"1134\":1,\"1303\":1,\"1305\":1,\"1479\":1,\"1481\":1,\"1656\":1,\"1658\":1,\"1833\":1,\"1835\":1,\"2010\":1,\"2012\":1,\"2187\":1,\"2189\":1,\"2314\":1,\"2316\":1,\"2406\":1,\"2408\":1,\"2533\":1,\"2535\":1,\"2625\":1,\"2627\":1,\"2752\":1,\"2754\":1,\"2844\":1,\"2846\":1},\"1\":{\"86\":1,\"95\":1,\"135\":1,\"158\":4,\"165\":1,\"166\":1,\"187\":1,\"193\":1,\"196\":1,\"241\":1,\"257\":1,\"267\":1,\"269\":1,\"281\":2,\"292\":2,\"334\":1,\"344\":1,\"345\":2,\"353\":1,\"354\":2,\"357\":5,\"358\":3,\"359\":8,\"360\":1,\"380\":2,\"383\":5,\"384\":3,\"385\":10,\"389\":1,\"394\":4,\"435\":2,\"461\":2,\"484\":2,\"510\":2,\"540\":2,\"570\":2,\"600\":2,\"646\":2,\"692\":2,\"738\":2,\"784\":2,\"810\":1,\"899\":2,\"911\":1,\"913\":1,\"932\":1,\"933\":2,\"966\":2,\"970\":1,\"1003\":1,\"1005\":1,\"1073\":2,\"1078\":1,\"1127\":2,\"1132\":1,\"1134\":1,\"1146\":1,\"1224\":2,\"1236\":1,\"1237\":2,\"1266\":2,\"1270\":1,\"1303\":1,\"1305\":1,\"1318\":1,\"1400\":2,\"1412\":1,\"1413\":2,\"1442\":2,\"1446\":1,\"1479\":1,\"1481\":1,\"1495\":1,\"1577\":2,\"1589\":1,\"1590\":2,\"1619\":2,\"1623\":1,\"1656\":1,\"1658\":1,\"1672\":1,\"1754\":2,\"1766\":1,\"1767\":2,\"1796\":2,\"1800\":1,\"1833\":1,\"1835\":1,\"1849\":1,\"1931\":2,\"1943\":1,\"1944\":2,\"1973\":2,\"1977\":1,\"2010\":1,\"2012\":1,\"2026\":1,\"2108\":2,\"2120\":1,\"2121\":2,\"2150\":2,\"2154\":1,\"2187\":1,\"2189\":1,\"2213\":1,\"2302\":2,\"2314\":1,\"2316\":1,\"2335\":1,\"2336\":2,\"2369\":2,\"2373\":1,\"2406\":1,\"2408\":1,\"2432\":1,\"2521\":2,\"2533\":1,\"2535\":1,\"2554\":1,\"2555\":2,\"2588\":2,\"2592\":1,\"2625\":1,\"2627\":1,\"2651\":1,\"2740\":2,\"2752\":1,\"2754\":1,\"2773\":1,\"2774\":2,\"2807\":2,\"2811\":1,\"2844\":1,\"2846\":1}}],[\"https\",{\"0\":{\"266\":1,\"910\":1,\"1002\":1,\"1131\":1,\"1302\":1,\"1478\":1,\"1655\":1,\"1832\":1,\"2009\":1,\"2186\":1,\"2313\":1,\"2405\":1,\"2532\":1,\"2624\":1,\"2751\":1,\"2843\":1},\"1\":{\"14\":2,\"17\":1,\"22\":1,\"41\":1,\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"86\":1,\"90\":1,\"95\":2,\"112\":2,\"130\":2,\"131\":2,\"135\":1,\"165\":2,\"183\":1,\"201\":1,\"203\":1,\"237\":1,\"245\":1,\"256\":1,\"279\":6,\"281\":5,\"285\":7,\"286\":15,\"290\":6,\"292\":5,\"296\":7,\"297\":10,\"299\":8,\"300\":4,\"303\":3,\"306\":2,\"309\":2,\"312\":2,\"323\":6,\"334\":3,\"363\":3,\"389\":3,\"424\":1,\"429\":1,\"433\":4,\"435\":5,\"438\":4,\"439\":3,\"445\":2,\"454\":1,\"459\":4,\"461\":5,\"464\":4,\"465\":3,\"477\":1,\"482\":4,\"484\":5,\"487\":4,\"488\":3,\"494\":2,\"503\":1,\"508\":4,\"510\":5,\"513\":4,\"514\":3,\"520\":2,\"529\":1,\"532\":2,\"533\":2,\"534\":1,\"538\":4,\"540\":5,\"543\":4,\"544\":3,\"550\":2,\"559\":1,\"562\":2,\"563\":2,\"564\":1,\"568\":4,\"570\":5,\"573\":4,\"574\":3,\"580\":2,\"589\":1,\"592\":2,\"593\":3,\"594\":1,\"598\":4,\"600\":5,\"603\":4,\"604\":3,\"610\":2,\"635\":1,\"638\":2,\"639\":3,\"640\":1,\"644\":4,\"646\":5,\"649\":4,\"650\":3,\"656\":2,\"681\":1,\"684\":2,\"685\":3,\"686\":1,\"690\":4,\"692\":5,\"695\":4,\"696\":3,\"702\":2,\"727\":1,\"730\":2,\"731\":4,\"732\":1,\"736\":4,\"738\":5,\"741\":4,\"742\":3,\"748\":2,\"773\":1,\"778\":1,\"782\":4,\"784\":5,\"787\":4,\"788\":3,\"794\":2,\"817\":1,\"822\":1,\"823\":1,\"824\":1,\"850\":1,\"859\":1,\"861\":1,\"893\":2,\"899\":1,\"905\":1,\"935\":1,\"940\":1,\"956\":1,\"966\":1,\"977\":1,\"982\":1,\"983\":1,\"984\":1,\"997\":1,\"1031\":1,\"1040\":1,\"1042\":1,\"1073\":1,\"1085\":1,\"1090\":1,\"1091\":1,\"1092\":1,\"1101\":1,\"1106\":1,\"1119\":1,\"1127\":1,\"1153\":1,\"1158\":1,\"1159\":1,\"1160\":1,\"1182\":1,\"1191\":1,\"1193\":1,\"1224\":1,\"1239\":1,\"1244\":1,\"1257\":1,\"1266\":1,\"1277\":1,\"1282\":1,\"1283\":1,\"1284\":1,\"1297\":1,\"1325\":1,\"1330\":1,\"1331\":1,\"1332\":1,\"1355\":1,\"1364\":1,\"1366\":1,\"1400\":1,\"1415\":1,\"1420\":1,\"1433\":1,\"1442\":1,\"1453\":1,\"1458\":1,\"1459\":1,\"1460\":1,\"1473\":1,\"1502\":1,\"1507\":1,\"1508\":1,\"1509\":1,\"1532\":1,\"1541\":1,\"1543\":1,\"1577\":1,\"1592\":1,\"1597\":1,\"1610\":1,\"1619\":1,\"1630\":1,\"1635\":1,\"1636\":1,\"1637\":1,\"1650\":1,\"1679\":1,\"1684\":1,\"1685\":1,\"1686\":1,\"1709\":1,\"1718\":1,\"1720\":1,\"1754\":1,\"1769\":1,\"1774\":1,\"1787\":1,\"1796\":1,\"1807\":1,\"1812\":1,\"1813\":1,\"1814\":1,\"1827\":1,\"1856\":1,\"1861\":1,\"1862\":1,\"1863\":1,\"1886\":1,\"1895\":1,\"1897\":1,\"1931\":1,\"1946\":1,\"1951\":1,\"1964\":1,\"1973\":1,\"1984\":1,\"1989\":1,\"1990\":1,\"1991\":1,\"2004\":1,\"2033\":1,\"2038\":1,\"2039\":1,\"2040\":1,\"2063\":1,\"2072\":1,\"2074\":1,\"2108\":1,\"2123\":1,\"2128\":1,\"2141\":1,\"2150\":1,\"2161\":1,\"2166\":1,\"2167\":1,\"2168\":1,\"2181\":1,\"2220\":1,\"2225\":1,\"2226\":1,\"2227\":1,\"2253\":1,\"2262\":1,\"2264\":1,\"2296\":2,\"2302\":1,\"2308\":1,\"2338\":1,\"2343\":1,\"2359\":1,\"2369\":1,\"2380\":1,\"2385\":1,\"2386\":1,\"2387\":1,\"2400\":1,\"2439\":1,\"2444\":1,\"2445\":1,\"2446\":1,\"2472\":1,\"2481\":1,\"2483\":1,\"2515\":2,\"2521\":1,\"2527\":1,\"2557\":1,\"2562\":1,\"2578\":1,\"2588\":1,\"2599\":1,\"2604\":1,\"2605\":1,\"2606\":1,\"2619\":1,\"2658\":1,\"2663\":1,\"2664\":1,\"2665\":1,\"2691\":1,\"2700\":1,\"2702\":1,\"2734\":2,\"2740\":1,\"2746\":1,\"2776\":1,\"2781\":1,\"2797\":1,\"2807\":1,\"2818\":1,\"2823\":1,\"2824\":1,\"2825\":1,\"2838\":1}}],[\"hyper\",{\"1\":{\"133\":1}}],[\"hl7\",{\"0\":{\"91\":1},\"1\":{\"89\":1,\"91\":1,\"112\":1,\"113\":1,\"123\":1}}],[\"hub\",{\"1\":{\"87\":1,\"126\":1,\"281\":4,\"282\":2,\"292\":4,\"293\":2}}],[\"hund\",{\"1\":{\"1\":1,\"26\":9,\"79\":1,\"314\":1}}],[\"h\",{\"1\":{\"26\":10,\"101\":1,\"314\":1}}],[\"hhn\",{\"1\":{\"16\":1,\"77\":1,\"78\":1}}],[\"hs\",{\"1\":{\"12\":1,\"16\":2,\"22\":1,\"37\":1,\"40\":1,\"67\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"425\":1,\"438\":1,\"441\":1,\"454\":2,\"455\":1,\"464\":1,\"465\":1,\"467\":1,\"477\":2,\"478\":1,\"487\":1,\"488\":1,\"490\":1,\"503\":2,\"504\":1,\"513\":1,\"514\":1,\"516\":1,\"529\":2,\"530\":1,\"543\":1,\"544\":1,\"546\":1,\"560\":1,\"573\":1,\"576\":1,\"590\":1,\"603\":1,\"606\":1,\"636\":1,\"649\":1,\"652\":1,\"682\":1,\"695\":1,\"698\":1,\"728\":1,\"741\":1,\"744\":1,\"774\":1,\"787\":1,\"790\":1}}],[\"he\",{\"1\":{\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"hex\",{\"1\":{\"261\":1,\"262\":1,\"285\":3,\"296\":3,\"438\":1,\"464\":2,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1,\"798\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"hellohrpmessage\",{\"1\":{\"386\":1}}],[\"hellohrp\",{\"1\":{\"386\":3,\"389\":4}}],[\"hellocosmessage\",{\"1\":{\"360\":2,\"386\":1}}],[\"hellocos\",{\"1\":{\"350\":1,\"360\":5,\"363\":4,\"370\":2,\"373\":3,\"386\":4,\"389\":3}}],[\"hellodictask\",{\"1\":{\"386\":1}}],[\"hellodic\",{\"1\":{\"331\":5,\"334\":5,\"338\":3,\"340\":1,\"345\":4,\"348\":6,\"350\":1,\"360\":3,\"363\":6,\"365\":1,\"370\":4,\"373\":6,\"386\":1,\"389\":8}}],[\"hello\",{\"1\":{\"166\":1,\"331\":1,\"334\":1,\"345\":1,\"360\":3,\"363\":1,\"386\":5,\"389\":1,\"418\":1,\"419\":1,\"448\":1,\"449\":1,\"471\":1,\"472\":1,\"497\":1,\"498\":1,\"523\":1,\"524\":1,\"553\":1,\"554\":1,\"583\":1,\"584\":1,\"629\":1,\"630\":1,\"675\":1,\"676\":1,\"721\":1,\"722\":1,\"767\":1,\"768\":1}}],[\"helpful\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"help\",{\"1\":{\"415\":5,\"626\":5,\"672\":5,\"718\":5,\"764\":5}}],[\"helping\",{\"1\":{\"413\":1,\"415\":1,\"624\":1,\"626\":1,\"670\":1,\"672\":1,\"716\":1,\"718\":1,\"762\":1,\"764\":1}}],[\"helper\",{\"1\":{\"98\":1}}],[\"helps\",{\"1\":{\"36\":1,\"84\":1,\"401\":1,\"411\":1,\"413\":1,\"612\":1,\"622\":1,\"624\":1,\"658\":1,\"668\":1,\"670\":1,\"704\":1,\"714\":1,\"716\":1,\"750\":1,\"760\":1,\"762\":1}}],[\"hear\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"heap\",{\"1\":{\"337\":1}}],[\"headless\",{\"1\":{\"337\":1}}],[\"head\",{\"1\":{\"281\":2,\"292\":2,\"413\":1,\"435\":2,\"461\":2,\"484\":2,\"510\":2,\"540\":2,\"570\":2,\"600\":2,\"624\":1,\"646\":2,\"670\":1,\"692\":2,\"716\":1,\"738\":2,\"762\":1,\"784\":2}}],[\"header\",{\"0\":{\"810\":1,\"970\":1,\"1078\":1,\"1146\":1,\"1270\":1,\"1318\":1,\"1446\":1,\"1495\":1,\"1623\":1,\"1672\":1,\"1800\":1,\"1849\":1,\"1977\":1,\"2026\":1,\"2154\":1,\"2213\":1,\"2373\":1,\"2432\":1,\"2592\":1,\"2651\":1,\"2811\":1},\"1\":{\"155\":6,\"257\":1,\"810\":2,\"970\":2,\"1078\":2,\"1146\":2,\"1270\":2,\"1318\":2,\"1446\":2,\"1495\":2,\"1623\":2,\"1672\":2,\"1800\":2,\"1849\":2,\"1977\":2,\"2026\":2,\"2154\":2,\"2213\":2,\"2373\":2,\"2432\":2,\"2592\":2,\"2651\":2,\"2811\":2}}],[\"healthcheck\",{\"1\":{\"299\":1,\"300\":2,\"302\":1,\"303\":2,\"305\":1,\"306\":2,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"323\":1,\"519\":3,\"520\":3}}],[\"healthcare\",{\"1\":{\"26\":1,\"29\":1,\"112\":1,\"113\":2}}],[\"health\",{\"1\":{\"26\":9,\"73\":2,\"75\":1,\"77\":1,\"91\":1}}],[\"heterogeny\",{\"1\":{\"94\":1}}],[\"heterogeneous\",{\"1\":{\"94\":1}}],[\"her\",{\"1\":{\"94\":1}}],[\"herzlich\",{\"1\":{\"14\":1}}],[\"here\",{\"0\":{\"425\":1,\"455\":1,\"478\":1,\"504\":1,\"530\":1,\"560\":1,\"590\":1,\"636\":1,\"682\":1,\"728\":1,\"774\":1},\"1\":{\"12\":1,\"37\":1,\"40\":1,\"84\":1,\"87\":2,\"88\":1,\"89\":2,\"106\":1,\"152\":1,\"153\":1,\"169\":1,\"236\":1,\"281\":1,\"285\":2,\"292\":1,\"296\":2,\"391\":2,\"393\":2,\"395\":3,\"397\":2,\"398\":1,\"411\":1,\"414\":1,\"418\":1,\"426\":1,\"427\":1,\"428\":1,\"435\":1,\"448\":1,\"453\":1,\"454\":2,\"461\":1,\"471\":1,\"476\":1,\"477\":2,\"484\":1,\"497\":1,\"502\":1,\"503\":2,\"510\":1,\"523\":1,\"528\":1,\"530\":2,\"540\":1,\"553\":1,\"570\":1,\"583\":1,\"600\":1,\"622\":1,\"625\":1,\"629\":1,\"646\":1,\"668\":1,\"671\":1,\"675\":1,\"692\":1,\"714\":1,\"717\":1,\"721\":1,\"738\":1,\"760\":1,\"763\":1,\"767\":1,\"775\":1,\"776\":1,\"777\":1,\"784\":1,\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"heinze\",{\"1\":{\"26\":2}}],[\"heidt\",{\"1\":{\"26\":2}}],[\"heidelberg\",{\"0\":{\"74\":1,\"78\":1},\"1\":{\"14\":1,\"74\":1,\"77\":1,\"78\":1}}],[\"heiconf\",{\"1\":{\"14\":1}}],[\"heilbronn\",{\"0\":{\"73\":1,\"78\":1},\"1\":{\"12\":1,\"16\":3,\"22\":1,\"37\":1,\"40\":1,\"67\":1,\"73\":1,\"77\":1,\"285\":2,\"286\":1,\"296\":2,\"297\":1,\"423\":1,\"425\":1,\"438\":1,\"441\":1,\"453\":1,\"454\":2,\"455\":1,\"464\":1,\"465\":1,\"467\":1,\"476\":1,\"477\":2,\"478\":1,\"487\":1,\"488\":1,\"490\":1,\"502\":1,\"503\":2,\"504\":1,\"513\":1,\"514\":1,\"516\":1,\"528\":1,\"529\":2,\"530\":1,\"543\":1,\"544\":1,\"546\":1,\"558\":1,\"560\":1,\"573\":1,\"576\":1,\"588\":1,\"590\":1,\"603\":1,\"606\":1,\"634\":1,\"636\":1,\"649\":1,\"652\":1,\"680\":1,\"682\":1,\"695\":1,\"698\":1,\"726\":1,\"728\":1,\"741\":1,\"744\":1,\"772\":1,\"774\":1,\"787\":1,\"790\":1}}],[\"hesitate\",{\"1\":{\"12\":1,\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"hit\",{\"1\":{\"286\":1,\"297\":1}}],[\"hints\",{\"1\":{\"133\":2}}],[\"hier\",{\"1\":{\"17\":1,\"41\":1}}],[\"higher\",{\"1\":{\"428\":1,\"777\":1}}],[\"highest\",{\"1\":{\"105\":1}}],[\"highlight\",{\"1\":{\"425\":1,\"560\":1,\"590\":1,\"636\":1,\"682\":1,\"728\":1,\"774\":1}}],[\"highly\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"highmedorg\",{\"1\":{\"300\":6,\"303\":6,\"331\":1,\"334\":4,\"340\":1,\"345\":1,\"348\":5,\"350\":2,\"360\":5,\"363\":10,\"365\":1,\"370\":5,\"373\":9,\"386\":5,\"389\":15}}],[\"highmed\",{\"0\":{\"78\":1,\"170\":1,\"171\":2,\"172\":1,\"173\":1,\"174\":1,\"175\":2,\"176\":1,\"177\":1,\"178\":2,\"179\":1,\"180\":1,\"181\":1,\"182\":1,\"183\":1,\"184\":1,\"185\":2,\"186\":2,\"187\":1,\"188\":1,\"189\":1,\"190\":1,\"191\":1,\"192\":2,\"193\":1,\"194\":1,\"195\":2,\"196\":1,\"197\":1,\"198\":1,\"199\":1,\"200\":1,\"201\":1,\"202\":1,\"203\":1,\"204\":1,\"205\":1,\"206\":1,\"207\":1,\"208\":1,\"209\":1,\"210\":2,\"211\":1,\"212\":1,\"213\":1,\"214\":1,\"215\":2,\"216\":1,\"217\":1,\"218\":1,\"219\":1,\"220\":1,\"221\":2,\"222\":1,\"223\":1,\"224\":1,\"225\":1,\"226\":1,\"227\":1,\"228\":1,\"229\":1,\"230\":1,\"231\":1,\"232\":1,\"233\":1,\"234\":1,\"237\":1,\"238\":1,\"239\":2,\"240\":2,\"241\":1,\"242\":1,\"243\":1,\"244\":1,\"245\":1,\"246\":1,\"247\":2,\"248\":1,\"249\":1,\"250\":1,\"251\":2,\"252\":1,\"253\":2,\"254\":1,\"255\":1,\"256\":1,\"257\":1,\"258\":1,\"259\":1,\"260\":1,\"261\":1,\"262\":1},\"1\":{\"26\":4,\"29\":2,\"42\":2,\"44\":2,\"46\":2,\"48\":2,\"50\":2,\"52\":2,\"54\":2,\"56\":2,\"58\":2,\"60\":2,\"62\":2,\"78\":2,\"94\":1,\"112\":2,\"130\":6,\"131\":2,\"134\":1,\"148\":3,\"149\":3,\"152\":1,\"155\":1,\"156\":1,\"158\":4,\"159\":1,\"170\":2,\"171\":2,\"172\":1,\"173\":1,\"174\":1,\"175\":2,\"176\":2,\"177\":1,\"178\":2,\"179\":1,\"180\":1,\"181\":1,\"182\":1,\"183\":1,\"184\":3,\"185\":2,\"186\":2,\"187\":1,\"188\":1,\"189\":1,\"190\":1,\"191\":1,\"192\":2,\"193\":1,\"194\":1,\"195\":2,\"196\":1,\"197\":1,\"198\":1,\"199\":1,\"200\":1,\"201\":1,\"202\":1,\"203\":1,\"204\":1,\"205\":1,\"206\":1,\"207\":1,\"208\":2,\"209\":4,\"210\":2,\"211\":1,\"212\":1,\"213\":1,\"214\":1,\"215\":3,\"216\":1,\"217\":1,\"218\":1,\"219\":1,\"220\":1,\"221\":2,\"222\":1,\"223\":1,\"224\":2,\"225\":2,\"226\":1,\"227\":2,\"228\":2,\"229\":1,\"230\":1,\"231\":1,\"232\":1,\"233\":1,\"234\":2,\"237\":1,\"238\":3,\"239\":2,\"240\":2,\"241\":1,\"242\":1,\"243\":1,\"244\":1,\"245\":1,\"246\":1,\"247\":2,\"248\":1,\"249\":1,\"250\":1,\"251\":2,\"252\":1,\"253\":2,\"254\":2,\"255\":1,\"256\":1,\"257\":1,\"258\":1,\"259\":1,\"260\":1,\"261\":1,\"262\":1,\"276\":2,\"285\":23,\"286\":46,\"287\":3,\"296\":16,\"297\":16,\"299\":31,\"300\":25,\"302\":5,\"303\":20,\"305\":5,\"306\":8,\"308\":5,\"309\":3,\"311\":5,\"312\":3,\"323\":96,\"328\":3,\"329\":1,\"334\":2,\"337\":2,\"338\":1,\"342\":1,\"344\":1,\"345\":2,\"348\":1,\"354\":2,\"357\":5,\"358\":5,\"359\":7,\"360\":1,\"363\":2,\"373\":1,\"380\":2,\"383\":5,\"384\":5,\"385\":9,\"389\":3,\"430\":1,\"442\":1,\"456\":1,\"479\":1,\"505\":1,\"535\":1,\"547\":1,\"565\":1,\"577\":1,\"595\":1,\"607\":1,\"641\":1,\"653\":1,\"687\":1,\"699\":1,\"733\":1,\"745\":1,\"779\":1,\"791\":1}}],[\"high\",{\"1\":{\"9\":1,\"33\":1}}],[\"history\",{\"1\":{\"925\":1,\"931\":1,\"933\":3,\"1229\":1,\"1235\":1,\"1237\":3,\"1405\":1,\"1411\":1,\"1413\":3,\"1582\":1,\"1588\":1,\"1590\":3,\"1759\":1,\"1765\":1,\"1767\":3,\"1936\":1,\"1942\":1,\"1944\":3,\"2113\":1,\"2119\":1,\"2121\":3,\"2328\":1,\"2334\":1,\"2336\":3,\"2547\":1,\"2553\":1,\"2555\":3,\"2766\":1,\"2772\":1,\"2774\":3}}],[\"his\",{\"1\":{\"1\":1,\"94\":1}}],[\"hold\",{\"1\":{\"404\":1,\"615\":1,\"661\":1,\"707\":1,\"753\":1}}],[\"holds\",{\"1\":{\"123\":1}}],[\"hochschule\",{\"1\":{\"285\":1,\"296\":1}}],[\"home\",{\"1\":{\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"homepage\",{\"1\":{\"37\":1,\"79\":1,\"204\":1,\"259\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"438\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1,\"958\":1,\"1043\":1,\"1121\":1,\"1194\":1,\"1259\":1,\"1435\":1,\"1612\":1,\"1789\":1,\"1966\":1,\"2143\":1,\"2361\":1,\"2580\":1,\"2799\":1}}],[\"hotfix\",{\"1\":{\"404\":1,\"405\":1,\"615\":1,\"616\":1,\"661\":1,\"662\":1,\"707\":1,\"708\":1,\"753\":1,\"754\":1}}],[\"hot\",{\"1\":{\"153\":1,\"154\":2}}],[\"hosts\",{\"1\":{\"396\":3}}],[\"hostname\",{\"1\":{\"212\":1,\"265\":1,\"869\":1,\"909\":1,\"1001\":1,\"1051\":1,\"1130\":1,\"1202\":1,\"1301\":1,\"1374\":1,\"1477\":1,\"1551\":1,\"1654\":1,\"1728\":1,\"1831\":1,\"1905\":1,\"2008\":1,\"2082\":1,\"2185\":1,\"2272\":1,\"2312\":1,\"2404\":1,\"2491\":1,\"2531\":1,\"2623\":1,\"2710\":1,\"2750\":1,\"2842\":1}}],[\"host\",{\"0\":{\"212\":1,\"396\":1,\"808\":1,\"830\":1,\"869\":1,\"968\":1,\"990\":1,\"1051\":1,\"1076\":1,\"1098\":1,\"1144\":1,\"1166\":1,\"1202\":1,\"1268\":1,\"1290\":1,\"1316\":1,\"1338\":1,\"1374\":1,\"1444\":1,\"1466\":1,\"1493\":1,\"1515\":1,\"1551\":1,\"1621\":1,\"1643\":1,\"1670\":1,\"1692\":1,\"1728\":1,\"1798\":1,\"1820\":1,\"1847\":1,\"1869\":1,\"1905\":1,\"1975\":1,\"1997\":1,\"2024\":1,\"2046\":1,\"2082\":1,\"2152\":1,\"2174\":1,\"2211\":1,\"2233\":1,\"2272\":1,\"2371\":1,\"2393\":1,\"2430\":1,\"2452\":1,\"2491\":1,\"2590\":1,\"2612\":1,\"2649\":1,\"2671\":1,\"2710\":1,\"2809\":1,\"2831\":1},\"1\":{\"133\":2,\"212\":1,\"808\":2,\"830\":2,\"869\":1,\"968\":2,\"990\":2,\"1051\":1,\"1076\":2,\"1098\":2,\"1144\":2,\"1166\":2,\"1202\":1,\"1268\":2,\"1290\":2,\"1316\":2,\"1338\":2,\"1374\":1,\"1444\":2,\"1466\":2,\"1493\":2,\"1515\":2,\"1551\":1,\"1621\":2,\"1643\":2,\"1670\":2,\"1692\":2,\"1728\":1,\"1798\":2,\"1820\":2,\"1847\":2,\"1869\":2,\"1905\":1,\"1975\":2,\"1997\":2,\"2024\":2,\"2046\":2,\"2082\":1,\"2152\":2,\"2174\":2,\"2211\":2,\"2233\":2,\"2272\":1,\"2371\":2,\"2393\":2,\"2430\":2,\"2452\":2,\"2491\":1,\"2590\":2,\"2612\":2,\"2649\":2,\"2671\":2,\"2710\":1,\"2809\":2,\"2831\":2}}],[\"hospital\",{\"1\":{\"204\":1,\"259\":1,\"424\":2,\"559\":2,\"589\":2,\"635\":2,\"681\":2,\"727\":2,\"773\":2,\"958\":1,\"1043\":1,\"1121\":1,\"1194\":1,\"1259\":1,\"1435\":1,\"1612\":1,\"1789\":1,\"1966\":1,\"2143\":1,\"2361\":1,\"2580\":1,\"2799\":1}}],[\"hospitalizations\",{\"1\":{\"122\":1}}],[\"hospitals\",{\"1\":{\"5\":1,\"11\":1,\"94\":2,\"125\":2}}],[\"hours\",{\"1\":{\"38\":1}}],[\"hoffmann\",{\"1\":{\"26\":1}}],[\"however\",{\"1\":{\"98\":1,\"123\":1,\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"how\",{\"0\":{\"13\":1,\"37\":1},\"1\":{\"5\":1,\"12\":1,\"13\":1,\"37\":1,\"89\":1,\"116\":1,\"158\":1,\"286\":3,\"297\":3,\"314\":1,\"316\":1,\"317\":1,\"318\":1,\"319\":1,\"320\":1,\"321\":1,\"325\":1,\"336\":1,\"340\":1,\"350\":1,\"365\":1,\"369\":1,\"375\":1,\"377\":1,\"394\":1,\"411\":2,\"418\":1,\"419\":1,\"430\":1,\"438\":1,\"448\":1,\"449\":1,\"453\":1,\"456\":1,\"464\":1,\"471\":1,\"472\":1,\"476\":1,\"479\":1,\"487\":1,\"497\":1,\"498\":1,\"502\":1,\"505\":1,\"513\":1,\"523\":1,\"524\":1,\"528\":1,\"535\":1,\"543\":1,\"553\":1,\"554\":1,\"565\":1,\"573\":1,\"583\":1,\"584\":1,\"595\":1,\"603\":1,\"622\":2,\"629\":1,\"630\":1,\"641\":1,\"649\":1,\"668\":2,\"675\":1,\"676\":1,\"687\":1,\"695\":1,\"714\":2,\"721\":1,\"722\":1,\"733\":1,\"741\":1,\"760\":2,\"767\":1,\"768\":1,\"779\":1,\"787\":1}}],[\"hardware\",{\"0\":{\"399\":1},\"1\":{\"399\":1}}],[\"harden\",{\"1\":{\"33\":1}}],[\"having\",{\"1\":{\"342\":1,\"345\":1}}],[\"have\",{\"1\":{\"1\":1,\"12\":1,\"37\":2,\"40\":1,\"71\":1,\"81\":1,\"85\":1,\"93\":1,\"94\":2,\"112\":1,\"113\":1,\"122\":1,\"123\":1,\"125\":1,\"130\":1,\"131\":1,\"150\":1,\"213\":1,\"214\":1,\"258\":1,\"282\":1,\"293\":1,\"334\":1,\"344\":1,\"348\":1,\"363\":1,\"389\":1,\"407\":1,\"413\":1,\"415\":2,\"423\":1,\"425\":3,\"440\":1,\"441\":1,\"442\":2,\"453\":1,\"455\":4,\"464\":1,\"466\":1,\"467\":1,\"476\":1,\"478\":4,\"489\":1,\"490\":1,\"502\":1,\"504\":4,\"515\":1,\"516\":1,\"520\":1,\"528\":1,\"530\":4,\"545\":1,\"546\":1,\"547\":2,\"558\":1,\"560\":3,\"575\":1,\"576\":1,\"577\":2,\"588\":1,\"590\":3,\"605\":1,\"606\":1,\"607\":2,\"618\":1,\"624\":1,\"626\":2,\"634\":1,\"636\":3,\"651\":1,\"652\":1,\"653\":2,\"664\":1,\"670\":1,\"672\":2,\"680\":1,\"682\":3,\"697\":1,\"698\":1,\"699\":2,\"710\":1,\"716\":1,\"718\":2,\"726\":1,\"728\":3,\"743\":1,\"744\":1,\"745\":2,\"756\":1,\"762\":1,\"764\":2,\"772\":1,\"774\":3,\"789\":1,\"790\":1,\"791\":2,\"870\":1,\"871\":1,\"957\":1,\"1052\":1,\"1053\":1,\"1120\":1,\"1203\":1,\"1204\":1,\"1258\":1,\"1375\":1,\"1376\":1,\"1434\":1,\"1552\":1,\"1553\":1,\"1611\":1,\"1729\":1,\"1730\":1,\"1788\":1,\"1906\":1,\"1907\":1,\"1965\":1,\"2083\":1,\"2084\":1,\"2142\":1,\"2273\":1,\"2274\":1,\"2360\":1,\"2492\":1,\"2493\":1,\"2579\":1,\"2711\":1,\"2712\":1,\"2798\":1}}],[\"haproxy\",{\"1\":{\"96\":1,\"166\":2}}],[\"happen\",{\"1\":{\"85\":1}}],[\"hapi\",{\"1\":{\"17\":1,\"300\":2,\"303\":2,\"306\":2}}],[\"hash=sha512\",{\"1\":{\"285\":1,\"296\":1,\"438\":1,\"464\":1,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1,\"798\":1,\"925\":1,\"959\":1,\"1229\":1,\"1260\":1,\"1405\":1,\"1436\":1,\"1582\":1,\"1613\":1,\"1759\":1,\"1790\":1,\"1936\":1,\"1967\":1,\"2113\":1,\"2144\":1,\"2201\":1,\"2328\":1,\"2362\":1,\"2420\":1,\"2547\":1,\"2581\":1,\"2639\":1,\"2766\":1,\"2800\":1}}],[\"hash\",{\"1\":{\"285\":4,\"296\":4,\"438\":2,\"464\":3,\"487\":2,\"513\":2,\"543\":2,\"573\":2,\"603\":2,\"649\":2,\"695\":2,\"741\":2,\"787\":2}}],[\"has\",{\"1\":{\"84\":2,\"86\":2,\"94\":1,\"134\":2,\"148\":1,\"149\":1,\"150\":3,\"329\":1,\"354\":1,\"380\":1,\"410\":1,\"621\":1,\"667\":1,\"713\":1,\"759\":1,\"932\":2,\"1236\":2,\"1412\":2,\"1589\":2,\"1766\":2,\"1943\":2,\"2120\":2,\"2335\":2,\"2554\":2,\"2773\":2}}],[\"had\",{\"1\":{\"37\":1}}],[\"handle\",{\"1\":{\"377\":1,\"391\":1}}],[\"handled\",{\"1\":{\"32\":1,\"106\":1,\"161\":1,\"379\":1}}],[\"hand\",{\"1\":{\"93\":2}}],[\"handshake\",{\"1\":{\"272\":1,\"917\":1,\"1009\":1,\"1137\":1,\"1308\":1,\"1485\":1,\"1662\":1,\"1839\":1,\"2016\":1,\"2193\":1,\"2320\":1,\"2412\":1,\"2539\":1,\"2631\":1,\"2758\":1,\"2850\":1}}],[\"hands\",{\"1\":{\"28\":1,\"112\":1,\"113\":1,\"115\":1}}],[\"hansen\",{\"1\":{\"1\":3}}],[\"hamacher\",{\"1\":{\"26\":1}}],[\"hampf\",{\"1\":{\"26\":2}}],[\"haarbrandt\",{\"1\":{\"26\":1}}],[\"haben\",{\"1\":{\"16\":1,\"22\":1}}],[\"hackathons\",{\"1\":{\"17\":1}}],[\"hackathon\",{\"0\":{\"14\":1},\"1\":{\"14\":1,\"15\":1,\"16\":1,\"22\":1,\"282\":1,\"293\":1}}],[\"hauke\",{\"1\":{\"1\":1,\"79\":1}}],[\"n9bcmtjugv3y\",{\"1\":{\"905\":1,\"997\":1,\"1297\":1,\"1473\":1,\"1650\":1,\"1827\":1,\"2004\":1,\"2181\":1,\"2308\":1,\"2400\":1,\"2527\":1,\"2619\":1,\"2746\":1,\"2838\":1}}],[\"n\",{\"1\":{\"379\":2}}],[\"null\",{\"1\":{\"279\":1,\"290\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"numbers\",{\"1\":{\"307\":1,\"310\":1,\"337\":1}}],[\"number\",{\"1\":{\"155\":2,\"205\":2,\"213\":1,\"230\":2,\"444\":1,\"445\":1,\"493\":1,\"494\":1,\"519\":1,\"520\":1,\"549\":1,\"550\":1,\"579\":1,\"580\":1,\"609\":1,\"610\":1,\"655\":1,\"656\":1,\"701\":1,\"702\":1,\"747\":1,\"748\":1,\"793\":1,\"794\":1,\"862\":2,\"870\":1,\"888\":2,\"892\":2,\"904\":1,\"996\":1,\"1044\":2,\"1052\":1,\"1067\":2,\"1195\":2,\"1203\":1,\"1218\":2,\"1296\":1,\"1367\":2,\"1375\":1,\"1393\":2,\"1397\":2,\"1472\":1,\"1544\":2,\"1552\":1,\"1570\":2,\"1574\":2,\"1649\":1,\"1721\":2,\"1729\":1,\"1747\":2,\"1751\":2,\"1826\":1,\"1898\":2,\"1906\":1,\"1924\":2,\"1928\":2,\"2003\":1,\"2075\":2,\"2083\":1,\"2101\":2,\"2105\":2,\"2180\":1,\"2265\":2,\"2273\":1,\"2291\":2,\"2295\":2,\"2307\":1,\"2399\":1,\"2484\":2,\"2492\":1,\"2510\":2,\"2514\":2,\"2526\":1,\"2618\":1,\"2703\":2,\"2711\":1,\"2729\":2,\"2733\":2,\"2745\":1,\"2837\":1}}],[\"number>\",{\"1\":{\"154\":2,\"405\":1,\"616\":1,\"662\":1,\"708\":1,\"754\":1}}],[\"num\",{\"0\":{\"534\":1,\"564\":1,\"594\":1,\"640\":1,\"686\":1,\"732\":1},\"1\":{\"14\":1,\"77\":1,\"125\":2,\"126\":1,\"276\":1,\"282\":1,\"286\":6,\"293\":1,\"296\":2,\"297\":7,\"299\":2,\"300\":4,\"303\":4,\"306\":1,\"427\":1,\"430\":1,\"456\":2,\"479\":2,\"505\":2,\"534\":2,\"535\":1,\"564\":2,\"565\":1,\"594\":2,\"595\":1,\"640\":2,\"641\":1,\"686\":2,\"687\":1,\"732\":2,\"733\":1,\"776\":1,\"779\":1}}],[\"nationwide\",{\"1\":{\"125\":1}}],[\"naming\",{\"0\":{\"154\":1,\"405\":1,\"616\":1,\"662\":1,\"708\":1,\"754\":1}}],[\"namingsystem\",{\"1\":{\"93\":1}}],[\"names\",{\"1\":{\"155\":1,\"156\":1,\"229\":1,\"233\":1,\"272\":1,\"442\":2,\"547\":2,\"577\":2,\"607\":2,\"653\":2,\"699\":2,\"745\":2,\"791\":2,\"802\":1,\"887\":1,\"891\":1,\"917\":1,\"929\":1,\"1009\":1,\"1066\":1,\"1070\":1,\"1137\":1,\"1217\":1,\"1221\":1,\"1233\":1,\"1308\":1,\"1392\":1,\"1396\":1,\"1409\":1,\"1485\":1,\"1569\":1,\"1573\":1,\"1586\":1,\"1662\":1,\"1746\":1,\"1750\":1,\"1763\":1,\"1839\":1,\"1923\":1,\"1927\":1,\"1940\":1,\"2016\":1,\"2100\":1,\"2104\":1,\"2117\":1,\"2193\":1,\"2205\":1,\"2290\":1,\"2294\":1,\"2320\":1,\"2332\":1,\"2412\":1,\"2424\":1,\"2509\":1,\"2513\":1,\"2539\":1,\"2551\":1,\"2631\":1,\"2643\":1,\"2728\":1,\"2732\":1,\"2758\":1,\"2770\":1,\"2850\":1}}],[\"name=\",{\"1\":{\"155\":1,\"156\":47}}],[\"name>\",{\"1\":{\"154\":2,\"158\":1,\"405\":1,\"616\":1,\"662\":1,\"708\":1,\"754\":1}}],[\"name\",{\"0\":{\"266\":1,\"355\":1,\"381\":1,\"910\":1,\"1002\":1,\"1131\":1,\"1302\":1,\"1478\":1,\"1655\":1,\"1832\":1,\"2009\":1,\"2186\":1,\"2313\":1,\"2405\":1,\"2532\":1,\"2624\":1,\"2751\":1,\"2843\":1},\"1\":{\"91\":1,\"95\":2,\"108\":2,\"109\":1,\"135\":1,\"148\":3,\"149\":3,\"163\":2,\"164\":1,\"165\":2,\"166\":1,\"172\":1,\"174\":1,\"176\":1,\"177\":1,\"179\":1,\"248\":1,\"250\":1,\"252\":1,\"254\":1,\"255\":1,\"280\":2,\"285\":4,\"291\":2,\"296\":4,\"323\":1,\"328\":2,\"330\":1,\"342\":1,\"343\":2,\"352\":1,\"355\":1,\"359\":2,\"360\":5,\"369\":2,\"381\":1,\"385\":2,\"405\":1,\"429\":2,\"434\":2,\"438\":1,\"460\":2,\"464\":1,\"483\":2,\"487\":1,\"509\":2,\"513\":1,\"539\":2,\"543\":1,\"569\":2,\"573\":1,\"599\":2,\"603\":1,\"616\":1,\"645\":2,\"649\":1,\"662\":1,\"691\":2,\"695\":1,\"708\":1,\"737\":2,\"741\":1,\"754\":1,\"778\":2,\"783\":2,\"787\":1,\"798\":1,\"801\":2,\"810\":1,\"823\":1,\"835\":1,\"837\":1,\"840\":1,\"925\":1,\"928\":2,\"945\":1,\"947\":1,\"949\":1,\"970\":1,\"983\":1,\"1020\":1,\"1022\":1,\"1024\":1,\"1025\":1,\"1027\":1,\"1078\":1,\"1091\":1,\"1111\":1,\"1113\":1,\"1115\":1,\"1117\":1,\"1118\":1,\"1146\":1,\"1159\":1,\"1171\":1,\"1173\":1,\"1175\":1,\"1176\":1,\"1178\":1,\"1232\":2,\"1249\":1,\"1251\":1,\"1253\":1,\"1255\":1,\"1256\":1,\"1270\":1,\"1283\":1,\"1318\":1,\"1331\":1,\"1343\":1,\"1345\":1,\"1347\":1,\"1348\":1,\"1350\":1,\"1408\":2,\"1425\":1,\"1427\":1,\"1429\":1,\"1431\":1,\"1432\":1,\"1446\":1,\"1459\":1,\"1495\":1,\"1508\":1,\"1520\":1,\"1522\":1,\"1524\":1,\"1525\":1,\"1527\":1,\"1585\":2,\"1602\":1,\"1604\":1,\"1606\":1,\"1608\":1,\"1609\":1,\"1623\":1,\"1636\":1,\"1672\":1,\"1685\":1,\"1697\":1,\"1699\":1,\"1701\":1,\"1702\":1,\"1704\":1,\"1762\":2,\"1779\":1,\"1781\":1,\"1783\":1,\"1785\":1,\"1786\":1,\"1800\":1,\"1813\":1,\"1849\":1,\"1862\":1,\"1874\":1,\"1876\":1,\"1878\":1,\"1879\":1,\"1881\":1,\"1939\":2,\"1956\":1,\"1958\":1,\"1960\":1,\"1962\":1,\"1963\":1,\"1977\":1,\"1990\":1,\"2026\":1,\"2039\":1,\"2051\":1,\"2053\":1,\"2055\":1,\"2056\":1,\"2058\":1,\"2116\":2,\"2133\":1,\"2135\":1,\"2137\":1,\"2139\":1,\"2140\":1,\"2154\":1,\"2167\":1,\"2201\":1,\"2204\":2,\"2213\":1,\"2226\":1,\"2238\":1,\"2240\":1,\"2243\":1,\"2328\":1,\"2331\":2,\"2348\":1,\"2350\":1,\"2352\":1,\"2373\":1,\"2386\":1,\"2420\":1,\"2423\":2,\"2432\":1,\"2445\":1,\"2457\":1,\"2459\":1,\"2462\":1,\"2547\":1,\"2550\":2,\"2567\":1,\"2569\":1,\"2571\":1,\"2592\":1,\"2605\":1,\"2639\":1,\"2642\":2,\"2651\":1,\"2664\":1,\"2676\":1,\"2678\":1,\"2681\":1,\"2766\":1,\"2769\":2,\"2786\":1,\"2788\":1,\"2790\":1,\"2811\":1,\"2824\":1}}],[\"named\",{\"1\":{\"1\":1}}],[\"nginx\",{\"1\":{\"96\":1,\"166\":2,\"323\":5,\"327\":1}}],[\"noproxy\",{\"0\":{\"897\":1,\"964\":1,\"1071\":1,\"1125\":1,\"1222\":1,\"1264\":1,\"1398\":1,\"1440\":1,\"1575\":1,\"1617\":1,\"1752\":1,\"1794\":1,\"1929\":1,\"1971\":1,\"2106\":1,\"2148\":1,\"2300\":1,\"2367\":1,\"2519\":1,\"2586\":1,\"2738\":1,\"2805\":1},\"1\":{\"897\":1,\"899\":1,\"964\":1,\"966\":1,\"1071\":1,\"1073\":1,\"1125\":1,\"1127\":1,\"1222\":1,\"1224\":1,\"1264\":1,\"1266\":1,\"1398\":1,\"1400\":1,\"1440\":1,\"1442\":1,\"1575\":1,\"1577\":1,\"1617\":1,\"1619\":1,\"1752\":1,\"1754\":1,\"1794\":1,\"1796\":1,\"1929\":1,\"1931\":1,\"1971\":1,\"1973\":1,\"2106\":1,\"2108\":1,\"2148\":1,\"2150\":1,\"2300\":1,\"2302\":1,\"2367\":1,\"2369\":1,\"2519\":1,\"2521\":1,\"2586\":1,\"2588\":1,\"2738\":1,\"2740\":1,\"2805\":1,\"2807\":1}}],[\"none\",{\"1\":{\"424\":2,\"454\":2,\"477\":2,\"503\":2,\"529\":2,\"559\":2,\"589\":2,\"635\":2,\"681\":2,\"727\":2,\"773\":2}}],[\"non\",{\"1\":{\"299\":2,\"300\":2,\"303\":2,\"306\":1,\"357\":3,\"383\":3}}],[\"noreplication\",{\"1\":{\"130\":1}}],[\"norwegian\",{\"1\":{\"1\":1}}],[\"nosuperuser\",{\"1\":{\"130\":1}}],[\"nodes\",{\"1\":{\"87\":2}}],[\"node\",{\"1\":{\"87\":3}}],[\"noticed\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"notice\",{\"1\":{\"286\":1,\"297\":1,\"404\":1,\"415\":1,\"615\":1,\"626\":1,\"661\":1,\"672\":1,\"707\":1,\"718\":1,\"753\":1,\"764\":1}}],[\"notifications\",{\"1\":{\"202\":1,\"207\":1,\"860\":1,\"864\":1,\"1041\":1,\"1046\":1,\"1192\":1,\"1197\":1,\"1365\":1,\"1369\":1,\"1542\":1,\"1546\":1,\"1719\":1,\"1723\":1,\"1896\":1,\"1900\":1,\"2073\":1,\"2077\":1,\"2263\":1,\"2267\":1,\"2482\":1,\"2486\":1,\"2701\":1,\"2705\":1}}],[\"notation\",{\"1\":{\"92\":1,\"342\":1,\"368\":1}}],[\"noted\",{\"1\":{\"343\":1}}],[\"note\",{\"1\":{\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"169\":1,\"236\":1,\"348\":1}}],[\"notes\",{\"1\":{\"20\":2,\"43\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"137\":3,\"138\":3,\"286\":1,\"297\":1,\"300\":2,\"303\":2,\"306\":2}}],[\"not\",{\"1\":{\"37\":3,\"39\":2,\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"85\":1,\"86\":2,\"93\":2,\"95\":2,\"96\":1,\"113\":1,\"142\":1,\"150\":1,\"155\":101,\"165\":2,\"166\":1,\"169\":1,\"214\":1,\"233\":1,\"236\":1,\"276\":1,\"279\":1,\"281\":1,\"282\":1,\"284\":1,\"285\":3,\"286\":3,\"287\":1,\"290\":1,\"292\":1,\"293\":1,\"295\":1,\"296\":3,\"297\":3,\"307\":1,\"310\":1,\"329\":1,\"344\":1,\"409\":2,\"410\":1,\"412\":1,\"413\":1,\"435\":1,\"437\":1,\"438\":2,\"439\":2,\"440\":1,\"442\":4,\"461\":1,\"463\":1,\"464\":2,\"465\":2,\"466\":1,\"468\":4,\"484\":1,\"486\":1,\"487\":2,\"488\":2,\"489\":1,\"491\":4,\"510\":1,\"512\":1,\"513\":2,\"514\":2,\"515\":1,\"517\":4,\"520\":1,\"540\":1,\"542\":1,\"543\":2,\"544\":2,\"545\":1,\"547\":4,\"570\":1,\"572\":1,\"573\":2,\"574\":2,\"575\":1,\"577\":4,\"600\":1,\"602\":1,\"603\":2,\"604\":2,\"605\":1,\"607\":4,\"620\":2,\"621\":1,\"623\":1,\"624\":1,\"646\":1,\"648\":1,\"649\":2,\"650\":2,\"651\":1,\"653\":4,\"666\":2,\"667\":1,\"669\":1,\"670\":1,\"692\":1,\"694\":1,\"695\":2,\"696\":2,\"697\":1,\"699\":4,\"712\":2,\"713\":1,\"715\":1,\"716\":1,\"738\":1,\"740\":1,\"741\":2,\"742\":2,\"743\":1,\"745\":4,\"758\":2,\"759\":1,\"761\":1,\"762\":1,\"784\":1,\"786\":1,\"787\":2,\"788\":2,\"789\":1,\"791\":4,\"798\":1,\"805\":1,\"871\":1,\"891\":1,\"899\":1,\"904\":1,\"966\":1,\"996\":1,\"1053\":1,\"1070\":1,\"1073\":1,\"1127\":1,\"1204\":1,\"1221\":1,\"1224\":1,\"1266\":1,\"1296\":1,\"1376\":1,\"1396\":1,\"1400\":1,\"1442\":1,\"1472\":1,\"1553\":1,\"1573\":1,\"1577\":1,\"1619\":1,\"1649\":1,\"1730\":1,\"1750\":1,\"1754\":1,\"1796\":1,\"1826\":1,\"1907\":1,\"1927\":1,\"1931\":1,\"1973\":1,\"2003\":1,\"2084\":1,\"2104\":1,\"2108\":1,\"2150\":1,\"2180\":1,\"2201\":1,\"2208\":1,\"2274\":1,\"2294\":1,\"2302\":1,\"2307\":1,\"2369\":1,\"2399\":1,\"2420\":1,\"2427\":1,\"2493\":1,\"2513\":1,\"2521\":1,\"2526\":1,\"2588\":1,\"2618\":1,\"2639\":1,\"2646\":1,\"2712\":1,\"2732\":1,\"2740\":1,\"2745\":1,\"2807\":1,\"2837\":1,\"2855\":1}}],[\"now\",{\"1\":{\"20\":1,\"93\":1,\"94\":1,\"334\":1,\"363\":1,\"389\":1,\"401\":1,\"430\":1,\"456\":1,\"479\":1,\"505\":1,\"519\":1,\"535\":1,\"565\":1,\"595\":1,\"612\":1,\"641\":1,\"658\":1,\"687\":1,\"704\":1,\"733\":1,\"750\":1,\"779\":1}}],[\"no\",{\"1\":{\"1\":1,\"26\":1,\"86\":1,\"155\":1,\"170\":1,\"172\":1,\"174\":1,\"176\":1,\"177\":1,\"179\":1,\"180\":1,\"181\":1,\"182\":1,\"185\":1,\"186\":1,\"187\":1,\"188\":1,\"189\":1,\"190\":1,\"191\":1,\"192\":1,\"193\":1,\"194\":1,\"195\":1,\"196\":1,\"197\":1,\"198\":1,\"199\":1,\"200\":1,\"202\":1,\"205\":1,\"206\":1,\"207\":1,\"208\":1,\"209\":1,\"210\":1,\"211\":1,\"212\":1,\"213\":1,\"214\":1,\"215\":1,\"216\":1,\"217\":1,\"218\":1,\"219\":1,\"220\":1,\"221\":1,\"222\":1,\"223\":1,\"224\":1,\"225\":1,\"226\":1,\"227\":1,\"228\":1,\"229\":1,\"230\":1,\"231\":1,\"232\":1,\"233\":1,\"234\":1,\"239\":1,\"240\":1,\"241\":1,\"242\":1,\"243\":1,\"244\":1,\"246\":1,\"248\":1,\"250\":1,\"252\":1,\"254\":1,\"255\":1,\"257\":1,\"258\":1,\"260\":1,\"267\":1,\"268\":1,\"269\":1,\"270\":1,\"272\":1,\"273\":2,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"321\":1,\"323\":8,\"333\":1,\"344\":1,\"347\":1,\"362\":1,\"372\":1,\"375\":1,\"377\":1,\"386\":1,\"388\":1,\"412\":4,\"434\":1,\"438\":1,\"439\":1,\"460\":1,\"464\":1,\"465\":1,\"483\":1,\"487\":1,\"488\":1,\"509\":1,\"513\":1,\"514\":1,\"539\":1,\"543\":1,\"544\":1,\"569\":1,\"573\":1,\"574\":1,\"599\":1,\"603\":1,\"604\":1,\"623\":4,\"645\":1,\"649\":1,\"650\":1,\"669\":4,\"691\":1,\"695\":1,\"696\":1,\"715\":4,\"737\":1,\"741\":1,\"742\":1,\"761\":4,\"783\":1,\"787\":1,\"788\":1,\"798\":1,\"811\":1,\"812\":1,\"813\":1,\"814\":1,\"815\":1,\"816\":1,\"817\":1,\"818\":1,\"819\":1,\"820\":1,\"821\":1,\"822\":1,\"823\":1,\"825\":1,\"826\":1,\"827\":1,\"828\":1,\"832\":1,\"833\":1,\"835\":1,\"837\":1,\"839\":1,\"840\":1,\"842\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"852\":1,\"853\":1,\"854\":1,\"855\":1,\"856\":1,\"857\":1,\"858\":1,\"860\":1,\"862\":1,\"863\":1,\"864\":1,\"865\":1,\"866\":1,\"867\":1,\"868\":1,\"869\":1,\"870\":1,\"871\":1,\"872\":1,\"873\":1,\"874\":1,\"875\":1,\"876\":1,\"877\":1,\"878\":1,\"879\":1,\"880\":1,\"881\":1,\"882\":1,\"883\":1,\"884\":1,\"885\":1,\"886\":1,\"887\":1,\"888\":1,\"889\":1,\"890\":1,\"891\":1,\"892\":1,\"893\":1,\"894\":1,\"895\":1,\"896\":1,\"897\":3,\"898\":1,\"899\":1,\"900\":1,\"911\":1,\"912\":1,\"913\":1,\"914\":1,\"915\":2,\"917\":1,\"918\":2,\"921\":1,\"925\":1,\"937\":1,\"938\":1,\"939\":1,\"941\":1,\"942\":1,\"943\":1,\"945\":1,\"947\":1,\"949\":1,\"951\":1,\"952\":1,\"953\":1,\"954\":1,\"955\":1,\"957\":1,\"960\":1,\"961\":1,\"962\":1,\"963\":1,\"964\":3,\"965\":1,\"966\":1,\"967\":1,\"971\":1,\"972\":1,\"973\":1,\"974\":1,\"975\":1,\"976\":1,\"977\":1,\"978\":1,\"979\":1,\"980\":1,\"981\":1,\"982\":1,\"983\":1,\"985\":1,\"986\":1,\"987\":1,\"988\":1,\"1003\":1,\"1004\":1,\"1005\":1,\"1006\":1,\"1007\":2,\"1009\":1,\"1010\":2,\"1013\":1,\"1017\":1,\"1018\":1,\"1020\":1,\"1022\":1,\"1024\":1,\"1025\":1,\"1027\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1033\":1,\"1034\":1,\"1035\":1,\"1036\":1,\"1037\":1,\"1038\":1,\"1039\":1,\"1041\":1,\"1044\":1,\"1045\":1,\"1046\":1,\"1047\":1,\"1048\":1,\"1049\":1,\"1050\":1,\"1051\":1,\"1052\":1,\"1053\":1,\"1054\":1,\"1055\":1,\"1056\":1,\"1057\":1,\"1058\":1,\"1059\":1,\"1060\":1,\"1061\":1,\"1062\":1,\"1063\":1,\"1064\":1,\"1065\":1,\"1066\":1,\"1067\":1,\"1068\":1,\"1069\":1,\"1070\":1,\"1071\":3,\"1072\":1,\"1073\":1,\"1074\":1,\"1079\":1,\"1080\":1,\"1081\":1,\"1082\":1,\"1083\":1,\"1084\":1,\"1085\":1,\"1086\":1,\"1087\":1,\"1088\":1,\"1089\":1,\"1090\":1,\"1091\":1,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":1,\"1103\":1,\"1104\":1,\"1105\":1,\"1107\":1,\"1108\":1,\"1109\":1,\"1111\":1,\"1113\":1,\"1115\":1,\"1117\":1,\"1118\":1,\"1120\":1,\"1122\":1,\"1124\":1,\"1125\":3,\"1126\":1,\"1127\":1,\"1128\":1,\"1132\":1,\"1133\":1,\"1134\":1,\"1135\":1,\"1137\":1,\"1138\":2,\"1147\":1,\"1148\":1,\"1149\":1,\"1150\":1,\"1151\":1,\"1152\":1,\"1153\":1,\"1154\":1,\"1155\":1,\"1156\":1,\"1157\":1,\"1158\":1,\"1159\":1,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":1,\"1168\":1,\"1169\":1,\"1171\":1,\"1173\":1,\"1175\":1,\"1176\":1,\"1178\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1184\":1,\"1185\":1,\"1186\":1,\"1187\":1,\"1188\":1,\"1189\":1,\"1190\":1,\"1192\":1,\"1195\":1,\"1196\":1,\"1197\":1,\"1198\":1,\"1199\":1,\"1200\":1,\"1201\":1,\"1202\":1,\"1203\":1,\"1204\":1,\"1205\":1,\"1206\":1,\"1207\":1,\"1208\":1,\"1209\":1,\"1210\":1,\"1211\":1,\"1212\":1,\"1213\":1,\"1214\":1,\"1215\":1,\"1216\":1,\"1217\":1,\"1218\":1,\"1219\":1,\"1220\":1,\"1221\":1,\"1222\":3,\"1223\":1,\"1224\":1,\"1225\":1,\"1229\":1,\"1241\":1,\"1242\":1,\"1243\":1,\"1245\":1,\"1246\":1,\"1247\":1,\"1249\":1,\"1251\":1,\"1253\":1,\"1255\":1,\"1256\":1,\"1258\":1,\"1261\":1,\"1262\":1,\"1263\":1,\"1264\":3,\"1265\":1,\"1266\":1,\"1267\":1,\"1271\":1,\"1272\":1,\"1273\":1,\"1274\":1,\"1275\":1,\"1276\":1,\"1277\":1,\"1278\":1,\"1279\":1,\"1280\":1,\"1281\":1,\"1282\":1,\"1283\":1,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":1,\"1303\":1,\"1304\":1,\"1305\":1,\"1306\":1,\"1308\":1,\"1309\":2,\"1312\":1,\"1319\":1,\"1320\":1,\"1321\":1,\"1322\":1,\"1323\":1,\"1324\":1,\"1325\":1,\"1326\":1,\"1327\":1,\"1328\":1,\"1329\":1,\"1330\":1,\"1331\":1,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":1,\"1340\":1,\"1341\":1,\"1343\":1,\"1345\":1,\"1347\":1,\"1348\":1,\"1350\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1357\":1,\"1358\":1,\"1359\":1,\"1360\":1,\"1361\":1,\"1362\":1,\"1363\":1,\"1365\":1,\"1367\":1,\"1368\":1,\"1369\":1,\"1370\":1,\"1371\":1,\"1372\":1,\"1373\":1,\"1374\":1,\"1375\":1,\"1376\":1,\"1377\":1,\"1378\":1,\"1379\":1,\"1380\":1,\"1381\":1,\"1382\":1,\"1383\":1,\"1384\":1,\"1385\":1,\"1386\":1,\"1387\":1,\"1388\":1,\"1389\":1,\"1390\":1,\"1391\":1,\"1392\":1,\"1393\":1,\"1394\":1,\"1395\":1,\"1396\":1,\"1397\":1,\"1398\":3,\"1399\":1,\"1400\":1,\"1401\":1,\"1405\":1,\"1417\":1,\"1418\":1,\"1419\":1,\"1421\":1,\"1422\":1,\"1423\":1,\"1425\":1,\"1427\":1,\"1429\":1,\"1431\":1,\"1432\":1,\"1434\":1,\"1437\":1,\"1438\":1,\"1439\":1,\"1440\":3,\"1441\":1,\"1442\":1,\"1443\":1,\"1447\":1,\"1448\":1,\"1449\":1,\"1450\":1,\"1451\":1,\"1452\":1,\"1453\":1,\"1454\":1,\"1455\":1,\"1456\":1,\"1457\":1,\"1458\":1,\"1459\":1,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":1,\"1479\":1,\"1480\":1,\"1481\":1,\"1482\":1,\"1483\":2,\"1485\":1,\"1486\":2,\"1489\":1,\"1496\":1,\"1497\":1,\"1498\":1,\"1499\":1,\"1500\":1,\"1501\":1,\"1502\":1,\"1503\":1,\"1504\":1,\"1505\":1,\"1506\":1,\"1507\":1,\"1508\":1,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":1,\"1517\":1,\"1518\":1,\"1520\":1,\"1522\":1,\"1524\":1,\"1525\":1,\"1527\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1534\":1,\"1535\":1,\"1536\":1,\"1537\":1,\"1538\":1,\"1539\":1,\"1540\":1,\"1542\":1,\"1544\":1,\"1545\":1,\"1546\":1,\"1547\":1,\"1548\":1,\"1549\":1,\"1550\":1,\"1551\":1,\"1552\":1,\"1553\":1,\"1554\":1,\"1555\":1,\"1556\":1,\"1557\":1,\"1558\":1,\"1559\":1,\"1560\":1,\"1561\":1,\"1562\":1,\"1563\":1,\"1564\":1,\"1565\":1,\"1566\":1,\"1567\":1,\"1568\":1,\"1569\":1,\"1570\":1,\"1571\":1,\"1572\":1,\"1573\":1,\"1574\":1,\"1575\":3,\"1576\":1,\"1577\":1,\"1578\":1,\"1582\":1,\"1594\":1,\"1595\":1,\"1596\":1,\"1598\":1,\"1599\":1,\"1600\":1,\"1602\":1,\"1604\":1,\"1606\":1,\"1608\":1,\"1609\":1,\"1611\":1,\"1614\":1,\"1615\":1,\"1616\":1,\"1617\":3,\"1618\":1,\"1619\":1,\"1620\":1,\"1624\":1,\"1625\":1,\"1626\":1,\"1627\":1,\"1628\":1,\"1629\":1,\"1630\":1,\"1631\":1,\"1632\":1,\"1633\":1,\"1634\":1,\"1635\":1,\"1636\":1,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":1,\"1656\":1,\"1657\":1,\"1658\":1,\"1659\":1,\"1660\":2,\"1662\":1,\"1663\":2,\"1666\":1,\"1673\":1,\"1674\":1,\"1675\":1,\"1676\":1,\"1677\":1,\"1678\":1,\"1679\":1,\"1680\":1,\"1681\":1,\"1682\":1,\"1683\":1,\"1684\":1,\"1685\":1,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":1,\"1694\":1,\"1695\":1,\"1697\":1,\"1699\":1,\"1701\":1,\"1702\":1,\"1704\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1711\":1,\"1712\":1,\"1713\":1,\"1714\":1,\"1715\":1,\"1716\":1,\"1717\":1,\"1719\":1,\"1721\":1,\"1722\":1,\"1723\":1,\"1724\":1,\"1725\":1,\"1726\":1,\"1727\":1,\"1728\":1,\"1729\":1,\"1730\":1,\"1731\":1,\"1732\":1,\"1733\":1,\"1734\":1,\"1735\":1,\"1736\":1,\"1737\":1,\"1738\":1,\"1739\":1,\"1740\":1,\"1741\":1,\"1742\":1,\"1743\":1,\"1744\":1,\"1745\":1,\"1746\":1,\"1747\":1,\"1748\":1,\"1749\":1,\"1750\":1,\"1751\":1,\"1752\":3,\"1753\":1,\"1754\":1,\"1755\":1,\"1759\":1,\"1771\":1,\"1772\":1,\"1773\":1,\"1775\":1,\"1776\":1,\"1777\":1,\"1779\":1,\"1781\":1,\"1783\":1,\"1785\":1,\"1786\":1,\"1788\":1,\"1791\":1,\"1792\":1,\"1793\":1,\"1794\":3,\"1795\":1,\"1796\":1,\"1797\":1,\"1801\":1,\"1802\":1,\"1803\":1,\"1804\":1,\"1805\":1,\"1806\":1,\"1807\":1,\"1808\":1,\"1809\":1,\"1810\":1,\"1811\":1,\"1812\":1,\"1813\":1,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":1,\"1833\":1,\"1834\":1,\"1835\":1,\"1836\":1,\"1837\":2,\"1839\":1,\"1840\":2,\"1843\":1,\"1850\":1,\"1851\":1,\"1852\":1,\"1853\":1,\"1854\":1,\"1855\":1,\"1856\":1,\"1857\":1,\"1858\":1,\"1859\":1,\"1860\":1,\"1861\":1,\"1862\":1,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":1,\"1871\":1,\"1872\":1,\"1874\":1,\"1876\":1,\"1878\":1,\"1879\":1,\"1881\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1888\":1,\"1889\":1,\"1890\":1,\"1891\":1,\"1892\":1,\"1893\":1,\"1894\":1,\"1896\":1,\"1898\":1,\"1899\":1,\"1900\":1,\"1901\":1,\"1902\":1,\"1903\":1,\"1904\":1,\"1905\":1,\"1906\":1,\"1907\":1,\"1908\":1,\"1909\":1,\"1910\":1,\"1911\":1,\"1912\":1,\"1913\":1,\"1914\":1,\"1915\":1,\"1916\":1,\"1917\":1,\"1918\":1,\"1919\":1,\"1920\":1,\"1921\":1,\"1922\":1,\"1923\":1,\"1924\":1,\"1925\":1,\"1926\":1,\"1927\":1,\"1928\":1,\"1929\":3,\"1930\":1,\"1931\":1,\"1932\":1,\"1936\":1,\"1948\":1,\"1949\":1,\"1950\":1,\"1952\":1,\"1953\":1,\"1954\":1,\"1956\":1,\"1958\":1,\"1960\":1,\"1962\":1,\"1963\":1,\"1965\":1,\"1968\":1,\"1969\":1,\"1970\":1,\"1971\":3,\"1972\":1,\"1973\":1,\"1974\":1,\"1978\":1,\"1979\":1,\"1980\":1,\"1981\":1,\"1982\":1,\"1983\":1,\"1984\":1,\"1985\":1,\"1986\":1,\"1987\":1,\"1988\":1,\"1989\":1,\"1990\":1,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":1,\"2010\":1,\"2011\":1,\"2012\":1,\"2013\":1,\"2014\":2,\"2016\":1,\"2017\":2,\"2020\":1,\"2027\":1,\"2028\":1,\"2029\":1,\"2030\":1,\"2031\":1,\"2032\":1,\"2033\":1,\"2034\":1,\"2035\":1,\"2036\":1,\"2037\":1,\"2038\":1,\"2039\":1,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":1,\"2048\":1,\"2049\":1,\"2051\":1,\"2053\":1,\"2055\":1,\"2056\":1,\"2058\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2065\":1,\"2066\":1,\"2067\":1,\"2068\":1,\"2069\":1,\"2070\":1,\"2071\":1,\"2073\":1,\"2075\":1,\"2076\":1,\"2077\":1,\"2078\":1,\"2079\":1,\"2080\":1,\"2081\":1,\"2082\":1,\"2083\":1,\"2084\":1,\"2085\":1,\"2086\":1,\"2087\":1,\"2088\":1,\"2089\":1,\"2090\":1,\"2091\":1,\"2092\":1,\"2093\":1,\"2094\":1,\"2095\":1,\"2096\":1,\"2097\":1,\"2098\":1,\"2099\":1,\"2100\":1,\"2101\":1,\"2102\":1,\"2103\":1,\"2104\":1,\"2105\":1,\"2106\":3,\"2107\":1,\"2108\":1,\"2109\":1,\"2113\":1,\"2125\":1,\"2126\":1,\"2127\":1,\"2129\":1,\"2130\":1,\"2131\":1,\"2133\":1,\"2135\":1,\"2137\":1,\"2139\":1,\"2140\":1,\"2142\":1,\"2145\":1,\"2146\":1,\"2147\":1,\"2148\":3,\"2149\":1,\"2150\":1,\"2151\":1,\"2155\":1,\"2156\":1,\"2157\":1,\"2158\":1,\"2159\":1,\"2160\":1,\"2161\":1,\"2162\":1,\"2163\":1,\"2164\":1,\"2165\":1,\"2166\":1,\"2167\":1,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":1,\"2187\":1,\"2188\":1,\"2189\":1,\"2190\":1,\"2191\":2,\"2193\":1,\"2194\":2,\"2197\":1,\"2201\":1,\"2214\":1,\"2215\":1,\"2216\":1,\"2217\":1,\"2218\":1,\"2219\":1,\"2220\":1,\"2221\":1,\"2222\":1,\"2223\":1,\"2224\":1,\"2225\":1,\"2226\":1,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":1,\"2235\":1,\"2236\":1,\"2238\":1,\"2240\":1,\"2242\":1,\"2243\":1,\"2245\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2255\":1,\"2256\":1,\"2257\":1,\"2258\":1,\"2259\":1,\"2260\":1,\"2261\":1,\"2263\":1,\"2265\":1,\"2266\":1,\"2267\":1,\"2268\":1,\"2269\":1,\"2270\":1,\"2271\":1,\"2272\":1,\"2273\":1,\"2274\":1,\"2275\":1,\"2276\":1,\"2277\":1,\"2278\":1,\"2279\":1,\"2280\":1,\"2281\":1,\"2282\":1,\"2283\":1,\"2284\":1,\"2285\":1,\"2286\":1,\"2287\":1,\"2288\":1,\"2289\":1,\"2290\":1,\"2291\":1,\"2292\":1,\"2293\":1,\"2294\":1,\"2295\":1,\"2296\":1,\"2297\":1,\"2298\":1,\"2299\":1,\"2300\":3,\"2301\":1,\"2302\":1,\"2303\":1,\"2314\":1,\"2315\":1,\"2316\":1,\"2317\":1,\"2318\":2,\"2320\":1,\"2321\":2,\"2324\":1,\"2328\":1,\"2340\":1,\"2341\":1,\"2342\":1,\"2344\":1,\"2345\":1,\"2346\":1,\"2348\":1,\"2350\":1,\"2352\":1,\"2354\":1,\"2355\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2360\":1,\"2363\":1,\"2364\":1,\"2365\":1,\"2366\":1,\"2367\":3,\"2368\":1,\"2369\":1,\"2370\":1,\"2374\":1,\"2375\":1,\"2376\":1,\"2377\":1,\"2378\":1,\"2379\":1,\"2380\":1,\"2381\":1,\"2382\":1,\"2383\":1,\"2384\":1,\"2385\":1,\"2386\":1,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":1,\"2406\":1,\"2407\":1,\"2408\":1,\"2409\":1,\"2410\":2,\"2412\":1,\"2413\":2,\"2416\":1,\"2420\":1,\"2433\":1,\"2434\":1,\"2435\":1,\"2436\":1,\"2437\":1,\"2438\":1,\"2439\":1,\"2440\":1,\"2441\":1,\"2442\":1,\"2443\":1,\"2444\":1,\"2445\":1,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":1,\"2454\":1,\"2455\":1,\"2457\":1,\"2459\":1,\"2461\":1,\"2462\":1,\"2464\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2474\":1,\"2475\":1,\"2476\":1,\"2477\":1,\"2478\":1,\"2479\":1,\"2480\":1,\"2482\":1,\"2484\":1,\"2485\":1,\"2486\":1,\"2487\":1,\"2488\":1,\"2489\":1,\"2490\":1,\"2491\":1,\"2492\":1,\"2493\":1,\"2494\":1,\"2495\":1,\"2496\":1,\"2497\":1,\"2498\":1,\"2499\":1,\"2500\":1,\"2501\":1,\"2502\":1,\"2503\":1,\"2504\":1,\"2505\":1,\"2506\":1,\"2507\":1,\"2508\":1,\"2509\":1,\"2510\":1,\"2511\":1,\"2512\":1,\"2513\":1,\"2514\":1,\"2515\":1,\"2516\":1,\"2517\":1,\"2518\":1,\"2519\":3,\"2520\":1,\"2521\":1,\"2522\":1,\"2533\":1,\"2534\":1,\"2535\":1,\"2536\":1,\"2537\":2,\"2539\":1,\"2540\":2,\"2543\":1,\"2547\":1,\"2559\":1,\"2560\":1,\"2561\":1,\"2563\":1,\"2564\":1,\"2565\":1,\"2567\":1,\"2569\":1,\"2571\":1,\"2573\":1,\"2574\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2579\":1,\"2582\":1,\"2583\":1,\"2584\":1,\"2585\":1,\"2586\":3,\"2587\":1,\"2588\":1,\"2589\":1,\"2593\":1,\"2594\":1,\"2595\":1,\"2596\":1,\"2597\":1,\"2598\":1,\"2599\":1,\"2600\":1,\"2601\":1,\"2602\":1,\"2603\":1,\"2604\":1,\"2605\":1,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":1,\"2625\":1,\"2626\":1,\"2627\":1,\"2628\":1,\"2629\":2,\"2631\":1,\"2632\":2,\"2635\":1,\"2639\":1,\"2652\":1,\"2653\":1,\"2654\":1,\"2655\":1,\"2656\":1,\"2657\":1,\"2658\":1,\"2659\":1,\"2660\":1,\"2661\":1,\"2662\":1,\"2663\":1,\"2664\":1,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":1,\"2673\":1,\"2674\":1,\"2676\":1,\"2678\":1,\"2680\":1,\"2681\":1,\"2683\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2693\":1,\"2694\":1,\"2695\":1,\"2696\":1,\"2697\":1,\"2698\":1,\"2699\":1,\"2701\":1,\"2703\":1,\"2704\":1,\"2705\":1,\"2706\":1,\"2707\":1,\"2708\":1,\"2709\":1,\"2710\":1,\"2711\":1,\"2712\":1,\"2713\":1,\"2714\":1,\"2715\":1,\"2716\":1,\"2717\":1,\"2718\":1,\"2719\":1,\"2720\":1,\"2721\":1,\"2722\":1,\"2723\":1,\"2724\":1,\"2725\":1,\"2726\":1,\"2727\":1,\"2728\":1,\"2729\":1,\"2730\":1,\"2731\":1,\"2732\":1,\"2733\":1,\"2734\":1,\"2735\":1,\"2736\":1,\"2737\":1,\"2738\":3,\"2739\":1,\"2740\":1,\"2741\":1,\"2752\":1,\"2753\":1,\"2754\":1,\"2755\":1,\"2756\":2,\"2758\":1,\"2759\":2,\"2762\":1,\"2766\":1,\"2778\":1,\"2779\":1,\"2780\":1,\"2782\":1,\"2783\":1,\"2784\":1,\"2786\":1,\"2788\":1,\"2790\":1,\"2792\":1,\"2793\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2798\":1,\"2801\":1,\"2802\":1,\"2803\":1,\"2804\":1,\"2805\":3,\"2806\":1,\"2807\":1,\"2808\":1,\"2812\":1,\"2813\":1,\"2814\":1,\"2815\":1,\"2816\":1,\"2817\":1,\"2818\":1,\"2819\":1,\"2820\":1,\"2821\":1,\"2822\":1,\"2823\":1,\"2824\":1,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":1,\"2844\":1,\"2845\":1,\"2846\":1,\"2847\":1,\"2848\":2,\"2850\":1,\"2851\":2,\"2854\":1}}],[\"nested\",{\"1\":{\"155\":1}}],[\"next\",{\"1\":{\"99\":1,\"105\":1,\"137\":2,\"155\":11,\"156\":1}}],[\"never\",{\"1\":{\"87\":1,\"155\":12,\"377\":3}}],[\"neben\",{\"1\":{\"16\":1}}],[\"net\",{\"1\":{\"281\":1,\"292\":1,\"435\":1,\"461\":1,\"484\":1,\"510\":1,\"540\":1,\"570\":1,\"600\":1,\"646\":1,\"692\":1,\"738\":1,\"784\":1}}],[\"netzwerkfreigaben\",{\"0\":{\"16\":1}}],[\"networks\",{\"1\":{\"323\":9,\"456\":1,\"479\":1,\"505\":1}}],[\"networking\",{\"1\":{\"173\":1,\"249\":1,\"836\":1,\"946\":1,\"1021\":1,\"1112\":1,\"1172\":1,\"1250\":1,\"1344\":1,\"1426\":1,\"1521\":1,\"1603\":1,\"1698\":1,\"1780\":1,\"1875\":1,\"1957\":1,\"2052\":1,\"2134\":1,\"2239\":1,\"2349\":1,\"2458\":1,\"2568\":1,\"2677\":1,\"2787\":1}}],[\"network\",{\"0\":{\"88\":1,\"95\":1,\"125\":1,\"165\":1,\"281\":2,\"292\":2,\"435\":2,\"461\":2,\"484\":2,\"510\":2,\"540\":2,\"570\":2,\"600\":2,\"646\":2,\"692\":2,\"738\":2,\"784\":2},\"1\":{\"0\":1,\"32\":1,\"77\":1,\"84\":1,\"86\":2,\"88\":1,\"91\":1,\"95\":2,\"96\":1,\"105\":1,\"108\":2,\"109\":2,\"120\":1,\"125\":1,\"132\":4,\"163\":2,\"164\":2,\"165\":2,\"166\":1,\"281\":4,\"292\":4,\"430\":1,\"435\":2,\"441\":1,\"456\":2,\"461\":2,\"467\":1,\"479\":2,\"484\":2,\"490\":1,\"505\":2,\"510\":2,\"516\":1,\"535\":1,\"540\":2,\"546\":1,\"565\":1,\"570\":2,\"576\":1,\"595\":1,\"600\":2,\"606\":1,\"641\":1,\"646\":2,\"652\":1,\"687\":1,\"692\":2,\"698\":1,\"733\":1,\"738\":2,\"744\":1,\"779\":1,\"784\":2,\"790\":1}}],[\"neusten\",{\"1\":{\"14\":1}}],[\"neuer\",{\"1\":{\"14\":1}}],[\"neuerungen\",{\"1\":{\"14\":1}}],[\"neuen\",{\"1\":{\"14\":1}}],[\"neuesten\",{\"1\":{\"14\":1}}],[\"needed\",{\"0\":{\"144\":1},\"1\":{\"38\":1,\"81\":1,\"93\":1,\"96\":1,\"106\":1,\"134\":1,\"161\":1,\"166\":1,\"273\":1,\"280\":1,\"286\":1,\"291\":1,\"315\":1,\"327\":1,\"334\":1,\"344\":1,\"348\":1,\"363\":1,\"373\":1,\"386\":1,\"389\":1,\"390\":1,\"434\":1,\"460\":1,\"483\":1,\"509\":1,\"539\":1,\"569\":1,\"599\":1,\"645\":1,\"691\":1,\"737\":1,\"783\":1,\"918\":1,\"1010\":1,\"1138\":1,\"1309\":1,\"1486\":1,\"1663\":1,\"1840\":1,\"2017\":1,\"2194\":1,\"2321\":1,\"2413\":1,\"2540\":1,\"2632\":1,\"2759\":1,\"2851\":1}}],[\"need\",{\"0\":{\"115\":1},\"1\":{\"12\":1,\"81\":2,\"93\":2,\"113\":1,\"115\":1,\"123\":1,\"150\":1,\"158\":1,\"279\":1,\"286\":2,\"290\":1,\"297\":2,\"328\":1,\"334\":2,\"344\":1,\"348\":1,\"352\":1,\"354\":1,\"357\":2,\"358\":1,\"363\":1,\"373\":1,\"379\":1,\"380\":1,\"383\":2,\"384\":1,\"389\":1,\"394\":1,\"411\":1,\"433\":1,\"439\":1,\"459\":1,\"465\":1,\"482\":1,\"488\":1,\"508\":1,\"514\":1,\"538\":1,\"544\":1,\"568\":1,\"574\":1,\"598\":1,\"604\":1,\"622\":1,\"644\":1,\"650\":1,\"668\":1,\"690\":1,\"696\":1,\"714\":1,\"736\":1,\"742\":1,\"760\":1,\"782\":1,\"788\":1}}],[\"needs\",{\"1\":{\"12\":1,\"95\":1,\"148\":2,\"149\":2,\"158\":1,\"165\":1,\"281\":1,\"292\":1,\"328\":2,\"330\":1,\"352\":1,\"353\":2,\"354\":1,\"357\":2,\"358\":1,\"379\":2,\"380\":1,\"383\":2,\"384\":1,\"394\":1,\"413\":1,\"423\":1,\"435\":1,\"453\":1,\"461\":1,\"476\":1,\"484\":1,\"502\":1,\"510\":1,\"528\":1,\"540\":1,\"558\":1,\"570\":1,\"588\":1,\"600\":1,\"624\":1,\"634\":1,\"646\":1,\"670\":1,\"680\":1,\"692\":1,\"716\":1,\"726\":1,\"738\":1,\"762\":1,\"772\":1,\"784\":1,\"902\":1,\"993\":1,\"1293\":1,\"1469\":1,\"1646\":1,\"1823\":1,\"2000\":1,\"2177\":1,\"2305\":1,\"2396\":1,\"2524\":1,\"2615\":1,\"2743\":1,\"2834\":1}}],[\"new\",{\"0\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"136\":1,\"137\":1,\"138\":1,\"418\":1,\"448\":1,\"471\":1,\"497\":1,\"523\":1,\"553\":1,\"583\":1,\"629\":1,\"675\":1,\"721\":1,\"767\":1},\"1\":{\"5\":1,\"42\":2,\"43\":1,\"44\":2,\"45\":1,\"46\":2,\"47\":1,\"48\":2,\"49\":1,\"50\":2,\"51\":1,\"52\":2,\"53\":1,\"54\":2,\"55\":1,\"56\":2,\"57\":1,\"58\":2,\"59\":1,\"60\":2,\"61\":1,\"62\":2,\"63\":1,\"77\":2,\"78\":1,\"86\":1,\"113\":2,\"137\":1,\"138\":1,\"140\":1,\"141\":4,\"142\":1,\"143\":4,\"145\":1,\"146\":5,\"147\":2,\"148\":2,\"149\":2,\"150\":3,\"153\":4,\"155\":22,\"156\":4,\"286\":1,\"297\":1,\"300\":4,\"303\":4,\"306\":4,\"334\":1,\"345\":9,\"352\":1,\"360\":2,\"363\":1,\"389\":1,\"411\":1,\"413\":1,\"415\":1,\"417\":1,\"434\":1,\"439\":1,\"442\":14,\"447\":1,\"460\":1,\"465\":1,\"468\":4,\"470\":1,\"483\":1,\"488\":1,\"491\":4,\"496\":1,\"509\":1,\"514\":1,\"517\":4,\"519\":2,\"520\":4,\"522\":1,\"539\":1,\"544\":1,\"547\":14,\"552\":1,\"569\":1,\"574\":1,\"577\":14,\"582\":1,\"599\":1,\"604\":1,\"607\":14,\"622\":1,\"624\":1,\"626\":1,\"628\":1,\"645\":1,\"650\":1,\"653\":14,\"668\":1,\"670\":1,\"672\":1,\"674\":1,\"691\":1,\"696\":1,\"699\":14,\"714\":1,\"716\":1,\"718\":1,\"720\":1,\"737\":1,\"742\":1,\"745\":14,\"760\":1,\"762\":1,\"764\":1,\"766\":1,\"783\":1,\"788\":1,\"791\":14,\"892\":1,\"1397\":1,\"1574\":1,\"1751\":1,\"1928\":1,\"2105\":1,\"2295\":1,\"2514\":1,\"2733\":1}}],[\"necessary\",{\"1\":{\"0\":1,\"32\":1,\"90\":1,\"123\":1,\"124\":1,\"285\":1,\"296\":1,\"334\":1,\"348\":1,\"363\":1,\"373\":1,\"389\":1,\"434\":1,\"460\":1,\"483\":1,\"509\":1,\"539\":1,\"569\":1,\"599\":1,\"645\":1,\"691\":1,\"737\":1,\"783\":1}}],[\"gaps\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"gateway\",{\"1\":{\"367\":1,\"370\":1,\"377\":1,\"386\":2}}],[\"gateways\",{\"0\":{\"320\":1,\"321\":1,\"364\":1,\"365\":1,\"367\":1,\"374\":1,\"375\":1},\"1\":{\"320\":1,\"365\":1,\"367\":1}}],[\"gain\",{\"1\":{\"89\":1,\"112\":2,\"113\":1,\"116\":1,\"401\":1,\"612\":1,\"658\":1,\"704\":1,\"750\":1}}],[\"ghcr\",{\"1\":{\"299\":4,\"300\":4,\"302\":4,\"303\":4,\"305\":4,\"306\":4,\"308\":4,\"309\":2,\"311\":4,\"312\":2,\"323\":6,\"337\":2,\"444\":4,\"445\":2,\"493\":4,\"494\":2,\"519\":4,\"520\":2,\"549\":4,\"550\":2,\"579\":4,\"580\":2,\"609\":4,\"610\":2,\"655\":4,\"656\":2,\"701\":4,\"702\":2,\"747\":4,\"748\":2,\"793\":4,\"794\":2,\"905\":1,\"997\":1,\"1297\":1,\"1473\":1,\"1650\":1,\"1827\":1,\"2004\":1,\"2181\":1,\"2308\":1,\"2400\":1,\"2527\":1,\"2619\":1,\"2746\":1,\"2838\":1}}],[\"gz\",{\"1\":{\"285\":6,\"286\":6,\"296\":6,\"297\":6,\"299\":12,\"438\":2,\"439\":2,\"464\":2,\"465\":2,\"487\":2,\"488\":2,\"513\":2,\"514\":2,\"543\":2,\"544\":2,\"573\":2,\"574\":2,\"603\":2,\"604\":2,\"649\":2,\"650\":2,\"695\":2,\"696\":2,\"741\":2,\"742\":2,\"787\":2,\"788\":2}}],[\"gpg\",{\"1\":{\"279\":4,\"290\":4,\"409\":1,\"433\":4,\"459\":4,\"482\":4,\"508\":4,\"538\":4,\"568\":4,\"598\":4,\"620\":1,\"644\":4,\"666\":1,\"690\":4,\"712\":1,\"736\":4,\"758\":1,\"782\":4}}],[\"gnupg\",{\"1\":{\"279\":1,\"290\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"gb\",{\"1\":{\"278\":4,\"289\":4,\"399\":1,\"432\":4,\"458\":4,\"481\":4,\"507\":4,\"537\":4,\"567\":4,\"597\":4,\"643\":4,\"689\":4,\"735\":4,\"781\":4}}],[\"gid\",{\"1\":{\"285\":2,\"286\":2,\"296\":2,\"297\":2,\"438\":2,\"439\":2,\"464\":2,\"465\":2,\"487\":2,\"488\":2,\"513\":2,\"514\":2,\"543\":2,\"544\":2,\"573\":2,\"574\":2,\"603\":2,\"604\":2,\"649\":2,\"650\":2,\"695\":2,\"696\":2,\"741\":2,\"742\":2,\"787\":2,\"788\":2}}],[\"given\",{\"1\":{\"257\":1,\"330\":1,\"353\":1,\"354\":1,\"380\":1}}],[\"git\",{\"0\":{\"153\":1,\"391\":1},\"1\":{\"70\":1,\"137\":3,\"138\":3,\"153\":1,\"315\":1,\"390\":1,\"391\":2,\"404\":1,\"615\":1,\"661\":1,\"707\":1,\"753\":1}}],[\"github\",{\"0\":{\"157\":1,\"158\":1,\"394\":1},\"1\":{\"17\":1,\"22\":1,\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"69\":2,\"70\":1,\"71\":1,\"79\":8,\"112\":1,\"126\":1,\"152\":1,\"158\":6,\"159\":2,\"279\":1,\"285\":4,\"286\":11,\"290\":1,\"296\":4,\"297\":6,\"299\":8,\"394\":5,\"403\":1,\"413\":2,\"415\":3,\"429\":1,\"532\":2,\"533\":2,\"534\":1,\"562\":2,\"563\":2,\"564\":1,\"592\":2,\"593\":3,\"594\":1,\"614\":1,\"624\":2,\"626\":3,\"638\":2,\"639\":3,\"640\":1,\"660\":1,\"670\":2,\"672\":3,\"684\":2,\"685\":3,\"686\":1,\"706\":1,\"716\":2,\"718\":3,\"730\":2,\"731\":4,\"732\":1,\"752\":1,\"762\":2,\"764\":3,\"778\":1}}],[\"gth\",{\"1\":{\"126\":1,\"425\":1,\"441\":1,\"454\":1,\"455\":1,\"467\":1,\"477\":1,\"478\":1,\"490\":1,\"503\":1,\"504\":1,\"516\":1,\"529\":1,\"530\":1,\"546\":1,\"560\":1,\"576\":1,\"590\":1,\"606\":1,\"636\":1,\"652\":1,\"682\":1,\"698\":1,\"728\":1,\"744\":1,\"774\":1,\"790\":1}}],[\"géant\",{\"1\":{\"106\":1,\"108\":1,\"109\":1,\"161\":1,\"163\":1,\"164\":1,\"280\":1,\"291\":1,\"434\":2,\"460\":2,\"483\":2,\"509\":2,\"539\":2,\"569\":2,\"599\":2,\"645\":2,\"691\":2,\"737\":2,\"783\":2}}],[\"g2\",{\"1\":{\"106\":1,\"108\":1,\"109\":1,\"161\":1,\"163\":1,\"164\":1,\"280\":1,\"291\":1,\"434\":1,\"460\":1,\"483\":1,\"509\":1,\"539\":1,\"569\":1,\"599\":1,\"645\":1,\"691\":1,\"737\":1,\"783\":1}}],[\"global\",{\"1\":{\"106\":2,\"108\":1,\"109\":1,\"161\":2,\"163\":1,\"164\":1,\"280\":1,\"285\":1,\"291\":1,\"296\":1,\"434\":1,\"438\":1,\"460\":1,\"464\":1,\"483\":1,\"487\":1,\"509\":1,\"513\":1,\"539\":1,\"543\":1,\"569\":1,\"573\":1,\"599\":1,\"603\":1,\"645\":1,\"649\":1,\"691\":1,\"695\":1,\"737\":1,\"741\":1,\"783\":1,\"787\":1}}],[\"guardian\",{\"1\":{\"155\":1}}],[\"guarantee\",{\"1\":{\"105\":1}}],[\"guidance\",{\"1\":{\"5\":1,\"112\":1,\"113\":1}}],[\"guidelines\",{\"1\":{\"412\":1,\"415\":1,\"623\":1,\"626\":1,\"669\":1,\"672\":1,\"715\":1,\"718\":1,\"761\":1,\"764\":1}}],[\"guide\",{\"1\":{\"4\":1,\"173\":1,\"232\":1,\"249\":1,\"258\":1,\"276\":2,\"279\":1,\"287\":2,\"290\":1,\"298\":1,\"301\":2,\"391\":2,\"393\":2,\"395\":2,\"397\":4,\"398\":2,\"415\":3,\"424\":1,\"428\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"529\":1,\"538\":1,\"559\":1,\"568\":1,\"589\":1,\"598\":1,\"626\":3,\"635\":1,\"644\":1,\"672\":3,\"681\":1,\"690\":1,\"718\":3,\"727\":1,\"736\":1,\"764\":3,\"773\":1,\"777\":1,\"782\":1,\"836\":1,\"890\":1,\"946\":1,\"957\":1,\"1021\":1,\"1069\":1,\"1112\":1,\"1120\":1,\"1172\":1,\"1220\":1,\"1250\":1,\"1258\":1,\"1344\":1,\"1395\":1,\"1426\":1,\"1434\":1,\"1521\":1,\"1572\":1,\"1603\":1,\"1611\":1,\"1698\":1,\"1749\":1,\"1780\":1,\"1788\":1,\"1875\":1,\"1926\":1,\"1957\":1,\"1965\":1,\"2052\":1,\"2103\":1,\"2134\":1,\"2142\":1,\"2239\":1,\"2293\":1,\"2349\":1,\"2360\":1,\"2458\":1,\"2512\":1,\"2568\":1,\"2579\":1,\"2677\":1,\"2731\":1,\"2787\":1,\"2798\":1}}],[\"gdpr\",{\"1\":{\"105\":1}}],[\"g\",{\"1\":{\"74\":1,\"81\":1,\"84\":1,\"95\":2,\"105\":1,\"135\":2,\"159\":1,\"165\":2,\"285\":6,\"286\":2,\"296\":7,\"297\":2,\"368\":1,\"397\":1,\"398\":1,\"424\":2,\"430\":1,\"435\":1,\"438\":4,\"439\":1,\"442\":2,\"454\":2,\"456\":2,\"461\":1,\"464\":5,\"465\":2,\"468\":2,\"477\":2,\"479\":2,\"484\":1,\"487\":4,\"488\":2,\"491\":2,\"503\":2,\"505\":2,\"510\":1,\"513\":4,\"514\":2,\"517\":2,\"529\":2,\"535\":1,\"540\":1,\"543\":4,\"544\":2,\"547\":2,\"559\":2,\"565\":1,\"570\":1,\"573\":4,\"574\":1,\"577\":2,\"589\":2,\"595\":1,\"600\":1,\"603\":4,\"604\":1,\"607\":2,\"635\":2,\"641\":1,\"646\":1,\"649\":4,\"650\":1,\"653\":2,\"681\":2,\"687\":1,\"692\":1,\"695\":4,\"696\":1,\"699\":2,\"727\":2,\"733\":1,\"738\":1,\"741\":4,\"742\":1,\"745\":2,\"773\":2,\"779\":1,\"784\":1,\"787\":4,\"788\":1,\"791\":2}}],[\"grizzly\",{\"1\":{\"440\":4,\"466\":2,\"489\":2,\"515\":2,\"545\":2,\"575\":2,\"605\":2,\"651\":2,\"697\":2,\"743\":4,\"789\":4}}],[\"grateful\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"graphical\",{\"1\":{\"398\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2328\":1,\"2547\":1,\"2766\":1}}],[\"granted\",{\"1\":{\"95\":1,\"165\":1}}],[\"greatly\",{\"1\":{\"413\":1,\"414\":1,\"624\":1,\"625\":1,\"670\":1,\"671\":1,\"716\":1,\"717\":1,\"762\":1,\"763\":1}}],[\"greater\",{\"1\":{\"368\":1}}],[\"great\",{\"1\":{\"93\":2,\"123\":1}}],[\"green\",{\"1\":{\"84\":1,\"425\":1,\"530\":1,\"560\":1,\"590\":1,\"636\":1,\"682\":1,\"728\":1,\"774\":1}}],[\"growth\",{\"1\":{\"401\":1,\"415\":1,\"612\":1,\"626\":1,\"658\":1,\"672\":1,\"704\":1,\"718\":1,\"750\":1,\"764\":1}}],[\"growing\",{\"1\":{\"68\":1}}],[\"groupadd\",{\"1\":{\"438\":1,\"439\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"groupid>\",{\"1\":{\"159\":1}}],[\"grouping\",{\"1\":{\"155\":1}}],[\"grouped\",{\"1\":{\"155\":1}}],[\"group\",{\"0\":{\"114\":1,\"174\":1,\"177\":1,\"250\":1,\"252\":1,\"802\":1,\"837\":1,\"840\":1,\"929\":1,\"947\":1,\"949\":1,\"1022\":1,\"1025\":1,\"1113\":1,\"1115\":1,\"1173\":1,\"1176\":1,\"1233\":1,\"1251\":1,\"1253\":1,\"1345\":1,\"1348\":1,\"1409\":1,\"1427\":1,\"1429\":1,\"1522\":1,\"1525\":1,\"1586\":1,\"1604\":1,\"1606\":1,\"1699\":1,\"1702\":1,\"1763\":1,\"1781\":1,\"1783\":1,\"1876\":1,\"1879\":1,\"1940\":1,\"1958\":1,\"1960\":1,\"2053\":1,\"2056\":1,\"2117\":1,\"2135\":1,\"2137\":1,\"2205\":1,\"2240\":1,\"2243\":1,\"2332\":1,\"2350\":1,\"2352\":1,\"2424\":1,\"2459\":1,\"2462\":1,\"2551\":1,\"2569\":1,\"2571\":1,\"2643\":1,\"2678\":1,\"2681\":1,\"2770\":1,\"2788\":1,\"2790\":1},\"1\":{\"93\":1,\"174\":2,\"177\":2,\"250\":2,\"252\":2,\"285\":3,\"286\":3,\"296\":3,\"297\":3,\"323\":12,\"429\":1,\"438\":5,\"439\":3,\"464\":5,\"465\":3,\"487\":5,\"488\":3,\"513\":5,\"514\":3,\"543\":5,\"544\":3,\"573\":5,\"574\":3,\"603\":5,\"604\":3,\"649\":5,\"650\":3,\"695\":5,\"696\":3,\"741\":5,\"742\":3,\"778\":1,\"787\":5,\"788\":3,\"799\":1,\"802\":3,\"806\":2,\"837\":2,\"840\":2,\"926\":1,\"929\":3,\"933\":2,\"947\":2,\"949\":2,\"1022\":2,\"1025\":2,\"1113\":2,\"1115\":2,\"1173\":2,\"1176\":2,\"1230\":1,\"1233\":3,\"1237\":2,\"1251\":2,\"1253\":2,\"1345\":2,\"1348\":2,\"1406\":1,\"1409\":3,\"1413\":2,\"1427\":2,\"1429\":2,\"1522\":2,\"1525\":2,\"1583\":1,\"1586\":3,\"1590\":2,\"1604\":2,\"1606\":2,\"1699\":2,\"1702\":2,\"1760\":1,\"1763\":3,\"1767\":2,\"1781\":2,\"1783\":2,\"1876\":2,\"1879\":2,\"1937\":1,\"1940\":3,\"1944\":2,\"1958\":2,\"1960\":2,\"2053\":2,\"2056\":2,\"2114\":1,\"2117\":3,\"2121\":2,\"2135\":2,\"2137\":2,\"2202\":1,\"2205\":3,\"2209\":2,\"2240\":2,\"2243\":2,\"2329\":1,\"2332\":3,\"2336\":2,\"2350\":2,\"2352\":2,\"2421\":1,\"2424\":3,\"2428\":2,\"2459\":2,\"2462\":2,\"2548\":1,\"2551\":3,\"2555\":2,\"2569\":2,\"2571\":2,\"2640\":1,\"2643\":3,\"2647\":2,\"2678\":2,\"2681\":2,\"2767\":1,\"2770\":3,\"2774\":2,\"2788\":2,\"2790\":2}}],[\"groups\",{\"1\":{\"81\":1,\"155\":1}}],[\"gruendner\",{\"1\":{\"26\":1}}],[\"google\",{\"1\":{\"135\":1}}],[\"goodbyedicmessage\",{\"1\":{\"386\":1}}],[\"goodbydic\",{\"1\":{\"386\":1,\"389\":3}}],[\"good\",{\"1\":{\"39\":1}}],[\"go\",{\"1\":{\"89\":1,\"334\":2,\"363\":2,\"389\":2}}],[\"goal\",{\"0\":{\"81\":1},\"1\":{\"340\":1}}],[\"goals\",{\"1\":{\"78\":1}}],[\"gothenburg\",{\"1\":{\"1\":1}}],[\"gmds2022\",{\"0\":{\"110\":1}}],[\"gmds\",{\"0\":{\"28\":1,\"29\":1},\"1\":{\"314\":1}}],[\"gecco\",{\"1\":{\"126\":1,\"281\":6,\"282\":2,\"286\":1,\"292\":6,\"293\":2,\"297\":1}}],[\"gecko\",{\"0\":{\"73\":1},\"1\":{\"12\":1,\"16\":2,\"22\":1,\"67\":1,\"73\":1,\"78\":1,\"423\":1,\"425\":1,\"441\":1,\"453\":1,\"454\":1,\"455\":1,\"467\":1,\"476\":1,\"477\":1,\"478\":1,\"490\":1,\"502\":1,\"503\":1,\"504\":1,\"516\":1,\"528\":1,\"529\":1,\"530\":1,\"546\":1,\"558\":1,\"560\":1,\"576\":1,\"588\":1,\"590\":1,\"606\":1,\"634\":1,\"636\":1,\"652\":1,\"680\":1,\"682\":1,\"698\":1,\"726\":1,\"728\":1,\"744\":1,\"772\":1,\"774\":1,\"790\":1}}],[\"gesundheit\",{\"1\":{\"122\":1}}],[\"gespeichert\",{\"1\":{\"17\":1}}],[\"gets\",{\"1\":{\"806\":1,\"933\":1,\"1237\":1,\"1413\":1,\"1590\":1,\"1767\":1,\"1944\":1,\"2121\":1,\"2209\":1,\"2336\":1,\"2428\":1,\"2555\":1,\"2647\":1,\"2774\":1}}],[\"getsub\",{\"1\":{\"192\":1}}],[\"getadditionalinputparameters\",{\"1\":{\"386\":1}}],[\"getvariable\",{\"1\":{\"369\":1}}],[\"getversion\",{\"1\":{\"344\":1}}],[\"getreleasedate\",{\"1\":{\"344\":1}}],[\"getter\",{\"1\":{\"155\":1}}],[\"getting\",{\"0\":{\"12\":1},\"1\":{\"415\":4,\"626\":4,\"672\":4,\"718\":4,\"764\":4}}],[\"get\",{\"0\":{\"71\":1},\"1\":{\"70\":1,\"279\":4,\"290\":4,\"406\":1,\"418\":1,\"423\":1,\"433\":4,\"453\":1,\"459\":4,\"476\":1,\"482\":4,\"502\":1,\"508\":4,\"528\":1,\"538\":4,\"558\":1,\"568\":4,\"588\":1,\"598\":4,\"617\":1,\"629\":1,\"634\":1,\"644\":4,\"663\":1,\"675\":1,\"680\":1,\"690\":4,\"709\":1,\"721\":1,\"726\":1,\"736\":4,\"755\":1,\"767\":1,\"772\":1,\"782\":4}}],[\"generates\",{\"1\":{\"342\":1}}],[\"generate\",{\"1\":{\"158\":1,\"285\":4,\"286\":3,\"296\":4,\"297\":3,\"327\":1,\"394\":1,\"438\":4,\"439\":3,\"464\":4,\"465\":3,\"487\":4,\"488\":3,\"513\":4,\"514\":3,\"543\":4,\"544\":3,\"573\":4,\"574\":3,\"603\":4,\"604\":3,\"649\":4,\"650\":3,\"695\":4,\"696\":3,\"741\":4,\"742\":3,\"787\":4,\"788\":3}}],[\"generated\",{\"1\":{\"130\":1,\"131\":1,\"141\":2,\"142\":1,\"150\":1,\"158\":1,\"334\":4,\"363\":1,\"389\":1,\"394\":1}}],[\"generator\",{\"1\":{\"130\":2,\"131\":2,\"134\":1,\"327\":1,\"334\":3,\"342\":2,\"363\":1,\"389\":1}}],[\"general\",{\"0\":{\"95\":1,\"160\":1,\"165\":1,\"402\":1,\"613\":1,\"659\":1,\"705\":1,\"751\":1},\"1\":{\"30\":1,\"36\":1,\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"325\":1,\"804\":1,\"931\":1,\"1235\":1,\"1411\":1,\"1588\":1,\"1765\":1,\"1942\":1,\"2119\":1,\"2207\":1,\"2334\":1,\"2426\":1,\"2553\":1,\"2645\":1,\"2772\":1}}],[\"gender\",{\"1\":{\"91\":1}}],[\"genutzt\",{\"1\":{\"17\":1}}],[\"gerne\",{\"1\":{\"22\":1}}],[\"germany\",{\"1\":{\"125\":1}}],[\"german\",{\"1\":{\"0\":1,\"5\":1,\"6\":1,\"11\":1,\"26\":1,\"94\":2,\"112\":1,\"113\":1,\"116\":1,\"122\":1,\"415\":1,\"456\":1,\"468\":1,\"479\":1,\"491\":1,\"505\":1,\"517\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"gelegenheit\",{\"1\":{\"14\":1}}],[\"gemeinsame\",{\"1\":{\"14\":1,\"41\":1}}],[\"wget\",{\"1\":{\"285\":2,\"286\":2,\"296\":2,\"297\":2,\"299\":4,\"429\":2,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"778\":2,\"787\":1,\"788\":1}}],[\"ws\",{\"0\":{\"268\":1,\"270\":1,\"912\":1,\"914\":1,\"1004\":1,\"1006\":1,\"1133\":1,\"1135\":1,\"1304\":1,\"1306\":1,\"1480\":1,\"1482\":1,\"1657\":1,\"1659\":1,\"1834\":1,\"1836\":1,\"2011\":1,\"2013\":1,\"2188\":1,\"2190\":1,\"2315\":1,\"2317\":1,\"2407\":1,\"2409\":1,\"2534\":1,\"2536\":1,\"2626\":1,\"2628\":1,\"2753\":1,\"2755\":1,\"2845\":1,\"2847\":1},\"1\":{\"268\":1,\"270\":1,\"466\":2,\"489\":2,\"515\":2,\"545\":2,\"575\":2,\"605\":2,\"651\":2,\"697\":2,\"912\":1,\"914\":1,\"1004\":1,\"1006\":1,\"1133\":1,\"1135\":1,\"1304\":1,\"1306\":1,\"1480\":1,\"1482\":1,\"1657\":1,\"1659\":1,\"1834\":1,\"1836\":1,\"2011\":1,\"2013\":1,\"2188\":1,\"2190\":1,\"2315\":1,\"2317\":1,\"2407\":1,\"2409\":1,\"2534\":1,\"2536\":1,\"2626\":1,\"2628\":1,\"2753\":1,\"2755\":1,\"2845\":1,\"2847\":1}}],[\"wss\",{\"1\":{\"86\":1,\"105\":1,\"281\":1,\"292\":1,\"435\":1,\"461\":1,\"466\":2,\"484\":1,\"489\":2,\"510\":1,\"515\":2,\"540\":1,\"545\":2,\"570\":1,\"575\":2,\"600\":1,\"605\":2,\"646\":1,\"651\":2,\"692\":1,\"697\":2,\"738\":1,\"784\":1}}],[\"w3\",{\"1\":{\"158\":1,\"394\":1}}],[\"wrapped\",{\"1\":{\"155\":1}}],[\"wrap\",{\"1\":{\"155\":5,\"156\":14}}],[\"written\",{\"1\":{\"337\":1,\"342\":1,\"344\":1,\"392\":1,\"418\":1,\"419\":1,\"448\":1,\"449\":1,\"471\":1,\"472\":1,\"497\":1,\"498\":1,\"523\":1,\"524\":1,\"553\":1,\"554\":1,\"583\":1,\"584\":1,\"629\":1,\"630\":1,\"675\":1,\"676\":1,\"721\":1,\"722\":1,\"767\":1,\"768\":1}}],[\"writing\",{\"0\":{\"151\":1},\"1\":{\"344\":1}}],[\"write\",{\"1\":{\"69\":1,\"137\":1,\"138\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"344\":1,\"369\":2,\"370\":1,\"410\":1,\"425\":1,\"438\":2,\"439\":1,\"441\":1,\"453\":1,\"455\":1,\"464\":2,\"465\":1,\"467\":1,\"476\":1,\"478\":1,\"487\":2,\"488\":1,\"490\":1,\"502\":1,\"504\":1,\"513\":2,\"514\":1,\"516\":1,\"530\":1,\"543\":2,\"544\":1,\"546\":1,\"560\":1,\"573\":2,\"574\":1,\"576\":1,\"590\":1,\"603\":2,\"604\":1,\"606\":1,\"621\":1,\"636\":1,\"649\":2,\"650\":1,\"652\":1,\"667\":1,\"682\":1,\"695\":2,\"696\":1,\"698\":1,\"713\":1,\"728\":1,\"741\":2,\"742\":1,\"744\":1,\"759\":1,\"774\":1,\"787\":2,\"788\":1,\"790\":1}}],[\"wwwnetzwerk\",{\"1\":{\"300\":8,\"303\":2}}],[\"www\",{\"1\":{\"112\":1,\"135\":1,\"158\":1,\"394\":1}}],[\"wait\",{\"1\":{\"377\":1,\"833\":1,\"943\":1,\"1018\":1,\"1109\":1,\"1169\":1,\"1247\":1,\"1341\":1,\"1423\":1,\"1518\":1,\"1600\":1,\"1695\":1,\"1777\":1,\"1872\":1,\"1954\":1,\"2049\":1,\"2131\":1,\"2236\":1,\"2346\":1,\"2455\":1,\"2565\":1,\"2674\":1,\"2784\":1}}],[\"waiting\",{\"1\":{\"321\":1,\"375\":1,\"377\":2,\"379\":2,\"389\":1}}],[\"waits\",{\"1\":{\"267\":1,\"268\":1,\"269\":1,\"270\":1,\"911\":1,\"912\":1,\"913\":1,\"914\":1,\"1003\":1,\"1004\":1,\"1005\":1,\"1006\":1,\"1132\":1,\"1133\":1,\"1134\":1,\"1135\":1,\"1303\":1,\"1304\":1,\"1305\":1,\"1306\":1,\"1479\":1,\"1480\":1,\"1481\":1,\"1482\":1,\"1656\":1,\"1657\":1,\"1658\":1,\"1659\":1,\"1833\":1,\"1834\":1,\"1835\":1,\"1836\":1,\"2010\":1,\"2011\":1,\"2012\":1,\"2013\":1,\"2187\":1,\"2188\":1,\"2189\":1,\"2190\":1,\"2314\":1,\"2315\":1,\"2316\":1,\"2317\":1,\"2406\":1,\"2407\":1,\"2408\":1,\"2409\":1,\"2533\":1,\"2534\":1,\"2535\":1,\"2536\":1,\"2625\":1,\"2626\":1,\"2627\":1,\"2628\":1,\"2752\":1,\"2753\":1,\"2754\":1,\"2755\":1,\"2844\":1,\"2845\":1,\"2846\":1,\"2847\":1}}],[\"warn\",{\"1\":{\"213\":1,\"870\":1,\"1052\":1,\"1203\":1,\"1375\":1,\"1552\":1,\"1729\":1,\"1906\":1,\"2083\":1,\"2273\":1,\"2492\":1,\"2711\":1}}],[\"warnning\",{\"1\":{\"182\":1,\"843\":1,\"844\":1,\"847\":1,\"848\":1,\"849\":1,\"953\":1,\"954\":1,\"955\":1,\"1030\":1,\"1181\":1,\"1353\":1,\"1354\":1,\"1530\":1,\"1531\":1,\"1707\":1,\"1708\":1,\"1884\":1,\"1885\":1,\"2061\":1,\"2062\":1,\"2246\":1,\"2247\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2465\":1,\"2466\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2684\":1,\"2685\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2794\":1,\"2795\":1,\"2796\":1}}],[\"warning\",{\"1\":{\"132\":1,\"279\":1,\"290\":1,\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"651\":1,\"697\":1,\"743\":1,\"789\":1}}],[\"walks\",{\"1\":{\"140\":1}}],[\"was\",{\"1\":{\"94\":1,\"113\":1,\"125\":2,\"286\":3,\"297\":3,\"314\":1,\"333\":1,\"334\":7,\"347\":1,\"348\":2,\"362\":1,\"363\":9,\"372\":1,\"373\":1,\"388\":1,\"389\":10,\"439\":3,\"465\":3,\"488\":3,\"514\":3,\"544\":3,\"574\":3,\"604\":3,\"650\":3,\"696\":3,\"742\":3,\"788\":3}}],[\"ways\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"way\",{\"1\":{\"81\":1,\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"wants\",{\"1\":{\"334\":1}}],[\"want\",{\"1\":{\"13\":1,\"37\":1,\"81\":1,\"82\":1,\"89\":1,\"150\":1,\"410\":1,\"411\":1,\"413\":1,\"442\":1,\"464\":1,\"492\":1,\"518\":1,\"547\":1,\"548\":1,\"577\":1,\"607\":1,\"621\":1,\"622\":1,\"624\":1,\"653\":1,\"667\":1,\"668\":1,\"670\":1,\"699\":1,\"713\":1,\"714\":1,\"716\":1,\"745\":1,\"759\":1,\"760\":1,\"762\":1,\"791\":1}}],[\"whether\",{\"1\":{\"257\":1,\"345\":1,\"367\":1,\"368\":1,\"370\":1,\"373\":1,\"413\":1,\"414\":1,\"624\":1,\"625\":1,\"670\":1,\"671\":1,\"716\":1,\"717\":1,\"762\":1,\"763\":1}}],[\"where\",{\"1\":{\"233\":1,\"342\":1,\"455\":1,\"478\":1,\"504\":1,\"520\":1,\"530\":1,\"891\":1,\"1070\":1,\"1221\":1,\"1396\":1,\"1573\":1,\"1750\":1,\"1927\":1,\"2104\":1,\"2294\":1,\"2513\":1,\"2732\":1}}],[\"when\",{\"1\":{\"36\":1,\"86\":1,\"93\":2,\"109\":1,\"113\":1,\"116\":1,\"150\":1,\"155\":1,\"164\":1,\"182\":1,\"260\":1,\"285\":1,\"296\":1,\"329\":2,\"352\":1,\"393\":1,\"409\":1,\"425\":1,\"443\":1,\"455\":1,\"478\":1,\"504\":1,\"530\":1,\"548\":1,\"560\":1,\"578\":1,\"590\":1,\"608\":1,\"620\":1,\"636\":1,\"654\":1,\"666\":1,\"682\":1,\"700\":1,\"712\":1,\"728\":1,\"746\":1,\"758\":1,\"774\":1,\"792\":1,\"825\":1,\"826\":1,\"827\":1,\"828\":1,\"847\":1,\"848\":1,\"893\":1,\"904\":1,\"921\":1,\"925\":1,\"960\":1,\"985\":1,\"986\":1,\"987\":1,\"988\":1,\"996\":1,\"1013\":1,\"1030\":1,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":1,\"1122\":1,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":1,\"1181\":1,\"1229\":1,\"1261\":1,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":1,\"1296\":1,\"1312\":1,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":1,\"1353\":1,\"1354\":1,\"1405\":1,\"1437\":1,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":1,\"1472\":1,\"1489\":1,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":1,\"1530\":1,\"1531\":1,\"1582\":1,\"1614\":1,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":1,\"1649\":1,\"1666\":1,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":1,\"1707\":1,\"1708\":1,\"1759\":1,\"1791\":1,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":1,\"1826\":1,\"1843\":1,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":1,\"1884\":1,\"1885\":1,\"1936\":1,\"1968\":1,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":1,\"2003\":1,\"2020\":1,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":1,\"2061\":1,\"2062\":1,\"2113\":1,\"2145\":1,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":1,\"2180\":1,\"2197\":1,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":1,\"2250\":1,\"2251\":1,\"2296\":1,\"2307\":1,\"2324\":1,\"2328\":1,\"2363\":1,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":1,\"2399\":1,\"2416\":1,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":1,\"2469\":1,\"2470\":1,\"2515\":1,\"2526\":1,\"2543\":1,\"2547\":1,\"2582\":1,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":1,\"2618\":1,\"2635\":1,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":1,\"2688\":1,\"2689\":1,\"2734\":1,\"2745\":1,\"2762\":1,\"2766\":1,\"2801\":1,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":1,\"2837\":1,\"2854\":1}}],[\"why\",{\"0\":{\"93\":1},\"1\":{\"93\":1}}],[\"what\",{\"0\":{\"115\":1,\"116\":1},\"1\":{\"71\":1,\"81\":1,\"93\":2,\"328\":4,\"329\":3,\"330\":5,\"352\":1,\"353\":3,\"354\":1,\"360\":1,\"380\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"who\",{\"1\":{\"39\":1,\"68\":1,\"93\":1,\"411\":2,\"622\":2,\"668\":2,\"714\":2,\"760\":2}}],[\"white\",{\"1\":{\"155\":1,\"352\":1}}],[\"which\",{\"1\":{\"10\":1,\"33\":2,\"78\":1,\"84\":1,\"86\":2,\"87\":2,\"90\":1,\"91\":4,\"105\":1,\"116\":1,\"126\":1,\"134\":1,\"148\":1,\"149\":1,\"150\":1,\"186\":1,\"188\":1,\"192\":1,\"194\":1,\"195\":1,\"197\":1,\"240\":1,\"242\":1,\"257\":1,\"337\":1,\"343\":1,\"352\":2,\"423\":1,\"453\":1,\"476\":1,\"502\":1,\"528\":1,\"558\":1,\"588\":1,\"634\":1,\"680\":1,\"726\":1,\"772\":1}}],[\"while\",{\"1\":{\"9\":1,\"108\":2,\"109\":1,\"113\":1,\"155\":7,\"156\":1,\"163\":2,\"164\":1,\"334\":1,\"344\":1,\"363\":1,\"389\":1}}],[\"w\",{\"1\":{\"26\":1}}],[\"während\",{\"1\":{\"16\":1,\"17\":1}}],[\"would\",{\"1\":{\"68\":1,\"69\":1,\"91\":1,\"377\":2}}],[\"worry\",{\"1\":{\"93\":1}}],[\"works\",{\"1\":{\"352\":1}}],[\"workflow\",{\"0\":{\"153\":1,\"410\":1,\"621\":1,\"667\":1,\"713\":1,\"759\":1},\"1\":{\"393\":1}}],[\"workflows\",{\"1\":{\"90\":1}}],[\"working\",{\"1\":{\"112\":1,\"113\":1}}],[\"work\",{\"1\":{\"13\":2,\"38\":2,\"90\":1,\"93\":3,\"125\":1,\"334\":1,\"411\":1,\"414\":1,\"415\":1,\"418\":1,\"419\":1,\"448\":1,\"449\":1,\"471\":1,\"472\":1,\"497\":1,\"498\":1,\"523\":1,\"524\":1,\"553\":1,\"554\":1,\"583\":1,\"584\":1,\"622\":1,\"625\":1,\"626\":1,\"629\":1,\"630\":1,\"668\":1,\"671\":1,\"672\":1,\"675\":1,\"676\":1,\"714\":1,\"717\":1,\"718\":1,\"721\":1,\"722\":1,\"760\":1,\"763\":1,\"764\":1,\"767\":1,\"768\":1}}],[\"worlds\",{\"1\":{\"353\":1}}],[\"world\",{\"1\":{\"5\":1,\"11\":1,\"113\":3,\"418\":1,\"419\":1,\"448\":1,\"449\":1,\"471\":1,\"472\":1,\"497\":1,\"498\":1,\"523\":1,\"524\":1,\"553\":1,\"554\":1,\"583\":1,\"584\":1,\"629\":1,\"630\":1,\"675\":1,\"676\":1,\"721\":1,\"722\":1,\"767\":1,\"768\":1}}],[\"won\",{\"1\":{\"1\":1}}],[\"wildcard\",{\"1\":{\"155\":2}}],[\"willingness\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"will\",{\"0\":{\"2\":1,\"83\":1,\"116\":1},\"1\":{\"38\":5,\"67\":1,\"77\":1,\"78\":3,\"95\":2,\"99\":1,\"112\":5,\"113\":7,\"116\":1,\"135\":2,\"148\":1,\"149\":1,\"153\":4,\"165\":2,\"272\":1,\"284\":2,\"285\":2,\"286\":3,\"295\":2,\"296\":2,\"297\":3,\"299\":1,\"318\":1,\"320\":1,\"321\":1,\"325\":1,\"330\":1,\"337\":1,\"340\":1,\"343\":1,\"344\":1,\"350\":1,\"365\":1,\"375\":2,\"389\":1,\"403\":1,\"404\":1,\"410\":1,\"415\":1,\"423\":2,\"425\":1,\"430\":1,\"437\":2,\"438\":2,\"439\":2,\"440\":2,\"442\":5,\"453\":2,\"455\":2,\"456\":1,\"463\":2,\"464\":2,\"465\":2,\"466\":2,\"468\":2,\"476\":2,\"478\":2,\"479\":1,\"486\":2,\"487\":2,\"488\":2,\"489\":2,\"491\":2,\"502\":2,\"504\":2,\"505\":1,\"512\":2,\"513\":2,\"514\":2,\"515\":2,\"517\":2,\"528\":2,\"530\":2,\"535\":1,\"542\":2,\"543\":2,\"544\":2,\"545\":2,\"547\":5,\"558\":2,\"560\":1,\"565\":1,\"572\":2,\"573\":2,\"574\":2,\"575\":2,\"577\":5,\"588\":2,\"590\":1,\"595\":1,\"602\":2,\"603\":2,\"604\":2,\"605\":2,\"607\":5,\"614\":1,\"615\":1,\"621\":1,\"626\":1,\"634\":2,\"636\":1,\"641\":1,\"648\":2,\"649\":2,\"650\":2,\"651\":2,\"653\":5,\"660\":1,\"661\":1,\"667\":1,\"672\":1,\"680\":2,\"682\":1,\"687\":1,\"694\":2,\"695\":2,\"696\":2,\"697\":2,\"699\":5,\"706\":1,\"707\":1,\"713\":1,\"718\":1,\"726\":2,\"728\":1,\"733\":1,\"740\":2,\"741\":2,\"742\":2,\"743\":2,\"745\":5,\"752\":1,\"753\":1,\"759\":1,\"764\":1,\"772\":2,\"774\":1,\"779\":1,\"786\":2,\"787\":2,\"788\":2,\"789\":2,\"791\":5,\"798\":1,\"801\":2,\"897\":1,\"917\":1,\"925\":1,\"928\":2,\"964\":1,\"1009\":1,\"1071\":1,\"1125\":1,\"1137\":1,\"1222\":1,\"1229\":1,\"1232\":2,\"1264\":1,\"1308\":1,\"1398\":1,\"1405\":1,\"1408\":2,\"1440\":1,\"1485\":1,\"1575\":1,\"1582\":1,\"1585\":2,\"1617\":1,\"1662\":1,\"1752\":1,\"1759\":1,\"1762\":2,\"1794\":1,\"1839\":1,\"1929\":1,\"1936\":1,\"1939\":2,\"1971\":1,\"2016\":1,\"2106\":1,\"2113\":1,\"2116\":2,\"2148\":1,\"2193\":1,\"2201\":1,\"2204\":2,\"2300\":1,\"2320\":1,\"2328\":1,\"2331\":2,\"2367\":1,\"2412\":1,\"2420\":1,\"2423\":2,\"2519\":1,\"2539\":1,\"2547\":1,\"2550\":2,\"2586\":1,\"2631\":1,\"2639\":1,\"2642\":2,\"2738\":1,\"2758\":1,\"2766\":1,\"2769\":2,\"2805\":1,\"2850\":1}}],[\"windows\",{\"1\":{\"131\":1,\"133\":2,\"391\":1,\"396\":2}}],[\"wiki\",{\"1\":{\"17\":1,\"95\":1,\"140\":1,\"165\":1,\"285\":4,\"286\":4,\"296\":4,\"297\":4,\"299\":8,\"300\":1,\"303\":1,\"306\":1,\"309\":1,\"312\":1}}],[\"wird\",{\"1\":{\"17\":1}}],[\"wir\",{\"1\":{\"14\":1,\"16\":3,\"17\":1}}],[\"wide\",{\"1\":{\"9\":1}}],[\"withsubpackages=\",{\"1\":{\"156\":8}}],[\"without\",{\"0\":{\"130\":1},\"1\":{\"1\":1,\"26\":1,\"37\":1,\"281\":2,\"286\":1,\"292\":2,\"297\":1,\"300\":2,\"303\":2,\"306\":2,\"309\":2,\"312\":2,\"370\":1,\"389\":1,\"411\":1,\"435\":2,\"439\":1,\"445\":2,\"461\":2,\"465\":1,\"484\":2,\"488\":1,\"494\":2,\"510\":2,\"514\":1,\"520\":2,\"540\":2,\"544\":1,\"550\":2,\"570\":2,\"574\":1,\"580\":2,\"600\":2,\"604\":1,\"610\":2,\"622\":1,\"646\":2,\"650\":1,\"656\":2,\"668\":1,\"692\":2,\"696\":1,\"702\":2,\"714\":1,\"738\":2,\"742\":1,\"748\":2,\"760\":1,\"784\":2,\"788\":1,\"794\":2,\"798\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"within\",{\"1\":{\"0\":1,\"38\":1,\"89\":2,\"90\":1,\"91\":1,\"94\":2,\"106\":1,\"125\":1,\"148\":1,\"156\":1,\"161\":1,\"286\":1,\"297\":1,\"325\":1,\"330\":1,\"331\":1,\"337\":1,\"352\":1,\"368\":1,\"379\":1,\"802\":1,\"929\":1,\"932\":2,\"1233\":1,\"1236\":2,\"1409\":1,\"1412\":2,\"1586\":1,\"1589\":2,\"1763\":1,\"1766\":2,\"1940\":1,\"1943\":2,\"2117\":1,\"2120\":2,\"2205\":1,\"2332\":1,\"2335\":2,\"2424\":1,\"2551\":1,\"2554\":2,\"2643\":1,\"2770\":1,\"2773\":2}}],[\"with\",{\"0\":{\"9\":1,\"12\":1,\"131\":1,\"379\":1},\"1\":{\"0\":1,\"8\":1,\"32\":1,\"37\":1,\"39\":1,\"42\":1,\"43\":1,\"44\":1,\"45\":1,\"46\":1,\"47\":1,\"48\":1,\"49\":1,\"50\":1,\"51\":1,\"52\":1,\"53\":1,\"54\":1,\"55\":1,\"56\":1,\"57\":1,\"58\":1,\"59\":1,\"60\":1,\"61\":1,\"62\":1,\"63\":1,\"70\":1,\"71\":1,\"77\":3,\"78\":3,\"81\":1,\"84\":1,\"86\":4,\"87\":1,\"91\":1,\"93\":3,\"94\":3,\"95\":2,\"98\":1,\"99\":1,\"101\":1,\"105\":1,\"112\":4,\"113\":2,\"114\":2,\"115\":1,\"122\":1,\"124\":1,\"130\":4,\"133\":4,\"137\":1,\"138\":2,\"148\":1,\"149\":1,\"150\":1,\"152\":1,\"155\":1,\"158\":2,\"159\":1,\"165\":2,\"183\":1,\"189\":1,\"198\":1,\"201\":1,\"205\":1,\"206\":1,\"208\":1,\"220\":1,\"224\":1,\"230\":1,\"231\":1,\"237\":1,\"245\":1,\"257\":1,\"266\":1,\"282\":1,\"285\":2,\"286\":3,\"293\":1,\"296\":2,\"297\":3,\"299\":2,\"300\":18,\"302\":2,\"303\":18,\"305\":2,\"306\":7,\"308\":2,\"309\":5,\"311\":2,\"312\":5,\"315\":1,\"325\":1,\"328\":1,\"334\":5,\"338\":1,\"341\":1,\"344\":2,\"345\":4,\"348\":3,\"350\":1,\"352\":1,\"353\":1,\"354\":2,\"357\":4,\"358\":2,\"359\":2,\"360\":3,\"363\":2,\"373\":2,\"375\":1,\"377\":1,\"379\":2,\"380\":2,\"383\":4,\"384\":2,\"385\":2,\"386\":1,\"389\":2,\"390\":1,\"391\":1,\"394\":3,\"395\":1,\"403\":1,\"409\":1,\"410\":1,\"411\":1,\"412\":1,\"413\":2,\"415\":1,\"425\":1,\"433\":1,\"434\":1,\"438\":1,\"439\":2,\"440\":1,\"442\":1,\"444\":2,\"445\":4,\"453\":1,\"459\":1,\"460\":1,\"464\":1,\"465\":2,\"466\":1,\"476\":1,\"482\":1,\"483\":1,\"487\":1,\"488\":2,\"489\":1,\"493\":2,\"494\":4,\"502\":1,\"508\":1,\"509\":1,\"513\":1,\"514\":2,\"515\":1,\"519\":2,\"520\":7,\"538\":1,\"539\":1,\"543\":1,\"544\":2,\"545\":1,\"547\":1,\"549\":2,\"550\":4,\"560\":1,\"568\":1,\"569\":1,\"573\":1,\"574\":2,\"575\":1,\"577\":1,\"579\":2,\"580\":4,\"590\":1,\"598\":1,\"599\":1,\"603\":1,\"604\":2,\"605\":1,\"607\":1,\"609\":2,\"610\":4,\"614\":1,\"620\":1,\"621\":1,\"622\":1,\"623\":1,\"624\":2,\"626\":1,\"636\":1,\"644\":1,\"645\":1,\"649\":1,\"650\":2,\"651\":1,\"653\":1,\"655\":2,\"656\":4,\"660\":1,\"666\":1,\"667\":1,\"668\":1,\"669\":1,\"670\":2,\"672\":1,\"682\":1,\"690\":1,\"691\":1,\"695\":1,\"696\":2,\"697\":1,\"699\":1,\"701\":2,\"702\":4,\"706\":1,\"712\":1,\"713\":1,\"714\":1,\"715\":1,\"716\":2,\"718\":1,\"728\":1,\"736\":1,\"737\":1,\"741\":1,\"742\":2,\"743\":1,\"745\":1,\"747\":2,\"748\":4,\"752\":1,\"758\":1,\"759\":1,\"760\":1,\"761\":1,\"762\":2,\"764\":1,\"774\":1,\"782\":1,\"783\":1,\"787\":1,\"788\":2,\"789\":1,\"791\":1,\"793\":2,\"794\":4,\"798\":2,\"802\":1,\"810\":1,\"817\":1,\"822\":1,\"824\":1,\"850\":1,\"853\":1,\"856\":1,\"859\":1,\"862\":1,\"863\":1,\"865\":1,\"877\":1,\"881\":1,\"888\":1,\"889\":1,\"904\":1,\"910\":1,\"925\":3,\"929\":1,\"932\":1,\"935\":1,\"940\":1,\"970\":1,\"977\":1,\"982\":1,\"984\":1,\"996\":1,\"1002\":1,\"1031\":1,\"1034\":1,\"1037\":1,\"1040\":1,\"1044\":1,\"1045\":1,\"1047\":1,\"1059\":1,\"1063\":1,\"1067\":1,\"1068\":1,\"1078\":1,\"1085\":1,\"1090\":1,\"1092\":1,\"1101\":1,\"1106\":1,\"1131\":1,\"1146\":1,\"1153\":1,\"1158\":1,\"1160\":1,\"1182\":1,\"1185\":1,\"1188\":1,\"1191\":1,\"1195\":1,\"1196\":1,\"1198\":1,\"1210\":1,\"1214\":1,\"1218\":1,\"1219\":1,\"1229\":3,\"1233\":1,\"1236\":1,\"1239\":1,\"1244\":1,\"1270\":1,\"1277\":1,\"1282\":1,\"1284\":1,\"1296\":1,\"1302\":1,\"1318\":1,\"1325\":1,\"1330\":1,\"1332\":1,\"1355\":1,\"1358\":1,\"1361\":1,\"1364\":1,\"1367\":1,\"1368\":1,\"1370\":1,\"1382\":1,\"1386\":1,\"1393\":1,\"1394\":1,\"1405\":3,\"1409\":1,\"1412\":1,\"1415\":1,\"1420\":1,\"1446\":1,\"1453\":1,\"1458\":1,\"1460\":1,\"1472\":1,\"1478\":1,\"1495\":1,\"1502\":1,\"1507\":1,\"1509\":1,\"1532\":1,\"1535\":1,\"1538\":1,\"1541\":1,\"1544\":1,\"1545\":1,\"1547\":1,\"1559\":1,\"1563\":1,\"1570\":1,\"1571\":1,\"1582\":3,\"1586\":1,\"1589\":1,\"1592\":1,\"1597\":1,\"1623\":1,\"1630\":1,\"1635\":1,\"1637\":1,\"1649\":1,\"1655\":1,\"1672\":1,\"1679\":1,\"1684\":1,\"1686\":1,\"1709\":1,\"1712\":1,\"1715\":1,\"1718\":1,\"1721\":1,\"1722\":1,\"1724\":1,\"1736\":1,\"1740\":1,\"1747\":1,\"1748\":1,\"1759\":3,\"1763\":1,\"1766\":1,\"1769\":1,\"1774\":1,\"1800\":1,\"1807\":1,\"1812\":1,\"1814\":1,\"1826\":1,\"1832\":1,\"1849\":1,\"1856\":1,\"1861\":1,\"1863\":1,\"1886\":1,\"1889\":1,\"1892\":1,\"1895\":1,\"1898\":1,\"1899\":1,\"1901\":1,\"1913\":1,\"1917\":1,\"1924\":1,\"1925\":1,\"1936\":3,\"1940\":1,\"1943\":1,\"1946\":1,\"1951\":1,\"1977\":1,\"1984\":1,\"1989\":1,\"1991\":1,\"2003\":1,\"2009\":1,\"2026\":1,\"2033\":1,\"2038\":1,\"2040\":1,\"2063\":1,\"2066\":1,\"2069\":1,\"2072\":1,\"2075\":1,\"2076\":1,\"2078\":1,\"2090\":1,\"2094\":1,\"2101\":1,\"2102\":1,\"2113\":3,\"2117\":1,\"2120\":1,\"2123\":1,\"2128\":1,\"2154\":1,\"2161\":1,\"2166\":1,\"2168\":1,\"2180\":1,\"2186\":1,\"2201\":2,\"2205\":1,\"2213\":1,\"2220\":1,\"2225\":1,\"2227\":1,\"2253\":1,\"2256\":1,\"2259\":1,\"2262\":1,\"2265\":1,\"2266\":1,\"2268\":1,\"2280\":1,\"2284\":1,\"2291\":1,\"2292\":1,\"2307\":1,\"2313\":1,\"2328\":3,\"2332\":1,\"2335\":1,\"2338\":1,\"2343\":1,\"2373\":1,\"2380\":1,\"2385\":1,\"2387\":1,\"2399\":1,\"2405\":1,\"2420\":2,\"2424\":1,\"2432\":1,\"2439\":1,\"2444\":1,\"2446\":1,\"2472\":1,\"2475\":1,\"2478\":1,\"2481\":1,\"2484\":1,\"2485\":1,\"2487\":1,\"2499\":1,\"2503\":1,\"2510\":1,\"2511\":1,\"2526\":1,\"2532\":1,\"2547\":3,\"2551\":1,\"2554\":1,\"2557\":1,\"2562\":1,\"2592\":1,\"2599\":1,\"2604\":1,\"2606\":1,\"2618\":1,\"2624\":1,\"2639\":2,\"2643\":1,\"2651\":1,\"2658\":1,\"2663\":1,\"2665\":1,\"2691\":1,\"2694\":1,\"2697\":1,\"2700\":1,\"2703\":1,\"2704\":1,\"2706\":1,\"2718\":1,\"2722\":1,\"2729\":1,\"2730\":1,\"2745\":1,\"2751\":1,\"2766\":3,\"2770\":1,\"2773\":1,\"2776\":1,\"2781\":1,\"2811\":1,\"2818\":1,\"2823\":1,\"2825\":1,\"2837\":1,\"2843\":1}}],[\"were\",{\"1\":{\"89\":1,\"368\":1}}],[\"werden\",{\"1\":{\"16\":1,\"17\":5}}],[\"welcome\",{\"1\":{\"68\":1,\"71\":1,\"413\":2,\"415\":1,\"624\":2,\"626\":1,\"670\":2,\"672\":1,\"716\":2,\"718\":1,\"762\":2,\"764\":1}}],[\"well\",{\"1\":{\"1\":2,\"77\":1,\"81\":1,\"95\":1,\"112\":2,\"114\":1,\"116\":1,\"124\":1,\"165\":1,\"281\":1,\"284\":1,\"292\":1,\"295\":1,\"321\":1,\"327\":2,\"375\":1,\"411\":3,\"437\":1,\"463\":1,\"486\":1,\"512\":1,\"542\":1,\"572\":1,\"602\":1,\"622\":3,\"648\":1,\"668\":3,\"694\":1,\"714\":3,\"740\":1,\"760\":3,\"786\":1,\"993\":1,\"1293\":1,\"1469\":1,\"1646\":1,\"1823\":1,\"2000\":1,\"2177\":1,\"2396\":1,\"2615\":1,\"2834\":1}}],[\"webuser\",{\"1\":{\"464\":1}}],[\"webbrowser\",{\"1\":{\"130\":4,\"131\":4,\"134\":2,\"334\":4,\"363\":2,\"389\":2,\"453\":1,\"476\":1,\"502\":1,\"528\":1}}],[\"website\",{\"1\":{\"122\":1,\"143\":1,\"424\":1,\"441\":1,\"455\":1,\"467\":1,\"477\":1,\"478\":1,\"490\":1,\"503\":1,\"504\":1,\"516\":1,\"529\":1,\"530\":1,\"546\":1,\"559\":1,\"576\":1,\"589\":1,\"606\":1,\"635\":1,\"652\":1,\"681\":1,\"698\":1,\"727\":1,\"744\":1,\"773\":1,\"790\":1}}],[\"websites\",{\"1\":{\"89\":1}}],[\"webserver\",{\"1\":{\"106\":1,\"161\":1}}],[\"webservicerequest\",{\"0\":{\"849\":1,\"955\":1,\"2252\":1,\"2358\":1,\"2471\":1,\"2577\":1,\"2690\":1,\"2796\":1},\"1\":{\"849\":1,\"955\":1,\"2252\":1,\"2358\":1,\"2471\":1,\"2577\":1,\"2690\":1,\"2796\":1}}],[\"webserviceconfig\",{\"1\":{\"146\":1}}],[\"webservices\",{\"1\":{\"95\":1,\"165\":1,\"849\":1,\"955\":1,\"2252\":1,\"2358\":1,\"2471\":1,\"2577\":1,\"2690\":1,\"2796\":1}}],[\"webservice\",{\"0\":{\"146\":1,\"170\":1,\"227\":1,\"228\":1,\"234\":1},\"1\":{\"86\":3,\"142\":1,\"146\":5,\"148\":1,\"149\":1,\"170\":1,\"227\":1,\"228\":1,\"234\":1,\"334\":1,\"363\":1,\"389\":1}}],[\"websockets\",{\"1\":{\"86\":1}}],[\"websocket\",{\"0\":{\"192\":2,\"193\":1,\"194\":1},\"1\":{\"86\":2,\"192\":3,\"193\":2,\"194\":2,\"205\":1,\"206\":1,\"286\":1,\"297\":1,\"439\":1,\"440\":2,\"465\":1,\"466\":2,\"488\":1,\"489\":2,\"514\":1,\"515\":2,\"544\":1,\"545\":2,\"574\":1,\"575\":2,\"604\":1,\"605\":2,\"650\":1,\"651\":2,\"696\":1,\"697\":2,\"742\":1,\"743\":2,\"788\":1,\"789\":2,\"862\":1,\"863\":1,\"931\":1,\"1044\":1,\"1045\":1,\"1195\":1,\"1196\":1,\"1235\":1,\"1367\":1,\"1368\":1,\"1411\":1,\"1544\":1,\"1545\":1,\"1588\":1,\"1721\":1,\"1722\":1,\"1765\":1,\"1898\":1,\"1899\":1,\"1942\":1,\"2075\":1,\"2076\":1,\"2119\":1,\"2265\":1,\"2266\":1,\"2334\":1,\"2484\":1,\"2485\":1,\"2553\":1,\"2703\":1,\"2704\":1,\"2772\":1}}],[\"web\",{\"1\":{\"43\":2,\"45\":2,\"47\":2,\"49\":2,\"51\":2,\"53\":2,\"55\":2,\"57\":2,\"59\":2,\"61\":2,\"63\":2,\"91\":1,\"105\":1,\"108\":2,\"109\":1,\"115\":1,\"163\":2,\"164\":1,\"280\":1,\"291\":1,\"396\":1,\"423\":1,\"425\":1,\"434\":5,\"460\":5,\"483\":5,\"509\":5,\"519\":1,\"539\":5,\"558\":1,\"560\":1,\"569\":5,\"588\":1,\"590\":1,\"599\":5,\"634\":1,\"636\":1,\"645\":5,\"680\":1,\"682\":1,\"691\":5,\"726\":1,\"728\":1,\"737\":5,\"772\":1,\"774\":1,\"783\":5,\"829\":1,\"893\":1,\"925\":1,\"989\":1,\"1097\":1,\"1165\":1,\"1229\":1,\"1289\":1,\"1337\":1,\"1405\":1,\"1465\":1,\"1514\":1,\"1582\":1,\"1642\":1,\"1691\":1,\"1759\":1,\"1819\":1,\"1868\":1,\"1936\":1,\"1996\":1,\"2045\":1,\"2113\":1,\"2173\":1,\"2232\":1,\"2296\":1,\"2328\":1,\"2392\":1,\"2451\":1,\"2515\":1,\"2547\":1,\"2611\":1,\"2670\":1,\"2734\":1,\"2766\":1,\"2830\":1}}],[\"weboberfläche\",{\"1\":{\"16\":1}}],[\"wettstein\",{\"1\":{\"26\":6,\"79\":1,\"314\":1}}],[\"weitere\",{\"0\":{\"21\":1},\"1\":{\"16\":2,\"17\":1}}],[\"we\",{\"0\":{\"2\":1,\"83\":1,\"93\":1},\"1\":{\"1\":1,\"12\":1,\"33\":3,\"35\":3,\"36\":1,\"37\":2,\"38\":5,\"39\":1,\"40\":1,\"67\":1,\"68\":1,\"79\":1,\"81\":5,\"89\":3,\"90\":1,\"93\":7,\"99\":1,\"153\":1,\"299\":1,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"318\":1,\"320\":1,\"321\":1,\"325\":1,\"329\":1,\"330\":1,\"334\":1,\"337\":1,\"340\":1,\"344\":1,\"348\":1,\"350\":1,\"363\":1,\"365\":1,\"369\":1,\"373\":1,\"375\":2,\"377\":1,\"389\":1,\"393\":1,\"395\":1,\"397\":1,\"398\":1,\"400\":1,\"411\":2,\"413\":3,\"414\":1,\"415\":4,\"418\":3,\"419\":2,\"423\":1,\"425\":1,\"430\":1,\"440\":1,\"442\":1,\"444\":1,\"445\":1,\"448\":3,\"449\":2,\"453\":1,\"456\":1,\"466\":1,\"471\":3,\"472\":2,\"476\":1,\"479\":1,\"489\":1,\"493\":1,\"494\":1,\"497\":3,\"498\":2,\"502\":1,\"505\":1,\"515\":1,\"519\":1,\"520\":3,\"523\":3,\"524\":2,\"528\":1,\"530\":1,\"535\":1,\"545\":1,\"547\":1,\"549\":1,\"550\":1,\"553\":3,\"554\":2,\"558\":1,\"560\":1,\"565\":1,\"575\":1,\"577\":1,\"579\":1,\"580\":1,\"583\":3,\"584\":2,\"588\":1,\"590\":1,\"595\":1,\"605\":1,\"607\":1,\"609\":1,\"610\":1,\"611\":1,\"622\":2,\"624\":3,\"625\":1,\"626\":4,\"629\":3,\"630\":2,\"634\":1,\"636\":1,\"641\":1,\"651\":1,\"653\":1,\"655\":1,\"656\":1,\"657\":1,\"668\":2,\"670\":3,\"671\":1,\"672\":4,\"675\":3,\"676\":2,\"680\":1,\"682\":1,\"687\":1,\"697\":1,\"699\":1,\"701\":1,\"702\":1,\"703\":1,\"714\":2,\"716\":3,\"717\":1,\"718\":4,\"721\":3,\"722\":2,\"726\":1,\"728\":1,\"733\":1,\"743\":1,\"745\":1,\"747\":1,\"748\":1,\"749\":1,\"760\":2,\"762\":3,\"763\":1,\"764\":4,\"767\":3,\"768\":2,\"772\":1,\"774\":1,\"779\":1,\"789\":1,\"791\":1,\"793\":1,\"794\":1}}],[\"l40\",{\"1\":{\"465\":1,\"488\":1,\"514\":1,\"544\":1}}],[\"l44\",{\"1\":{\"464\":1,\"487\":1,\"513\":1,\"543\":1}}],[\"l41\",{\"1\":{\"286\":1}}],[\"l89\",{\"1\":{\"439\":1,\"465\":1,\"574\":1,\"604\":1,\"650\":1,\"696\":1,\"742\":1,\"788\":1}}],[\"l59\",{\"1\":{\"464\":1,\"487\":1,\"513\":1,\"543\":1}}],[\"l54\",{\"1\":{\"438\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1}}],[\"l56\",{\"1\":{\"285\":1,\"296\":1}}],[\"l98\",{\"1\":{\"488\":1,\"514\":1,\"544\":1}}],[\"l97\",{\"1\":{\"488\":1,\"514\":1,\"544\":1}}],[\"l90\",{\"1\":{\"439\":1,\"465\":1,\"574\":1,\"604\":1,\"650\":1,\"696\":1,\"742\":1,\"788\":1}}],[\"l93\",{\"1\":{\"297\":1}}],[\"l92\",{\"1\":{\"297\":1}}],[\"l99\",{\"1\":{\"286\":1}}],[\"l35\",{\"1\":{\"439\":1,\"574\":1,\"604\":1,\"650\":1,\"696\":1,\"742\":1,\"788\":1}}],[\"l38\",{\"1\":{\"297\":1}}],[\"l39\",{\"1\":{\"285\":1,\"296\":1,\"438\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1}}],[\"l18\",{\"1\":{\"465\":1,\"488\":1,\"514\":1,\"544\":1}}],[\"l150\",{\"1\":{\"464\":1}}],[\"l115\",{\"1\":{\"438\":1,\"464\":1,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1}}],[\"l114\",{\"1\":{\"438\":1,\"464\":1,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1}}],[\"l147\",{\"1\":{\"487\":1,\"513\":1,\"543\":1}}],[\"l146\",{\"1\":{\"487\":1,\"513\":1,\"543\":1}}],[\"l149\",{\"1\":{\"464\":1}}],[\"l142\",{\"1\":{\"438\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1}}],[\"l141\",{\"1\":{\"438\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1}}],[\"l103\",{\"1\":{\"296\":1}}],[\"l100\",{\"1\":{\"286\":1}}],[\"l102\",{\"1\":{\"285\":1,\"296\":1}}],[\"l101\",{\"1\":{\"285\":1}}],[\"l138\",{\"1\":{\"296\":1}}],[\"l13\",{\"1\":{\"286\":1,\"297\":1,\"439\":1,\"574\":1,\"604\":1,\"650\":1,\"696\":1,\"742\":1,\"788\":1}}],[\"l137\",{\"1\":{\"285\":1,\"296\":1}}],[\"l136\",{\"1\":{\"285\":1}}],[\"l\",{\"1\":{\"279\":1,\"290\":1}}],[\"lbrace\",{\"1\":{\"156\":1}}],[\"lsb\",{\"1\":{\"279\":2,\"290\":2,\"433\":2,\"459\":2,\"482\":2,\"508\":2,\"538\":2,\"568\":2,\"598\":2,\"644\":2,\"690\":2,\"736\":2,\"782\":2}}],[\"ls\",{\"1\":{\"132\":1}}],[\"let\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"letters\",{\"1\":{\"85\":1}}],[\"less\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"lessons\",{\"1\":{\"113\":1}}],[\"lead\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"leading\",{\"1\":{\"155\":1,\"329\":1,\"331\":1,\"345\":1,\"370\":1}}],[\"leaked\",{\"1\":{\"182\":1,\"843\":1,\"844\":1,\"847\":1,\"848\":1,\"849\":1,\"953\":1,\"954\":1,\"955\":1,\"1030\":1,\"1181\":1,\"1353\":1,\"1354\":1,\"1530\":1,\"1531\":1,\"1707\":1,\"1708\":1,\"1884\":1,\"1885\":1,\"2061\":1,\"2062\":1,\"2246\":1,\"2247\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2465\":1,\"2466\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2684\":1,\"2685\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2794\":1,\"2795\":1,\"2796\":1}}],[\"least\",{\"1\":{\"158\":1,\"222\":1,\"354\":1,\"380\":1,\"394\":1,\"879\":1,\"1061\":1,\"1212\":1,\"1384\":1,\"1561\":1,\"1738\":1,\"1915\":1,\"2092\":1,\"2282\":1,\"2501\":1,\"2720\":1}}],[\"learned\",{\"1\":{\"113\":1}}],[\"learn\",{\"0\":{\"64\":1,\"116\":1},\"1\":{\"116\":1,\"314\":1,\"415\":1,\"426\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1,\"775\":1}}],[\"length\",{\"1\":{\"155\":2}}],[\"legacy\",{\"1\":{\"434\":1,\"460\":1,\"483\":1,\"509\":1,\"539\":1,\"569\":1,\"599\":1,\"645\":1,\"691\":1,\"737\":1,\"783\":1}}],[\"legal\",{\"0\":{\"39\":1},\"1\":{\"39\":1,\"90\":1}}],[\"legislation\",{\"1\":{\"94\":1}}],[\"left\",{\"1\":{\"87\":2}}],[\"leipzig\",{\"0\":{\"75\":1},\"1\":{\"75\":1,\"77\":1}}],[\"levels\",{\"1\":{\"90\":2,\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"level\",{\"1\":{\"33\":1,\"90\":6,\"411\":2,\"622\":2,\"668\":2,\"714\":2,\"760\":2,\"897\":1,\"964\":1,\"1071\":1,\"1125\":1,\"1222\":1,\"1264\":1,\"1398\":1,\"1440\":1,\"1575\":1,\"1617\":1,\"1752\":1,\"1794\":1,\"1929\":1,\"1971\":1,\"2106\":1,\"2148\":1,\"2300\":1,\"2367\":1,\"2519\":1,\"2586\":1,\"2738\":1,\"2805\":1}}],[\"leverage\",{\"1\":{\"12\":1,\"123\":1}}],[\"leveraging\",{\"1\":{\"5\":1}}],[\"limited\",{\"1\":{\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2328\":1,\"2547\":1,\"2766\":1}}],[\"lib\",{\"1\":{\"132\":1,\"323\":1}}],[\"library\",{\"1\":{\"93\":1}}],[\"linxux\",{\"1\":{\"286\":1,\"297\":1}}],[\"link\",{\"1\":{\"353\":1,\"429\":1,\"778\":1}}],[\"linked\",{\"1\":{\"352\":1}}],[\"links\",{\"1\":{\"137\":1,\"138\":1}}],[\"linkage\",{\"1\":{\"0\":1,\"26\":1,\"29\":1,\"32\":1,\"95\":1,\"113\":1,\"165\":1}}],[\"linesplit\",{\"1\":{\"155\":1}}],[\"lines\",{\"1\":{\"155\":31,\"156\":3,\"285\":2,\"286\":1,\"296\":2,\"297\":1,\"438\":2,\"439\":1,\"464\":2,\"465\":1,\"487\":2,\"488\":1,\"513\":2,\"514\":1,\"543\":2,\"544\":1,\"573\":2,\"574\":1,\"603\":2,\"604\":1,\"649\":2,\"650\":1,\"695\":2,\"696\":1,\"741\":2,\"742\":1,\"787\":2,\"788\":1}}],[\"line\",{\"1\":{\"135\":1,\"155\":66,\"156\":7,\"337\":1,\"338\":1,\"352\":1,\"401\":1,\"612\":1,\"658\":1,\"704\":1,\"750\":1}}],[\"linux\",{\"1\":{\"131\":1,\"279\":2,\"290\":2,\"391\":1,\"396\":1,\"433\":2,\"459\":2,\"482\":2,\"508\":2,\"538\":2,\"568\":2,\"598\":2,\"644\":2,\"690\":2,\"736\":2,\"782\":2}}],[\"liquibase\",{\"0\":{\"171\":2,\"172\":1,\"247\":2,\"248\":1,\"832\":1,\"833\":1,\"834\":2,\"835\":1,\"942\":1,\"943\":1,\"944\":2,\"945\":1,\"1017\":1,\"1018\":1,\"1019\":2,\"1020\":1,\"1108\":1,\"1109\":1,\"1110\":2,\"1111\":1,\"1168\":1,\"1169\":1,\"1170\":2,\"1171\":1,\"1246\":1,\"1247\":1,\"1248\":2,\"1249\":1,\"1340\":1,\"1341\":1,\"1342\":2,\"1343\":1,\"1422\":1,\"1423\":1,\"1424\":2,\"1425\":1,\"1517\":1,\"1518\":1,\"1519\":2,\"1520\":1,\"1599\":1,\"1600\":1,\"1601\":2,\"1602\":1,\"1694\":1,\"1695\":1,\"1696\":2,\"1697\":1,\"1776\":1,\"1777\":1,\"1778\":2,\"1779\":1,\"1871\":1,\"1872\":1,\"1873\":2,\"1874\":1,\"1953\":1,\"1954\":1,\"1955\":2,\"1956\":1,\"2048\":1,\"2049\":1,\"2050\":2,\"2051\":1,\"2130\":1,\"2131\":1,\"2132\":2,\"2133\":1,\"2235\":1,\"2236\":1,\"2237\":2,\"2238\":1,\"2345\":1,\"2346\":1,\"2347\":2,\"2348\":1,\"2454\":1,\"2455\":1,\"2456\":2,\"2457\":1,\"2564\":1,\"2565\":1,\"2566\":2,\"2567\":1,\"2673\":1,\"2674\":1,\"2675\":2,\"2676\":1,\"2783\":1,\"2784\":1,\"2785\":2,\"2786\":1},\"1\":{\"130\":5,\"171\":3,\"172\":2,\"247\":3,\"248\":2,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"323\":24,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1,\"832\":2,\"833\":2,\"834\":3,\"835\":2,\"942\":2,\"943\":2,\"944\":3,\"945\":2,\"1017\":2,\"1018\":2,\"1019\":3,\"1020\":2,\"1108\":2,\"1109\":2,\"1110\":3,\"1111\":2,\"1168\":2,\"1169\":2,\"1170\":3,\"1171\":2,\"1246\":2,\"1247\":2,\"1248\":3,\"1249\":2,\"1340\":2,\"1341\":2,\"1342\":3,\"1343\":2,\"1422\":2,\"1423\":2,\"1424\":3,\"1425\":2,\"1517\":2,\"1518\":2,\"1519\":3,\"1520\":2,\"1599\":2,\"1600\":2,\"1601\":3,\"1602\":2,\"1694\":2,\"1695\":2,\"1696\":3,\"1697\":2,\"1776\":2,\"1777\":2,\"1778\":3,\"1779\":2,\"1871\":2,\"1872\":2,\"1873\":3,\"1874\":2,\"1953\":2,\"1954\":2,\"1955\":3,\"1956\":2,\"2048\":2,\"2049\":2,\"2050\":3,\"2051\":2,\"2130\":2,\"2131\":2,\"2132\":3,\"2133\":2,\"2235\":2,\"2236\":2,\"2237\":3,\"2238\":2,\"2345\":2,\"2346\":2,\"2347\":3,\"2348\":2,\"2454\":2,\"2455\":2,\"2456\":3,\"2457\":2,\"2564\":2,\"2565\":2,\"2566\":3,\"2567\":2,\"2673\":2,\"2674\":2,\"2675\":3,\"2676\":2,\"2783\":2,\"2784\":2,\"2785\":3,\"2786\":2}}],[\"life\",{\"0\":{\"75\":1},\"1\":{\"75\":1}}],[\"like\",{\"1\":{\"68\":1,\"69\":1,\"81\":1,\"90\":2,\"141\":1,\"186\":1,\"187\":1,\"188\":1,\"192\":1,\"193\":1,\"194\":1,\"286\":1,\"297\":1,\"315\":2,\"377\":1,\"390\":2,\"410\":1,\"439\":1,\"442\":1,\"464\":1,\"465\":1,\"488\":1,\"514\":1,\"544\":1,\"547\":1,\"574\":1,\"577\":1,\"604\":1,\"607\":1,\"621\":1,\"650\":1,\"653\":1,\"667\":1,\"696\":1,\"699\":1,\"713\":1,\"742\":1,\"745\":1,\"759\":1,\"788\":1,\"791\":1}}],[\"listing\",{\"1\":{\"369\":1,\"798\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"lists\",{\"0\":{\"80\":1},\"1\":{\"105\":2,\"406\":1,\"422\":1,\"425\":1,\"452\":1,\"455\":1,\"475\":1,\"478\":1,\"501\":1,\"504\":1,\"527\":1,\"530\":1,\"557\":1,\"560\":1,\"587\":1,\"590\":1,\"617\":1,\"633\":1,\"636\":1,\"663\":1,\"679\":1,\"682\":1,\"709\":1,\"725\":1,\"728\":1,\"755\":1,\"771\":1,\"774\":1}}],[\"list\",{\"0\":{\"82\":1,\"422\":1,\"452\":1,\"475\":1,\"501\":1,\"527\":1,\"557\":1,\"587\":1,\"633\":1,\"679\":1,\"725\":1,\"771\":1},\"1\":{\"33\":1,\"81\":6,\"82\":1,\"95\":1,\"100\":1,\"102\":2,\"105\":1,\"106\":1,\"146\":1,\"156\":3,\"161\":1,\"165\":1,\"204\":1,\"217\":1,\"222\":1,\"223\":1,\"229\":3,\"233\":2,\"257\":2,\"258\":3,\"259\":1,\"261\":2,\"262\":2,\"279\":2,\"285\":2,\"286\":3,\"290\":2,\"296\":2,\"300\":2,\"303\":2,\"421\":1,\"423\":4,\"425\":2,\"427\":1,\"433\":2,\"451\":1,\"452\":1,\"453\":5,\"455\":1,\"459\":2,\"464\":1,\"474\":1,\"475\":1,\"476\":5,\"478\":1,\"482\":2,\"500\":1,\"501\":1,\"502\":5,\"504\":1,\"508\":2,\"520\":2,\"526\":1,\"528\":4,\"530\":4,\"532\":1,\"538\":2,\"556\":1,\"558\":4,\"560\":2,\"562\":1,\"568\":2,\"586\":1,\"588\":4,\"590\":2,\"592\":1,\"598\":2,\"632\":1,\"634\":4,\"636\":2,\"638\":1,\"644\":2,\"678\":1,\"680\":4,\"682\":2,\"684\":1,\"690\":2,\"724\":1,\"726\":4,\"728\":2,\"730\":1,\"736\":2,\"770\":1,\"772\":4,\"774\":2,\"776\":1,\"782\":2,\"798\":1,\"799\":1,\"874\":1,\"879\":1,\"880\":1,\"887\":3,\"891\":2,\"897\":2,\"899\":1,\"925\":1,\"926\":1,\"957\":3,\"958\":1,\"964\":2,\"966\":1,\"1043\":1,\"1056\":1,\"1061\":1,\"1062\":1,\"1066\":3,\"1070\":2,\"1071\":2,\"1073\":1,\"1120\":3,\"1121\":1,\"1125\":2,\"1127\":1,\"1194\":1,\"1207\":1,\"1212\":1,\"1213\":1,\"1217\":3,\"1221\":2,\"1222\":2,\"1224\":1,\"1229\":1,\"1230\":1,\"1258\":3,\"1259\":1,\"1264\":2,\"1266\":1,\"1379\":1,\"1384\":1,\"1385\":1,\"1392\":3,\"1396\":2,\"1398\":2,\"1400\":1,\"1405\":1,\"1406\":1,\"1434\":3,\"1435\":1,\"1440\":2,\"1442\":1,\"1556\":1,\"1561\":1,\"1562\":1,\"1569\":3,\"1573\":2,\"1575\":2,\"1577\":1,\"1582\":1,\"1583\":1,\"1611\":3,\"1612\":1,\"1617\":2,\"1619\":1,\"1733\":1,\"1738\":1,\"1739\":1,\"1746\":3,\"1750\":2,\"1752\":2,\"1754\":1,\"1759\":1,\"1760\":1,\"1788\":3,\"1789\":1,\"1794\":2,\"1796\":1,\"1910\":1,\"1915\":1,\"1916\":1,\"1923\":3,\"1927\":2,\"1929\":2,\"1931\":1,\"1936\":1,\"1937\":1,\"1965\":3,\"1966\":1,\"1971\":2,\"1973\":1,\"2087\":1,\"2092\":1,\"2093\":1,\"2100\":3,\"2104\":2,\"2106\":2,\"2108\":1,\"2113\":1,\"2114\":1,\"2142\":3,\"2143\":1,\"2148\":2,\"2150\":1,\"2201\":1,\"2202\":1,\"2277\":1,\"2282\":1,\"2283\":1,\"2290\":3,\"2294\":2,\"2300\":2,\"2302\":1,\"2328\":1,\"2329\":1,\"2360\":3,\"2361\":1,\"2367\":2,\"2369\":1,\"2420\":1,\"2421\":1,\"2496\":1,\"2501\":1,\"2502\":1,\"2509\":3,\"2513\":2,\"2519\":2,\"2521\":1,\"2547\":1,\"2548\":1,\"2579\":3,\"2580\":1,\"2586\":2,\"2588\":1,\"2639\":1,\"2640\":1,\"2715\":1,\"2720\":1,\"2721\":1,\"2728\":3,\"2732\":2,\"2738\":2,\"2740\":1,\"2766\":1,\"2767\":1,\"2798\":3,\"2799\":1,\"2805\":2,\"2807\":1}}],[\"listed\",{\"1\":{\"169\":1,\"236\":1,\"281\":1,\"285\":1,\"292\":1,\"296\":1,\"404\":1,\"435\":1,\"461\":1,\"484\":1,\"510\":1,\"540\":1,\"570\":1,\"600\":1,\"615\":1,\"646\":1,\"661\":1,\"692\":1,\"707\":1,\"738\":1,\"753\":1,\"784\":1}}],[\"listen\",{\"1\":{\"166\":1}}],[\"liste\",{\"1\":{\"16\":1}}],[\"large\",{\"1\":{\"391\":1}}],[\"latter\",{\"1\":{\"350\":1}}],[\"latest\",{\"1\":{\"33\":5,\"70\":1,\"153\":1,\"279\":3,\"290\":3,\"300\":9,\"303\":9,\"415\":1,\"433\":2,\"440\":1,\"459\":2,\"466\":1,\"482\":2,\"489\":1,\"508\":2,\"515\":1,\"538\":2,\"545\":1,\"568\":2,\"575\":1,\"598\":2,\"605\":1,\"626\":1,\"644\":2,\"651\":1,\"672\":1,\"690\":2,\"697\":1,\"718\":1,\"736\":2,\"743\":1,\"764\":1,\"782\":2,\"789\":1}}],[\"later\",{\"1\":{\"13\":1,\"153\":1,\"286\":7,\"297\":2,\"300\":2,\"343\":1}}],[\"layout\",{\"1\":{\"156\":1}}],[\"lambda\",{\"1\":{\"155\":5}}],[\"laptop\",{\"1\":{\"115\":1}}],[\"label\",{\"1\":{\"155\":1}}],[\"labeled\",{\"1\":{\"155\":2}}],[\"laboratory\",{\"1\":{\"122\":1}}],[\"lab\",{\"1\":{\"112\":1,\"113\":1}}],[\"lanes\",{\"1\":{\"99\":1}}],[\"language=\",{\"1\":{\"156\":1}}],[\"language\",{\"1\":{\"92\":1,\"392\":1}}],[\"last\",{\"1\":{\"95\":1,\"113\":1,\"165\":1,\"300\":4,\"323\":6,\"427\":1,\"776\":1}}],[\"laden\",{\"1\":{\"14\":1}}],[\"lockwaittime\",{\"0\":{\"833\":1,\"943\":1,\"1018\":1,\"1109\":1,\"1169\":1,\"1247\":1,\"1341\":1,\"1423\":1,\"1518\":1,\"1600\":1,\"1695\":1,\"1777\":1,\"1872\":1,\"1954\":1,\"2049\":1,\"2131\":1,\"2236\":1,\"2346\":1,\"2455\":1,\"2565\":1,\"2674\":1,\"2784\":1},\"1\":{\"833\":1,\"943\":1,\"1018\":1,\"1109\":1,\"1169\":1,\"1247\":1,\"1341\":1,\"1423\":1,\"1518\":1,\"1600\":1,\"1695\":1,\"1777\":1,\"1872\":1,\"1954\":1,\"2049\":1,\"2131\":1,\"2236\":1,\"2346\":1,\"2455\":1,\"2565\":1,\"2674\":1,\"2784\":1}}],[\"lock\",{\"1\":{\"832\":1,\"833\":1,\"942\":1,\"943\":1,\"1017\":1,\"1018\":1,\"1108\":1,\"1109\":1,\"1168\":1,\"1169\":1,\"1246\":1,\"1247\":1,\"1340\":1,\"1341\":1,\"1422\":1,\"1423\":1,\"1517\":1,\"1518\":1,\"1599\":1,\"1600\":1,\"1694\":1,\"1695\":1,\"1776\":1,\"1777\":1,\"1871\":1,\"1872\":1,\"1953\":1,\"1954\":1,\"2048\":1,\"2049\":1,\"2130\":1,\"2131\":1,\"2235\":1,\"2236\":1,\"2345\":1,\"2346\":1,\"2454\":1,\"2455\":1,\"2564\":1,\"2565\":1,\"2673\":1,\"2674\":1,\"2783\":1,\"2784\":1}}],[\"location\",{\"1\":{\"187\":1,\"193\":1,\"196\":1,\"214\":2,\"241\":1,\"334\":5,\"338\":2,\"348\":2,\"363\":4,\"373\":3,\"389\":6,\"871\":2,\"1053\":2,\"1204\":2,\"1376\":2,\"1553\":2,\"1730\":2,\"1907\":2,\"2084\":2,\"2274\":2,\"2493\":2,\"2712\":2}}],[\"locations\",{\"1\":{\"94\":1,\"334\":1,\"348\":1,\"363\":1,\"373\":1,\"389\":1}}],[\"located\",{\"1\":{\"84\":2,\"86\":1,\"327\":1,\"334\":1,\"363\":1,\"389\":1,\"396\":1}}],[\"localhost\",{\"1\":{\"130\":3,\"131\":2,\"211\":1,\"217\":1,\"222\":1,\"223\":1,\"868\":1,\"874\":1,\"879\":1,\"880\":1,\"1050\":1,\"1056\":1,\"1061\":1,\"1062\":1,\"1201\":1,\"1207\":1,\"1212\":1,\"1213\":1,\"1373\":1,\"1379\":1,\"1384\":1,\"1385\":1,\"1550\":1,\"1556\":1,\"1561\":1,\"1562\":1,\"1727\":1,\"1733\":1,\"1738\":1,\"1739\":1,\"1904\":1,\"1910\":1,\"1915\":1,\"1916\":1,\"2081\":1,\"2087\":1,\"2092\":1,\"2093\":1,\"2271\":1,\"2277\":1,\"2282\":1,\"2283\":1,\"2490\":1,\"2496\":1,\"2501\":1,\"2502\":1,\"2709\":1,\"2715\":1,\"2720\":1,\"2721\":1}}],[\"local\",{\"0\":{\"131\":1,\"186\":2,\"187\":1,\"188\":1,\"189\":1,\"190\":1,\"191\":1,\"192\":2,\"193\":1,\"194\":1,\"853\":1,\"854\":1,\"855\":1,\"1034\":1,\"1035\":1,\"1036\":1,\"1185\":1,\"1186\":1,\"1187\":1,\"1358\":1,\"1359\":1,\"1360\":1,\"1535\":1,\"1536\":1,\"1537\":1,\"1712\":1,\"1713\":1,\"1714\":1,\"1889\":1,\"1890\":1,\"1891\":1,\"2066\":1,\"2067\":1,\"2068\":1,\"2256\":1,\"2257\":1,\"2258\":1,\"2475\":1,\"2476\":1,\"2477\":1,\"2694\":1,\"2695\":1,\"2696\":1},\"1\":{\"0\":3,\"32\":3,\"43\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"84\":1,\"86\":1,\"108\":3,\"109\":3,\"155\":3,\"158\":1,\"163\":3,\"164\":3,\"183\":2,\"184\":1,\"185\":1,\"186\":2,\"187\":1,\"188\":1,\"189\":2,\"190\":2,\"191\":2,\"192\":2,\"193\":1,\"194\":1,\"201\":1,\"203\":1,\"204\":1,\"210\":1,\"230\":1,\"231\":1,\"237\":1,\"238\":1,\"239\":1,\"258\":1,\"259\":1,\"261\":1,\"262\":1,\"279\":2,\"281\":7,\"286\":1,\"290\":2,\"292\":7,\"300\":2,\"303\":2,\"331\":1,\"352\":1,\"357\":9,\"358\":4,\"359\":2,\"383\":9,\"384\":4,\"385\":1,\"394\":1,\"412\":1,\"435\":7,\"461\":7,\"484\":7,\"510\":7,\"540\":7,\"570\":7,\"600\":7,\"623\":1,\"646\":7,\"669\":1,\"692\":7,\"715\":1,\"738\":7,\"761\":1,\"784\":7,\"798\":2,\"824\":1,\"848\":1,\"850\":2,\"851\":1,\"852\":1,\"853\":2,\"854\":2,\"855\":2,\"859\":1,\"861\":1,\"867\":1,\"888\":1,\"889\":1,\"902\":1,\"925\":2,\"935\":1,\"936\":1,\"937\":1,\"957\":1,\"958\":1,\"959\":1,\"984\":1,\"993\":1,\"1031\":2,\"1032\":1,\"1033\":1,\"1034\":2,\"1035\":2,\"1036\":2,\"1040\":1,\"1042\":1,\"1043\":1,\"1049\":1,\"1067\":1,\"1068\":1,\"1092\":1,\"1101\":1,\"1102\":1,\"1103\":1,\"1120\":1,\"1121\":1,\"1160\":1,\"1182\":2,\"1183\":1,\"1184\":1,\"1185\":2,\"1186\":2,\"1187\":2,\"1191\":1,\"1193\":1,\"1194\":1,\"1200\":1,\"1218\":1,\"1219\":1,\"1229\":2,\"1239\":1,\"1240\":1,\"1241\":1,\"1258\":1,\"1259\":1,\"1260\":1,\"1284\":1,\"1293\":1,\"1332\":1,\"1354\":1,\"1355\":2,\"1356\":1,\"1357\":1,\"1358\":2,\"1359\":2,\"1360\":2,\"1364\":1,\"1366\":1,\"1372\":1,\"1393\":1,\"1394\":1,\"1405\":2,\"1415\":1,\"1416\":1,\"1417\":1,\"1434\":1,\"1435\":1,\"1436\":1,\"1460\":1,\"1469\":1,\"1509\":1,\"1531\":1,\"1532\":2,\"1533\":1,\"1534\":1,\"1535\":2,\"1536\":2,\"1537\":2,\"1541\":1,\"1543\":1,\"1549\":1,\"1570\":1,\"1571\":1,\"1582\":2,\"1592\":1,\"1593\":1,\"1594\":1,\"1611\":1,\"1612\":1,\"1613\":1,\"1637\":1,\"1646\":1,\"1686\":1,\"1708\":1,\"1709\":2,\"1710\":1,\"1711\":1,\"1712\":2,\"1713\":2,\"1714\":2,\"1718\":1,\"1720\":1,\"1726\":1,\"1747\":1,\"1748\":1,\"1759\":2,\"1769\":1,\"1770\":1,\"1771\":1,\"1788\":1,\"1789\":1,\"1790\":1,\"1814\":1,\"1823\":1,\"1863\":1,\"1885\":1,\"1886\":2,\"1887\":1,\"1888\":1,\"1889\":2,\"1890\":2,\"1891\":2,\"1895\":1,\"1897\":1,\"1903\":1,\"1924\":1,\"1925\":1,\"1936\":2,\"1946\":1,\"1947\":1,\"1948\":1,\"1965\":1,\"1966\":1,\"1967\":1,\"1991\":1,\"2000\":1,\"2040\":1,\"2062\":1,\"2063\":2,\"2064\":1,\"2065\":1,\"2066\":2,\"2067\":2,\"2068\":2,\"2072\":1,\"2074\":1,\"2080\":1,\"2101\":1,\"2102\":1,\"2113\":2,\"2123\":1,\"2124\":1,\"2125\":1,\"2142\":1,\"2143\":1,\"2144\":1,\"2168\":1,\"2177\":1,\"2201\":2,\"2227\":1,\"2251\":1,\"2253\":2,\"2254\":1,\"2255\":1,\"2256\":2,\"2257\":2,\"2258\":2,\"2262\":1,\"2264\":1,\"2270\":1,\"2291\":1,\"2292\":1,\"2305\":1,\"2328\":2,\"2338\":1,\"2339\":1,\"2340\":1,\"2360\":1,\"2361\":1,\"2362\":1,\"2387\":1,\"2396\":1,\"2420\":2,\"2446\":1,\"2470\":1,\"2472\":2,\"2473\":1,\"2474\":1,\"2475\":2,\"2476\":2,\"2477\":2,\"2481\":1,\"2483\":1,\"2489\":1,\"2510\":1,\"2511\":1,\"2524\":1,\"2547\":2,\"2557\":1,\"2558\":1,\"2559\":1,\"2579\":1,\"2580\":1,\"2581\":1,\"2606\":1,\"2615\":1,\"2639\":2,\"2665\":1,\"2689\":1,\"2691\":2,\"2692\":1,\"2693\":1,\"2694\":2,\"2695\":2,\"2696\":2,\"2700\":1,\"2702\":1,\"2708\":1,\"2729\":1,\"2730\":1,\"2743\":1,\"2766\":2,\"2776\":1,\"2777\":1,\"2778\":1,\"2798\":1,\"2799\":1,\"2800\":1,\"2825\":1,\"2834\":1}}],[\"love\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"lowercase\",{\"1\":{\"285\":3,\"296\":3,\"438\":1,\"464\":2,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1}}],[\"loops\",{\"1\":{\"155\":1}}],[\"loop\",{\"1\":{\"155\":2,\"375\":1}}],[\"lookup\",{\"1\":{\"337\":1}}],[\"looks\",{\"1\":{\"317\":1,\"336\":1}}],[\"look\",{\"1\":{\"93\":1,\"99\":1,\"158\":1,\"159\":2,\"318\":1,\"321\":1,\"325\":1,\"330\":1,\"337\":1,\"340\":1,\"344\":1,\"375\":1,\"377\":1,\"418\":1,\"419\":1,\"448\":1,\"449\":1,\"471\":1,\"472\":1,\"497\":1,\"498\":1,\"523\":1,\"524\":1,\"553\":1,\"554\":1,\"583\":1,\"584\":1,\"629\":1,\"630\":1,\"675\":1,\"676\":1,\"721\":1,\"722\":1,\"767\":1,\"768\":1}}],[\"looking\",{\"1\":{\"12\":1,\"114\":1}}],[\"loader\",{\"1\":{\"148\":1,\"149\":1}}],[\"loaded\",{\"1\":{\"148\":1,\"149\":1,\"258\":1,\"957\":1,\"1120\":1,\"1258\":1,\"1434\":1,\"1611\":1,\"1788\":1,\"1965\":1,\"2142\":1,\"2360\":1,\"2579\":1,\"2798\":1}}],[\"logout\",{\"0\":{\"812\":1,\"813\":1,\"972\":1,\"973\":1,\"1080\":1,\"1081\":1,\"1148\":1,\"1149\":1,\"1272\":1,\"1273\":1,\"1320\":1,\"1321\":1,\"1448\":1,\"1449\":1,\"1497\":1,\"1498\":1,\"1625\":1,\"1626\":1,\"1674\":1,\"1675\":1,\"1802\":1,\"1803\":1,\"1851\":1,\"1852\":1,\"1979\":1,\"1980\":1,\"2028\":1,\"2029\":1,\"2156\":1,\"2157\":1,\"2215\":1,\"2216\":1,\"2375\":1,\"2376\":1,\"2434\":1,\"2435\":1,\"2594\":1,\"2595\":1,\"2653\":1,\"2654\":1,\"2813\":1,\"2814\":1},\"1\":{\"812\":3,\"813\":3,\"902\":1,\"903\":5,\"905\":1,\"972\":3,\"973\":3,\"993\":1,\"994\":5,\"997\":1,\"1080\":3,\"1081\":3,\"1148\":3,\"1149\":3,\"1272\":3,\"1273\":3,\"1293\":1,\"1294\":5,\"1297\":1,\"1320\":3,\"1321\":3,\"1448\":3,\"1449\":3,\"1469\":1,\"1470\":5,\"1473\":1,\"1497\":3,\"1498\":3,\"1625\":3,\"1626\":3,\"1646\":1,\"1647\":5,\"1650\":1,\"1674\":3,\"1675\":3,\"1802\":3,\"1803\":3,\"1823\":1,\"1824\":5,\"1827\":1,\"1851\":3,\"1852\":3,\"1979\":3,\"1980\":3,\"2000\":1,\"2001\":5,\"2004\":1,\"2028\":3,\"2029\":3,\"2156\":3,\"2157\":3,\"2177\":1,\"2178\":5,\"2181\":1,\"2215\":3,\"2216\":3,\"2305\":1,\"2306\":5,\"2308\":1,\"2375\":3,\"2376\":3,\"2396\":1,\"2397\":5,\"2400\":1,\"2434\":3,\"2435\":3,\"2524\":1,\"2525\":5,\"2527\":1,\"2594\":3,\"2595\":3,\"2615\":1,\"2616\":5,\"2619\":1,\"2653\":3,\"2654\":3,\"2743\":1,\"2744\":5,\"2746\":1,\"2813\":3,\"2814\":3,\"2834\":1,\"2835\":5,\"2838\":1}}],[\"logbuildinfo\",{\"1\":{\"300\":2,\"303\":2,\"306\":2,\"309\":2,\"312\":2,\"445\":2,\"494\":2,\"520\":2,\"550\":2,\"580\":2,\"610\":2,\"656\":2,\"702\":2,\"748\":2,\"794\":2}}],[\"logs\",{\"0\":{\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"651\":1,\"697\":1,\"743\":1,\"789\":1},\"1\":{\"285\":1,\"286\":2,\"296\":1,\"297\":2,\"299\":1,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"331\":1,\"415\":1,\"438\":1,\"439\":1,\"440\":5,\"444\":1,\"445\":1,\"464\":1,\"465\":1,\"466\":5,\"487\":1,\"488\":1,\"489\":5,\"493\":1,\"494\":1,\"513\":1,\"514\":1,\"515\":5,\"519\":1,\"520\":1,\"543\":1,\"544\":1,\"545\":5,\"549\":1,\"550\":1,\"573\":1,\"574\":1,\"575\":5,\"579\":1,\"580\":1,\"603\":1,\"604\":1,\"605\":5,\"609\":1,\"610\":1,\"626\":1,\"649\":1,\"650\":1,\"651\":5,\"655\":1,\"656\":1,\"672\":1,\"695\":1,\"696\":1,\"697\":5,\"701\":1,\"702\":1,\"718\":1,\"741\":1,\"742\":1,\"743\":5,\"747\":1,\"748\":1,\"764\":1,\"787\":1,\"788\":1,\"789\":5,\"793\":1,\"794\":1}}],[\"logged\",{\"1\":{\"218\":1,\"875\":1,\"1057\":1,\"1208\":1,\"1380\":1,\"1557\":1,\"1734\":1,\"1911\":1,\"2088\":1,\"2278\":1,\"2497\":1,\"2716\":1}}],[\"logging\",{\"1\":{\"182\":1,\"191\":1,\"200\":1,\"246\":1,\"345\":1,\"348\":2,\"843\":1,\"844\":1,\"847\":2,\"848\":2,\"849\":1,\"855\":1,\"858\":1,\"941\":1,\"953\":1,\"954\":1,\"955\":1,\"1030\":1,\"1036\":1,\"1039\":1,\"1107\":1,\"1181\":1,\"1187\":1,\"1190\":1,\"1245\":1,\"1353\":2,\"1354\":2,\"1360\":1,\"1363\":1,\"1421\":1,\"1530\":2,\"1531\":2,\"1537\":1,\"1540\":1,\"1598\":1,\"1707\":2,\"1708\":2,\"1714\":1,\"1717\":1,\"1775\":1,\"1884\":2,\"1885\":2,\"1891\":1,\"1894\":1,\"1952\":1,\"2061\":2,\"2062\":2,\"2068\":1,\"2071\":1,\"2129\":1,\"2246\":1,\"2247\":1,\"2250\":2,\"2251\":2,\"2252\":1,\"2258\":1,\"2261\":1,\"2344\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2465\":1,\"2466\":1,\"2469\":2,\"2470\":2,\"2471\":1,\"2477\":1,\"2480\":1,\"2563\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2684\":1,\"2685\":1,\"2688\":2,\"2689\":2,\"2690\":1,\"2696\":1,\"2699\":1,\"2782\":1,\"2794\":1,\"2795\":1,\"2796\":1}}],[\"loging\",{\"1\":{\"182\":1,\"1030\":1,\"1181\":1}}],[\"login\",{\"1\":{\"130\":1}}],[\"logic\",{\"1\":{\"94\":1}}],[\"log\",{\"0\":{\"180\":1,\"181\":1,\"182\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"953\":1,\"954\":1,\"955\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2794\":1,\"2795\":1,\"2796\":1},\"1\":{\"102\":2,\"103\":2,\"180\":2,\"181\":2,\"182\":2,\"213\":3,\"214\":6,\"285\":2,\"286\":4,\"296\":2,\"297\":4,\"300\":6,\"303\":2,\"306\":2,\"309\":2,\"312\":2,\"323\":12,\"331\":1,\"334\":1,\"345\":2,\"348\":2,\"412\":2,\"438\":2,\"439\":2,\"440\":8,\"445\":2,\"464\":2,\"465\":2,\"466\":8,\"487\":2,\"488\":2,\"489\":8,\"494\":2,\"513\":2,\"514\":2,\"515\":8,\"520\":2,\"543\":2,\"544\":2,\"545\":8,\"550\":2,\"573\":2,\"574\":2,\"575\":8,\"580\":2,\"603\":2,\"604\":2,\"605\":8,\"610\":2,\"623\":2,\"649\":2,\"650\":2,\"651\":8,\"656\":2,\"669\":2,\"695\":2,\"696\":2,\"697\":8,\"702\":2,\"715\":2,\"741\":2,\"742\":2,\"743\":8,\"748\":2,\"761\":2,\"787\":2,\"788\":2,\"789\":8,\"794\":2,\"843\":2,\"844\":2,\"845\":2,\"846\":2,\"847\":2,\"848\":2,\"849\":2,\"870\":3,\"871\":6,\"953\":2,\"954\":2,\"955\":2,\"1028\":2,\"1029\":2,\"1030\":2,\"1052\":3,\"1053\":6,\"1179\":2,\"1180\":2,\"1181\":2,\"1203\":3,\"1204\":6,\"1351\":2,\"1352\":2,\"1353\":2,\"1354\":2,\"1375\":3,\"1376\":6,\"1528\":2,\"1529\":2,\"1530\":2,\"1531\":2,\"1552\":3,\"1553\":6,\"1705\":2,\"1706\":2,\"1707\":2,\"1708\":2,\"1729\":3,\"1730\":6,\"1882\":2,\"1883\":2,\"1884\":2,\"1885\":2,\"1906\":3,\"1907\":6,\"2059\":2,\"2060\":2,\"2061\":2,\"2062\":2,\"2083\":3,\"2084\":6,\"2246\":2,\"2247\":2,\"2248\":2,\"2249\":2,\"2250\":2,\"2251\":2,\"2252\":2,\"2273\":3,\"2274\":6,\"2356\":2,\"2357\":2,\"2358\":2,\"2465\":2,\"2466\":2,\"2467\":2,\"2468\":2,\"2469\":2,\"2470\":2,\"2471\":2,\"2492\":3,\"2493\":6,\"2575\":2,\"2576\":2,\"2577\":2,\"2684\":2,\"2685\":2,\"2686\":2,\"2687\":2,\"2688\":2,\"2689\":2,\"2690\":2,\"2711\":3,\"2712\":6,\"2794\":2,\"2795\":2,\"2796\":2}}],[\"cmd\",{\"1\":{\"299\":1,\"300\":2,\"302\":1,\"303\":2,\"305\":1,\"306\":2,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"323\":1,\"519\":1,\"520\":1}}],[\"cpu\",{\"1\":{\"892\":1,\"1397\":1,\"1574\":1,\"1751\":1,\"1928\":1,\"2105\":1,\"2295\":1,\"2514\":1,\"2733\":1}}],[\"cp\",{\"1\":{\"299\":2,\"300\":3,\"302\":2,\"303\":3,\"305\":2,\"306\":3,\"308\":2,\"309\":2,\"311\":2,\"312\":2,\"444\":1,\"445\":1,\"493\":1,\"494\":1,\"519\":2,\"520\":2,\"549\":1,\"550\":1,\"579\":1,\"580\":1,\"609\":1,\"610\":1,\"655\":1,\"656\":1,\"701\":1,\"702\":1,\"747\":1,\"748\":1,\"793\":1,\"794\":1}}],[\"cd\",{\"1\":{\"285\":2,\"286\":2,\"296\":2,\"297\":2,\"299\":4,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"cda\",{\"1\":{\"90\":1}}],[\"cs\",{\"1\":{\"279\":1,\"290\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"curly\",{\"1\":{\"368\":1}}],[\"curl\",{\"1\":{\"279\":3,\"290\":3,\"433\":2,\"459\":2,\"482\":2,\"508\":2,\"538\":2,\"568\":2,\"598\":2,\"644\":2,\"690\":2,\"736\":2,\"782\":2}}],[\"currentuser\",{\"0\":{\"843\":1,\"953\":1,\"2246\":1,\"2356\":1,\"2465\":1,\"2575\":1,\"2684\":1,\"2794\":1},\"1\":{\"843\":1,\"953\":1,\"2246\":1,\"2356\":1,\"2465\":1,\"2575\":1,\"2684\":1,\"2794\":1}}],[\"currently\",{\"1\":{\"106\":1,\"148\":1,\"149\":1,\"161\":1,\"418\":1,\"419\":1,\"448\":1,\"449\":1,\"453\":1,\"456\":1,\"471\":1,\"472\":1,\"476\":1,\"479\":1,\"497\":1,\"498\":1,\"502\":1,\"505\":1,\"523\":1,\"524\":1,\"553\":1,\"554\":1,\"583\":1,\"584\":1,\"629\":1,\"630\":1,\"675\":1,\"676\":1,\"721\":1,\"722\":1,\"767\":1,\"768\":1,\"805\":1,\"843\":1,\"953\":1,\"2208\":1,\"2246\":1,\"2356\":1,\"2427\":1,\"2465\":1,\"2575\":1,\"2646\":1,\"2684\":1,\"2794\":1}}],[\"current\",{\"1\":{\"101\":1,\"329\":1,\"369\":1,\"433\":2,\"452\":1,\"459\":2,\"475\":1,\"482\":2,\"501\":1,\"508\":2,\"538\":2,\"568\":2,\"598\":2,\"644\":2,\"690\":2,\"736\":2,\"782\":2}}],[\"cc\",{\"1\":{\"223\":2,\"880\":2,\"1062\":2,\"1213\":2,\"1385\":2,\"1562\":2,\"1739\":2,\"1916\":2,\"2093\":2,\"2283\":2,\"2502\":2,\"2721\":2}}],[\"cycle\",{\"1\":{\"137\":2,\"153\":1}}],[\"cves\",{\"1\":{\"137\":1,\"138\":1}}],[\"cvd\",{\"1\":{\"36\":1}}],[\"cff\",{\"1\":{\"137\":1,\"138\":1}}],[\"citation\",{\"1\":{\"137\":1,\"138\":1}}],[\"ctrl\",{\"1\":{\"285\":1,\"286\":3,\"296\":1,\"297\":3,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"ct\",{\"1\":{\"90\":1}}],[\"choose\",{\"1\":{\"425\":1,\"560\":1,\"590\":1,\"636\":1,\"682\":1,\"728\":1,\"774\":1}}],[\"choice\",{\"1\":{\"392\":1}}],[\"chown\",{\"1\":{\"285\":4,\"286\":4,\"296\":4,\"297\":4,\"300\":3,\"303\":3,\"429\":2,\"438\":7,\"439\":2,\"464\":7,\"465\":2,\"487\":7,\"488\":2,\"513\":7,\"514\":2,\"543\":7,\"544\":2,\"573\":7,\"574\":2,\"603\":7,\"604\":2,\"649\":7,\"650\":2,\"695\":7,\"696\":2,\"741\":7,\"742\":2,\"778\":2,\"787\":7,\"788\":2}}],[\"chmod\",{\"1\":{\"279\":1,\"285\":4,\"286\":4,\"290\":1,\"296\":4,\"297\":4,\"300\":3,\"303\":3,\"429\":2,\"438\":7,\"439\":2,\"464\":7,\"465\":2,\"487\":7,\"488\":2,\"513\":7,\"514\":2,\"543\":7,\"544\":2,\"573\":7,\"574\":2,\"603\":7,\"604\":2,\"649\":7,\"650\":2,\"695\":7,\"696\":2,\"741\":7,\"742\":2,\"778\":2,\"787\":7,\"788\":2}}],[\"chunk\",{\"1\":{\"155\":1}}],[\"checkout\",{\"1\":{\"415\":2,\"626\":2,\"672\":2,\"718\":2,\"764\":2}}],[\"checks\",{\"1\":{\"368\":1}}],[\"check\",{\"1\":{\"95\":1,\"102\":1,\"137\":2,\"138\":2,\"165\":1,\"170\":1,\"286\":3,\"297\":3,\"334\":2,\"348\":2,\"363\":2,\"389\":2,\"439\":3,\"440\":1,\"465\":3,\"466\":1,\"488\":3,\"489\":1,\"514\":3,\"515\":1,\"544\":3,\"545\":1,\"574\":3,\"575\":1,\"604\":3,\"605\":1,\"650\":3,\"651\":1,\"696\":3,\"697\":1,\"742\":3,\"743\":1,\"788\":3,\"789\":1,\"1016\":1,\"1100\":1}}],[\"christoph\",{\"1\":{\"79\":1}}],[\"christian\",{\"1\":{\"79\":1}}],[\"characters\",{\"1\":{\"285\":3,\"286\":3,\"296\":3,\"297\":3,\"438\":3,\"439\":3,\"464\":3,\"465\":3,\"487\":3,\"488\":3,\"513\":3,\"514\":3,\"543\":3,\"544\":3,\"573\":3,\"574\":3,\"603\":3,\"604\":3,\"649\":3,\"650\":3,\"695\":3,\"696\":3,\"741\":3,\"742\":3,\"787\":3,\"788\":3}}],[\"character\",{\"1\":{\"156\":1,\"798\":1,\"915\":2,\"925\":1,\"1007\":2,\"1229\":1,\"1262\":1,\"1405\":1,\"1483\":2,\"1582\":1,\"1660\":2,\"1759\":1,\"1837\":2,\"1936\":1,\"2014\":2,\"2113\":1,\"2191\":2,\"2201\":1,\"2318\":2,\"2328\":1,\"2410\":2,\"2420\":1,\"2537\":2,\"2547\":1,\"2629\":2,\"2639\":1,\"2756\":2,\"2766\":1,\"2848\":2}}],[\"char\",{\"1\":{\"155\":1}}],[\"changing\",{\"0\":{\"150\":1}}],[\"changed\",{\"1\":{\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"changes\",{\"1\":{\"173\":1,\"232\":1,\"249\":1,\"258\":1,\"307\":1,\"310\":1,\"348\":1,\"410\":2,\"411\":5,\"413\":3,\"415\":4,\"442\":1,\"547\":1,\"577\":1,\"607\":1,\"621\":2,\"622\":5,\"624\":3,\"626\":4,\"653\":1,\"667\":2,\"668\":5,\"670\":3,\"672\":4,\"699\":1,\"713\":2,\"714\":5,\"716\":3,\"718\":4,\"745\":1,\"759\":2,\"760\":5,\"762\":3,\"764\":4,\"791\":1,\"836\":1,\"890\":1,\"946\":1,\"957\":1,\"1021\":1,\"1069\":1,\"1112\":1,\"1120\":1,\"1172\":1,\"1220\":1,\"1250\":1,\"1258\":1,\"1344\":1,\"1395\":1,\"1426\":1,\"1434\":1,\"1521\":1,\"1572\":1,\"1603\":1,\"1611\":1,\"1698\":1,\"1749\":1,\"1780\":1,\"1788\":1,\"1875\":1,\"1926\":1,\"1957\":1,\"1965\":1,\"2052\":1,\"2103\":1,\"2134\":1,\"2142\":1,\"2239\":1,\"2293\":1,\"2349\":1,\"2360\":1,\"2458\":1,\"2512\":1,\"2568\":1,\"2579\":1,\"2677\":1,\"2731\":1,\"2787\":1,\"2798\":1}}],[\"changelog\",{\"1\":{\"141\":4}}],[\"change\",{\"1\":{\"137\":1,\"138\":1,\"141\":2,\"142\":1,\"143\":2,\"145\":1,\"146\":4,\"147\":2,\"170\":1,\"173\":1,\"189\":1,\"190\":1,\"198\":1,\"199\":1,\"227\":1,\"228\":1,\"232\":1,\"234\":1,\"243\":1,\"244\":1,\"249\":1,\"258\":1,\"282\":1,\"293\":1,\"300\":2,\"303\":2,\"306\":2,\"307\":1,\"310\":1,\"386\":1,\"410\":1,\"438\":2,\"442\":1,\"464\":2,\"487\":2,\"513\":2,\"543\":2,\"547\":1,\"573\":2,\"577\":1,\"603\":2,\"607\":1,\"621\":1,\"649\":2,\"653\":1,\"667\":1,\"695\":2,\"699\":1,\"713\":1,\"741\":2,\"745\":1,\"759\":1,\"787\":2,\"791\":1,\"833\":1,\"836\":1,\"853\":1,\"854\":1,\"856\":1,\"857\":1,\"890\":1,\"938\":1,\"939\":1,\"943\":1,\"946\":1,\"957\":1,\"1018\":1,\"1021\":1,\"1034\":1,\"1035\":1,\"1037\":1,\"1038\":1,\"1069\":1,\"1104\":1,\"1105\":1,\"1109\":1,\"1112\":1,\"1120\":1,\"1169\":1,\"1172\":1,\"1185\":1,\"1186\":1,\"1188\":1,\"1189\":1,\"1220\":1,\"1242\":1,\"1243\":1,\"1247\":1,\"1250\":1,\"1258\":1,\"1341\":1,\"1344\":1,\"1358\":1,\"1359\":1,\"1361\":1,\"1362\":1,\"1395\":1,\"1418\":1,\"1419\":1,\"1423\":1,\"1426\":1,\"1434\":1,\"1518\":1,\"1521\":1,\"1535\":1,\"1536\":1,\"1538\":1,\"1539\":1,\"1572\":1,\"1595\":1,\"1596\":1,\"1600\":1,\"1603\":1,\"1611\":1,\"1695\":1,\"1698\":1,\"1712\":1,\"1713\":1,\"1715\":1,\"1716\":1,\"1749\":1,\"1772\":1,\"1773\":1,\"1777\":1,\"1780\":1,\"1788\":1,\"1872\":1,\"1875\":1,\"1889\":1,\"1890\":1,\"1892\":1,\"1893\":1,\"1926\":1,\"1949\":1,\"1950\":1,\"1954\":1,\"1957\":1,\"1965\":1,\"2049\":1,\"2052\":1,\"2066\":1,\"2067\":1,\"2069\":1,\"2070\":1,\"2103\":1,\"2126\":1,\"2127\":1,\"2131\":1,\"2134\":1,\"2142\":1,\"2236\":1,\"2239\":1,\"2256\":1,\"2257\":1,\"2259\":1,\"2260\":1,\"2293\":1,\"2341\":1,\"2342\":1,\"2346\":1,\"2349\":1,\"2360\":1,\"2455\":1,\"2458\":1,\"2475\":1,\"2476\":1,\"2478\":1,\"2479\":1,\"2512\":1,\"2560\":1,\"2561\":1,\"2565\":1,\"2568\":1,\"2579\":1,\"2674\":1,\"2677\":1,\"2694\":1,\"2695\":1,\"2697\":1,\"2698\":1,\"2731\":1,\"2779\":1,\"2780\":1,\"2784\":1,\"2787\":1,\"2798\":1}}],[\"channel\",{\"0\":{\"812\":1,\"813\":1,\"972\":1,\"973\":1,\"1080\":1,\"1081\":1,\"1148\":1,\"1149\":1,\"1272\":1,\"1273\":1,\"1320\":1,\"1321\":1,\"1448\":1,\"1449\":1,\"1497\":1,\"1498\":1,\"1625\":1,\"1626\":1,\"1674\":1,\"1675\":1,\"1802\":1,\"1803\":1,\"1851\":1,\"1852\":1,\"1979\":1,\"1980\":1,\"2028\":1,\"2029\":1,\"2156\":1,\"2157\":1,\"2215\":1,\"2216\":1,\"2375\":1,\"2376\":1,\"2434\":1,\"2435\":1,\"2594\":1,\"2595\":1,\"2653\":1,\"2654\":1,\"2813\":1,\"2814\":1},\"1\":{\"22\":1,\"425\":1,\"455\":1,\"478\":1,\"504\":1,\"530\":1,\"560\":1,\"590\":1,\"636\":1,\"682\":1,\"728\":1,\"774\":1,\"812\":3,\"813\":3,\"902\":1,\"903\":4,\"905\":1,\"972\":3,\"973\":3,\"993\":1,\"994\":4,\"997\":1,\"1080\":3,\"1081\":3,\"1148\":3,\"1149\":3,\"1272\":3,\"1273\":3,\"1293\":1,\"1294\":4,\"1297\":1,\"1320\":3,\"1321\":3,\"1448\":3,\"1449\":3,\"1469\":1,\"1470\":4,\"1473\":1,\"1497\":3,\"1498\":3,\"1625\":3,\"1626\":3,\"1646\":1,\"1647\":4,\"1650\":1,\"1674\":3,\"1675\":3,\"1802\":3,\"1803\":3,\"1823\":1,\"1824\":4,\"1827\":1,\"1851\":3,\"1852\":3,\"1979\":3,\"1980\":3,\"2000\":1,\"2001\":4,\"2004\":1,\"2028\":3,\"2029\":3,\"2156\":3,\"2157\":3,\"2177\":1,\"2178\":4,\"2181\":1,\"2215\":3,\"2216\":3,\"2305\":1,\"2306\":4,\"2308\":1,\"2375\":3,\"2376\":3,\"2396\":1,\"2397\":4,\"2400\":1,\"2434\":3,\"2435\":3,\"2524\":1,\"2525\":4,\"2527\":1,\"2594\":3,\"2595\":3,\"2615\":1,\"2616\":4,\"2619\":1,\"2653\":3,\"2654\":3,\"2743\":1,\"2744\":4,\"2746\":1,\"2813\":3,\"2814\":3,\"2834\":1,\"2835\":4,\"2838\":1}}],[\"challenges\",{\"1\":{\"116\":1,\"123\":1}}],[\"chapter\",{\"1\":{\"99\":1,\"105\":1,\"406\":1,\"617\":1,\"663\":1,\"709\":1,\"755\":1}}],[\"chat\",{\"1\":{\"69\":1}}],[\"chain\",{\"0\":{\"273\":1,\"826\":1,\"918\":1,\"986\":1,\"1010\":1,\"1094\":1,\"1138\":1,\"1162\":1,\"1286\":1,\"1309\":1,\"1334\":1,\"1462\":1,\"1486\":1,\"1511\":1,\"1639\":1,\"1663\":1,\"1688\":1,\"1816\":1,\"1840\":1,\"1865\":1,\"1993\":1,\"2017\":1,\"2042\":1,\"2170\":1,\"2194\":1,\"2229\":1,\"2321\":1,\"2389\":1,\"2413\":1,\"2448\":1,\"2540\":1,\"2608\":1,\"2632\":1,\"2667\":1,\"2759\":1,\"2827\":1,\"2851\":1},\"1\":{\"37\":1,\"40\":1,\"156\":1,\"220\":1,\"271\":1,\"273\":4,\"285\":3,\"296\":3,\"438\":3,\"464\":3,\"487\":3,\"513\":3,\"543\":3,\"573\":3,\"603\":3,\"649\":3,\"695\":3,\"741\":3,\"787\":3,\"826\":2,\"877\":1,\"916\":1,\"918\":4,\"986\":2,\"1008\":1,\"1010\":4,\"1059\":1,\"1094\":2,\"1136\":1,\"1138\":4,\"1162\":2,\"1210\":1,\"1286\":2,\"1307\":1,\"1309\":4,\"1334\":2,\"1382\":1,\"1462\":2,\"1484\":1,\"1486\":4,\"1511\":2,\"1559\":1,\"1639\":2,\"1661\":1,\"1663\":4,\"1688\":2,\"1736\":1,\"1816\":2,\"1838\":1,\"1840\":4,\"1865\":2,\"1913\":1,\"1993\":2,\"2015\":1,\"2017\":4,\"2042\":2,\"2090\":1,\"2170\":2,\"2192\":1,\"2194\":4,\"2229\":2,\"2280\":1,\"2319\":1,\"2321\":4,\"2389\":2,\"2411\":1,\"2413\":4,\"2448\":2,\"2499\":1,\"2538\":1,\"2540\":4,\"2608\":2,\"2630\":1,\"2632\":4,\"2667\":2,\"2718\":1,\"2757\":1,\"2759\":4,\"2827\":2,\"2849\":1,\"2851\":4}}],[\"clearer\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"clear\",{\"1\":{\"155\":2,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"clean\",{\"1\":{\"132\":1,\"333\":1,\"347\":1,\"362\":1,\"372\":1,\"388\":1}}],[\"claims\",{\"1\":{\"802\":1,\"929\":1,\"1233\":1,\"1409\":1,\"1586\":1,\"1763\":1,\"1940\":1,\"2117\":1,\"2205\":1,\"2332\":1,\"2424\":1,\"2551\":1,\"2643\":1,\"2770\":1}}],[\"clause\",{\"1\":{\"155\":5}}],[\"classes\",{\"1\":{\"328\":1,\"386\":1}}],[\"class\",{\"0\":{\"170\":1,\"227\":1,\"228\":1,\"234\":1},\"1\":{\"135\":1,\"143\":5,\"145\":1,\"146\":3,\"147\":2,\"148\":2,\"149\":2,\"155\":1,\"156\":2,\"170\":1,\"227\":1,\"228\":1,\"234\":1,\"325\":1,\"328\":9,\"329\":2,\"331\":3,\"334\":3,\"338\":3,\"342\":2,\"345\":7,\"348\":2,\"360\":5,\"363\":1,\"369\":1,\"370\":1,\"373\":1,\"389\":1}}],[\"closing\",{\"1\":{\"155\":25}}],[\"closer\",{\"1\":{\"330\":1}}],[\"close\",{\"1\":{\"78\":1,\"285\":1,\"286\":3,\"296\":1,\"297\":3,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"cli\",{\"1\":{\"279\":1,\"290\":1,\"391\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"clientcert\",{\"1\":{\"810\":1,\"970\":1,\"1078\":1,\"1146\":1,\"1270\":1,\"1318\":1,\"1446\":1,\"1495\":1,\"1623\":1,\"1672\":1,\"1800\":1,\"1849\":1,\"1977\":1,\"2026\":1,\"2154\":1,\"2213\":1,\"2373\":1,\"2432\":1,\"2592\":1,\"2651\":1,\"2811\":1}}],[\"clientendpoint\",{\"1\":{\"440\":2,\"466\":2,\"489\":2,\"515\":2,\"545\":2,\"575\":2,\"605\":2,\"651\":2,\"697\":2,\"743\":2,\"789\":2}}],[\"clients\",{\"0\":{\"148\":1,\"149\":1},\"1\":{\"331\":1,\"824\":1,\"984\":1,\"1092\":1,\"1160\":1,\"1284\":1,\"1332\":1,\"1460\":1,\"1509\":1,\"1637\":1,\"1686\":1,\"1814\":1,\"1863\":1,\"1991\":1,\"2040\":1,\"2168\":1,\"2227\":1,\"2387\":1,\"2446\":1,\"2606\":1,\"2665\":1,\"2825\":1}}],[\"client\",{\"0\":{\"183\":1,\"184\":1,\"185\":2,\"186\":2,\"187\":1,\"188\":1,\"189\":1,\"190\":1,\"191\":1,\"192\":2,\"193\":1,\"194\":1,\"195\":2,\"196\":1,\"197\":1,\"198\":1,\"199\":1,\"200\":1,\"201\":1,\"208\":1,\"209\":1,\"210\":2,\"237\":1,\"238\":1,\"239\":2,\"240\":2,\"241\":1,\"242\":1,\"243\":1,\"244\":1,\"245\":1,\"246\":1,\"280\":1,\"291\":1,\"434\":1,\"460\":1,\"483\":1,\"509\":1,\"539\":1,\"569\":1,\"599\":1,\"645\":1,\"691\":1,\"737\":1,\"783\":1,\"810\":1,\"815\":1,\"816\":1,\"817\":1,\"818\":1,\"819\":2,\"820\":1,\"821\":1,\"822\":1,\"824\":1,\"850\":1,\"851\":1,\"852\":2,\"853\":1,\"854\":1,\"855\":1,\"856\":1,\"857\":1,\"858\":1,\"859\":1,\"865\":1,\"866\":1,\"867\":2,\"921\":1,\"935\":1,\"936\":1,\"937\":2,\"938\":1,\"939\":1,\"940\":1,\"941\":1,\"970\":1,\"975\":1,\"976\":1,\"977\":1,\"978\":1,\"979\":2,\"980\":1,\"981\":1,\"982\":1,\"984\":1,\"1013\":1,\"1031\":1,\"1032\":1,\"1033\":2,\"1034\":1,\"1035\":1,\"1036\":1,\"1037\":1,\"1038\":1,\"1039\":1,\"1040\":1,\"1047\":1,\"1048\":1,\"1049\":2,\"1078\":1,\"1083\":1,\"1084\":1,\"1085\":1,\"1086\":1,\"1087\":2,\"1088\":1,\"1089\":1,\"1090\":1,\"1092\":1,\"1101\":1,\"1102\":1,\"1103\":2,\"1104\":1,\"1105\":1,\"1106\":1,\"1107\":1,\"1146\":1,\"1151\":1,\"1152\":1,\"1153\":1,\"1154\":1,\"1155\":2,\"1156\":1,\"1157\":1,\"1158\":1,\"1160\":1,\"1182\":1,\"1183\":1,\"1184\":2,\"1185\":1,\"1186\":1,\"1187\":1,\"1188\":1,\"1189\":1,\"1190\":1,\"1191\":1,\"1198\":1,\"1199\":1,\"1200\":2,\"1239\":1,\"1240\":1,\"1241\":2,\"1242\":1,\"1243\":1,\"1244\":1,\"1245\":1,\"1270\":1,\"1275\":1,\"1276\":1,\"1277\":1,\"1278\":1,\"1279\":2,\"1280\":1,\"1281\":1,\"1282\":1,\"1284\":1,\"1312\":1,\"1318\":1,\"1323\":1,\"1324\":1,\"1325\":1,\"1326\":1,\"1327\":2,\"1328\":1,\"1329\":1,\"1330\":1,\"1332\":1,\"1355\":1,\"1356\":1,\"1357\":2,\"1358\":1,\"1359\":1,\"1360\":1,\"1361\":1,\"1362\":1,\"1363\":1,\"1364\":1,\"1370\":1,\"1371\":1,\"1372\":2,\"1415\":1,\"1416\":1,\"1417\":2,\"1418\":1,\"1419\":1,\"1420\":1,\"1421\":1,\"1446\":1,\"1451\":1,\"1452\":1,\"1453\":1,\"1454\":1,\"1455\":2,\"1456\":1,\"1457\":1,\"1458\":1,\"1460\":1,\"1489\":1,\"1495\":1,\"1500\":1,\"1501\":1,\"1502\":1,\"1503\":1,\"1504\":2,\"1505\":1,\"1506\":1,\"1507\":1,\"1509\":1,\"1532\":1,\"1533\":1,\"1534\":2,\"1535\":1,\"1536\":1,\"1537\":1,\"1538\":1,\"1539\":1,\"1540\":1,\"1541\":1,\"1547\":1,\"1548\":1,\"1549\":2,\"1592\":1,\"1593\":1,\"1594\":2,\"1595\":1,\"1596\":1,\"1597\":1,\"1598\":1,\"1623\":1,\"1628\":1,\"1629\":1,\"1630\":1,\"1631\":1,\"1632\":2,\"1633\":1,\"1634\":1,\"1635\":1,\"1637\":1,\"1666\":1,\"1672\":1,\"1677\":1,\"1678\":1,\"1679\":1,\"1680\":1,\"1681\":2,\"1682\":1,\"1683\":1,\"1684\":1,\"1686\":1,\"1709\":1,\"1710\":1,\"1711\":2,\"1712\":1,\"1713\":1,\"1714\":1,\"1715\":1,\"1716\":1,\"1717\":1,\"1718\":1,\"1724\":1,\"1725\":1,\"1726\":2,\"1769\":1,\"1770\":1,\"1771\":2,\"1772\":1,\"1773\":1,\"1774\":1,\"1775\":1,\"1800\":1,\"1805\":1,\"1806\":1,\"1807\":1,\"1808\":1,\"1809\":2,\"1810\":1,\"1811\":1,\"1812\":1,\"1814\":1,\"1843\":1,\"1849\":1,\"1854\":1,\"1855\":1,\"1856\":1,\"1857\":1,\"1858\":2,\"1859\":1,\"1860\":1,\"1861\":1,\"1863\":1,\"1886\":1,\"1887\":1,\"1888\":2,\"1889\":1,\"1890\":1,\"1891\":1,\"1892\":1,\"1893\":1,\"1894\":1,\"1895\":1,\"1901\":1,\"1902\":1,\"1903\":2,\"1946\":1,\"1947\":1,\"1948\":2,\"1949\":1,\"1950\":1,\"1951\":1,\"1952\":1,\"1977\":1,\"1982\":1,\"1983\":1,\"1984\":1,\"1985\":1,\"1986\":2,\"1987\":1,\"1988\":1,\"1989\":1,\"1991\":1,\"2020\":1,\"2026\":1,\"2031\":1,\"2032\":1,\"2033\":1,\"2034\":1,\"2035\":2,\"2036\":1,\"2037\":1,\"2038\":1,\"2040\":1,\"2063\":1,\"2064\":1,\"2065\":2,\"2066\":1,\"2067\":1,\"2068\":1,\"2069\":1,\"2070\":1,\"2071\":1,\"2072\":1,\"2078\":1,\"2079\":1,\"2080\":2,\"2123\":1,\"2124\":1,\"2125\":2,\"2126\":1,\"2127\":1,\"2128\":1,\"2129\":1,\"2154\":1,\"2159\":1,\"2160\":1,\"2161\":1,\"2162\":1,\"2163\":2,\"2164\":1,\"2165\":1,\"2166\":1,\"2168\":1,\"2197\":1,\"2213\":1,\"2218\":1,\"2219\":1,\"2220\":1,\"2221\":1,\"2222\":2,\"2223\":1,\"2224\":1,\"2225\":1,\"2227\":1,\"2253\":1,\"2254\":1,\"2255\":2,\"2256\":1,\"2257\":1,\"2258\":1,\"2259\":1,\"2260\":1,\"2261\":1,\"2262\":1,\"2268\":1,\"2269\":1,\"2270\":2,\"2324\":1,\"2338\":1,\"2339\":1,\"2340\":2,\"2341\":1,\"2342\":1,\"2343\":1,\"2344\":1,\"2373\":1,\"2378\":1,\"2379\":1,\"2380\":1,\"2381\":1,\"2382\":2,\"2383\":1,\"2384\":1,\"2385\":1,\"2387\":1,\"2416\":1,\"2432\":1,\"2437\":1,\"2438\":1,\"2439\":1,\"2440\":1,\"2441\":2,\"2442\":1,\"2443\":1,\"2444\":1,\"2446\":1,\"2472\":1,\"2473\":1,\"2474\":2,\"2475\":1,\"2476\":1,\"2477\":1,\"2478\":1,\"2479\":1,\"2480\":1,\"2481\":1,\"2487\":1,\"2488\":1,\"2489\":2,\"2543\":1,\"2557\":1,\"2558\":1,\"2559\":2,\"2560\":1,\"2561\":1,\"2562\":1,\"2563\":1,\"2592\":1,\"2597\":1,\"2598\":1,\"2599\":1,\"2600\":1,\"2601\":2,\"2602\":1,\"2603\":1,\"2604\":1,\"2606\":1,\"2635\":1,\"2651\":1,\"2656\":1,\"2657\":1,\"2658\":1,\"2659\":1,\"2660\":2,\"2661\":1,\"2662\":1,\"2663\":1,\"2665\":1,\"2691\":1,\"2692\":1,\"2693\":2,\"2694\":1,\"2695\":1,\"2696\":1,\"2697\":1,\"2698\":1,\"2699\":1,\"2700\":1,\"2706\":1,\"2707\":1,\"2708\":2,\"2762\":1,\"2776\":1,\"2777\":1,\"2778\":2,\"2779\":1,\"2780\":1,\"2781\":1,\"2782\":1,\"2811\":1,\"2816\":1,\"2817\":1,\"2818\":1,\"2819\":1,\"2820\":2,\"2821\":1,\"2822\":1,\"2823\":1,\"2825\":1,\"2854\":1},\"1\":{\"32\":1,\"95\":4,\"106\":3,\"109\":4,\"130\":1,\"131\":1,\"134\":5,\"142\":1,\"148\":13,\"149\":12,\"161\":2,\"164\":3,\"165\":4,\"166\":1,\"170\":3,\"183\":3,\"184\":5,\"185\":4,\"186\":2,\"187\":1,\"188\":1,\"189\":1,\"190\":1,\"191\":1,\"192\":2,\"193\":1,\"194\":1,\"195\":2,\"196\":1,\"197\":1,\"198\":1,\"199\":1,\"200\":1,\"201\":2,\"208\":3,\"209\":5,\"210\":4,\"227\":3,\"228\":3,\"234\":3,\"237\":3,\"238\":5,\"239\":4,\"240\":2,\"241\":1,\"242\":1,\"243\":1,\"244\":1,\"245\":2,\"246\":1,\"261\":3,\"262\":3,\"271\":1,\"272\":2,\"280\":2,\"284\":9,\"285\":19,\"286\":10,\"291\":2,\"295\":9,\"296\":19,\"297\":10,\"300\":7,\"303\":7,\"306\":7,\"309\":1,\"312\":1,\"323\":91,\"334\":6,\"363\":1,\"389\":1,\"423\":3,\"425\":1,\"434\":4,\"437\":9,\"438\":11,\"439\":10,\"442\":1,\"445\":1,\"453\":4,\"460\":4,\"463\":9,\"464\":14,\"465\":10,\"476\":4,\"483\":4,\"486\":9,\"487\":11,\"488\":10,\"494\":1,\"502\":4,\"509\":4,\"512\":9,\"513\":11,\"514\":10,\"519\":1,\"520\":2,\"528\":4,\"539\":4,\"542\":9,\"543\":11,\"544\":10,\"547\":1,\"550\":1,\"558\":3,\"560\":1,\"569\":4,\"572\":9,\"573\":11,\"574\":10,\"577\":1,\"580\":1,\"588\":3,\"590\":1,\"599\":4,\"602\":9,\"603\":11,\"604\":10,\"607\":1,\"610\":1,\"634\":3,\"636\":1,\"645\":4,\"648\":9,\"649\":11,\"650\":10,\"653\":1,\"656\":1,\"680\":3,\"682\":1,\"691\":4,\"694\":9,\"695\":11,\"696\":10,\"699\":1,\"702\":1,\"726\":3,\"728\":1,\"737\":4,\"740\":9,\"741\":11,\"742\":10,\"745\":1,\"748\":1,\"772\":3,\"774\":1,\"783\":4,\"786\":9,\"787\":11,\"788\":10,\"791\":1,\"794\":1,\"798\":4,\"801\":1,\"806\":2,\"810\":2,\"811\":2,\"812\":1,\"815\":2,\"816\":2,\"817\":3,\"818\":5,\"819\":4,\"820\":2,\"821\":2,\"822\":1,\"824\":3,\"850\":3,\"851\":5,\"852\":4,\"853\":1,\"854\":1,\"855\":1,\"856\":1,\"857\":1,\"858\":1,\"859\":2,\"865\":3,\"866\":5,\"867\":4,\"902\":2,\"903\":2,\"904\":1,\"905\":3,\"916\":1,\"917\":2,\"925\":4,\"928\":1,\"933\":2,\"935\":3,\"936\":5,\"937\":4,\"938\":1,\"939\":1,\"940\":2,\"941\":1,\"959\":1,\"970\":2,\"971\":2,\"972\":1,\"975\":2,\"976\":2,\"977\":3,\"978\":5,\"979\":4,\"980\":2,\"981\":2,\"982\":1,\"984\":3,\"993\":2,\"994\":2,\"996\":1,\"997\":3,\"1008\":1,\"1009\":2,\"1031\":3,\"1032\":5,\"1033\":4,\"1034\":1,\"1035\":1,\"1036\":1,\"1037\":1,\"1038\":1,\"1039\":1,\"1040\":1,\"1047\":3,\"1048\":5,\"1049\":4,\"1078\":2,\"1079\":2,\"1080\":1,\"1083\":2,\"1084\":2,\"1085\":3,\"1086\":5,\"1087\":4,\"1088\":2,\"1089\":2,\"1090\":1,\"1092\":3,\"1101\":3,\"1102\":5,\"1103\":4,\"1104\":1,\"1105\":1,\"1106\":1,\"1107\":1,\"1136\":1,\"1137\":2,\"1146\":2,\"1147\":2,\"1148\":1,\"1151\":2,\"1152\":2,\"1153\":3,\"1154\":5,\"1155\":4,\"1156\":2,\"1157\":2,\"1158\":1,\"1160\":3,\"1182\":3,\"1183\":5,\"1184\":4,\"1185\":1,\"1186\":1,\"1187\":1,\"1188\":1,\"1189\":1,\"1190\":1,\"1191\":1,\"1198\":3,\"1199\":5,\"1200\":4,\"1229\":4,\"1232\":1,\"1237\":2,\"1239\":3,\"1240\":5,\"1241\":4,\"1242\":1,\"1243\":1,\"1244\":1,\"1245\":1,\"1260\":1,\"1270\":2,\"1271\":2,\"1272\":1,\"1275\":2,\"1276\":2,\"1277\":3,\"1278\":5,\"1279\":4,\"1280\":2,\"1281\":2,\"1282\":1,\"1284\":3,\"1293\":2,\"1294\":2,\"1296\":1,\"1297\":3,\"1307\":1,\"1308\":2,\"1318\":2,\"1319\":2,\"1320\":1,\"1323\":2,\"1324\":2,\"1325\":3,\"1326\":5,\"1327\":4,\"1328\":2,\"1329\":2,\"1330\":1,\"1332\":3,\"1355\":3,\"1356\":5,\"1357\":4,\"1358\":1,\"1359\":1,\"1360\":1,\"1361\":1,\"1362\":1,\"1363\":1,\"1364\":1,\"1370\":3,\"1371\":5,\"1372\":4,\"1405\":4,\"1408\":1,\"1413\":2,\"1415\":3,\"1416\":5,\"1417\":4,\"1418\":1,\"1419\":1,\"1420\":1,\"1421\":1,\"1436\":1,\"1446\":2,\"1447\":2,\"1448\":1,\"1451\":2,\"1452\":2,\"1453\":3,\"1454\":5,\"1455\":4,\"1456\":2,\"1457\":2,\"1458\":1,\"1460\":3,\"1469\":2,\"1470\":2,\"1472\":1,\"1473\":3,\"1484\":1,\"1485\":2,\"1495\":2,\"1496\":2,\"1497\":1,\"1500\":2,\"1501\":2,\"1502\":3,\"1503\":5,\"1504\":4,\"1505\":2,\"1506\":2,\"1507\":1,\"1509\":3,\"1532\":3,\"1533\":5,\"1534\":4,\"1535\":1,\"1536\":1,\"1537\":1,\"1538\":1,\"1539\":1,\"1540\":1,\"1541\":2,\"1547\":3,\"1548\":5,\"1549\":4,\"1582\":4,\"1585\":1,\"1590\":2,\"1592\":3,\"1593\":5,\"1594\":4,\"1595\":1,\"1596\":1,\"1597\":2,\"1598\":1,\"1613\":1,\"1623\":2,\"1624\":2,\"1625\":1,\"1628\":2,\"1629\":2,\"1630\":3,\"1631\":5,\"1632\":4,\"1633\":2,\"1634\":2,\"1635\":1,\"1637\":3,\"1646\":2,\"1647\":2,\"1649\":1,\"1650\":3,\"1661\":1,\"1662\":2,\"1672\":2,\"1673\":2,\"1674\":1,\"1677\":2,\"1678\":2,\"1679\":3,\"1680\":5,\"1681\":4,\"1682\":2,\"1683\":2,\"1684\":1,\"1686\":3,\"1709\":3,\"1710\":5,\"1711\":4,\"1712\":1,\"1713\":1,\"1714\":1,\"1715\":1,\"1716\":1,\"1717\":1,\"1718\":2,\"1724\":3,\"1725\":5,\"1726\":4,\"1759\":4,\"1762\":1,\"1767\":2,\"1769\":3,\"1770\":5,\"1771\":4,\"1772\":1,\"1773\":1,\"1774\":2,\"1775\":1,\"1790\":1,\"1800\":2,\"1801\":2,\"1802\":1,\"1805\":2,\"1806\":2,\"1807\":3,\"1808\":5,\"1809\":4,\"1810\":2,\"1811\":2,\"1812\":1,\"1814\":3,\"1823\":2,\"1824\":2,\"1826\":1,\"1827\":3,\"1838\":1,\"1839\":2,\"1849\":2,\"1850\":2,\"1851\":1,\"1854\":2,\"1855\":2,\"1856\":3,\"1857\":5,\"1858\":4,\"1859\":2,\"1860\":2,\"1861\":1,\"1863\":3,\"1886\":3,\"1887\":5,\"1888\":4,\"1889\":1,\"1890\":1,\"1891\":1,\"1892\":1,\"1893\":1,\"1894\":1,\"1895\":2,\"1901\":3,\"1902\":5,\"1903\":4,\"1936\":4,\"1939\":1,\"1944\":2,\"1946\":3,\"1947\":5,\"1948\":4,\"1949\":1,\"1950\":1,\"1951\":2,\"1952\":1,\"1967\":1,\"1977\":2,\"1978\":2,\"1979\":1,\"1982\":2,\"1983\":2,\"1984\":3,\"1985\":5,\"1986\":4,\"1987\":2,\"1988\":2,\"1989\":1,\"1991\":3,\"2000\":2,\"2001\":2,\"2003\":1,\"2004\":3,\"2015\":1,\"2016\":2,\"2026\":2,\"2027\":2,\"2028\":1,\"2031\":2,\"2032\":2,\"2033\":3,\"2034\":5,\"2035\":4,\"2036\":2,\"2037\":2,\"2038\":1,\"2040\":3,\"2063\":3,\"2064\":5,\"2065\":4,\"2066\":1,\"2067\":1,\"2068\":1,\"2069\":1,\"2070\":1,\"2071\":1,\"2072\":2,\"2078\":3,\"2079\":5,\"2080\":4,\"2113\":4,\"2116\":1,\"2121\":2,\"2123\":3,\"2124\":5,\"2125\":4,\"2126\":1,\"2127\":1,\"2128\":2,\"2129\":1,\"2144\":1,\"2154\":2,\"2155\":2,\"2156\":1,\"2159\":2,\"2160\":2,\"2161\":3,\"2162\":5,\"2163\":4,\"2164\":2,\"2165\":2,\"2166\":1,\"2168\":3,\"2177\":2,\"2178\":2,\"2180\":1,\"2181\":3,\"2192\":1,\"2193\":2,\"2201\":4,\"2204\":1,\"2209\":2,\"2213\":2,\"2214\":2,\"2215\":1,\"2218\":2,\"2219\":2,\"2220\":3,\"2221\":5,\"2222\":4,\"2223\":2,\"2224\":2,\"2225\":1,\"2227\":3,\"2253\":3,\"2254\":5,\"2255\":4,\"2256\":1,\"2257\":1,\"2258\":1,\"2259\":1,\"2260\":1,\"2261\":1,\"2262\":2,\"2268\":3,\"2269\":5,\"2270\":4,\"2305\":2,\"2306\":2,\"2307\":1,\"2308\":3,\"2319\":1,\"2320\":2,\"2328\":4,\"2331\":1,\"2336\":2,\"2338\":3,\"2339\":5,\"2340\":4,\"2341\":1,\"2342\":1,\"2343\":2,\"2344\":1,\"2362\":1,\"2373\":2,\"2374\":2,\"2375\":1,\"2378\":2,\"2379\":2,\"2380\":3,\"2381\":5,\"2382\":4,\"2383\":2,\"2384\":2,\"2385\":1,\"2387\":3,\"2396\":2,\"2397\":2,\"2399\":1,\"2400\":3,\"2411\":1,\"2412\":2,\"2420\":4,\"2423\":1,\"2428\":2,\"2432\":2,\"2433\":2,\"2434\":1,\"2437\":2,\"2438\":2,\"2439\":3,\"2440\":5,\"2441\":4,\"2442\":2,\"2443\":2,\"2444\":1,\"2446\":3,\"2472\":3,\"2473\":5,\"2474\":4,\"2475\":1,\"2476\":1,\"2477\":1,\"2478\":1,\"2479\":1,\"2480\":1,\"2481\":2,\"2487\":3,\"2488\":5,\"2489\":4,\"2524\":2,\"2525\":2,\"2526\":1,\"2527\":3,\"2538\":1,\"2539\":2,\"2547\":4,\"2550\":1,\"2555\":2,\"2557\":3,\"2558\":5,\"2559\":4,\"2560\":1,\"2561\":1,\"2562\":2,\"2563\":1,\"2581\":1,\"2592\":2,\"2593\":2,\"2594\":1,\"2597\":2,\"2598\":2,\"2599\":3,\"2600\":5,\"2601\":4,\"2602\":2,\"2603\":2,\"2604\":1,\"2606\":3,\"2615\":2,\"2616\":2,\"2618\":1,\"2619\":3,\"2630\":1,\"2631\":2,\"2639\":4,\"2642\":1,\"2647\":2,\"2651\":2,\"2652\":2,\"2653\":1,\"2656\":2,\"2657\":2,\"2658\":3,\"2659\":5,\"2660\":4,\"2661\":2,\"2662\":2,\"2663\":1,\"2665\":3,\"2691\":3,\"2692\":5,\"2693\":4,\"2694\":1,\"2695\":1,\"2696\":1,\"2697\":1,\"2698\":1,\"2699\":1,\"2700\":2,\"2706\":3,\"2707\":5,\"2708\":4,\"2743\":2,\"2744\":2,\"2745\":1,\"2746\":3,\"2757\":1,\"2758\":2,\"2766\":4,\"2769\":1,\"2774\":2,\"2776\":3,\"2777\":5,\"2778\":4,\"2779\":1,\"2780\":1,\"2781\":2,\"2782\":1,\"2800\":1,\"2811\":2,\"2812\":2,\"2813\":1,\"2816\":2,\"2817\":2,\"2818\":3,\"2819\":5,\"2820\":4,\"2821\":2,\"2822\":2,\"2823\":1,\"2825\":3,\"2834\":2,\"2835\":2,\"2837\":1,\"2838\":3,\"2849\":1,\"2850\":2}}],[\"click\",{\"1\":{\"30\":1,\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"403\":2,\"530\":2,\"614\":2,\"660\":2,\"706\":2,\"752\":2}}],[\"clinical\",{\"0\":{\"11\":1},\"1\":{\"5\":1,\"11\":1,\"78\":1}}],[\"ce\",{\"1\":{\"279\":2,\"290\":2,\"433\":2,\"459\":2,\"482\":2,\"508\":2,\"538\":2,\"568\":2,\"598\":2,\"644\":2,\"690\":2,\"736\":2,\"782\":2}}],[\"certtool\",{\"1\":{\"285\":1,\"296\":1,\"438\":1,\"464\":1,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1,\"798\":1,\"925\":1,\"959\":1,\"1229\":1,\"1260\":1,\"1405\":1,\"1436\":1,\"1582\":1,\"1613\":1,\"1759\":1,\"1790\":1,\"1936\":1,\"1967\":1,\"2113\":1,\"2144\":1,\"2201\":1,\"2328\":1,\"2362\":1,\"2420\":1,\"2547\":1,\"2581\":1,\"2639\":1,\"2766\":1,\"2800\":1}}],[\"certifiate\",{\"1\":{\"130\":1,\"131\":1}}],[\"certificate\",{\"0\":{\"107\":1,\"162\":1,\"183\":1,\"184\":1,\"185\":2,\"208\":1,\"209\":1,\"210\":2,\"237\":1,\"238\":1,\"239\":2,\"271\":1,\"273\":1,\"274\":1,\"275\":1,\"810\":1,\"817\":1,\"818\":1,\"819\":2,\"822\":1,\"824\":1,\"825\":1,\"826\":1,\"827\":1,\"828\":2,\"850\":1,\"851\":1,\"852\":2,\"859\":1,\"865\":1,\"866\":1,\"867\":2,\"881\":1,\"916\":1,\"918\":1,\"919\":1,\"920\":1,\"935\":1,\"936\":1,\"937\":2,\"940\":1,\"970\":1,\"977\":1,\"978\":1,\"979\":2,\"982\":1,\"984\":1,\"985\":1,\"986\":1,\"987\":1,\"988\":2,\"1008\":1,\"1010\":1,\"1011\":1,\"1012\":1,\"1031\":1,\"1032\":1,\"1033\":2,\"1040\":1,\"1047\":1,\"1048\":1,\"1049\":2,\"1063\":1,\"1078\":1,\"1085\":1,\"1086\":1,\"1087\":2,\"1090\":1,\"1092\":1,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":2,\"1101\":1,\"1102\":1,\"1103\":2,\"1106\":1,\"1136\":1,\"1138\":1,\"1139\":1,\"1140\":1,\"1146\":1,\"1153\":1,\"1154\":1,\"1155\":2,\"1158\":1,\"1160\":1,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":2,\"1182\":1,\"1183\":1,\"1184\":2,\"1191\":1,\"1198\":1,\"1199\":1,\"1200\":2,\"1214\":1,\"1239\":1,\"1240\":1,\"1241\":2,\"1244\":1,\"1270\":1,\"1277\":1,\"1278\":1,\"1279\":2,\"1282\":1,\"1284\":1,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":2,\"1307\":1,\"1309\":1,\"1310\":1,\"1311\":1,\"1318\":1,\"1325\":1,\"1326\":1,\"1327\":2,\"1330\":1,\"1332\":1,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":2,\"1355\":1,\"1356\":1,\"1357\":2,\"1364\":1,\"1370\":1,\"1371\":1,\"1372\":2,\"1386\":1,\"1415\":1,\"1416\":1,\"1417\":2,\"1420\":1,\"1446\":1,\"1453\":1,\"1454\":1,\"1455\":2,\"1458\":1,\"1460\":1,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":2,\"1484\":1,\"1486\":1,\"1487\":1,\"1488\":1,\"1495\":1,\"1502\":1,\"1503\":1,\"1504\":2,\"1507\":1,\"1509\":1,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":2,\"1532\":1,\"1533\":1,\"1534\":2,\"1541\":1,\"1547\":1,\"1548\":1,\"1549\":2,\"1563\":1,\"1592\":1,\"1593\":1,\"1594\":2,\"1597\":1,\"1623\":1,\"1630\":1,\"1631\":1,\"1632\":2,\"1635\":1,\"1637\":1,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":2,\"1661\":1,\"1663\":1,\"1664\":1,\"1665\":1,\"1672\":1,\"1679\":1,\"1680\":1,\"1681\":2,\"1684\":1,\"1686\":1,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":2,\"1709\":1,\"1710\":1,\"1711\":2,\"1718\":1,\"1724\":1,\"1725\":1,\"1726\":2,\"1740\":1,\"1769\":1,\"1770\":1,\"1771\":2,\"1774\":1,\"1800\":1,\"1807\":1,\"1808\":1,\"1809\":2,\"1812\":1,\"1814\":1,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":2,\"1838\":1,\"1840\":1,\"1841\":1,\"1842\":1,\"1849\":1,\"1856\":1,\"1857\":1,\"1858\":2,\"1861\":1,\"1863\":1,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":2,\"1886\":1,\"1887\":1,\"1888\":2,\"1895\":1,\"1901\":1,\"1902\":1,\"1903\":2,\"1917\":1,\"1946\":1,\"1947\":1,\"1948\":2,\"1951\":1,\"1977\":1,\"1984\":1,\"1985\":1,\"1986\":2,\"1989\":1,\"1991\":1,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":2,\"2015\":1,\"2017\":1,\"2018\":1,\"2019\":1,\"2026\":1,\"2033\":1,\"2034\":1,\"2035\":2,\"2038\":1,\"2040\":1,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":2,\"2063\":1,\"2064\":1,\"2065\":2,\"2072\":1,\"2078\":1,\"2079\":1,\"2080\":2,\"2094\":1,\"2123\":1,\"2124\":1,\"2125\":2,\"2128\":1,\"2154\":1,\"2161\":1,\"2162\":1,\"2163\":2,\"2166\":1,\"2168\":1,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":2,\"2192\":1,\"2194\":1,\"2195\":1,\"2196\":1,\"2213\":1,\"2220\":1,\"2221\":1,\"2222\":2,\"2225\":1,\"2227\":1,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":2,\"2253\":1,\"2254\":1,\"2255\":2,\"2262\":1,\"2268\":1,\"2269\":1,\"2270\":2,\"2284\":1,\"2319\":1,\"2321\":1,\"2322\":1,\"2323\":1,\"2338\":1,\"2339\":1,\"2340\":2,\"2343\":1,\"2373\":1,\"2380\":1,\"2381\":1,\"2382\":2,\"2385\":1,\"2387\":1,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":2,\"2411\":1,\"2413\":1,\"2414\":1,\"2415\":1,\"2432\":1,\"2439\":1,\"2440\":1,\"2441\":2,\"2444\":1,\"2446\":1,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":2,\"2472\":1,\"2473\":1,\"2474\":2,\"2481\":1,\"2487\":1,\"2488\":1,\"2489\":2,\"2503\":1,\"2538\":1,\"2540\":1,\"2541\":1,\"2542\":1,\"2557\":1,\"2558\":1,\"2559\":2,\"2562\":1,\"2592\":1,\"2599\":1,\"2600\":1,\"2601\":2,\"2604\":1,\"2606\":1,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":2,\"2630\":1,\"2632\":1,\"2633\":1,\"2634\":1,\"2651\":1,\"2658\":1,\"2659\":1,\"2660\":2,\"2663\":1,\"2665\":1,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":2,\"2691\":1,\"2692\":1,\"2693\":2,\"2700\":1,\"2706\":1,\"2707\":1,\"2708\":2,\"2722\":1,\"2757\":1,\"2759\":1,\"2760\":1,\"2761\":1,\"2776\":1,\"2777\":1,\"2778\":2,\"2781\":1,\"2811\":1,\"2818\":1,\"2819\":1,\"2820\":2,\"2823\":1,\"2825\":1,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":2,\"2849\":1,\"2851\":1,\"2852\":1,\"2853\":1},\"1\":{\"37\":1,\"40\":1,\"95\":1,\"106\":5,\"108\":1,\"109\":1,\"130\":5,\"131\":5,\"134\":6,\"148\":1,\"161\":5,\"163\":2,\"164\":3,\"165\":1,\"183\":3,\"184\":5,\"185\":4,\"208\":3,\"209\":5,\"210\":4,\"220\":3,\"221\":2,\"224\":1,\"237\":3,\"238\":5,\"239\":4,\"261\":2,\"262\":2,\"271\":3,\"272\":2,\"273\":7,\"274\":2,\"275\":2,\"280\":4,\"284\":21,\"285\":36,\"286\":13,\"291\":4,\"295\":21,\"296\":36,\"297\":13,\"300\":1,\"303\":1,\"306\":1,\"309\":1,\"312\":1,\"323\":74,\"334\":12,\"363\":3,\"389\":3,\"423\":3,\"424\":2,\"425\":2,\"434\":4,\"437\":21,\"438\":27,\"439\":13,\"442\":1,\"445\":1,\"453\":3,\"454\":1,\"455\":1,\"460\":4,\"463\":21,\"464\":29,\"465\":13,\"476\":3,\"477\":1,\"478\":1,\"483\":4,\"486\":21,\"487\":27,\"488\":13,\"494\":1,\"502\":3,\"503\":1,\"504\":1,\"509\":4,\"512\":21,\"513\":27,\"514\":13,\"520\":1,\"528\":3,\"529\":2,\"530\":1,\"539\":4,\"542\":21,\"543\":27,\"544\":13,\"547\":1,\"550\":1,\"558\":3,\"559\":2,\"560\":2,\"569\":4,\"572\":21,\"573\":27,\"574\":13,\"577\":1,\"580\":1,\"588\":3,\"589\":2,\"590\":2,\"599\":4,\"602\":21,\"603\":27,\"604\":13,\"607\":1,\"610\":1,\"634\":3,\"635\":2,\"636\":2,\"645\":4,\"648\":21,\"649\":27,\"650\":13,\"653\":1,\"656\":1,\"680\":3,\"681\":2,\"682\":2,\"691\":4,\"694\":21,\"695\":27,\"696\":13,\"699\":1,\"702\":1,\"726\":3,\"727\":2,\"728\":2,\"737\":4,\"740\":21,\"741\":27,\"742\":13,\"745\":1,\"748\":1,\"772\":3,\"773\":2,\"774\":2,\"783\":4,\"786\":21,\"787\":27,\"788\":13,\"791\":1,\"794\":1,\"798\":6,\"800\":2,\"806\":1,\"810\":2,\"817\":3,\"818\":5,\"819\":4,\"822\":1,\"824\":1,\"825\":2,\"826\":2,\"827\":2,\"828\":2,\"850\":3,\"851\":5,\"852\":4,\"859\":1,\"865\":3,\"866\":5,\"867\":4,\"877\":3,\"878\":2,\"881\":2,\"904\":1,\"905\":1,\"916\":3,\"917\":2,\"918\":7,\"919\":2,\"920\":2,\"925\":5,\"927\":2,\"933\":1,\"935\":3,\"936\":5,\"937\":4,\"940\":1,\"959\":2,\"970\":2,\"977\":3,\"978\":5,\"979\":4,\"982\":1,\"984\":1,\"985\":2,\"986\":2,\"987\":2,\"988\":2,\"996\":1,\"997\":1,\"1008\":3,\"1009\":2,\"1010\":7,\"1011\":2,\"1012\":2,\"1031\":3,\"1032\":5,\"1033\":4,\"1040\":1,\"1047\":3,\"1048\":5,\"1049\":4,\"1059\":3,\"1060\":2,\"1063\":2,\"1078\":2,\"1085\":3,\"1086\":5,\"1087\":4,\"1090\":1,\"1092\":1,\"1093\":2,\"1094\":2,\"1095\":2,\"1096\":2,\"1101\":3,\"1102\":5,\"1103\":4,\"1106\":1,\"1136\":3,\"1137\":2,\"1138\":7,\"1139\":2,\"1140\":2,\"1146\":2,\"1153\":3,\"1154\":5,\"1155\":4,\"1158\":1,\"1160\":1,\"1161\":2,\"1162\":2,\"1163\":2,\"1164\":2,\"1182\":3,\"1183\":5,\"1184\":4,\"1191\":1,\"1198\":3,\"1199\":5,\"1200\":4,\"1210\":3,\"1211\":2,\"1214\":2,\"1229\":5,\"1231\":2,\"1237\":1,\"1239\":3,\"1240\":5,\"1241\":4,\"1244\":1,\"1260\":2,\"1270\":2,\"1277\":3,\"1278\":5,\"1279\":4,\"1282\":1,\"1284\":1,\"1285\":2,\"1286\":2,\"1287\":2,\"1288\":2,\"1296\":1,\"1297\":1,\"1307\":3,\"1308\":2,\"1309\":7,\"1310\":2,\"1311\":2,\"1318\":2,\"1325\":3,\"1326\":5,\"1327\":4,\"1330\":1,\"1332\":1,\"1333\":2,\"1334\":2,\"1335\":2,\"1336\":2,\"1355\":3,\"1356\":5,\"1357\":4,\"1364\":1,\"1370\":3,\"1371\":5,\"1372\":4,\"1382\":3,\"1383\":2,\"1386\":2,\"1405\":5,\"1407\":2,\"1413\":1,\"1415\":3,\"1416\":5,\"1417\":4,\"1420\":1,\"1436\":2,\"1446\":2,\"1453\":3,\"1454\":5,\"1455\":4,\"1458\":1,\"1460\":1,\"1461\":2,\"1462\":2,\"1463\":2,\"1464\":2,\"1472\":1,\"1473\":1,\"1484\":3,\"1485\":2,\"1486\":7,\"1487\":2,\"1488\":2,\"1495\":2,\"1502\":3,\"1503\":5,\"1504\":4,\"1507\":1,\"1509\":1,\"1510\":2,\"1511\":2,\"1512\":2,\"1513\":2,\"1532\":3,\"1533\":5,\"1534\":4,\"1541\":1,\"1547\":3,\"1548\":5,\"1549\":4,\"1559\":3,\"1560\":2,\"1563\":2,\"1582\":5,\"1584\":2,\"1590\":1,\"1592\":3,\"1593\":5,\"1594\":4,\"1597\":1,\"1613\":2,\"1623\":2,\"1630\":3,\"1631\":5,\"1632\":4,\"1635\":1,\"1637\":1,\"1638\":2,\"1639\":2,\"1640\":2,\"1641\":2,\"1649\":1,\"1650\":1,\"1661\":3,\"1662\":2,\"1663\":7,\"1664\":2,\"1665\":2,\"1672\":2,\"1679\":3,\"1680\":5,\"1681\":4,\"1684\":1,\"1686\":1,\"1687\":2,\"1688\":2,\"1689\":2,\"1690\":2,\"1709\":3,\"1710\":5,\"1711\":4,\"1718\":1,\"1724\":3,\"1725\":5,\"1726\":4,\"1736\":3,\"1737\":2,\"1740\":2,\"1759\":5,\"1761\":2,\"1767\":1,\"1769\":3,\"1770\":5,\"1771\":4,\"1774\":1,\"1790\":2,\"1800\":2,\"1807\":3,\"1808\":5,\"1809\":4,\"1812\":1,\"1814\":1,\"1815\":2,\"1816\":2,\"1817\":2,\"1818\":2,\"1826\":1,\"1827\":1,\"1838\":3,\"1839\":2,\"1840\":7,\"1841\":2,\"1842\":2,\"1849\":2,\"1856\":3,\"1857\":5,\"1858\":4,\"1861\":1,\"1863\":1,\"1864\":2,\"1865\":2,\"1866\":2,\"1867\":2,\"1886\":3,\"1887\":5,\"1888\":4,\"1895\":1,\"1901\":3,\"1902\":5,\"1903\":4,\"1913\":3,\"1914\":2,\"1917\":2,\"1936\":5,\"1938\":2,\"1944\":1,\"1946\":3,\"1947\":5,\"1948\":4,\"1951\":1,\"1967\":2,\"1977\":2,\"1984\":3,\"1985\":5,\"1986\":4,\"1989\":1,\"1991\":1,\"1992\":2,\"1993\":2,\"1994\":2,\"1995\":2,\"2003\":1,\"2004\":1,\"2015\":3,\"2016\":2,\"2017\":7,\"2018\":2,\"2019\":2,\"2026\":2,\"2033\":3,\"2034\":5,\"2035\":4,\"2038\":1,\"2040\":1,\"2041\":2,\"2042\":2,\"2043\":2,\"2044\":2,\"2063\":3,\"2064\":5,\"2065\":4,\"2072\":1,\"2078\":3,\"2079\":5,\"2080\":4,\"2090\":3,\"2091\":2,\"2094\":2,\"2113\":5,\"2115\":2,\"2121\":1,\"2123\":3,\"2124\":5,\"2125\":4,\"2128\":1,\"2144\":2,\"2154\":2,\"2161\":3,\"2162\":5,\"2163\":4,\"2166\":1,\"2168\":1,\"2169\":2,\"2170\":2,\"2171\":2,\"2172\":2,\"2180\":1,\"2181\":1,\"2192\":3,\"2193\":2,\"2194\":7,\"2195\":2,\"2196\":2,\"2201\":6,\"2203\":2,\"2209\":1,\"2213\":2,\"2220\":3,\"2221\":5,\"2222\":4,\"2225\":1,\"2227\":1,\"2228\":2,\"2229\":2,\"2230\":2,\"2231\":2,\"2253\":3,\"2254\":5,\"2255\":4,\"2262\":1,\"2268\":3,\"2269\":5,\"2270\":4,\"2280\":3,\"2281\":2,\"2284\":2,\"2307\":1,\"2308\":1,\"2319\":3,\"2320\":2,\"2321\":7,\"2322\":2,\"2323\":2,\"2328\":5,\"2330\":2,\"2336\":1,\"2338\":3,\"2339\":5,\"2340\":4,\"2343\":1,\"2362\":2,\"2373\":2,\"2380\":3,\"2381\":5,\"2382\":4,\"2385\":1,\"2387\":1,\"2388\":2,\"2389\":2,\"2390\":2,\"2391\":2,\"2399\":1,\"2400\":1,\"2411\":3,\"2412\":2,\"2413\":7,\"2414\":2,\"2415\":2,\"2420\":6,\"2422\":2,\"2428\":1,\"2432\":2,\"2439\":3,\"2440\":5,\"2441\":4,\"2444\":1,\"2446\":1,\"2447\":2,\"2448\":2,\"2449\":2,\"2450\":2,\"2472\":3,\"2473\":5,\"2474\":4,\"2481\":1,\"2487\":3,\"2488\":5,\"2489\":4,\"2499\":3,\"2500\":2,\"2503\":2,\"2526\":1,\"2527\":1,\"2538\":3,\"2539\":2,\"2540\":7,\"2541\":2,\"2542\":2,\"2547\":5,\"2549\":2,\"2555\":1,\"2557\":3,\"2558\":5,\"2559\":4,\"2562\":1,\"2581\":2,\"2592\":2,\"2599\":3,\"2600\":5,\"2601\":4,\"2604\":1,\"2606\":1,\"2607\":2,\"2608\":2,\"2609\":2,\"2610\":2,\"2618\":1,\"2619\":1,\"2630\":3,\"2631\":2,\"2632\":7,\"2633\":2,\"2634\":2,\"2639\":6,\"2641\":2,\"2647\":1,\"2651\":2,\"2658\":3,\"2659\":5,\"2660\":4,\"2663\":1,\"2665\":1,\"2666\":2,\"2667\":2,\"2668\":2,\"2669\":2,\"2691\":3,\"2692\":5,\"2693\":4,\"2700\":1,\"2706\":3,\"2707\":5,\"2708\":4,\"2718\":3,\"2719\":2,\"2722\":2,\"2745\":1,\"2746\":1,\"2757\":3,\"2758\":2,\"2759\":7,\"2760\":2,\"2761\":2,\"2766\":5,\"2768\":2,\"2774\":1,\"2776\":3,\"2777\":5,\"2778\":4,\"2781\":1,\"2800\":2,\"2811\":2,\"2818\":3,\"2819\":5,\"2820\":4,\"2823\":1,\"2825\":1,\"2826\":2,\"2827\":2,\"2828\":2,\"2829\":2,\"2837\":1,\"2838\":1,\"2849\":3,\"2850\":2,\"2851\":7,\"2852\":2,\"2853\":2}}],[\"certificates\",{\"0\":{\"201\":1,\"224\":1,\"245\":1,\"280\":1,\"284\":1,\"291\":1,\"295\":1,\"434\":1,\"437\":1,\"460\":1,\"463\":1,\"483\":1,\"486\":1,\"509\":1,\"512\":1,\"539\":1,\"542\":1,\"569\":1,\"572\":1,\"599\":1,\"602\":1,\"645\":1,\"648\":1,\"691\":1,\"694\":1,\"737\":1,\"740\":1,\"783\":1,\"786\":1},\"1\":{\"32\":1,\"95\":2,\"106\":3,\"108\":1,\"109\":2,\"130\":1,\"131\":1,\"161\":2,\"165\":2,\"201\":4,\"224\":3,\"245\":4,\"261\":1,\"262\":1,\"271\":1,\"272\":1,\"273\":1,\"279\":1,\"280\":1,\"285\":1,\"286\":1,\"290\":1,\"291\":1,\"296\":1,\"297\":1,\"323\":20,\"327\":2,\"423\":1,\"433\":1,\"434\":3,\"438\":3,\"439\":1,\"442\":2,\"453\":1,\"459\":1,\"460\":3,\"464\":4,\"465\":1,\"476\":1,\"482\":1,\"483\":3,\"487\":3,\"488\":1,\"502\":1,\"508\":1,\"509\":3,\"513\":3,\"514\":1,\"528\":1,\"538\":1,\"539\":3,\"543\":3,\"544\":1,\"547\":2,\"558\":1,\"568\":1,\"569\":3,\"573\":3,\"574\":1,\"577\":2,\"588\":1,\"598\":1,\"599\":3,\"603\":3,\"604\":1,\"607\":2,\"634\":1,\"644\":1,\"645\":3,\"649\":3,\"650\":1,\"653\":2,\"680\":1,\"690\":1,\"691\":3,\"695\":3,\"696\":1,\"699\":2,\"726\":1,\"736\":1,\"737\":3,\"741\":3,\"742\":1,\"745\":2,\"772\":1,\"782\":1,\"783\":3,\"787\":3,\"788\":1,\"791\":2,\"798\":1,\"801\":1,\"806\":2,\"822\":3,\"824\":3,\"859\":3,\"881\":2,\"902\":2,\"904\":2,\"916\":1,\"917\":1,\"918\":1,\"925\":1,\"928\":1,\"933\":2,\"940\":3,\"982\":3,\"984\":3,\"993\":2,\"996\":2,\"1008\":1,\"1009\":1,\"1010\":1,\"1040\":3,\"1063\":2,\"1090\":3,\"1092\":3,\"1106\":3,\"1136\":1,\"1137\":1,\"1138\":1,\"1158\":3,\"1160\":3,\"1191\":3,\"1214\":2,\"1229\":1,\"1232\":1,\"1237\":2,\"1244\":3,\"1282\":3,\"1284\":3,\"1293\":2,\"1296\":2,\"1307\":1,\"1308\":1,\"1309\":1,\"1330\":3,\"1332\":3,\"1364\":3,\"1386\":2,\"1405\":1,\"1408\":1,\"1413\":2,\"1420\":3,\"1458\":3,\"1460\":3,\"1469\":2,\"1472\":2,\"1484\":1,\"1485\":1,\"1486\":1,\"1507\":3,\"1509\":3,\"1541\":3,\"1563\":2,\"1582\":1,\"1585\":1,\"1590\":2,\"1597\":3,\"1635\":3,\"1637\":3,\"1646\":2,\"1649\":2,\"1661\":1,\"1662\":1,\"1663\":1,\"1684\":3,\"1686\":3,\"1718\":3,\"1740\":2,\"1759\":1,\"1762\":1,\"1767\":2,\"1774\":3,\"1812\":3,\"1814\":3,\"1823\":2,\"1826\":2,\"1838\":1,\"1839\":1,\"1840\":1,\"1861\":3,\"1863\":3,\"1895\":3,\"1917\":2,\"1936\":1,\"1939\":1,\"1944\":2,\"1951\":3,\"1989\":3,\"1991\":3,\"2000\":2,\"2003\":2,\"2015\":1,\"2016\":1,\"2017\":1,\"2038\":3,\"2040\":3,\"2072\":3,\"2094\":2,\"2113\":1,\"2116\":1,\"2121\":2,\"2128\":3,\"2166\":3,\"2168\":3,\"2177\":2,\"2180\":2,\"2192\":1,\"2193\":1,\"2194\":1,\"2201\":1,\"2204\":1,\"2209\":2,\"2225\":3,\"2227\":3,\"2262\":3,\"2284\":2,\"2305\":2,\"2307\":2,\"2319\":1,\"2320\":1,\"2321\":1,\"2328\":1,\"2331\":1,\"2336\":2,\"2343\":3,\"2385\":3,\"2387\":3,\"2396\":2,\"2399\":2,\"2411\":1,\"2412\":1,\"2413\":1,\"2420\":1,\"2423\":1,\"2428\":2,\"2444\":3,\"2446\":3,\"2481\":3,\"2503\":2,\"2524\":2,\"2526\":2,\"2538\":1,\"2539\":1,\"2540\":1,\"2547\":1,\"2550\":1,\"2555\":2,\"2562\":3,\"2604\":3,\"2606\":3,\"2615\":2,\"2618\":2,\"2630\":1,\"2631\":1,\"2632\":1,\"2639\":1,\"2642\":1,\"2647\":2,\"2663\":3,\"2665\":3,\"2700\":3,\"2722\":2,\"2743\":2,\"2745\":2,\"2757\":1,\"2758\":1,\"2759\":1,\"2766\":1,\"2769\":1,\"2774\":2,\"2781\":3,\"2823\":3,\"2825\":3,\"2834\":2,\"2837\":2,\"2849\":1,\"2850\":1,\"2851\":1}}],[\"cert\",{\"1\":{\"130\":2,\"131\":2,\"134\":1,\"334\":3,\"363\":1,\"389\":1}}],[\"certain\",{\"1\":{\"105\":1,\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"centric\",{\"1\":{\"114\":1}}],[\"central\",{\"1\":{\"87\":2,\"123\":1,\"124\":2,\"126\":1}}],[\"centres\",{\"1\":{\"87\":1}}],[\"centre\",{\"1\":{\"84\":1}}],[\"centeric\",{\"1\":{\"94\":1}}],[\"center\",{\"1\":{\"74\":1,\"77\":1,\"113\":1,\"124\":1,\"126\":1}}],[\"centers\",{\"1\":{\"11\":1,\"77\":1,\"94\":1,\"123\":1}}],[\"c\",{\"1\":{\"26\":16,\"285\":1,\"286\":3,\"296\":1,\"297\":3,\"396\":1,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"crucial\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"criteria=task\",{\"1\":{\"207\":1,\"864\":1,\"1046\":1,\"1197\":1,\"1369\":1,\"1546\":1,\"1723\":1,\"1900\":1,\"2077\":1,\"2267\":1,\"2486\":1,\"2705\":1}}],[\"criteria=questionnaireresponse\",{\"1\":{\"202\":1,\"860\":1,\"1041\":1,\"1192\":1,\"1365\":1,\"1542\":1,\"1719\":1,\"1896\":1,\"2073\":1,\"2263\":1,\"2482\":1,\"2701\":1}}],[\"critical\",{\"1\":{\"10\":1,\"123\":1}}],[\"crisis\",{\"1\":{\"125\":1}}],[\"crp=central\",{\"1\":{\"94\":1}}],[\"crr\",{\"1\":{\"87\":1,\"126\":1,\"286\":4,\"297\":4,\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"creating\",{\"1\":{\"77\":1,\"93\":1,\"95\":1,\"165\":1,\"352\":3}}],[\"createrole\",{\"1\":{\"130\":1}}],[\"createdb\",{\"1\":{\"130\":1}}],[\"created\",{\"1\":{\"86\":1,\"99\":1,\"143\":1,\"146\":1,\"300\":1,\"303\":1,\"306\":1,\"334\":5,\"343\":1,\"363\":4,\"389\":4,\"885\":1,\"1390\":1,\"1567\":1,\"1744\":1,\"1921\":1,\"2098\":1,\"2288\":1,\"2507\":1,\"2726\":1}}],[\"creates\",{\"1\":{\"85\":1,\"134\":1}}],[\"create\",{\"0\":{\"418\":1,\"448\":1,\"471\":1,\"497\":1,\"523\":1,\"553\":1,\"583\":1,\"629\":1,\"675\":1,\"721\":1,\"767\":1},\"1\":{\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"82\":1,\"94\":2,\"130\":4,\"137\":3,\"138\":1,\"147\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"299\":1,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"334\":1,\"338\":1,\"342\":1,\"345\":2,\"348\":2,\"360\":2,\"363\":2,\"373\":2,\"389\":2,\"410\":4,\"411\":1,\"413\":2,\"417\":1,\"418\":1,\"423\":1,\"438\":1,\"439\":1,\"444\":1,\"445\":1,\"447\":1,\"448\":1,\"453\":1,\"464\":1,\"465\":1,\"470\":1,\"471\":1,\"476\":1,\"487\":1,\"488\":1,\"493\":1,\"494\":1,\"496\":1,\"497\":1,\"502\":1,\"513\":1,\"514\":1,\"519\":1,\"520\":1,\"522\":1,\"523\":1,\"528\":1,\"543\":1,\"544\":1,\"549\":1,\"550\":1,\"552\":1,\"553\":1,\"558\":1,\"573\":1,\"574\":1,\"579\":1,\"580\":1,\"582\":1,\"583\":1,\"588\":1,\"603\":1,\"604\":1,\"609\":1,\"610\":1,\"621\":4,\"622\":1,\"624\":2,\"628\":1,\"629\":1,\"634\":1,\"649\":1,\"650\":1,\"655\":1,\"656\":1,\"667\":4,\"668\":1,\"670\":2,\"674\":1,\"675\":1,\"680\":1,\"695\":1,\"696\":1,\"701\":1,\"702\":1,\"713\":4,\"714\":1,\"716\":2,\"720\":1,\"721\":1,\"726\":1,\"741\":1,\"742\":1,\"747\":1,\"748\":1,\"759\":4,\"760\":1,\"762\":2,\"766\":1,\"767\":1,\"772\":1,\"787\":1,\"788\":1,\"793\":1,\"794\":1,\"931\":1,\"933\":2,\"1235\":1,\"1237\":2,\"1411\":1,\"1413\":2,\"1588\":1,\"1590\":2,\"1765\":1,\"1767\":2,\"1942\":1,\"1944\":2,\"2119\":1,\"2121\":2,\"2334\":1,\"2336\":2,\"2553\":1,\"2555\":2,\"2772\":1,\"2774\":2}}],[\"cross\",{\"1\":{\"0\":1,\"8\":1,\"32\":1,\"78\":1,\"113\":1}}],[\"caching\",{\"1\":{\"895\":1,\"962\":1,\"1124\":1,\"1263\":1,\"1439\":1,\"1616\":1,\"1793\":1,\"1970\":1,\"2147\":1,\"2298\":1,\"2365\":1,\"2517\":1,\"2584\":1,\"2736\":1,\"2803\":1}}],[\"cache\",{\"0\":{\"895\":1,\"962\":1,\"1124\":1,\"1263\":1,\"1439\":1,\"1616\":1,\"1793\":1,\"1970\":1,\"2147\":1,\"2298\":1,\"2365\":1,\"2517\":1,\"2584\":1,\"2736\":1,\"2803\":1},\"1\":{\"300\":2,\"895\":1,\"962\":1,\"1124\":1,\"1263\":1,\"1439\":1,\"1616\":1,\"1793\":1,\"1970\":1,\"2147\":1,\"2298\":1,\"2365\":1,\"2517\":1,\"2584\":1,\"2736\":1,\"2803\":1}}],[\"caution\",{\"1\":{\"334\":1,\"452\":1,\"475\":1,\"501\":1}}],[\"cass\",{\"1\":{\"328\":1}}],[\"cas\",{\"0\":{\"822\":1,\"824\":1,\"859\":1,\"881\":1,\"940\":1,\"982\":1,\"984\":1,\"1040\":1,\"1063\":1,\"1090\":1,\"1092\":1,\"1106\":1,\"1158\":1,\"1160\":1,\"1191\":1,\"1214\":1,\"1244\":1,\"1282\":1,\"1284\":1,\"1330\":1,\"1332\":1,\"1364\":1,\"1386\":1,\"1420\":1,\"1458\":1,\"1460\":1,\"1507\":1,\"1509\":1,\"1541\":1,\"1563\":1,\"1597\":1,\"1635\":1,\"1637\":1,\"1684\":1,\"1686\":1,\"1718\":1,\"1740\":1,\"1774\":1,\"1812\":1,\"1814\":1,\"1861\":1,\"1863\":1,\"1895\":1,\"1917\":1,\"1951\":1,\"1989\":1,\"1991\":1,\"2038\":1,\"2040\":1,\"2072\":1,\"2094\":1,\"2128\":1,\"2166\":1,\"2168\":1,\"2225\":1,\"2227\":1,\"2262\":1,\"2284\":1,\"2343\":1,\"2385\":1,\"2387\":1,\"2444\":1,\"2446\":1,\"2481\":1,\"2503\":1,\"2562\":1,\"2604\":1,\"2606\":1,\"2663\":1,\"2665\":1,\"2700\":1,\"2722\":1,\"2781\":1,\"2823\":1,\"2825\":1},\"1\":{\"323\":6,\"442\":1,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"791\":1,\"822\":1,\"824\":1,\"859\":1,\"881\":1,\"904\":1,\"905\":1,\"940\":1,\"982\":1,\"984\":1,\"996\":1,\"997\":1,\"1040\":1,\"1063\":1,\"1090\":1,\"1092\":1,\"1106\":1,\"1158\":1,\"1160\":1,\"1191\":1,\"1214\":1,\"1244\":1,\"1282\":1,\"1284\":1,\"1296\":1,\"1297\":1,\"1330\":1,\"1332\":1,\"1364\":1,\"1386\":1,\"1420\":1,\"1458\":1,\"1460\":1,\"1472\":1,\"1473\":1,\"1507\":1,\"1509\":1,\"1541\":1,\"1563\":1,\"1597\":1,\"1635\":1,\"1637\":1,\"1649\":1,\"1650\":1,\"1684\":1,\"1686\":1,\"1718\":1,\"1740\":1,\"1774\":1,\"1812\":1,\"1814\":1,\"1826\":1,\"1827\":1,\"1861\":1,\"1863\":1,\"1895\":1,\"1917\":1,\"1951\":1,\"1989\":1,\"1991\":1,\"2003\":1,\"2004\":1,\"2038\":1,\"2040\":1,\"2072\":1,\"2094\":1,\"2128\":1,\"2166\":1,\"2168\":1,\"2180\":1,\"2181\":1,\"2225\":1,\"2227\":1,\"2262\":1,\"2284\":1,\"2307\":1,\"2308\":1,\"2343\":1,\"2385\":1,\"2387\":1,\"2399\":1,\"2400\":1,\"2444\":1,\"2446\":1,\"2481\":1,\"2503\":1,\"2526\":1,\"2527\":1,\"2562\":1,\"2604\":1,\"2606\":1,\"2618\":1,\"2619\":1,\"2663\":1,\"2665\":1,\"2700\":1,\"2722\":1,\"2745\":1,\"2746\":1,\"2781\":1,\"2823\":1,\"2825\":1,\"2837\":1,\"2838\":1}}],[\"cast\",{\"1\":{\"155\":3}}],[\"cases\",{\"0\":{\"119\":1},\"1\":{\"13\":1,\"77\":1,\"78\":1,\"81\":1,\"84\":1,\"112\":1,\"113\":1,\"155\":2,\"329\":1,\"386\":2,\"430\":1,\"456\":1,\"479\":1,\"505\":1,\"535\":1,\"565\":1,\"595\":1,\"641\":1,\"687\":1,\"733\":1,\"779\":1}}],[\"case\",{\"0\":{\"13\":1},\"1\":{\"1\":1,\"5\":1,\"26\":2,\"98\":2,\"113\":1,\"155\":3,\"342\":1}}],[\"calculated\",{\"1\":{\"798\":1,\"925\":1,\"959\":1,\"1229\":1,\"1260\":1,\"1405\":1,\"1436\":1,\"1582\":1,\"1613\":1,\"1759\":1,\"1790\":1,\"1936\":1,\"1967\":1,\"2113\":1,\"2144\":1,\"2201\":1,\"2328\":1,\"2362\":1,\"2420\":1,\"2547\":1,\"2581\":1,\"2639\":1,\"2766\":1,\"2800\":1}}],[\"calculation\",{\"1\":{\"95\":1,\"165\":1}}],[\"calls\",{\"1\":{\"342\":1}}],[\"called\",{\"1\":{\"329\":1,\"798\":1,\"813\":1,\"925\":1,\"973\":1,\"1081\":1,\"1149\":1,\"1229\":1,\"1273\":1,\"1321\":1,\"1405\":1,\"1449\":1,\"1498\":1,\"1582\":1,\"1626\":1,\"1675\":1,\"1759\":1,\"1803\":1,\"1852\":1,\"1936\":1,\"1980\":1,\"2029\":1,\"2113\":1,\"2157\":1,\"2201\":1,\"2216\":1,\"2328\":1,\"2376\":1,\"2420\":1,\"2435\":1,\"2547\":1,\"2595\":1,\"2639\":1,\"2654\":1,\"2766\":1,\"2814\":1}}],[\"call\",{\"1\":{\"155\":1,\"156\":2,\"329\":1}}],[\"categorizes\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"category\",{\"1\":{\"404\":1,\"411\":1,\"615\":1,\"622\":1,\"661\":1,\"668\":1,\"707\":1,\"714\":1,\"753\":1,\"760\":1}}],[\"catch\",{\"1\":{\"155\":5,\"156\":1,\"352\":1,\"355\":1,\"377\":1,\"381\":1,\"386\":3}}],[\"catalina\",{\"1\":{\"133\":1}}],[\"ca\",{\"0\":{\"271\":1,\"272\":1,\"916\":1,\"917\":1,\"1008\":1,\"1009\":1,\"1136\":1,\"1137\":1,\"1307\":1,\"1308\":1,\"1484\":1,\"1485\":1,\"1661\":1,\"1662\":1,\"1838\":1,\"1839\":1,\"2015\":1,\"2016\":1,\"2192\":1,\"2193\":1,\"2319\":1,\"2320\":1,\"2411\":1,\"2412\":1,\"2538\":1,\"2539\":1,\"2630\":1,\"2631\":1,\"2757\":1,\"2758\":1,\"2849\":1,\"2850\":1},\"1\":{\"130\":5,\"131\":5,\"156\":1,\"271\":2,\"272\":3,\"273\":1,\"279\":1,\"285\":1,\"290\":1,\"296\":1,\"334\":4,\"433\":1,\"438\":1,\"442\":1,\"459\":1,\"464\":1,\"482\":1,\"487\":1,\"508\":1,\"513\":1,\"538\":1,\"543\":1,\"547\":1,\"568\":1,\"573\":1,\"577\":1,\"598\":1,\"603\":1,\"607\":1,\"644\":1,\"649\":1,\"653\":1,\"690\":1,\"695\":1,\"699\":1,\"736\":1,\"741\":1,\"745\":1,\"782\":1,\"787\":1,\"791\":1,\"905\":4,\"916\":2,\"917\":3,\"918\":1,\"997\":4,\"1008\":2,\"1009\":3,\"1010\":1,\"1136\":2,\"1137\":3,\"1138\":1,\"1297\":4,\"1307\":2,\"1308\":3,\"1309\":1,\"1473\":4,\"1484\":2,\"1485\":3,\"1486\":1,\"1650\":4,\"1661\":2,\"1662\":3,\"1663\":1,\"1827\":4,\"1838\":2,\"1839\":3,\"1840\":1,\"2004\":4,\"2015\":2,\"2016\":3,\"2017\":1,\"2181\":4,\"2192\":2,\"2193\":3,\"2194\":1,\"2308\":4,\"2319\":2,\"2320\":3,\"2321\":1,\"2400\":4,\"2411\":2,\"2412\":3,\"2413\":1,\"2527\":4,\"2538\":2,\"2539\":3,\"2540\":1,\"2619\":4,\"2630\":2,\"2631\":3,\"2632\":1,\"2746\":4,\"2757\":2,\"2758\":3,\"2759\":1,\"2838\":4,\"2849\":2,\"2850\":3,\"2851\":1}}],[\"capabilities\",{\"1\":{\"113\":1}}],[\"camunda\",{\"0\":{\"174\":1,\"175\":2,\"176\":1,\"837\":1,\"838\":2,\"839\":1,\"1022\":1,\"1023\":2,\"1024\":1,\"1173\":1,\"1174\":2,\"1175\":1,\"1345\":1,\"1346\":2,\"1347\":1,\"1522\":1,\"1523\":2,\"1524\":1,\"1699\":1,\"1700\":2,\"1701\":1,\"1876\":1,\"1877\":2,\"1878\":1,\"2053\":1,\"2054\":2,\"2055\":1,\"2240\":1,\"2241\":2,\"2242\":1,\"2459\":1,\"2460\":2,\"2461\":1,\"2678\":1,\"2679\":2,\"2680\":1},\"1\":{\"99\":1,\"174\":3,\"175\":4,\"176\":3,\"286\":1,\"297\":1,\"315\":1,\"323\":27,\"328\":1,\"369\":1,\"378\":1,\"390\":1,\"398\":2,\"439\":1,\"465\":1,\"488\":1,\"514\":1,\"544\":1,\"574\":1,\"604\":1,\"650\":1,\"696\":1,\"742\":1,\"788\":1,\"837\":3,\"838\":4,\"839\":3,\"1022\":3,\"1023\":4,\"1024\":3,\"1173\":3,\"1174\":4,\"1175\":3,\"1345\":3,\"1346\":4,\"1347\":3,\"1522\":3,\"1523\":4,\"1524\":3,\"1699\":3,\"1700\":4,\"1701\":3,\"1876\":3,\"1877\":4,\"1878\":3,\"2053\":3,\"2054\":4,\"2055\":3,\"2240\":3,\"2241\":4,\"2242\":3,\"2459\":3,\"2460\":4,\"2461\":3,\"2678\":3,\"2679\":4,\"2680\":3}}],[\"canonical\",{\"1\":{\"353\":2,\"356\":1,\"382\":1}}],[\"candidate\",{\"0\":{\"138\":1}}],[\"can\",{\"1\":{\"8\":1,\"12\":1,\"35\":1,\"37\":3,\"40\":2,\"70\":2,\"81\":2,\"82\":1,\"84\":2,\"86\":1,\"87\":2,\"88\":1,\"89\":1,\"90\":3,\"91\":4,\"92\":3,\"93\":2,\"94\":3,\"96\":2,\"98\":1,\"99\":1,\"100\":1,\"105\":2,\"106\":1,\"116\":2,\"122\":2,\"126\":2,\"134\":1,\"135\":1,\"143\":1,\"148\":1,\"149\":1,\"150\":2,\"152\":1,\"166\":2,\"186\":1,\"187\":1,\"188\":1,\"192\":1,\"193\":1,\"194\":1,\"195\":1,\"196\":1,\"197\":1,\"205\":1,\"229\":1,\"230\":1,\"240\":1,\"241\":1,\"242\":1,\"257\":1,\"261\":1,\"262\":1,\"273\":1,\"282\":1,\"285\":2,\"286\":2,\"293\":1,\"296\":2,\"297\":2,\"307\":1,\"310\":1,\"314\":1,\"319\":1,\"320\":2,\"330\":2,\"334\":4,\"337\":3,\"341\":1,\"342\":2,\"343\":1,\"344\":2,\"348\":2,\"350\":1,\"353\":2,\"354\":1,\"355\":1,\"356\":1,\"359\":1,\"363\":3,\"365\":2,\"367\":2,\"368\":1,\"369\":1,\"373\":1,\"377\":1,\"378\":1,\"380\":1,\"381\":1,\"382\":1,\"385\":1,\"389\":3,\"391\":1,\"393\":1,\"395\":1,\"396\":2,\"397\":2,\"398\":1,\"400\":1,\"403\":1,\"411\":2,\"413\":2,\"415\":2,\"422\":1,\"423\":2,\"425\":1,\"426\":1,\"427\":1,\"428\":1,\"430\":1,\"438\":2,\"439\":1,\"440\":3,\"442\":3,\"452\":1,\"453\":2,\"455\":1,\"456\":1,\"464\":4,\"465\":1,\"466\":3,\"475\":1,\"476\":2,\"478\":1,\"479\":1,\"487\":2,\"488\":1,\"489\":3,\"501\":1,\"502\":2,\"504\":1,\"505\":1,\"513\":2,\"514\":1,\"515\":3,\"519\":1,\"527\":1,\"528\":2,\"530\":1,\"531\":1,\"535\":1,\"543\":2,\"544\":1,\"545\":3,\"547\":3,\"557\":1,\"558\":2,\"560\":1,\"561\":1,\"565\":1,\"573\":2,\"574\":1,\"575\":3,\"577\":3,\"587\":1,\"588\":2,\"590\":1,\"591\":1,\"595\":1,\"603\":2,\"604\":1,\"605\":3,\"607\":3,\"611\":1,\"614\":1,\"622\":2,\"624\":2,\"626\":2,\"633\":1,\"634\":2,\"636\":1,\"637\":1,\"641\":1,\"649\":2,\"650\":1,\"651\":3,\"653\":3,\"657\":1,\"660\":1,\"668\":2,\"670\":2,\"672\":2,\"679\":1,\"680\":2,\"682\":1,\"683\":1,\"687\":1,\"695\":2,\"696\":1,\"697\":3,\"699\":3,\"703\":1,\"706\":1,\"714\":2,\"716\":2,\"718\":2,\"725\":1,\"726\":2,\"728\":1,\"729\":1,\"733\":1,\"741\":2,\"742\":1,\"743\":3,\"745\":3,\"749\":1,\"752\":1,\"760\":2,\"762\":2,\"764\":2,\"771\":1,\"772\":2,\"774\":1,\"775\":1,\"776\":1,\"777\":1,\"779\":1,\"787\":2,\"788\":1,\"789\":3,\"791\":3,\"798\":5,\"799\":2,\"800\":1,\"801\":1,\"802\":1,\"803\":1,\"862\":1,\"887\":1,\"888\":1,\"902\":2,\"903\":2,\"904\":1,\"918\":1,\"925\":5,\"926\":2,\"927\":1,\"928\":1,\"929\":1,\"930\":1,\"932\":3,\"959\":1,\"993\":2,\"994\":2,\"996\":1,\"1010\":1,\"1044\":1,\"1066\":1,\"1067\":1,\"1138\":1,\"1195\":1,\"1217\":1,\"1218\":1,\"1229\":4,\"1230\":2,\"1231\":1,\"1232\":1,\"1233\":1,\"1234\":1,\"1236\":3,\"1260\":1,\"1293\":2,\"1294\":2,\"1296\":1,\"1309\":1,\"1367\":1,\"1392\":1,\"1393\":1,\"1405\":4,\"1406\":2,\"1407\":1,\"1408\":1,\"1409\":1,\"1410\":1,\"1412\":3,\"1436\":1,\"1469\":2,\"1470\":2,\"1472\":1,\"1486\":1,\"1544\":1,\"1569\":1,\"1570\":1,\"1582\":4,\"1583\":2,\"1584\":1,\"1585\":1,\"1586\":1,\"1587\":1,\"1589\":3,\"1613\":1,\"1646\":2,\"1647\":2,\"1649\":1,\"1663\":1,\"1721\":1,\"1746\":1,\"1747\":1,\"1759\":4,\"1760\":2,\"1761\":1,\"1762\":1,\"1763\":1,\"1764\":1,\"1766\":3,\"1790\":1,\"1823\":2,\"1824\":2,\"1826\":1,\"1840\":1,\"1898\":1,\"1923\":1,\"1924\":1,\"1936\":4,\"1937\":2,\"1938\":1,\"1939\":1,\"1940\":1,\"1941\":1,\"1943\":3,\"1967\":1,\"2000\":2,\"2001\":2,\"2003\":1,\"2017\":1,\"2075\":1,\"2100\":1,\"2101\":1,\"2113\":4,\"2114\":2,\"2115\":1,\"2116\":1,\"2117\":1,\"2118\":1,\"2120\":3,\"2144\":1,\"2177\":2,\"2178\":2,\"2180\":1,\"2194\":1,\"2201\":5,\"2202\":2,\"2203\":1,\"2204\":1,\"2205\":1,\"2206\":1,\"2265\":1,\"2290\":1,\"2291\":1,\"2305\":2,\"2306\":2,\"2307\":1,\"2321\":1,\"2328\":5,\"2329\":2,\"2330\":1,\"2331\":1,\"2332\":1,\"2333\":1,\"2335\":3,\"2362\":1,\"2396\":2,\"2397\":2,\"2399\":1,\"2413\":1,\"2420\":5,\"2421\":2,\"2422\":1,\"2423\":1,\"2424\":1,\"2425\":1,\"2484\":1,\"2509\":1,\"2510\":1,\"2524\":2,\"2525\":2,\"2526\":1,\"2540\":1,\"2547\":5,\"2548\":2,\"2549\":1,\"2550\":1,\"2551\":1,\"2552\":1,\"2554\":3,\"2581\":1,\"2615\":2,\"2616\":2,\"2618\":1,\"2632\":1,\"2639\":5,\"2640\":2,\"2641\":1,\"2642\":1,\"2643\":1,\"2644\":1,\"2703\":1,\"2728\":1,\"2729\":1,\"2743\":2,\"2744\":2,\"2745\":1,\"2759\":1,\"2766\":5,\"2767\":2,\"2768\":1,\"2769\":1,\"2770\":1,\"2771\":1,\"2773\":3,\"2800\":1,\"2834\":2,\"2835\":2,\"2837\":1,\"2851\":1}}],[\"care\",{\"0\":{\"2\":1,\"83\":1},\"1\":{\"67\":1,\"78\":2,\"94\":2}}],[\"coding\",{\"1\":{\"345\":1,\"357\":1,\"358\":1,\"383\":1,\"384\":1,\"401\":1,\"612\":1,\"658\":1,\"704\":1,\"750\":1}}],[\"codes\",{\"1\":{\"343\":1,\"932\":2,\"1236\":2,\"1412\":2,\"1589\":2,\"1766\":2,\"1943\":2,\"2120\":2,\"2335\":2,\"2554\":2,\"2773\":2}}],[\"codestylesettings>\",{\"1\":{\"156\":1}}],[\"codesystem\",{\"1\":{\"93\":1,\"343\":2,\"344\":2,\"345\":5,\"359\":2,\"385\":4,\"389\":1,\"932\":3,\"933\":2,\"1236\":3,\"1237\":2,\"1412\":3,\"1413\":2,\"1589\":3,\"1590\":2,\"1766\":3,\"1767\":2,\"1943\":3,\"1944\":2,\"2120\":3,\"2121\":2,\"2335\":3,\"2336\":2,\"2554\":3,\"2555\":2,\"2773\":3,\"2774\":2}}],[\"codeformatterprofile\",{\"1\":{\"155\":1}}],[\"codex\",{\"1\":{\"125\":1,\"126\":1,\"276\":1,\"282\":1,\"286\":8,\"293\":1,\"296\":8,\"297\":15,\"299\":8,\"300\":8,\"303\":8,\"306\":1,\"430\":1,\"456\":1,\"479\":1,\"505\":1,\"534\":2,\"535\":1,\"564\":2,\"565\":1,\"594\":2,\"595\":1,\"640\":2,\"641\":1,\"686\":2,\"687\":1,\"732\":2,\"733\":1,\"779\":1}}],[\"code\",{\"0\":{\"70\":1,\"139\":1,\"151\":1,\"152\":1,\"155\":1,\"156\":1,\"327\":1,\"400\":1,\"403\":1,\"611\":1,\"614\":1,\"657\":1,\"660\":1,\"703\":1,\"706\":1,\"749\":1,\"752\":1,\"811\":1,\"903\":1,\"971\":1,\"994\":1,\"1079\":1,\"1147\":1,\"1271\":1,\"1294\":1,\"1319\":1,\"1447\":1,\"1470\":1,\"1496\":1,\"1624\":1,\"1647\":1,\"1673\":1,\"1801\":1,\"1824\":1,\"1850\":1,\"1978\":1,\"2001\":1,\"2027\":1,\"2155\":1,\"2178\":1,\"2214\":1,\"2306\":1,\"2374\":1,\"2397\":1,\"2433\":1,\"2525\":1,\"2593\":1,\"2616\":1,\"2652\":1,\"2744\":1,\"2812\":1,\"2835\":1},\"1\":{\"37\":1,\"70\":1,\"77\":3,\"78\":2,\"94\":1,\"98\":1,\"152\":4,\"155\":3,\"156\":2,\"257\":1,\"325\":1,\"327\":2,\"328\":1,\"338\":1,\"345\":1,\"369\":1,\"400\":2,\"401\":1,\"403\":6,\"411\":1,\"415\":2,\"611\":2,\"612\":1,\"614\":6,\"622\":1,\"626\":2,\"657\":2,\"658\":1,\"660\":6,\"668\":1,\"672\":2,\"703\":2,\"704\":1,\"706\":6,\"714\":1,\"718\":2,\"749\":2,\"750\":1,\"752\":6,\"760\":1,\"764\":2,\"811\":2,\"812\":1,\"815\":1,\"816\":1,\"902\":1,\"903\":2,\"905\":1,\"932\":2,\"971\":2,\"972\":1,\"975\":1,\"976\":1,\"993\":1,\"994\":2,\"997\":1,\"1079\":2,\"1080\":1,\"1083\":1,\"1084\":1,\"1147\":2,\"1148\":1,\"1151\":1,\"1152\":1,\"1236\":2,\"1271\":2,\"1272\":1,\"1275\":1,\"1276\":1,\"1293\":1,\"1294\":2,\"1297\":1,\"1319\":2,\"1320\":1,\"1323\":1,\"1324\":1,\"1412\":2,\"1447\":2,\"1448\":1,\"1451\":1,\"1452\":1,\"1469\":1,\"1470\":2,\"1473\":1,\"1496\":2,\"1497\":1,\"1500\":1,\"1501\":1,\"1589\":2,\"1624\":2,\"1625\":1,\"1628\":1,\"1629\":1,\"1646\":1,\"1647\":2,\"1650\":1,\"1673\":2,\"1674\":1,\"1677\":1,\"1678\":1,\"1766\":2,\"1801\":2,\"1802\":1,\"1805\":1,\"1806\":1,\"1823\":1,\"1824\":2,\"1827\":1,\"1850\":2,\"1851\":1,\"1854\":1,\"1855\":1,\"1943\":2,\"1978\":2,\"1979\":1,\"1982\":1,\"1983\":1,\"2000\":1,\"2001\":2,\"2004\":1,\"2027\":2,\"2028\":1,\"2031\":1,\"2032\":1,\"2120\":2,\"2155\":2,\"2156\":1,\"2159\":1,\"2160\":1,\"2177\":1,\"2178\":2,\"2181\":1,\"2214\":2,\"2215\":1,\"2218\":1,\"2219\":1,\"2305\":1,\"2306\":2,\"2308\":1,\"2335\":2,\"2374\":2,\"2375\":1,\"2378\":1,\"2379\":1,\"2396\":1,\"2397\":2,\"2400\":1,\"2433\":2,\"2434\":1,\"2437\":1,\"2438\":1,\"2524\":1,\"2525\":2,\"2527\":1,\"2554\":2,\"2593\":2,\"2594\":1,\"2597\":1,\"2598\":1,\"2615\":1,\"2616\":2,\"2619\":1,\"2652\":2,\"2653\":1,\"2656\":1,\"2657\":1,\"2743\":1,\"2744\":2,\"2746\":1,\"2773\":2,\"2812\":2,\"2813\":1,\"2816\":1,\"2817\":1,\"2834\":1,\"2835\":2,\"2838\":1}}],[\"cos|\",{\"1\":{\"360\":1}}],[\"cos\",{\"1\":{\"323\":65,\"350\":2,\"360\":3,\"363\":11,\"373\":4,\"389\":8,\"396\":1,\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"could\",{\"1\":{\"159\":1,\"334\":1,\"377\":1,\"409\":1,\"415\":1,\"620\":1,\"626\":1,\"666\":1,\"672\":1,\"712\":1,\"718\":1,\"758\":1,\"764\":1}}],[\"counts\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"count\",{\"0\":{\"260\":1,\"960\":1,\"1122\":1,\"1261\":1,\"1437\":1,\"1614\":1,\"1791\":1,\"1968\":1,\"2145\":1,\"2363\":1,\"2582\":1,\"2801\":1},\"1\":{\"155\":1,\"156\":2,\"260\":1,\"960\":1,\"1122\":1,\"1261\":1,\"1437\":1,\"1614\":1,\"1791\":1,\"1968\":1,\"2145\":1,\"2363\":1,\"2582\":1,\"2801\":1}}],[\"color\",{\"1\":{\"896\":1,\"963\":1,\"2299\":1,\"2366\":1,\"2518\":1,\"2585\":1,\"2737\":1,\"2804\":1}}],[\"colors\",{\"1\":{\"425\":1,\"530\":1,\"560\":1,\"590\":1,\"636\":1,\"682\":1,\"728\":1,\"774\":1}}],[\"colon\",{\"1\":{\"155\":11}}],[\"columns\",{\"1\":{\"155\":3}}],[\"column\",{\"1\":{\"155\":3,\"156\":1}}],[\"collaborate\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"collaboration\",{\"1\":{\"352\":1,\"377\":1,\"413\":1,\"415\":1,\"624\":1,\"626\":1,\"670\":1,\"672\":1,\"716\":1,\"718\":1,\"762\":1,\"764\":1}}],[\"collaborative\",{\"1\":{\"75\":1}}],[\"collected\",{\"1\":{\"113\":1,\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"651\":1,\"697\":1,\"743\":1,\"789\":1}}],[\"copy\",{\"1\":{\"141\":2,\"142\":1,\"143\":5,\"145\":1,\"146\":4,\"147\":2,\"334\":1,\"348\":1,\"363\":1,\"373\":1,\"389\":1,\"427\":1,\"442\":3,\"468\":1,\"491\":1,\"517\":1,\"547\":3,\"577\":3,\"607\":3,\"653\":3,\"699\":3,\"745\":3,\"776\":1,\"791\":3}}],[\"cohortsize\",{\"1\":{\"368\":2}}],[\"cohort\",{\"1\":{\"95\":2,\"123\":2,\"165\":2}}],[\"covered\",{\"1\":{\"112\":1,\"113\":1,\"329\":1,\"344\":1,\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"cover\",{\"1\":{\"91\":1,\"112\":1,\"113\":1}}],[\"covid\",{\"1\":{\"26\":1,\"125\":5}}],[\"cor\",{\"1\":{\"375\":1}}],[\"cors\",{\"0\":{\"257\":1},\"1\":{\"257\":2}}],[\"correlating\",{\"1\":{\"352\":1}}],[\"correlation\",{\"1\":{\"343\":1,\"352\":1,\"379\":1}}],[\"correlate\",{\"1\":{\"330\":1,\"379\":2}}],[\"corresponds\",{\"1\":{\"342\":2}}],[\"corresponding\",{\"1\":{\"93\":1,\"134\":1,\"184\":1,\"238\":1,\"285\":3,\"286\":2,\"296\":3,\"297\":2,\"352\":1,\"377\":1,\"379\":2,\"438\":3,\"439\":2,\"464\":3,\"465\":2,\"487\":3,\"488\":2,\"513\":3,\"514\":2,\"543\":3,\"544\":2,\"573\":3,\"574\":2,\"603\":3,\"604\":2,\"649\":3,\"650\":2,\"695\":3,\"696\":2,\"741\":3,\"742\":2,\"787\":3,\"788\":2,\"818\":1,\"851\":1,\"936\":1,\"978\":1,\"1032\":1,\"1086\":1,\"1102\":1,\"1154\":1,\"1183\":1,\"1240\":1,\"1278\":1,\"1326\":1,\"1356\":1,\"1416\":1,\"1454\":1,\"1503\":1,\"1533\":1,\"1593\":1,\"1631\":1,\"1680\":1,\"1710\":1,\"1770\":1,\"1808\":1,\"1857\":1,\"1887\":1,\"1947\":1,\"1985\":1,\"2034\":1,\"2064\":1,\"2124\":1,\"2162\":1,\"2221\":1,\"2254\":1,\"2339\":1,\"2381\":1,\"2440\":1,\"2473\":1,\"2558\":1,\"2600\":1,\"2659\":1,\"2692\":1,\"2777\":1,\"2819\":1}}],[\"corresponging\",{\"1\":{\"209\":1,\"866\":1,\"1048\":1,\"1199\":1,\"1371\":1,\"1548\":1,\"1725\":1,\"1902\":1,\"2079\":1,\"2269\":1,\"2488\":1,\"2707\":1}}],[\"correct\",{\"1\":{\"90\":1}}],[\"cores\",{\"1\":{\"892\":1,\"1397\":1,\"1574\":1,\"1751\":1,\"1928\":1,\"2105\":1,\"2295\":1,\"2514\":1,\"2733\":1}}],[\"corepoolsize\",{\"0\":{\"884\":1,\"1389\":1,\"1566\":1,\"1743\":1,\"1920\":1,\"2097\":1,\"2287\":1,\"2506\":1,\"2725\":1},\"1\":{\"884\":1,\"1389\":1,\"1566\":1,\"1743\":1,\"1920\":1,\"2097\":1,\"2287\":1,\"2506\":1,\"2725\":1}}],[\"core\",{\"1\":{\"12\":1,\"77\":2,\"124\":1,\"155\":317,\"884\":1,\"886\":1,\"1389\":1,\"1391\":1,\"1566\":1,\"1568\":1,\"1743\":1,\"1745\":1,\"1920\":1,\"1922\":1,\"2097\":1,\"2099\":1,\"2287\":1,\"2289\":1,\"2506\":1,\"2508\":1,\"2725\":1,\"2727\":1}}],[\"combined\",{\"1\":{\"430\":1,\"456\":1,\"479\":1,\"505\":1,\"535\":1,\"565\":1,\"595\":1,\"641\":1,\"687\":1,\"733\":1,\"779\":1}}],[\"combination\",{\"1\":{\"93\":1}}],[\"comprehensive\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"compile\",{\"1\":{\"152\":1,\"403\":1,\"614\":1,\"660\":1,\"706\":1,\"752\":1}}],[\"comply\",{\"1\":{\"354\":1,\"380\":1}}],[\"complex\",{\"1\":{\"123\":1,\"408\":1,\"411\":1,\"619\":1,\"622\":1,\"665\":1,\"668\":1,\"711\":1,\"714\":1,\"757\":1,\"760\":1}}],[\"complete\",{\"1\":{\"375\":1}}],[\"completes\",{\"1\":{\"101\":1}}],[\"completed\",{\"1\":{\"86\":2,\"93\":1}}],[\"compliant\",{\"1\":{\"105\":1,\"125\":1}}],[\"compose\",{\"0\":{\"279\":1,\"290\":1,\"323\":1,\"395\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1},\"1\":{\"131\":8,\"132\":1,\"173\":2,\"249\":2,\"279\":7,\"285\":5,\"286\":7,\"290\":7,\"296\":5,\"297\":7,\"298\":1,\"299\":3,\"300\":3,\"301\":1,\"302\":3,\"303\":3,\"304\":1,\"305\":3,\"306\":3,\"307\":1,\"308\":3,\"309\":3,\"310\":1,\"311\":3,\"312\":3,\"315\":1,\"327\":2,\"334\":2,\"337\":1,\"338\":2,\"345\":1,\"348\":3,\"363\":4,\"373\":3,\"389\":6,\"390\":1,\"395\":4,\"429\":2,\"433\":3,\"438\":5,\"439\":4,\"440\":1,\"443\":1,\"444\":3,\"445\":3,\"459\":3,\"464\":6,\"465\":4,\"466\":1,\"482\":3,\"487\":5,\"488\":4,\"489\":1,\"492\":1,\"493\":3,\"494\":3,\"508\":3,\"513\":5,\"514\":4,\"515\":1,\"518\":1,\"519\":3,\"520\":3,\"538\":3,\"543\":5,\"544\":4,\"545\":1,\"548\":1,\"549\":3,\"550\":3,\"568\":3,\"573\":5,\"574\":4,\"575\":1,\"578\":1,\"579\":3,\"580\":3,\"598\":3,\"603\":5,\"604\":4,\"605\":1,\"608\":1,\"609\":3,\"610\":3,\"644\":3,\"649\":5,\"650\":4,\"651\":1,\"654\":1,\"655\":3,\"656\":3,\"690\":3,\"695\":5,\"696\":4,\"697\":1,\"700\":1,\"701\":3,\"702\":3,\"736\":3,\"741\":5,\"742\":4,\"743\":1,\"746\":1,\"747\":3,\"748\":3,\"778\":2,\"782\":3,\"787\":5,\"788\":4,\"789\":1,\"792\":1,\"793\":3,\"794\":3,\"836\":2,\"946\":2,\"1021\":2,\"1112\":2,\"1172\":2,\"1250\":2,\"1344\":2,\"1426\":2,\"1521\":2,\"1603\":2,\"1698\":2,\"1780\":2,\"1875\":2,\"1957\":2,\"2052\":2,\"2134\":2,\"2239\":2,\"2349\":2,\"2458\":2,\"2568\":2,\"2677\":2,\"2787\":2}}],[\"composed\",{\"1\":{\"100\":1}}],[\"components\",{\"0\":{\"328\":1},\"1\":{\"77\":2,\"90\":1,\"95\":1,\"113\":1,\"124\":1,\"165\":1}}],[\"component\",{\"1\":{\"10\":1}}],[\"compatable\",{\"1\":{\"427\":1,\"531\":1,\"561\":1,\"591\":1,\"637\":1,\"683\":1,\"776\":1}}],[\"compatibility\",{\"1\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1}}],[\"compatible\",{\"1\":{\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"300\":1,\"303\":1,\"306\":1,\"309\":1,\"312\":1,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"520\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"729\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"compact\",{\"1\":{\"155\":3}}],[\"compare\",{\"1\":{\"155\":9}}],[\"compared\",{\"1\":{\"84\":1}}],[\"companies\",{\"1\":{\"94\":1}}],[\"competencies\",{\"1\":{\"77\":2}}],[\"computedatasharing\",{\"1\":{\"300\":2,\"303\":2}}],[\"computefeasibility\",{\"1\":{\"300\":2,\"303\":2}}],[\"computer\",{\"1\":{\"73\":1,\"396\":1}}],[\"computation\",{\"1\":{\"26\":1}}],[\"com\",{\"1\":{\"17\":1,\"22\":1,\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"112\":1,\"156\":1,\"158\":1,\"166\":2,\"204\":1,\"259\":1,\"279\":5,\"285\":4,\"286\":11,\"290\":5,\"296\":4,\"297\":6,\"299\":8,\"429\":1,\"433\":3,\"438\":2,\"439\":1,\"459\":3,\"482\":3,\"487\":2,\"488\":2,\"508\":3,\"513\":2,\"514\":2,\"532\":2,\"533\":2,\"534\":1,\"538\":3,\"543\":2,\"544\":2,\"562\":2,\"563\":2,\"564\":1,\"568\":3,\"573\":2,\"574\":1,\"592\":2,\"593\":3,\"594\":1,\"598\":3,\"603\":2,\"604\":1,\"638\":2,\"639\":3,\"640\":1,\"644\":3,\"649\":2,\"650\":1,\"684\":2,\"685\":3,\"686\":1,\"690\":3,\"695\":2,\"696\":1,\"730\":2,\"731\":4,\"732\":1,\"736\":3,\"741\":2,\"742\":1,\"778\":1,\"782\":3,\"787\":2,\"788\":1,\"823\":1,\"897\":1,\"958\":1,\"964\":1,\"983\":1,\"1043\":1,\"1071\":1,\"1091\":1,\"1121\":1,\"1125\":1,\"1159\":1,\"1194\":1,\"1222\":1,\"1259\":1,\"1264\":1,\"1283\":1,\"1331\":1,\"1398\":1,\"1435\":1,\"1440\":1,\"1459\":1,\"1508\":1,\"1575\":1,\"1612\":1,\"1617\":1,\"1636\":1,\"1685\":1,\"1752\":1,\"1789\":1,\"1794\":1,\"1813\":1,\"1862\":1,\"1929\":1,\"1966\":1,\"1971\":1,\"1990\":1,\"2039\":1,\"2106\":1,\"2143\":1,\"2148\":1,\"2167\":1,\"2226\":1,\"2300\":1,\"2361\":1,\"2367\":1,\"2386\":1,\"2445\":1,\"2519\":1,\"2580\":1,\"2586\":1,\"2605\":1,\"2664\":1,\"2738\":1,\"2799\":1,\"2805\":1,\"2824\":1}}],[\"come\",{\"1\":{\"13\":1}}],[\"comments\",{\"1\":{\"155\":7}}],[\"comment\",{\"1\":{\"155\":22,\"156\":1,\"410\":2,\"621\":2,\"667\":2,\"713\":2,\"759\":2}}],[\"comma\",{\"1\":{\"155\":38,\"217\":1,\"222\":1,\"223\":1,\"229\":1,\"233\":1,\"257\":1,\"261\":1,\"262\":1,\"285\":2,\"296\":2,\"874\":1,\"879\":1,\"880\":1,\"887\":1,\"891\":1,\"897\":1,\"964\":1,\"1056\":1,\"1061\":1,\"1062\":1,\"1066\":1,\"1070\":1,\"1071\":1,\"1125\":1,\"1207\":1,\"1212\":1,\"1213\":1,\"1217\":1,\"1221\":1,\"1222\":1,\"1264\":1,\"1379\":1,\"1384\":1,\"1385\":1,\"1392\":1,\"1396\":1,\"1398\":1,\"1440\":1,\"1556\":1,\"1561\":1,\"1562\":1,\"1569\":1,\"1573\":1,\"1575\":1,\"1617\":1,\"1733\":1,\"1738\":1,\"1739\":1,\"1746\":1,\"1750\":1,\"1752\":1,\"1794\":1,\"1910\":1,\"1915\":1,\"1916\":1,\"1923\":1,\"1927\":1,\"1929\":1,\"1971\":1,\"2087\":1,\"2092\":1,\"2093\":1,\"2100\":1,\"2104\":1,\"2106\":1,\"2148\":1,\"2277\":1,\"2282\":1,\"2283\":1,\"2290\":1,\"2294\":1,\"2300\":1,\"2367\":1,\"2496\":1,\"2501\":1,\"2502\":1,\"2509\":1,\"2513\":1,\"2519\":1,\"2586\":1,\"2715\":1,\"2720\":1,\"2721\":1,\"2728\":1,\"2732\":1,\"2738\":1,\"2805\":1}}],[\"commands\",{\"1\":{\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"391\":2,\"393\":2,\"395\":4,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"command\",{\"1\":{\"132\":1,\"135\":1,\"285\":1,\"286\":2,\"296\":1,\"297\":2,\"299\":2,\"337\":1,\"438\":1,\"439\":2,\"464\":1,\"465\":2,\"487\":1,\"488\":2,\"513\":1,\"514\":2,\"543\":1,\"544\":2,\"573\":1,\"574\":2,\"603\":1,\"604\":2,\"649\":1,\"650\":2,\"695\":1,\"696\":2,\"741\":1,\"742\":2,\"787\":1,\"788\":2}}],[\"commonplace\",{\"1\":{\"113\":1}}],[\"common\",{\"0\":{\"532\":1,\"562\":1,\"592\":1,\"638\":1,\"684\":1,\"730\":1,\"1075\":1},\"1\":{\"77\":1,\"108\":1,\"109\":1,\"155\":10,\"163\":1,\"164\":1,\"280\":2,\"291\":2,\"430\":1,\"434\":2,\"456\":1,\"460\":2,\"479\":1,\"483\":2,\"505\":1,\"509\":2,\"519\":1,\"520\":1,\"535\":1,\"539\":2,\"565\":1,\"569\":2,\"595\":1,\"599\":2,\"641\":1,\"645\":2,\"687\":1,\"691\":2,\"733\":1,\"737\":2,\"779\":1,\"783\":2,\"1015\":1,\"1016\":1,\"1100\":1}}],[\"commitment\",{\"0\":{\"35\":1}}],[\"committed\",{\"1\":{\"12\":1}}],[\"committee\",{\"1\":{\"0\":1,\"32\":1}}],[\"communincation\",{\"1\":{\"126\":1}}],[\"communicate\",{\"1\":{\"86\":2,\"95\":1,\"105\":1,\"165\":1}}],[\"communication\",{\"1\":{\"0\":1,\"33\":1,\"38\":1,\"81\":1,\"84\":1,\"85\":1,\"90\":1,\"91\":1,\"92\":1,\"93\":1,\"94\":2,\"98\":1,\"105\":1,\"319\":1,\"350\":2,\"379\":2,\"423\":1,\"435\":4,\"453\":1,\"461\":4,\"476\":1,\"484\":4,\"502\":1,\"510\":4,\"528\":1,\"540\":4,\"558\":1,\"570\":4,\"588\":1,\"600\":4,\"634\":1,\"646\":4,\"680\":1,\"692\":4,\"726\":1,\"738\":4,\"772\":1,\"784\":4}}],[\"community\",{\"0\":{\"66\":1,\"68\":1,\"77\":1},\"1\":{\"0\":1,\"4\":1,\"14\":1,\"22\":1,\"41\":1,\"68\":1,\"71\":1,\"77\":3,\"94\":1,\"105\":1,\"400\":1,\"401\":2,\"413\":1,\"415\":3,\"611\":1,\"612\":2,\"624\":1,\"626\":3,\"657\":1,\"658\":2,\"670\":1,\"672\":3,\"703\":1,\"704\":2,\"716\":1,\"718\":3,\"749\":1,\"750\":2,\"762\":1,\"764\":3}}],[\"concern\",{\"1\":{\"409\":1,\"620\":1,\"666\":1,\"712\":1,\"758\":1}}],[\"concepts\",{\"1\":{\"112\":1,\"113\":1,\"116\":1,\"345\":1}}],[\"concept\",{\"1\":{\"0\":2,\"26\":2,\"29\":1,\"37\":1,\"78\":1,\"91\":1,\"94\":2,\"345\":2,\"422\":1,\"452\":1,\"475\":1,\"501\":1,\"527\":1,\"557\":1,\"587\":1,\"633\":1,\"679\":1,\"725\":1,\"771\":1}}],[\"convention\",{\"1\":{\"204\":1,\"259\":1,\"958\":1,\"1043\":1,\"1121\":1,\"1194\":1,\"1259\":1,\"1435\":1,\"1612\":1,\"1789\":1,\"1966\":1,\"2143\":1,\"2361\":1,\"2580\":1,\"2799\":1}}],[\"condition\",{\"0\":{\"368\":1},\"1\":{\"367\":2,\"368\":2,\"370\":1}}],[\"conditional\",{\"1\":{\"155\":6}}],[\"conditions\",{\"1\":{\"94\":2}}],[\"conduct\",{\"1\":{\"123\":1}}],[\"conducted\",{\"1\":{\"113\":1}}],[\"conducts\",{\"1\":{\"73\":1}}],[\"constructive\",{\"1\":{\"415\":2,\"626\":2,\"672\":2,\"718\":2,\"764\":2}}],[\"constructor\",{\"1\":{\"155\":13,\"345\":1}}],[\"constants\",{\"1\":{\"155\":1}}],[\"constant\",{\"1\":{\"155\":13}}],[\"console\",{\"1\":{\"334\":2,\"338\":2,\"348\":2,\"363\":4,\"373\":3,\"389\":5,\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"651\":1,\"697\":1,\"743\":1,\"789\":1}}],[\"consolidate\",{\"1\":{\"123\":1}}],[\"consolidation\",{\"1\":{\"113\":1}}],[\"consortia\",{\"1\":{\"81\":1,\"94\":1,\"113\":1}}],[\"consortium\",{\"0\":{\"78\":1},\"1\":{\"94\":1,\"344\":1,\"357\":6,\"358\":3,\"383\":6,\"384\":3,\"385\":6}}],[\"consider\",{\"1\":{\"414\":1,\"625\":1,\"671\":1,\"717\":1,\"763\":1}}],[\"considerations\",{\"1\":{\"116\":1}}],[\"considering\",{\"1\":{\"113\":1}}],[\"consisting\",{\"1\":{\"99\":1}}],[\"consists\",{\"1\":{\"81\":1,\"91\":1,\"95\":1,\"165\":1,\"327\":1}}],[\"consultation\",{\"1\":{\"77\":1}}],[\"consumer\",{\"1\":{\"73\":1}}],[\"consentclientstubfactory\",{\"1\":{\"170\":1}}],[\"consent\",{\"0\":{\"170\":1},\"1\":{\"0\":1,\"32\":1,\"90\":1,\"95\":1,\"165\":1,\"170\":4}}],[\"connecttimeout\",{\"0\":{\"820\":1,\"980\":1,\"1088\":1,\"1156\":1,\"1280\":1,\"1328\":1,\"1456\":1,\"1505\":1,\"1633\":1,\"1682\":1,\"1810\":1,\"1859\":1,\"1987\":1,\"2036\":1,\"2164\":1,\"2223\":1,\"2383\":1,\"2442\":1,\"2602\":1,\"2661\":1,\"2821\":1},\"1\":{\"820\":1,\"980\":1,\"1088\":1,\"1156\":1,\"1280\":1,\"1328\":1,\"1456\":1,\"1505\":1,\"1633\":1,\"1682\":1,\"1810\":1,\"1859\":1,\"1987\":1,\"2036\":1,\"2164\":1,\"2223\":1,\"2383\":1,\"2442\":1,\"2602\":1,\"2661\":1,\"2821\":1}}],[\"connector\",{\"1\":{\"808\":1,\"809\":1,\"830\":1,\"831\":1,\"968\":1,\"969\":1,\"990\":1,\"991\":1,\"1076\":1,\"1077\":1,\"1098\":1,\"1099\":1,\"1144\":1,\"1145\":1,\"1166\":1,\"1167\":1,\"1268\":1,\"1269\":1,\"1290\":1,\"1291\":1,\"1316\":1,\"1317\":1,\"1338\":1,\"1339\":1,\"1444\":1,\"1445\":1,\"1466\":1,\"1467\":1,\"1493\":1,\"1494\":1,\"1515\":1,\"1516\":1,\"1621\":1,\"1622\":1,\"1643\":1,\"1644\":1,\"1670\":1,\"1671\":1,\"1692\":1,\"1693\":1,\"1798\":1,\"1799\":1,\"1820\":1,\"1821\":1,\"1847\":1,\"1848\":1,\"1869\":1,\"1870\":1,\"1975\":1,\"1976\":1,\"1997\":1,\"1998\":1,\"2024\":1,\"2025\":1,\"2046\":1,\"2047\":1,\"2152\":1,\"2153\":1,\"2174\":1,\"2175\":1,\"2211\":1,\"2212\":1,\"2233\":1,\"2234\":1,\"2371\":1,\"2372\":1,\"2393\":1,\"2394\":1,\"2430\":1,\"2431\":1,\"2452\":1,\"2453\":1,\"2590\":1,\"2591\":1,\"2612\":1,\"2613\":1,\"2649\":1,\"2650\":1,\"2671\":1,\"2672\":1,\"2809\":1,\"2810\":1,\"2831\":1,\"2832\":1}}],[\"connected\",{\"1\":{\"87\":3,\"466\":2,\"489\":2,\"515\":2,\"545\":2,\"575\":2,\"605\":2,\"651\":2,\"697\":2}}],[\"connection\",{\"0\":{\"267\":1,\"268\":1,\"911\":1,\"912\":1,\"1003\":1,\"1004\":1,\"1132\":1,\"1133\":1,\"1303\":1,\"1304\":1,\"1479\":1,\"1480\":1,\"1656\":1,\"1657\":1,\"1833\":1,\"1834\":1,\"2010\":1,\"2011\":1,\"2187\":1,\"2188\":1,\"2314\":1,\"2315\":1,\"2406\":1,\"2407\":1,\"2533\":1,\"2534\":1,\"2625\":1,\"2626\":1,\"2752\":1,\"2753\":1,\"2844\":1,\"2845\":1},\"1\":{\"95\":1,\"96\":1,\"100\":1,\"101\":1,\"103\":1,\"105\":1,\"165\":1,\"166\":1,\"189\":1,\"198\":1,\"205\":1,\"206\":1,\"230\":1,\"231\":1,\"243\":1,\"267\":3,\"268\":3,\"269\":1,\"270\":1,\"286\":1,\"297\":1,\"439\":1,\"465\":1,\"488\":1,\"514\":1,\"544\":1,\"574\":1,\"604\":1,\"650\":1,\"696\":1,\"742\":1,\"788\":1,\"853\":1,\"856\":1,\"862\":1,\"863\":1,\"888\":1,\"889\":1,\"904\":1,\"911\":3,\"912\":3,\"913\":1,\"914\":1,\"938\":1,\"996\":1,\"1003\":3,\"1004\":3,\"1005\":1,\"1006\":1,\"1034\":1,\"1037\":1,\"1044\":1,\"1045\":1,\"1067\":1,\"1068\":1,\"1104\":1,\"1132\":3,\"1133\":3,\"1134\":1,\"1135\":1,\"1185\":1,\"1188\":1,\"1195\":1,\"1196\":1,\"1218\":1,\"1219\":1,\"1242\":1,\"1296\":1,\"1303\":3,\"1304\":3,\"1305\":1,\"1306\":1,\"1358\":1,\"1361\":1,\"1367\":1,\"1368\":1,\"1393\":1,\"1394\":1,\"1418\":1,\"1472\":1,\"1479\":3,\"1480\":3,\"1481\":1,\"1482\":1,\"1535\":1,\"1538\":1,\"1544\":1,\"1545\":1,\"1570\":1,\"1571\":1,\"1595\":1,\"1649\":1,\"1656\":3,\"1657\":3,\"1658\":1,\"1659\":1,\"1712\":1,\"1715\":1,\"1721\":1,\"1722\":1,\"1747\":1,\"1748\":1,\"1772\":1,\"1826\":1,\"1833\":3,\"1834\":3,\"1835\":1,\"1836\":1,\"1889\":1,\"1892\":1,\"1898\":1,\"1899\":1,\"1924\":1,\"1925\":1,\"1949\":1,\"2003\":1,\"2010\":3,\"2011\":3,\"2012\":1,\"2013\":1,\"2066\":1,\"2069\":1,\"2075\":1,\"2076\":1,\"2101\":1,\"2102\":1,\"2126\":1,\"2180\":1,\"2187\":3,\"2188\":3,\"2189\":1,\"2190\":1,\"2256\":1,\"2259\":1,\"2265\":1,\"2266\":1,\"2291\":1,\"2292\":1,\"2307\":1,\"2314\":3,\"2315\":3,\"2316\":1,\"2317\":1,\"2341\":1,\"2399\":1,\"2406\":3,\"2407\":3,\"2408\":1,\"2409\":1,\"2475\":1,\"2478\":1,\"2484\":1,\"2485\":1,\"2510\":1,\"2511\":1,\"2526\":1,\"2533\":3,\"2534\":3,\"2535\":1,\"2536\":1,\"2560\":1,\"2618\":1,\"2625\":3,\"2626\":3,\"2627\":1,\"2628\":1,\"2694\":1,\"2697\":1,\"2703\":1,\"2704\":1,\"2729\":1,\"2730\":1,\"2745\":1,\"2752\":3,\"2753\":3,\"2754\":1,\"2755\":1,\"2779\":1,\"2837\":1,\"2844\":3,\"2845\":3,\"2846\":1,\"2847\":1}}],[\"connections\",{\"1\":{\"86\":2,\"95\":2,\"102\":1,\"105\":1,\"165\":2,\"183\":1,\"201\":1,\"237\":1,\"245\":1,\"281\":1,\"292\":1,\"435\":1,\"461\":1,\"484\":1,\"510\":1,\"540\":1,\"570\":1,\"600\":1,\"646\":1,\"692\":1,\"738\":1,\"784\":1,\"817\":1,\"822\":1,\"824\":1,\"850\":1,\"859\":1,\"935\":1,\"940\":1,\"977\":1,\"982\":1,\"984\":1,\"1031\":1,\"1040\":1,\"1085\":1,\"1090\":1,\"1092\":1,\"1101\":1,\"1106\":1,\"1153\":1,\"1158\":1,\"1160\":1,\"1182\":1,\"1191\":1,\"1239\":1,\"1244\":1,\"1277\":1,\"1282\":1,\"1284\":1,\"1325\":1,\"1330\":1,\"1332\":1,\"1355\":1,\"1364\":1,\"1415\":1,\"1420\":1,\"1453\":1,\"1458\":1,\"1460\":1,\"1502\":1,\"1507\":1,\"1509\":1,\"1532\":1,\"1541\":1,\"1592\":1,\"1597\":1,\"1630\":1,\"1635\":1,\"1637\":1,\"1679\":1,\"1684\":1,\"1686\":1,\"1709\":1,\"1718\":1,\"1769\":1,\"1774\":1,\"1807\":1,\"1812\":1,\"1814\":1,\"1856\":1,\"1861\":1,\"1863\":1,\"1886\":1,\"1895\":1,\"1946\":1,\"1951\":1,\"1984\":1,\"1989\":1,\"1991\":1,\"2033\":1,\"2038\":1,\"2040\":1,\"2063\":1,\"2072\":1,\"2123\":1,\"2128\":1,\"2161\":1,\"2166\":1,\"2168\":1,\"2220\":1,\"2225\":1,\"2227\":1,\"2253\":1,\"2262\":1,\"2338\":1,\"2343\":1,\"2380\":1,\"2385\":1,\"2387\":1,\"2439\":1,\"2444\":1,\"2446\":1,\"2472\":1,\"2481\":1,\"2557\":1,\"2562\":1,\"2599\":1,\"2604\":1,\"2606\":1,\"2658\":1,\"2663\":1,\"2665\":1,\"2691\":1,\"2700\":1,\"2776\":1,\"2781\":1,\"2818\":1,\"2823\":1,\"2825\":1}}],[\"connecting\",{\"1\":{\"77\":1}}],[\"connects\",{\"1\":{\"77\":1,\"91\":1,\"124\":1}}],[\"connect\",{\"0\":{\"189\":1,\"198\":1,\"243\":1,\"853\":1,\"856\":1,\"901\":1,\"938\":1,\"992\":1,\"1034\":1,\"1037\":1,\"1104\":1,\"1185\":1,\"1188\":1,\"1242\":1,\"1292\":1,\"1358\":1,\"1361\":1,\"1418\":1,\"1468\":1,\"1535\":1,\"1538\":1,\"1595\":1,\"1645\":1,\"1712\":1,\"1715\":1,\"1772\":1,\"1822\":1,\"1889\":1,\"1892\":1,\"1949\":1,\"1999\":1,\"2066\":1,\"2069\":1,\"2126\":1,\"2176\":1,\"2256\":1,\"2259\":1,\"2304\":1,\"2341\":1,\"2395\":1,\"2475\":1,\"2478\":1,\"2523\":1,\"2560\":1,\"2614\":1,\"2694\":1,\"2697\":1,\"2742\":1,\"2779\":1,\"2833\":1},\"1\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"135\":1,\"166\":1,\"170\":1,\"189\":1,\"198\":1,\"227\":1,\"228\":1,\"234\":1,\"243\":1,\"286\":1,\"297\":1,\"421\":2,\"439\":1,\"465\":1,\"474\":1,\"488\":1,\"500\":1,\"514\":1,\"526\":1,\"544\":1,\"556\":1,\"574\":1,\"586\":1,\"604\":1,\"632\":1,\"650\":1,\"678\":2,\"696\":1,\"724\":2,\"742\":1,\"770\":2,\"788\":1,\"796\":1,\"798\":5,\"801\":2,\"820\":1,\"853\":1,\"856\":1,\"902\":2,\"903\":1,\"904\":1,\"923\":1,\"925\":4,\"928\":2,\"938\":1,\"980\":1,\"993\":2,\"994\":1,\"996\":1,\"1034\":1,\"1037\":1,\"1088\":1,\"1104\":1,\"1156\":1,\"1185\":1,\"1188\":1,\"1227\":1,\"1229\":4,\"1232\":2,\"1242\":1,\"1280\":1,\"1293\":2,\"1294\":1,\"1296\":1,\"1328\":1,\"1358\":1,\"1361\":1,\"1403\":1,\"1405\":4,\"1408\":2,\"1418\":1,\"1456\":1,\"1469\":2,\"1470\":1,\"1472\":1,\"1505\":1,\"1535\":1,\"1538\":1,\"1580\":1,\"1582\":4,\"1585\":2,\"1595\":1,\"1633\":1,\"1646\":2,\"1647\":1,\"1649\":1,\"1682\":1,\"1712\":1,\"1715\":1,\"1757\":1,\"1759\":4,\"1762\":2,\"1772\":1,\"1810\":1,\"1823\":2,\"1824\":1,\"1826\":1,\"1859\":1,\"1889\":1,\"1892\":1,\"1934\":1,\"1936\":4,\"1939\":2,\"1949\":1,\"1987\":1,\"2000\":2,\"2001\":1,\"2003\":1,\"2036\":1,\"2066\":1,\"2069\":1,\"2111\":1,\"2113\":4,\"2116\":2,\"2126\":1,\"2164\":1,\"2177\":2,\"2178\":1,\"2180\":1,\"2199\":1,\"2201\":5,\"2204\":2,\"2223\":1,\"2256\":1,\"2259\":1,\"2305\":2,\"2306\":1,\"2307\":1,\"2326\":1,\"2328\":4,\"2331\":2,\"2341\":1,\"2383\":1,\"2396\":2,\"2397\":1,\"2399\":1,\"2418\":1,\"2420\":5,\"2423\":2,\"2442\":1,\"2475\":1,\"2478\":1,\"2524\":2,\"2525\":1,\"2526\":1,\"2545\":1,\"2547\":4,\"2550\":2,\"2560\":1,\"2602\":1,\"2615\":2,\"2616\":1,\"2618\":1,\"2637\":1,\"2639\":5,\"2642\":2,\"2661\":1,\"2694\":1,\"2697\":1,\"2743\":2,\"2744\":1,\"2745\":1,\"2764\":1,\"2766\":4,\"2769\":2,\"2779\":1,\"2821\":1,\"2834\":2,\"2835\":1,\"2837\":1}}],[\"conform\",{\"1\":{\"330\":1}}],[\"conformanceserviceimpl\",{\"1\":{\"146\":1}}],[\"conf\",{\"1\":{\"258\":1,\"299\":6,\"323\":10,\"957\":1,\"1120\":1,\"1258\":1,\"1434\":1,\"1611\":1,\"1788\":1,\"1965\":1,\"2142\":1,\"2360\":1,\"2579\":1,\"2798\":1}}],[\"confused\",{\"1\":{\"86\":1}}],[\"confident\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"confidential\",{\"1\":{\"182\":1,\"843\":1,\"844\":1,\"847\":1,\"848\":1,\"849\":1,\"953\":1,\"954\":1,\"955\":1,\"1030\":1,\"1181\":1,\"1353\":1,\"1354\":1,\"1530\":1,\"1531\":1,\"1707\":1,\"1708\":1,\"1884\":1,\"1885\":1,\"2061\":1,\"2062\":1,\"2246\":1,\"2247\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2465\":1,\"2466\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2684\":1,\"2685\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2794\":1,\"2795\":1,\"2796\":1}}],[\"confidentiality\",{\"1\":{\"5\":1,\"10\":1,\"37\":1}}],[\"config\",{\"1\":{\"143\":2,\"145\":1,\"146\":1,\"285\":3,\"286\":3,\"296\":3,\"297\":3,\"298\":1,\"299\":1,\"300\":2,\"303\":2,\"323\":3,\"429\":1,\"438\":3,\"439\":3,\"464\":3,\"465\":3,\"487\":3,\"488\":3,\"513\":3,\"514\":3,\"519\":1,\"543\":3,\"544\":3,\"573\":3,\"574\":3,\"603\":3,\"604\":3,\"649\":3,\"650\":3,\"695\":3,\"696\":3,\"741\":3,\"742\":3,\"778\":1,\"787\":3,\"788\":3,\"894\":1,\"921\":1,\"961\":1,\"1013\":1,\"1123\":1,\"1262\":1,\"1312\":1,\"1438\":1,\"1489\":1,\"1615\":1,\"1666\":1,\"1792\":1,\"1843\":1,\"1969\":1,\"2020\":1,\"2146\":1,\"2197\":1,\"2297\":1,\"2324\":1,\"2364\":1,\"2416\":1,\"2516\":1,\"2543\":1,\"2583\":1,\"2635\":1,\"2735\":1,\"2762\":1,\"2802\":1,\"2854\":1}}],[\"configure\",{\"1\":{\"169\":1,\"171\":1,\"175\":1,\"178\":1,\"183\":1,\"184\":1,\"185\":1,\"186\":1,\"192\":1,\"195\":1,\"201\":1,\"208\":1,\"209\":1,\"210\":1,\"215\":2,\"220\":1,\"221\":1,\"222\":1,\"224\":1,\"225\":1,\"237\":1,\"238\":1,\"239\":1,\"240\":1,\"245\":1,\"247\":1,\"251\":1,\"253\":1,\"271\":1,\"272\":1,\"273\":1,\"274\":1,\"275\":1,\"286\":3,\"297\":3,\"318\":1,\"337\":2,\"338\":1,\"340\":1,\"350\":1,\"360\":5,\"386\":3,\"442\":1,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"791\":1,\"817\":1,\"818\":1,\"819\":1,\"822\":1,\"824\":1,\"834\":1,\"838\":1,\"841\":1,\"850\":1,\"851\":1,\"852\":1,\"859\":1,\"865\":1,\"866\":1,\"867\":1,\"872\":2,\"877\":1,\"878\":1,\"879\":1,\"881\":1,\"882\":1,\"893\":1,\"898\":2,\"900\":1,\"915\":1,\"916\":1,\"917\":1,\"918\":1,\"919\":1,\"920\":1,\"935\":1,\"936\":1,\"937\":1,\"940\":1,\"944\":1,\"948\":1,\"950\":1,\"965\":2,\"967\":1,\"977\":1,\"978\":1,\"979\":1,\"982\":1,\"984\":1,\"1007\":1,\"1008\":1,\"1009\":1,\"1010\":1,\"1011\":1,\"1012\":1,\"1019\":1,\"1023\":1,\"1026\":1,\"1031\":1,\"1032\":1,\"1033\":1,\"1040\":1,\"1047\":1,\"1048\":1,\"1049\":1,\"1054\":2,\"1059\":1,\"1060\":1,\"1061\":1,\"1063\":1,\"1064\":1,\"1072\":2,\"1074\":1,\"1085\":1,\"1086\":1,\"1087\":1,\"1090\":1,\"1092\":1,\"1101\":1,\"1102\":1,\"1103\":1,\"1106\":1,\"1110\":1,\"1114\":1,\"1116\":1,\"1126\":2,\"1128\":1,\"1136\":1,\"1137\":1,\"1138\":1,\"1139\":1,\"1140\":1,\"1153\":1,\"1154\":1,\"1155\":1,\"1158\":1,\"1160\":1,\"1170\":1,\"1174\":1,\"1177\":1,\"1182\":1,\"1183\":1,\"1184\":1,\"1191\":1,\"1198\":1,\"1199\":1,\"1200\":1,\"1205\":2,\"1210\":1,\"1211\":1,\"1212\":1,\"1214\":1,\"1215\":1,\"1223\":2,\"1225\":1,\"1239\":1,\"1240\":1,\"1241\":1,\"1244\":1,\"1248\":1,\"1252\":1,\"1254\":1,\"1265\":2,\"1267\":1,\"1277\":1,\"1278\":1,\"1279\":1,\"1282\":1,\"1284\":1,\"1307\":1,\"1308\":1,\"1309\":1,\"1310\":1,\"1311\":1,\"1325\":1,\"1326\":1,\"1327\":1,\"1330\":1,\"1332\":1,\"1342\":1,\"1346\":1,\"1349\":1,\"1355\":1,\"1356\":1,\"1357\":1,\"1364\":1,\"1370\":1,\"1371\":1,\"1372\":1,\"1377\":2,\"1382\":1,\"1383\":1,\"1384\":1,\"1386\":1,\"1387\":1,\"1399\":2,\"1401\":1,\"1415\":1,\"1416\":1,\"1417\":1,\"1420\":1,\"1424\":1,\"1428\":1,\"1430\":1,\"1441\":2,\"1443\":1,\"1453\":1,\"1454\":1,\"1455\":1,\"1458\":1,\"1460\":1,\"1483\":1,\"1484\":1,\"1485\":1,\"1486\":1,\"1487\":1,\"1488\":1,\"1502\":1,\"1503\":1,\"1504\":1,\"1507\":1,\"1509\":1,\"1519\":1,\"1523\":1,\"1526\":1,\"1532\":1,\"1533\":1,\"1534\":1,\"1541\":1,\"1547\":1,\"1548\":1,\"1549\":1,\"1554\":2,\"1559\":1,\"1560\":1,\"1561\":1,\"1563\":1,\"1564\":1,\"1576\":2,\"1578\":1,\"1592\":1,\"1593\":1,\"1594\":1,\"1597\":1,\"1601\":1,\"1605\":1,\"1607\":1,\"1618\":2,\"1620\":1,\"1630\":1,\"1631\":1,\"1632\":1,\"1635\":1,\"1637\":1,\"1660\":1,\"1661\":1,\"1662\":1,\"1663\":1,\"1664\":1,\"1665\":1,\"1679\":1,\"1680\":1,\"1681\":1,\"1684\":1,\"1686\":1,\"1696\":1,\"1700\":1,\"1703\":1,\"1709\":1,\"1710\":1,\"1711\":1,\"1718\":1,\"1724\":1,\"1725\":1,\"1726\":1,\"1731\":2,\"1736\":1,\"1737\":1,\"1738\":1,\"1740\":1,\"1741\":1,\"1753\":2,\"1755\":1,\"1769\":1,\"1770\":1,\"1771\":1,\"1774\":1,\"1778\":1,\"1782\":1,\"1784\":1,\"1795\":2,\"1797\":1,\"1807\":1,\"1808\":1,\"1809\":1,\"1812\":1,\"1814\":1,\"1837\":1,\"1838\":1,\"1839\":1,\"1840\":1,\"1841\":1,\"1842\":1,\"1856\":1,\"1857\":1,\"1858\":1,\"1861\":1,\"1863\":1,\"1873\":1,\"1877\":1,\"1880\":1,\"1886\":1,\"1887\":1,\"1888\":1,\"1895\":1,\"1901\":1,\"1902\":1,\"1903\":1,\"1908\":2,\"1913\":1,\"1914\":1,\"1915\":1,\"1917\":1,\"1918\":1,\"1930\":2,\"1932\":1,\"1946\":1,\"1947\":1,\"1948\":1,\"1951\":1,\"1955\":1,\"1959\":1,\"1961\":1,\"1972\":2,\"1974\":1,\"1984\":1,\"1985\":1,\"1986\":1,\"1989\":1,\"1991\":1,\"2014\":1,\"2015\":1,\"2016\":1,\"2017\":1,\"2018\":1,\"2019\":1,\"2033\":1,\"2034\":1,\"2035\":1,\"2038\":1,\"2040\":1,\"2050\":1,\"2054\":1,\"2057\":1,\"2063\":1,\"2064\":1,\"2065\":1,\"2072\":1,\"2078\":1,\"2079\":1,\"2080\":1,\"2085\":2,\"2090\":1,\"2091\":1,\"2092\":1,\"2094\":1,\"2095\":1,\"2107\":2,\"2109\":1,\"2123\":1,\"2124\":1,\"2125\":1,\"2128\":1,\"2132\":1,\"2136\":1,\"2138\":1,\"2149\":2,\"2151\":1,\"2161\":1,\"2162\":1,\"2163\":1,\"2166\":1,\"2168\":1,\"2191\":1,\"2192\":1,\"2193\":1,\"2194\":1,\"2195\":1,\"2196\":1,\"2220\":1,\"2221\":1,\"2222\":1,\"2225\":1,\"2227\":1,\"2237\":1,\"2241\":1,\"2244\":1,\"2253\":1,\"2254\":1,\"2255\":1,\"2262\":1,\"2268\":1,\"2269\":1,\"2270\":1,\"2275\":2,\"2280\":1,\"2281\":1,\"2282\":1,\"2284\":1,\"2285\":1,\"2296\":1,\"2301\":2,\"2303\":1,\"2318\":1,\"2319\":1,\"2320\":1,\"2321\":1,\"2322\":1,\"2323\":1,\"2338\":1,\"2339\":1,\"2340\":1,\"2343\":1,\"2347\":1,\"2351\":1,\"2353\":1,\"2368\":2,\"2370\":1,\"2380\":1,\"2381\":1,\"2382\":1,\"2385\":1,\"2387\":1,\"2410\":1,\"2411\":1,\"2412\":1,\"2413\":1,\"2414\":1,\"2415\":1,\"2439\":1,\"2440\":1,\"2441\":1,\"2444\":1,\"2446\":1,\"2456\":1,\"2460\":1,\"2463\":1,\"2472\":1,\"2473\":1,\"2474\":1,\"2481\":1,\"2487\":1,\"2488\":1,\"2489\":1,\"2494\":2,\"2499\":1,\"2500\":1,\"2501\":1,\"2503\":1,\"2504\":1,\"2515\":1,\"2520\":2,\"2522\":1,\"2537\":1,\"2538\":1,\"2539\":1,\"2540\":1,\"2541\":1,\"2542\":1,\"2557\":1,\"2558\":1,\"2559\":1,\"2562\":1,\"2566\":1,\"2570\":1,\"2572\":1,\"2587\":2,\"2589\":1,\"2599\":1,\"2600\":1,\"2601\":1,\"2604\":1,\"2606\":1,\"2629\":1,\"2630\":1,\"2631\":1,\"2632\":1,\"2633\":1,\"2634\":1,\"2658\":1,\"2659\":1,\"2660\":1,\"2663\":1,\"2665\":1,\"2675\":1,\"2679\":1,\"2682\":1,\"2691\":1,\"2692\":1,\"2693\":1,\"2700\":1,\"2706\":1,\"2707\":1,\"2708\":1,\"2713\":2,\"2718\":1,\"2719\":1,\"2720\":1,\"2722\":1,\"2723\":1,\"2734\":1,\"2739\":2,\"2741\":1,\"2756\":1,\"2757\":1,\"2758\":1,\"2759\":1,\"2760\":1,\"2761\":1,\"2776\":1,\"2777\":1,\"2778\":1,\"2781\":1,\"2785\":1,\"2789\":1,\"2791\":1,\"2806\":2,\"2808\":1,\"2818\":1,\"2819\":1,\"2820\":1,\"2823\":1,\"2825\":1,\"2848\":1,\"2849\":1,\"2850\":1,\"2851\":1,\"2852\":1,\"2853\":1}}],[\"configured\",{\"1\":{\"86\":1,\"218\":1,\"219\":1,\"300\":3,\"303\":3,\"306\":1,\"327\":1,\"334\":1,\"341\":1,\"348\":1,\"354\":2,\"358\":1,\"363\":1,\"373\":1,\"379\":1,\"380\":2,\"384\":1,\"389\":1,\"434\":1,\"460\":1,\"483\":1,\"509\":1,\"539\":1,\"569\":1,\"599\":1,\"645\":1,\"691\":1,\"737\":1,\"783\":1,\"798\":2,\"875\":1,\"876\":1,\"896\":1,\"902\":1,\"925\":3,\"963\":1,\"993\":1,\"1057\":1,\"1058\":1,\"1208\":1,\"1209\":1,\"1229\":3,\"1262\":1,\"1293\":1,\"1380\":1,\"1381\":1,\"1405\":3,\"1469\":1,\"1557\":1,\"1558\":1,\"1582\":3,\"1646\":1,\"1734\":1,\"1735\":1,\"1759\":3,\"1823\":1,\"1911\":1,\"1912\":1,\"1936\":3,\"2000\":1,\"2088\":1,\"2089\":1,\"2113\":3,\"2177\":1,\"2201\":2,\"2278\":1,\"2279\":1,\"2299\":1,\"2305\":1,\"2328\":3,\"2366\":1,\"2396\":1,\"2420\":2,\"2497\":1,\"2498\":1,\"2518\":1,\"2524\":1,\"2547\":3,\"2585\":1,\"2615\":1,\"2639\":2,\"2716\":1,\"2717\":1,\"2737\":1,\"2743\":1,\"2766\":3,\"2804\":1,\"2834\":1}}],[\"configuring\",{\"1\":{\"96\":1,\"166\":1,\"348\":1,\"427\":1,\"776\":1}}],[\"configurations\",{\"0\":{\"155\":1,\"156\":1},\"1\":{\"33\":1,\"96\":1,\"152\":2,\"166\":1,\"403\":1,\"429\":1,\"614\":1,\"660\":1,\"706\":1,\"752\":1,\"778\":1}}],[\"configuration\",{\"0\":{\"169\":1,\"236\":1,\"264\":1,\"807\":1,\"904\":1,\"908\":1,\"934\":1,\"996\":1,\"1000\":1,\"1014\":1,\"1143\":1,\"1238\":1,\"1296\":1,\"1300\":1,\"1315\":1,\"1414\":1,\"1472\":1,\"1476\":1,\"1492\":1,\"1591\":1,\"1649\":1,\"1653\":1,\"1669\":1,\"1768\":1,\"1826\":1,\"1830\":1,\"1846\":1,\"1945\":1,\"2003\":1,\"2007\":1,\"2023\":1,\"2122\":1,\"2180\":1,\"2184\":1,\"2210\":1,\"2307\":1,\"2311\":1,\"2337\":1,\"2399\":1,\"2403\":1,\"2429\":1,\"2526\":1,\"2530\":1,\"2556\":1,\"2618\":1,\"2622\":1,\"2648\":1,\"2745\":1,\"2749\":1,\"2775\":1,\"2837\":1,\"2841\":1},\"1\":{\"33\":1,\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"134\":1,\"148\":1,\"149\":1,\"150\":1,\"158\":1,\"285\":2,\"286\":2,\"296\":2,\"297\":2,\"328\":1,\"341\":2,\"342\":2,\"343\":1,\"394\":1,\"421\":4,\"430\":1,\"438\":2,\"439\":1,\"442\":6,\"456\":1,\"464\":2,\"465\":1,\"474\":3,\"479\":1,\"487\":2,\"488\":1,\"500\":3,\"505\":1,\"513\":2,\"514\":1,\"519\":2,\"526\":3,\"535\":1,\"543\":2,\"544\":1,\"547\":6,\"556\":3,\"565\":1,\"573\":2,\"574\":1,\"577\":6,\"586\":3,\"595\":1,\"603\":2,\"604\":1,\"607\":6,\"632\":3,\"641\":1,\"649\":2,\"650\":1,\"653\":6,\"678\":4,\"687\":1,\"695\":2,\"696\":1,\"699\":6,\"724\":4,\"733\":1,\"741\":2,\"742\":1,\"745\":6,\"770\":4,\"779\":1,\"787\":2,\"788\":1,\"791\":6,\"796\":1,\"798\":5,\"902\":1,\"903\":1,\"904\":3,\"907\":1,\"923\":1,\"925\":6,\"993\":1,\"994\":1,\"995\":1,\"996\":3,\"999\":1,\"1016\":1,\"1100\":1,\"1142\":1,\"1227\":1,\"1229\":6,\"1293\":1,\"1294\":1,\"1295\":1,\"1296\":3,\"1299\":1,\"1314\":1,\"1403\":1,\"1405\":6,\"1469\":1,\"1470\":1,\"1471\":1,\"1472\":3,\"1475\":1,\"1491\":1,\"1580\":1,\"1582\":6,\"1646\":1,\"1647\":1,\"1648\":1,\"1649\":3,\"1652\":1,\"1668\":1,\"1757\":1,\"1759\":6,\"1823\":1,\"1824\":1,\"1825\":1,\"1826\":3,\"1829\":1,\"1845\":1,\"1934\":1,\"1936\":6,\"2000\":1,\"2001\":1,\"2002\":1,\"2003\":3,\"2006\":1,\"2022\":1,\"2111\":1,\"2113\":6,\"2177\":1,\"2178\":1,\"2179\":1,\"2180\":3,\"2183\":1,\"2199\":1,\"2201\":5,\"2305\":1,\"2306\":1,\"2307\":3,\"2310\":1,\"2326\":1,\"2328\":6,\"2396\":1,\"2397\":1,\"2398\":1,\"2399\":3,\"2402\":1,\"2418\":1,\"2420\":5,\"2524\":1,\"2525\":1,\"2526\":3,\"2529\":1,\"2545\":1,\"2547\":6,\"2615\":1,\"2616\":1,\"2617\":1,\"2618\":3,\"2621\":1,\"2637\":1,\"2639\":5,\"2743\":1,\"2744\":1,\"2745\":3,\"2748\":1,\"2764\":1,\"2766\":6,\"2834\":1,\"2835\":1,\"2836\":1,\"2837\":3,\"2840\":1}}],[\"conference\",{\"0\":{\"28\":1,\"29\":1},\"1\":{\"314\":1}}],[\"continuous\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"continuation\",{\"1\":{\"155\":2,\"330\":1,\"353\":1}}],[\"continued\",{\"1\":{\"329\":1,\"352\":1}}],[\"continues\",{\"1\":{\"125\":1,\"329\":1,\"343\":1}}],[\"continue\",{\"1\":{\"93\":1,\"321\":1,\"329\":1,\"334\":2,\"338\":1,\"341\":1,\"348\":1,\"363\":1,\"373\":1,\"375\":1,\"892\":1,\"1397\":1,\"1574\":1,\"1751\":1,\"1928\":1,\"2105\":1,\"2295\":1,\"2514\":1,\"2733\":1}}],[\"containing\",{\"1\":{\"148\":1,\"149\":1,\"150\":1,\"232\":1,\"258\":1,\"272\":1,\"890\":1,\"917\":1,\"957\":1,\"1009\":1,\"1069\":1,\"1120\":1,\"1137\":1,\"1220\":1,\"1258\":1,\"1308\":1,\"1395\":1,\"1434\":1,\"1485\":1,\"1572\":1,\"1611\":1,\"1662\":1,\"1749\":1,\"1788\":1,\"1839\":1,\"1926\":1,\"1965\":1,\"2016\":1,\"2103\":1,\"2142\":1,\"2193\":1,\"2293\":1,\"2320\":1,\"2360\":1,\"2412\":1,\"2512\":1,\"2539\":1,\"2579\":1,\"2631\":1,\"2731\":1,\"2758\":1,\"2798\":1,\"2850\":1}}],[\"contain\",{\"1\":{\"148\":1,\"149\":1,\"273\":1,\"300\":2,\"303\":2,\"306\":2,\"309\":2,\"312\":2,\"334\":1,\"354\":1,\"363\":1,\"380\":1,\"389\":1,\"442\":1,\"445\":2,\"494\":2,\"520\":2,\"547\":1,\"550\":2,\"577\":1,\"580\":2,\"607\":1,\"610\":2,\"653\":1,\"656\":2,\"699\":1,\"702\":2,\"745\":1,\"748\":2,\"791\":1,\"794\":2,\"918\":1,\"1010\":1,\"1138\":1,\"1309\":1,\"1486\":1,\"1663\":1,\"1840\":1,\"2017\":1,\"2194\":1,\"2321\":1,\"2413\":1,\"2540\":1,\"2632\":1,\"2759\":1,\"2851\":1}}],[\"containerd\",{\"1\":{\"279\":1,\"290\":1,\"433\":2,\"459\":2,\"482\":2,\"508\":2,\"538\":2,\"568\":2,\"598\":2,\"644\":2,\"690\":2,\"736\":2,\"782\":2}}],[\"container\",{\"1\":{\"132\":1,\"265\":1,\"285\":1,\"286\":2,\"296\":1,\"297\":2,\"300\":2,\"303\":2,\"306\":2,\"348\":1,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1,\"909\":1,\"1001\":1,\"1130\":1,\"1301\":1,\"1477\":1,\"1654\":1,\"1831\":1,\"2008\":1,\"2185\":1,\"2312\":1,\"2404\":1,\"2531\":1,\"2623\":1,\"2750\":1,\"2842\":1}}],[\"containers\",{\"1\":{\"131\":1,\"132\":1,\"298\":1,\"299\":1,\"300\":1,\"301\":1,\"302\":1,\"303\":1,\"304\":1,\"305\":1,\"306\":1,\"307\":1,\"308\":1,\"309\":1,\"310\":1,\"311\":1,\"312\":1,\"337\":2,\"404\":1,\"443\":1,\"444\":1,\"445\":1,\"492\":1,\"493\":1,\"494\":1,\"518\":1,\"519\":1,\"520\":1,\"548\":1,\"549\":1,\"550\":1,\"578\":1,\"579\":1,\"580\":1,\"608\":1,\"609\":1,\"610\":1,\"615\":1,\"654\":1,\"655\":1,\"656\":1,\"661\":1,\"700\":1,\"701\":1,\"702\":1,\"707\":1,\"746\":1,\"747\":1,\"748\":1,\"753\":1,\"792\":1,\"793\":1,\"794\":1}}],[\"contains\",{\"1\":{\"93\":1,\"134\":1,\"150\":1,\"273\":1,\"314\":1,\"327\":1,\"798\":1,\"918\":1,\"925\":1,\"1010\":1,\"1138\":1,\"1229\":1,\"1309\":1,\"1405\":1,\"1486\":1,\"1582\":1,\"1663\":1,\"1759\":1,\"1840\":1,\"1936\":1,\"2017\":1,\"2113\":1,\"2194\":1,\"2201\":1,\"2321\":1,\"2328\":1,\"2413\":1,\"2420\":1,\"2540\":1,\"2547\":1,\"2632\":1,\"2639\":1,\"2759\":1,\"2766\":1,\"2851\":1}}],[\"contact\",{\"0\":{\"66\":1},\"1\":{\"4\":1,\"40\":1,\"67\":1,\"413\":1,\"424\":1,\"425\":1,\"454\":1,\"455\":1,\"477\":1,\"478\":1,\"503\":1,\"504\":1,\"529\":1,\"530\":1,\"559\":1,\"560\":1,\"589\":1,\"590\":1,\"624\":1,\"635\":1,\"636\":1,\"670\":1,\"681\":1,\"682\":1,\"716\":1,\"727\":1,\"728\":1,\"762\":1,\"773\":1,\"774\":1}}],[\"content\",{\"1\":{\"95\":1,\"141\":2,\"142\":1,\"143\":5,\"145\":1,\"146\":4,\"165\":1,\"166\":1,\"285\":4,\"286\":4,\"296\":4,\"297\":4,\"438\":5,\"439\":4,\"464\":5,\"465\":4,\"487\":5,\"488\":4,\"513\":5,\"514\":4,\"543\":5,\"544\":4,\"573\":5,\"574\":4,\"603\":5,\"604\":4,\"649\":5,\"650\":4,\"695\":5,\"696\":4,\"741\":5,\"742\":4,\"787\":5,\"788\":4}}],[\"contents\",{\"1\":{\"90\":1}}],[\"contexts\",{\"1\":{\"116\":1}}],[\"context\",{\"0\":{\"829\":1,\"915\":1,\"989\":1,\"1007\":1,\"1097\":1,\"1165\":1,\"1289\":1,\"1337\":1,\"1465\":1,\"1483\":1,\"1514\":1,\"1642\":1,\"1660\":1,\"1691\":1,\"1819\":1,\"1837\":1,\"1868\":1,\"1996\":1,\"2014\":1,\"2045\":1,\"2173\":1,\"2191\":1,\"2232\":1,\"2318\":1,\"2392\":1,\"2410\":1,\"2451\":1,\"2537\":1,\"2611\":1,\"2629\":1,\"2670\":1,\"2756\":1,\"2830\":1,\"2848\":1},\"1\":{\"77\":1,\"123\":1,\"328\":2,\"829\":2,\"915\":2,\"989\":2,\"1007\":2,\"1097\":2,\"1165\":2,\"1289\":2,\"1337\":2,\"1465\":2,\"1483\":2,\"1514\":2,\"1642\":2,\"1660\":2,\"1691\":2,\"1819\":2,\"1837\":2,\"1868\":2,\"1996\":2,\"2014\":2,\"2045\":2,\"2173\":2,\"2191\":2,\"2232\":2,\"2318\":2,\"2392\":2,\"2410\":2,\"2451\":2,\"2537\":2,\"2611\":2,\"2629\":2,\"2670\":2,\"2756\":2,\"2830\":2,\"2848\":2}}],[\"contributor\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"contributors\",{\"1\":{\"4\":1,\"79\":1,\"409\":1,\"411\":4,\"413\":1,\"415\":1,\"620\":1,\"622\":4,\"624\":1,\"626\":1,\"666\":1,\"668\":4,\"670\":1,\"672\":1,\"712\":1,\"714\":4,\"716\":1,\"718\":1,\"758\":1,\"760\":4,\"762\":1,\"764\":1}}],[\"contributing\",{\"0\":{\"401\":1,\"612\":1,\"658\":1,\"704\":1,\"750\":1},\"1\":{\"414\":1,\"415\":4,\"625\":1,\"626\":4,\"671\":1,\"672\":4,\"717\":1,\"718\":4,\"763\":1,\"764\":4}}],[\"contributions\",{\"1\":{\"400\":1,\"414\":1,\"415\":4,\"611\":1,\"625\":1,\"626\":4,\"657\":1,\"671\":1,\"672\":4,\"703\":1,\"717\":1,\"718\":4,\"749\":1,\"763\":1,\"764\":4}}],[\"contribution\",{\"0\":{\"78\":1},\"1\":{\"38\":1,\"401\":1,\"413\":2,\"612\":1,\"624\":2,\"658\":1,\"670\":2,\"704\":1,\"716\":2,\"750\":1,\"762\":2}}],[\"contributes\",{\"1\":{\"77\":1}}],[\"contribute\",{\"0\":{\"70\":1,\"400\":1,\"413\":1,\"414\":1,\"611\":1,\"624\":1,\"625\":1,\"657\":1,\"670\":1,\"671\":1,\"703\":1,\"716\":1,\"717\":1,\"749\":1,\"762\":1,\"763\":1},\"1\":{\"410\":1,\"413\":2,\"415\":4,\"621\":1,\"624\":2,\"626\":4,\"667\":1,\"670\":2,\"672\":4,\"713\":1,\"716\":2,\"718\":4,\"759\":1,\"762\":2,\"764\":4}}],[\"controlled\",{\"1\":{\"91\":1}}],[\"control\",{\"0\":{\"10\":1,\"330\":1,\"797\":1,\"924\":1,\"1228\":1,\"1404\":1,\"1581\":1,\"1758\":1,\"1935\":1,\"2112\":1,\"2200\":1,\"2327\":1,\"2419\":1,\"2546\":1,\"2638\":1,\"2765\":1},\"1\":{\"84\":1,\"156\":1,\"257\":1,\"353\":1,\"391\":1,\"411\":1,\"421\":2,\"438\":1,\"474\":1,\"487\":1,\"500\":1,\"513\":1,\"526\":1,\"543\":1,\"556\":1,\"573\":1,\"586\":1,\"603\":1,\"622\":1,\"632\":1,\"649\":1,\"668\":1,\"678\":2,\"695\":1,\"714\":1,\"724\":2,\"741\":1,\"760\":1,\"770\":2,\"787\":1,\"796\":1,\"894\":1,\"902\":1,\"923\":1,\"961\":1,\"993\":1,\"1227\":1,\"1262\":1,\"1293\":1,\"1403\":1,\"1438\":1,\"1469\":1,\"1580\":1,\"1615\":1,\"1646\":1,\"1757\":1,\"1792\":1,\"1823\":1,\"1934\":1,\"1969\":1,\"2000\":1,\"2111\":1,\"2146\":1,\"2177\":1,\"2199\":1,\"2297\":1,\"2305\":1,\"2326\":1,\"2364\":1,\"2396\":1,\"2418\":1,\"2516\":1,\"2524\":1,\"2545\":1,\"2583\":1,\"2615\":1,\"2637\":1,\"2735\":1,\"2743\":1,\"2764\":1,\"2802\":1,\"2834\":1}}],[\"coordinated\",{\"1\":{\"36\":1}}],[\"coordinate\",{\"1\":{\"0\":1,\"32\":1,\"95\":1,\"125\":1,\"165\":1}}],[\"editor\",{\"0\":{\"398\":1},\"1\":{\"315\":1,\"390\":1,\"398\":1,\"403\":1,\"614\":1,\"660\":1,\"706\":1,\"752\":1}}],[\"edit\",{\"1\":{\"159\":1}}],[\"educational\",{\"1\":{\"73\":1}}],[\"education\",{\"1\":{\"0\":1,\"6\":1,\"94\":2,\"112\":1,\"122\":1}}],[\"elements\",{\"1\":{\"236\":1,\"352\":1,\"404\":2,\"615\":2,\"661\":2,\"707\":2,\"753\":2}}],[\"element\",{\"1\":{\"159\":1}}],[\"else\",{\"1\":{\"155\":3,\"156\":1}}],[\"ellipsis\",{\"1\":{\"155\":2}}],[\"ecosystem\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"economics\",{\"1\":{\"73\":2}}],[\"echo\",{\"1\":{\"279\":1,\"290\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"eclipse\",{\"0\":{\"155\":1},\"1\":{\"152\":1,\"155\":317,\"315\":1,\"338\":1,\"390\":1,\"397\":3,\"403\":1,\"614\":1,\"660\":1,\"706\":1,\"752\":1}}],[\"evaluate\",{\"1\":{\"116\":1}}],[\"even\",{\"1\":{\"98\":1,\"113\":1,\"412\":1,\"452\":1,\"475\":1,\"501\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1}}],[\"eventconfig\",{\"1\":{\"143\":1}}],[\"event\",{\"0\":{\"321\":1,\"374\":1,\"375\":1},\"1\":{\"93\":1,\"213\":2,\"214\":2,\"300\":4,\"323\":6,\"330\":1,\"343\":2,\"352\":2,\"355\":2,\"360\":6,\"377\":2,\"381\":2,\"386\":10,\"870\":2,\"871\":2,\"1052\":2,\"1053\":2,\"1203\":2,\"1204\":2,\"1375\":2,\"1376\":2,\"1552\":2,\"1553\":2,\"1729\":2,\"1730\":2,\"1906\":2,\"1907\":2,\"2083\":2,\"2084\":2,\"2273\":2,\"2274\":2,\"2492\":2,\"2493\":2,\"2711\":2,\"2712\":2}}],[\"events\",{\"0\":{\"319\":1,\"321\":1,\"349\":1,\"350\":1,\"374\":1,\"375\":1,\"378\":1},\"1\":{\"93\":2,\"182\":1,\"328\":1,\"378\":1,\"847\":1,\"848\":1,\"1030\":1,\"1181\":1,\"1353\":1,\"1354\":1,\"1530\":1,\"1531\":1,\"1707\":1,\"1708\":1,\"1884\":1,\"1885\":1,\"2061\":1,\"2062\":1,\"2250\":1,\"2251\":1,\"2469\":1,\"2470\":1,\"2688\":1,\"2689\":1}}],[\"everybody\",{\"1\":{\"438\":1,\"464\":1,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1}}],[\"everyone\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"everything\",{\"1\":{\"391\":1}}],[\"every\",{\"1\":{\"0\":1,\"32\":1,\"84\":1,\"93\":1,\"113\":1,\"180\":1,\"181\":1,\"182\":1,\"218\":1,\"328\":1,\"352\":2,\"379\":1,\"401\":1,\"413\":2,\"612\":1,\"624\":2,\"658\":1,\"670\":2,\"704\":1,\"716\":2,\"750\":1,\"762\":2,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"875\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1057\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1208\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1380\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1557\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1734\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1911\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2088\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2278\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2497\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2716\":1}}],[\"europe\",{\"1\":{\"323\":8}}],[\"european\",{\"1\":{\"1\":1}}],[\"eu\",{\"1\":{\"105\":1}}],[\"early\",{\"1\":{\"96\":1,\"166\":1}}],[\"easier\",{\"1\":{\"91\":1}}],[\"each\",{\"1\":{\"8\":1,\"81\":2,\"84\":1,\"87\":1,\"134\":1,\"314\":2,\"329\":1,\"342\":1,\"343\":2,\"344\":1,\"367\":2,\"370\":1,\"426\":1,\"427\":1,\"442\":1,\"468\":1,\"491\":1,\"517\":1,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"775\":1,\"776\":1,\"791\":1}}],[\"e\",{\"1\":{\"37\":1,\"40\":1,\"67\":1,\"69\":1,\"74\":1,\"81\":1,\"84\":1,\"95\":2,\"99\":1,\"105\":1,\"106\":1,\"108\":3,\"109\":3,\"123\":1,\"135\":2,\"159\":1,\"161\":1,\"163\":3,\"164\":3,\"165\":2,\"280\":3,\"285\":6,\"286\":2,\"291\":3,\"296\":7,\"297\":2,\"343\":1,\"368\":1,\"397\":1,\"398\":1,\"424\":3,\"430\":1,\"434\":2,\"435\":1,\"438\":4,\"439\":1,\"442\":2,\"453\":1,\"454\":3,\"456\":2,\"460\":2,\"461\":1,\"464\":5,\"465\":2,\"468\":2,\"476\":1,\"477\":3,\"479\":2,\"483\":2,\"484\":1,\"487\":4,\"488\":2,\"491\":2,\"502\":1,\"503\":3,\"505\":2,\"509\":2,\"510\":1,\"513\":4,\"514\":2,\"517\":2,\"529\":3,\"535\":1,\"539\":2,\"540\":1,\"543\":4,\"544\":2,\"547\":2,\"559\":3,\"565\":1,\"569\":2,\"570\":1,\"573\":4,\"574\":1,\"577\":2,\"589\":3,\"595\":1,\"599\":2,\"600\":1,\"603\":4,\"604\":1,\"607\":2,\"635\":3,\"641\":1,\"645\":2,\"646\":1,\"649\":4,\"650\":1,\"653\":2,\"681\":3,\"687\":1,\"691\":2,\"692\":1,\"695\":4,\"696\":1,\"699\":2,\"727\":3,\"733\":1,\"737\":2,\"738\":1,\"741\":4,\"742\":1,\"745\":2,\"773\":3,\"779\":1,\"783\":2,\"784\":1,\"787\":4,\"788\":1,\"791\":2,\"801\":2,\"806\":2,\"928\":2,\"933\":2,\"1232\":2,\"1237\":2,\"1408\":2,\"1413\":2,\"1585\":2,\"1590\":2,\"1762\":2,\"1767\":2,\"1939\":2,\"1944\":2,\"2116\":2,\"2121\":2,\"2204\":2,\"2209\":2,\"2331\":2,\"2336\":2,\"2423\":2,\"2428\":2,\"2550\":2,\"2555\":2,\"2642\":2,\"2647\":2,\"2769\":2,\"2774\":2}}],[\"etc\",{\"1\":{\"279\":1,\"290\":1,\"323\":2,\"396\":2,\"412\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"623\":1,\"644\":1,\"669\":1,\"690\":1,\"715\":1,\"736\":1,\"761\":1,\"782\":1}}],[\"et\",{\"1\":{\"26\":1}}],[\"either\",{\"1\":{\"109\":1,\"134\":2,\"164\":1,\"273\":1,\"334\":1,\"377\":2,\"389\":2,\"423\":1,\"453\":1,\"476\":1,\"502\":1,\"528\":1,\"558\":1,\"588\":1,\"634\":1,\"680\":1,\"726\":1,\"772\":1,\"918\":1,\"1010\":1,\"1138\":1,\"1309\":1,\"1486\":1,\"1663\":1,\"1840\":1,\"2017\":1,\"2194\":1,\"2321\":1,\"2413\":1,\"2540\":1,\"2632\":1,\"2759\":1,\"2851\":1}}],[\"eils\",{\"1\":{\"26\":1}}],[\"eine\",{\"1\":{\"17\":1}}],[\"einem\",{\"1\":{\"17\":1}}],[\"eines\",{\"1\":{\"17\":1}}],[\"einige\",{\"1\":{\"15\":1}}],[\"einführung\",{\"1\":{\"14\":2}}],[\"ein\",{\"1\":{\"14\":1,\"15\":1,\"17\":1}}],[\"empty\",{\"1\":{\"155\":11,\"798\":1,\"915\":1,\"925\":1,\"1007\":1,\"1229\":1,\"1262\":1,\"1405\":1,\"1483\":1,\"1582\":1,\"1660\":1,\"1759\":1,\"1837\":1,\"1936\":1,\"2014\":1,\"2113\":1,\"2191\":1,\"2201\":1,\"2318\":1,\"2328\":1,\"2410\":1,\"2420\":1,\"2537\":1,\"2547\":1,\"2629\":1,\"2639\":1,\"2756\":1,\"2766\":1,\"2848\":1}}],[\"empfehlen\",{\"1\":{\"16\":1}}],[\"emailclaim\",{\"1\":{\"801\":1,\"928\":1,\"1232\":1,\"1408\":1,\"1585\":1,\"1762\":1,\"1939\":1,\"2116\":1,\"2204\":1,\"2331\":1,\"2423\":1,\"2550\":1,\"2642\":1,\"2769\":1}}],[\"email\",{\"0\":{\"801\":1,\"928\":1,\"1232\":1,\"1408\":1,\"1585\":1,\"1762\":1,\"1939\":1,\"2116\":1,\"2204\":1,\"2331\":1,\"2423\":1,\"2550\":1,\"2642\":1,\"2769\":1},\"1\":{\"37\":1,\"799\":1,\"801\":1,\"806\":2,\"926\":1,\"928\":1,\"933\":1,\"1230\":1,\"1232\":1,\"1237\":1,\"1406\":1,\"1408\":1,\"1413\":1,\"1583\":1,\"1585\":1,\"1590\":1,\"1760\":1,\"1762\":1,\"1767\":1,\"1937\":1,\"1939\":1,\"1944\":1,\"2114\":1,\"2116\":1,\"2121\":1,\"2202\":1,\"2204\":1,\"2209\":2,\"2329\":1,\"2331\":1,\"2336\":1,\"2421\":1,\"2423\":1,\"2428\":2,\"2548\":1,\"2550\":1,\"2555\":1,\"2640\":1,\"2642\":1,\"2647\":2,\"2767\":1,\"2769\":1,\"2774\":1}}],[\"embark\",{\"1\":{\"12\":1}}],[\"error\",{\"1\":{\"213\":2,\"214\":2,\"218\":1,\"377\":1,\"409\":1,\"425\":1,\"440\":2,\"441\":1,\"455\":1,\"466\":2,\"467\":1,\"478\":1,\"489\":2,\"490\":1,\"504\":1,\"515\":2,\"516\":1,\"530\":1,\"545\":2,\"546\":1,\"560\":1,\"575\":2,\"576\":1,\"590\":1,\"605\":2,\"606\":1,\"620\":1,\"636\":1,\"651\":2,\"652\":1,\"666\":1,\"682\":1,\"697\":2,\"698\":1,\"712\":1,\"728\":1,\"743\":2,\"744\":1,\"758\":1,\"774\":1,\"789\":2,\"790\":1,\"870\":2,\"871\":2,\"875\":1,\"1052\":2,\"1053\":2,\"1057\":1,\"1203\":2,\"1204\":2,\"1208\":1,\"1375\":2,\"1376\":2,\"1380\":1,\"1552\":2,\"1553\":2,\"1557\":1,\"1729\":2,\"1730\":2,\"1734\":1,\"1906\":2,\"1907\":2,\"1911\":1,\"2083\":2,\"2084\":2,\"2088\":1,\"2273\":2,\"2274\":2,\"2278\":1,\"2492\":2,\"2493\":2,\"2497\":1,\"2711\":2,\"2712\":2,\"2716\":1}}],[\"errors\",{\"1\":{\"102\":1,\"103\":1,\"300\":2,\"303\":2,\"306\":2,\"309\":2,\"312\":2,\"445\":2,\"494\":2,\"520\":2,\"550\":2,\"580\":2,\"610\":2,\"656\":2,\"702\":2,\"748\":2,\"794\":2}}],[\"erste\",{\"1\":{\"16\":1}}],[\"erfüllt\",{\"1\":{\"15\":1}}],[\"especially\",{\"1\":{\"113\":1}}],[\"estimates\",{\"1\":{\"123\":1}}],[\"estimations\",{\"1\":{\"95\":1,\"165\":1}}],[\"established\",{\"1\":{\"86\":1,\"94\":1,\"113\":1,\"123\":1,\"125\":2,\"189\":1,\"198\":1,\"205\":1,\"230\":1,\"243\":1,\"267\":1,\"268\":1,\"853\":1,\"856\":1,\"862\":1,\"888\":1,\"911\":1,\"912\":1,\"938\":1,\"1003\":1,\"1004\":1,\"1034\":1,\"1037\":1,\"1044\":1,\"1067\":1,\"1104\":1,\"1132\":1,\"1133\":1,\"1185\":1,\"1188\":1,\"1195\":1,\"1218\":1,\"1242\":1,\"1303\":1,\"1304\":1,\"1358\":1,\"1361\":1,\"1367\":1,\"1393\":1,\"1418\":1,\"1479\":1,\"1480\":1,\"1535\":1,\"1538\":1,\"1544\":1,\"1570\":1,\"1595\":1,\"1656\":1,\"1657\":1,\"1712\":1,\"1715\":1,\"1721\":1,\"1747\":1,\"1772\":1,\"1833\":1,\"1834\":1,\"1889\":1,\"1892\":1,\"1898\":1,\"1924\":1,\"1949\":1,\"2010\":1,\"2011\":1,\"2066\":1,\"2069\":1,\"2075\":1,\"2101\":1,\"2126\":1,\"2187\":1,\"2188\":1,\"2256\":1,\"2259\":1,\"2265\":1,\"2291\":1,\"2314\":1,\"2315\":1,\"2341\":1,\"2406\":1,\"2407\":1,\"2475\":1,\"2478\":1,\"2484\":1,\"2510\":1,\"2533\":1,\"2534\":1,\"2560\":1,\"2625\":1,\"2626\":1,\"2694\":1,\"2697\":1,\"2703\":1,\"2729\":1,\"2752\":1,\"2753\":1,\"2779\":1,\"2844\":1,\"2845\":1}}],[\"establish\",{\"1\":{\"78\":1,\"206\":1,\"231\":1,\"863\":1,\"889\":1,\"1045\":1,\"1068\":1,\"1196\":1,\"1219\":1,\"1368\":1,\"1394\":1,\"1545\":1,\"1571\":1,\"1722\":1,\"1748\":1,\"1899\":1,\"1925\":1,\"2076\":1,\"2102\":1,\"2266\":1,\"2292\":1,\"2485\":1,\"2511\":1,\"2704\":1,\"2730\":1}}],[\"es\",{\"1\":{\"14\":1,\"16\":1,\"17\":1}}],[\"effect\",{\"1\":{\"213\":1,\"214\":1,\"348\":1,\"870\":1,\"871\":1,\"1052\":1,\"1053\":1,\"1203\":1,\"1204\":1,\"1375\":1,\"1376\":1,\"1552\":1,\"1553\":1,\"1729\":1,\"1730\":1,\"1906\":1,\"1907\":1,\"2083\":1,\"2084\":1,\"2273\":1,\"2274\":1,\"2492\":1,\"2493\":1,\"2711\":1,\"2712\":1}}],[\"effective\",{\"1\":{\"113\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"effectively\",{\"1\":{\"36\":1}}],[\"effectiveness\",{\"1\":{\"5\":1}}],[\"efficiency\",{\"1\":{\"78\":1,\"391\":1}}],[\"efficient\",{\"1\":{\"5\":1,\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"effort\",{\"1\":{\"38\":1}}],[\"efforts\",{\"1\":{\"35\":1}}],[\"efmi\",{\"1\":{\"1\":4}}],[\"exactly\",{\"1\":{\"897\":1,\"964\":1,\"1071\":1,\"1125\":1,\"1222\":1,\"1264\":1,\"1398\":1,\"1440\":1,\"1575\":1,\"1617\":1,\"1752\":1,\"1794\":1,\"1929\":1,\"1971\":1,\"2106\":1,\"2148\":1,\"2300\":1,\"2367\":1,\"2519\":1,\"2586\":1,\"2738\":1,\"2805\":1}}],[\"examine\",{\"1\":{\"320\":1,\"343\":1,\"365\":1}}],[\"examplestarter\",{\"1\":{\"134\":1}}],[\"examples\",{\"0\":{\"806\":1,\"933\":1,\"1237\":1,\"1413\":1,\"1590\":1,\"1767\":1,\"1944\":1,\"2121\":1,\"2209\":1,\"2336\":1,\"2428\":1,\"2555\":1,\"2647\":1,\"2774\":1},\"1\":{\"112\":1,\"113\":1,\"378\":1,\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1}}],[\"example\",{\"0\":{\"99\":1,\"359\":1,\"385\":1,\"905\":1,\"997\":1,\"1297\":1,\"1473\":1,\"1650\":1,\"1827\":1,\"2004\":1,\"2181\":1,\"2308\":1,\"2400\":1,\"2527\":1,\"2619\":1,\"2746\":1,\"2838\":1},\"1\":{\"91\":2,\"92\":1,\"93\":1,\"94\":1,\"95\":2,\"96\":2,\"98\":1,\"99\":2,\"148\":1,\"149\":1,\"150\":2,\"165\":2,\"166\":4,\"171\":1,\"173\":1,\"175\":1,\"178\":1,\"183\":1,\"184\":1,\"185\":1,\"187\":1,\"193\":1,\"196\":1,\"201\":1,\"203\":1,\"204\":1,\"208\":1,\"209\":1,\"210\":1,\"211\":1,\"212\":1,\"216\":1,\"217\":1,\"220\":1,\"221\":1,\"222\":1,\"223\":1,\"224\":1,\"237\":1,\"238\":1,\"239\":1,\"241\":1,\"245\":1,\"247\":1,\"249\":1,\"251\":1,\"253\":1,\"256\":1,\"259\":1,\"265\":1,\"266\":1,\"271\":1,\"272\":1,\"273\":1,\"274\":1,\"275\":1,\"285\":2,\"286\":1,\"296\":2,\"297\":1,\"299\":1,\"300\":2,\"302\":1,\"303\":2,\"305\":1,\"306\":2,\"308\":1,\"309\":2,\"311\":1,\"312\":2,\"337\":1,\"352\":2,\"353\":3,\"359\":1,\"368\":1,\"379\":1,\"385\":1,\"429\":3,\"438\":2,\"439\":1,\"444\":1,\"445\":2,\"464\":2,\"465\":1,\"487\":2,\"488\":1,\"493\":1,\"494\":2,\"513\":2,\"514\":1,\"519\":1,\"520\":2,\"543\":2,\"544\":1,\"549\":1,\"550\":2,\"573\":2,\"574\":1,\"579\":1,\"580\":2,\"603\":2,\"604\":1,\"609\":1,\"610\":2,\"649\":2,\"650\":1,\"655\":1,\"656\":2,\"695\":2,\"696\":1,\"701\":1,\"702\":2,\"741\":2,\"742\":1,\"747\":1,\"748\":2,\"778\":3,\"787\":2,\"788\":1,\"793\":1,\"794\":2,\"798\":2,\"806\":3,\"817\":1,\"818\":1,\"819\":1,\"822\":1,\"823\":2,\"824\":1,\"834\":1,\"836\":1,\"838\":1,\"841\":1,\"850\":1,\"851\":1,\"852\":1,\"859\":1,\"861\":1,\"865\":1,\"866\":1,\"867\":1,\"868\":1,\"869\":1,\"873\":1,\"874\":1,\"877\":1,\"878\":1,\"879\":1,\"880\":1,\"881\":1,\"887\":1,\"891\":1,\"893\":1,\"897\":1,\"899\":1,\"904\":1,\"909\":1,\"910\":1,\"916\":1,\"917\":1,\"918\":1,\"919\":1,\"920\":1,\"925\":2,\"933\":3,\"935\":1,\"936\":1,\"937\":1,\"940\":1,\"944\":1,\"946\":1,\"948\":1,\"950\":1,\"956\":1,\"958\":1,\"964\":1,\"966\":1,\"977\":1,\"978\":1,\"979\":1,\"982\":1,\"983\":2,\"984\":1,\"996\":1,\"1001\":1,\"1002\":1,\"1008\":1,\"1009\":1,\"1010\":1,\"1011\":1,\"1012\":1,\"1019\":1,\"1021\":1,\"1023\":1,\"1026\":1,\"1031\":1,\"1032\":1,\"1033\":1,\"1040\":1,\"1042\":1,\"1043\":1,\"1047\":1,\"1048\":1,\"1049\":1,\"1050\":1,\"1051\":1,\"1055\":1,\"1056\":1,\"1059\":1,\"1060\":1,\"1061\":1,\"1062\":1,\"1063\":1,\"1071\":1,\"1073\":1,\"1085\":1,\"1086\":1,\"1087\":1,\"1090\":1,\"1091\":2,\"1092\":1,\"1101\":1,\"1102\":1,\"1103\":1,\"1106\":1,\"1110\":1,\"1112\":1,\"1114\":1,\"1116\":1,\"1119\":1,\"1121\":1,\"1125\":1,\"1127\":1,\"1130\":1,\"1131\":1,\"1136\":1,\"1137\":1,\"1138\":1,\"1139\":1,\"1140\":1,\"1153\":1,\"1154\":1,\"1155\":1,\"1158\":1,\"1159\":2,\"1160\":1,\"1170\":1,\"1172\":1,\"1174\":1,\"1177\":1,\"1182\":1,\"1183\":1,\"1184\":1,\"1191\":1,\"1193\":1,\"1194\":1,\"1198\":1,\"1199\":1,\"1200\":1,\"1201\":1,\"1202\":1,\"1206\":1,\"1207\":1,\"1210\":1,\"1211\":1,\"1212\":1,\"1213\":1,\"1214\":1,\"1222\":1,\"1224\":1,\"1229\":2,\"1237\":3,\"1239\":1,\"1240\":1,\"1241\":1,\"1244\":1,\"1248\":1,\"1250\":1,\"1252\":1,\"1254\":1,\"1257\":1,\"1259\":1,\"1264\":1,\"1266\":1,\"1277\":1,\"1278\":1,\"1279\":1,\"1282\":1,\"1283\":2,\"1284\":1,\"1296\":1,\"1301\":1,\"1302\":1,\"1307\":1,\"1308\":1,\"1309\":1,\"1310\":1,\"1311\":1,\"1325\":1,\"1326\":1,\"1327\":1,\"1330\":1,\"1331\":2,\"1332\":1,\"1342\":1,\"1344\":1,\"1346\":1,\"1349\":1,\"1355\":1,\"1356\":1,\"1357\":1,\"1364\":1,\"1366\":1,\"1370\":1,\"1371\":1,\"1372\":1,\"1373\":1,\"1374\":1,\"1378\":1,\"1379\":1,\"1382\":1,\"1383\":1,\"1384\":1,\"1385\":1,\"1386\":1,\"1392\":1,\"1396\":1,\"1398\":1,\"1400\":1,\"1405\":2,\"1413\":3,\"1415\":1,\"1416\":1,\"1417\":1,\"1420\":1,\"1424\":1,\"1426\":1,\"1428\":1,\"1430\":1,\"1433\":1,\"1435\":1,\"1440\":1,\"1442\":1,\"1453\":1,\"1454\":1,\"1455\":1,\"1458\":1,\"1459\":2,\"1460\":1,\"1472\":1,\"1477\":1,\"1478\":1,\"1484\":1,\"1485\":1,\"1486\":1,\"1487\":1,\"1488\":1,\"1502\":1,\"1503\":1,\"1504\":1,\"1507\":1,\"1508\":2,\"1509\":1,\"1519\":1,\"1521\":1,\"1523\":1,\"1526\":1,\"1532\":1,\"1533\":1,\"1534\":1,\"1541\":1,\"1543\":1,\"1547\":1,\"1548\":1,\"1549\":1,\"1550\":1,\"1551\":1,\"1555\":1,\"1556\":1,\"1559\":1,\"1560\":1,\"1561\":1,\"1562\":1,\"1563\":1,\"1569\":1,\"1573\":1,\"1575\":1,\"1577\":1,\"1582\":2,\"1590\":3,\"1592\":1,\"1593\":1,\"1594\":1,\"1597\":1,\"1601\":1,\"1603\":1,\"1605\":1,\"1607\":1,\"1610\":1,\"1612\":1,\"1617\":1,\"1619\":1,\"1630\":1,\"1631\":1,\"1632\":1,\"1635\":1,\"1636\":2,\"1637\":1,\"1649\":1,\"1654\":1,\"1655\":1,\"1661\":1,\"1662\":1,\"1663\":1,\"1664\":1,\"1665\":1,\"1679\":1,\"1680\":1,\"1681\":1,\"1684\":1,\"1685\":2,\"1686\":1,\"1696\":1,\"1698\":1,\"1700\":1,\"1703\":1,\"1709\":1,\"1710\":1,\"1711\":1,\"1718\":1,\"1720\":1,\"1724\":1,\"1725\":1,\"1726\":1,\"1727\":1,\"1728\":1,\"1732\":1,\"1733\":1,\"1736\":1,\"1737\":1,\"1738\":1,\"1739\":1,\"1740\":1,\"1746\":1,\"1750\":1,\"1752\":1,\"1754\":1,\"1759\":2,\"1767\":3,\"1769\":1,\"1770\":1,\"1771\":1,\"1774\":1,\"1778\":1,\"1780\":1,\"1782\":1,\"1784\":1,\"1787\":1,\"1789\":1,\"1794\":1,\"1796\":1,\"1807\":1,\"1808\":1,\"1809\":1,\"1812\":1,\"1813\":2,\"1814\":1,\"1826\":1,\"1831\":1,\"1832\":1,\"1838\":1,\"1839\":1,\"1840\":1,\"1841\":1,\"1842\":1,\"1856\":1,\"1857\":1,\"1858\":1,\"1861\":1,\"1862\":2,\"1863\":1,\"1873\":1,\"1875\":1,\"1877\":1,\"1880\":1,\"1886\":1,\"1887\":1,\"1888\":1,\"1895\":1,\"1897\":1,\"1901\":1,\"1902\":1,\"1903\":1,\"1904\":1,\"1905\":1,\"1909\":1,\"1910\":1,\"1913\":1,\"1914\":1,\"1915\":1,\"1916\":1,\"1917\":1,\"1923\":1,\"1927\":1,\"1929\":1,\"1931\":1,\"1936\":2,\"1944\":3,\"1946\":1,\"1947\":1,\"1948\":1,\"1951\":1,\"1955\":1,\"1957\":1,\"1959\":1,\"1961\":1,\"1964\":1,\"1966\":1,\"1971\":1,\"1973\":1,\"1984\":1,\"1985\":1,\"1986\":1,\"1989\":1,\"1990\":2,\"1991\":1,\"2003\":1,\"2008\":1,\"2009\":1,\"2015\":1,\"2016\":1,\"2017\":1,\"2018\":1,\"2019\":1,\"2033\":1,\"2034\":1,\"2035\":1,\"2038\":1,\"2039\":2,\"2040\":1,\"2050\":1,\"2052\":1,\"2054\":1,\"2057\":1,\"2063\":1,\"2064\":1,\"2065\":1,\"2072\":1,\"2074\":1,\"2078\":1,\"2079\":1,\"2080\":1,\"2081\":1,\"2082\":1,\"2086\":1,\"2087\":1,\"2090\":1,\"2091\":1,\"2092\":1,\"2093\":1,\"2094\":1,\"2100\":1,\"2104\":1,\"2106\":1,\"2108\":1,\"2113\":2,\"2121\":3,\"2123\":1,\"2124\":1,\"2125\":1,\"2128\":1,\"2132\":1,\"2134\":1,\"2136\":1,\"2138\":1,\"2141\":1,\"2143\":1,\"2148\":1,\"2150\":1,\"2161\":1,\"2162\":1,\"2163\":1,\"2166\":1,\"2167\":2,\"2168\":1,\"2180\":1,\"2185\":1,\"2186\":1,\"2192\":1,\"2193\":1,\"2194\":1,\"2195\":1,\"2196\":1,\"2201\":2,\"2209\":3,\"2220\":1,\"2221\":1,\"2222\":1,\"2225\":1,\"2226\":2,\"2227\":1,\"2237\":1,\"2239\":1,\"2241\":1,\"2244\":1,\"2253\":1,\"2254\":1,\"2255\":1,\"2262\":1,\"2264\":1,\"2268\":1,\"2269\":1,\"2270\":1,\"2271\":1,\"2272\":1,\"2276\":1,\"2277\":1,\"2280\":1,\"2281\":1,\"2282\":1,\"2283\":1,\"2284\":1,\"2290\":1,\"2294\":1,\"2296\":1,\"2300\":1,\"2302\":1,\"2307\":1,\"2312\":1,\"2313\":1,\"2319\":1,\"2320\":1,\"2321\":1,\"2322\":1,\"2323\":1,\"2328\":2,\"2336\":3,\"2338\":1,\"2339\":1,\"2340\":1,\"2343\":1,\"2347\":1,\"2349\":1,\"2351\":1,\"2353\":1,\"2359\":1,\"2361\":1,\"2367\":1,\"2369\":1,\"2380\":1,\"2381\":1,\"2382\":1,\"2385\":1,\"2386\":2,\"2387\":1,\"2399\":1,\"2404\":1,\"2405\":1,\"2411\":1,\"2412\":1,\"2413\":1,\"2414\":1,\"2415\":1,\"2420\":2,\"2428\":3,\"2439\":1,\"2440\":1,\"2441\":1,\"2444\":1,\"2445\":2,\"2446\":1,\"2456\":1,\"2458\":1,\"2460\":1,\"2463\":1,\"2472\":1,\"2473\":1,\"2474\":1,\"2481\":1,\"2483\":1,\"2487\":1,\"2488\":1,\"2489\":1,\"2490\":1,\"2491\":1,\"2495\":1,\"2496\":1,\"2499\":1,\"2500\":1,\"2501\":1,\"2502\":1,\"2503\":1,\"2509\":1,\"2513\":1,\"2515\":1,\"2519\":1,\"2521\":1,\"2526\":1,\"2531\":1,\"2532\":1,\"2538\":1,\"2539\":1,\"2540\":1,\"2541\":1,\"2542\":1,\"2547\":2,\"2555\":3,\"2557\":1,\"2558\":1,\"2559\":1,\"2562\":1,\"2566\":1,\"2568\":1,\"2570\":1,\"2572\":1,\"2578\":1,\"2580\":1,\"2586\":1,\"2588\":1,\"2599\":1,\"2600\":1,\"2601\":1,\"2604\":1,\"2605\":2,\"2606\":1,\"2618\":1,\"2623\":1,\"2624\":1,\"2630\":1,\"2631\":1,\"2632\":1,\"2633\":1,\"2634\":1,\"2639\":2,\"2647\":3,\"2658\":1,\"2659\":1,\"2660\":1,\"2663\":1,\"2664\":2,\"2665\":1,\"2675\":1,\"2677\":1,\"2679\":1,\"2682\":1,\"2691\":1,\"2692\":1,\"2693\":1,\"2700\":1,\"2702\":1,\"2706\":1,\"2707\":1,\"2708\":1,\"2709\":1,\"2710\":1,\"2714\":1,\"2715\":1,\"2718\":1,\"2719\":1,\"2720\":1,\"2721\":1,\"2722\":1,\"2728\":1,\"2732\":1,\"2734\":1,\"2738\":1,\"2740\":1,\"2745\":1,\"2750\":1,\"2751\":1,\"2757\":1,\"2758\":1,\"2759\":1,\"2760\":1,\"2761\":1,\"2766\":2,\"2774\":3,\"2776\":1,\"2777\":1,\"2778\":1,\"2781\":1,\"2785\":1,\"2787\":1,\"2789\":1,\"2791\":1,\"2797\":1,\"2799\":1,\"2805\":1,\"2807\":1,\"2818\":1,\"2819\":1,\"2820\":1,\"2823\":1,\"2824\":2,\"2825\":1,\"2837\":1,\"2842\":1,\"2843\":1,\"2849\":1,\"2850\":1,\"2851\":1,\"2852\":1,\"2853\":1}}],[\"exercise\",{\"0\":{\"316\":1,\"317\":1,\"318\":1,\"319\":1,\"320\":1,\"321\":1,\"322\":1,\"324\":1,\"325\":1,\"331\":1,\"335\":1,\"336\":1,\"338\":1,\"339\":1,\"340\":1,\"345\":1,\"349\":1,\"350\":1,\"360\":1,\"364\":1,\"365\":1,\"370\":1,\"374\":1,\"375\":1,\"386\":1},\"1\":{\"314\":1,\"316\":1,\"317\":1,\"319\":1,\"320\":1,\"321\":1,\"324\":1,\"325\":2,\"334\":1,\"335\":1,\"336\":1,\"337\":1,\"338\":1,\"339\":1,\"340\":1,\"343\":1,\"345\":2,\"348\":1,\"349\":1,\"350\":1,\"363\":1,\"364\":1,\"365\":1,\"373\":1,\"374\":1,\"375\":2,\"389\":1}}],[\"exercises\",{\"1\":{\"314\":2,\"315\":1,\"390\":1}}],[\"execition\",{\"1\":{\"130\":1}}],[\"executor\",{\"1\":{\"884\":1,\"885\":1,\"886\":1,\"1389\":1,\"1390\":1,\"1391\":1,\"1566\":1,\"1567\":1,\"1568\":1,\"1743\":1,\"1744\":1,\"1745\":1,\"1920\":1,\"1921\":1,\"1922\":1,\"2097\":1,\"2098\":1,\"2099\":1,\"2287\":1,\"2288\":1,\"2289\":1,\"2506\":1,\"2507\":1,\"2508\":1,\"2725\":1,\"2726\":1,\"2727\":1}}],[\"executable\",{\"1\":{\"328\":1}}],[\"execution\",{\"0\":{\"329\":1,\"334\":1,\"348\":1,\"363\":1,\"373\":1,\"389\":1},\"1\":{\"84\":1,\"94\":1,\"126\":1,\"130\":1,\"150\":1,\"317\":1,\"320\":1,\"329\":1,\"336\":1,\"350\":1,\"352\":2,\"359\":2,\"365\":1,\"367\":1,\"368\":2,\"369\":3,\"370\":2,\"385\":2}}],[\"executing\",{\"1\":{\"26\":1,\"29\":1,\"95\":1,\"149\":1,\"165\":1,\"334\":1,\"352\":2,\"429\":1,\"778\":1}}],[\"executes\",{\"1\":{\"86\":1}}],[\"executed\",{\"1\":{\"81\":1,\"86\":1,\"92\":1,\"123\":1,\"314\":1,\"328\":1,\"334\":2,\"348\":2,\"350\":1,\"360\":1,\"363\":3,\"373\":2,\"389\":3}}],[\"execute\",{\"1\":{\"0\":1,\"32\":1,\"92\":1,\"93\":1,\"95\":1,\"98\":1,\"101\":1,\"112\":1,\"113\":1,\"122\":1,\"131\":4,\"137\":1,\"138\":1,\"165\":1,\"171\":1,\"172\":1,\"247\":1,\"248\":1,\"286\":1,\"299\":1,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"316\":1,\"325\":2,\"333\":1,\"334\":1,\"337\":1,\"338\":1,\"347\":1,\"348\":2,\"362\":1,\"363\":2,\"372\":1,\"373\":2,\"388\":1,\"389\":2,\"444\":1,\"445\":1,\"493\":1,\"494\":1,\"519\":1,\"520\":1,\"549\":1,\"550\":1,\"579\":1,\"580\":1,\"609\":1,\"610\":1,\"655\":1,\"656\":1,\"701\":1,\"702\":1,\"747\":1,\"748\":1,\"793\":1,\"794\":1,\"834\":1,\"835\":1,\"944\":1,\"945\":1,\"1019\":1,\"1020\":1,\"1110\":1,\"1111\":1,\"1170\":1,\"1171\":1,\"1248\":1,\"1249\":1,\"1342\":1,\"1343\":1,\"1424\":1,\"1425\":1,\"1519\":1,\"1520\":1,\"1601\":1,\"1602\":1,\"1696\":1,\"1697\":1,\"1778\":1,\"1779\":1,\"1873\":1,\"1874\":1,\"1955\":1,\"1956\":1,\"2050\":1,\"2051\":1,\"2132\":1,\"2133\":1,\"2237\":1,\"2238\":1,\"2347\":1,\"2348\":1,\"2456\":1,\"2457\":1,\"2566\":1,\"2567\":1,\"2675\":1,\"2676\":1,\"2785\":1,\"2786\":1}}],[\"extra\",{\"1\":{\"323\":6,\"337\":2}}],[\"extraction\",{\"1\":{\"6\":1,\"124\":1}}],[\"extract\",{\"1\":{\"0\":1,\"94\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"299\":1,\"438\":1,\"439\":2,\"464\":1,\"465\":2,\"487\":1,\"488\":2,\"513\":1,\"514\":2,\"543\":1,\"544\":2,\"573\":1,\"574\":2,\"603\":1,\"604\":2,\"649\":1,\"650\":2,\"695\":1,\"696\":2,\"741\":1,\"742\":2,\"787\":1,\"788\":2}}],[\"extension>\",{\"1\":{\"359\":7,\"385\":11}}],[\"extensions\",{\"1\":{\"354\":1,\"380\":1}}],[\"extension\",{\"0\":{\"359\":1,\"385\":1},\"1\":{\"354\":3,\"355\":1,\"356\":1,\"357\":8,\"358\":4,\"359\":3,\"360\":1,\"380\":3,\"381\":1,\"382\":1,\"383\":8,\"384\":4,\"385\":3,\"801\":1,\"928\":1,\"932\":1,\"1232\":1,\"1236\":1,\"1408\":1,\"1412\":1,\"1585\":1,\"1589\":1,\"1762\":1,\"1766\":1,\"1939\":1,\"1943\":1,\"2116\":1,\"2120\":1,\"2204\":1,\"2331\":1,\"2335\":1,\"2423\":1,\"2550\":1,\"2554\":1,\"2642\":1,\"2769\":1,\"2773\":1}}],[\"extended\",{\"1\":{\"434\":1,\"460\":1,\"483\":1,\"509\":1,\"539\":1,\"569\":1,\"599\":1,\"645\":1,\"691\":1,\"737\":1,\"783\":1}}],[\"extend\",{\"1\":{\"328\":1}}],[\"extending\",{\"1\":{\"150\":1,\"329\":1,\"369\":1}}],[\"extends\",{\"1\":{\"143\":1,\"156\":2}}],[\"external\",{\"0\":{\"88\":1,\"96\":1,\"166\":1},\"1\":{\"96\":1,\"108\":1,\"163\":1,\"166\":1,\"236\":1,\"266\":2,\"280\":1,\"281\":1,\"285\":4,\"286\":1,\"291\":1,\"292\":1,\"296\":6,\"297\":1,\"299\":2,\"344\":1,\"434\":1,\"435\":1,\"438\":3,\"439\":1,\"460\":1,\"461\":1,\"464\":4,\"465\":1,\"483\":1,\"484\":1,\"487\":3,\"488\":1,\"509\":1,\"510\":1,\"513\":3,\"514\":1,\"539\":1,\"540\":1,\"543\":3,\"544\":1,\"569\":1,\"570\":1,\"573\":3,\"574\":1,\"599\":1,\"600\":1,\"603\":3,\"604\":1,\"645\":1,\"646\":1,\"649\":3,\"650\":1,\"691\":1,\"692\":1,\"695\":3,\"696\":1,\"737\":1,\"738\":1,\"741\":3,\"742\":1,\"783\":1,\"784\":1,\"787\":3,\"788\":1,\"910\":2,\"1002\":2,\"1131\":2,\"1302\":2,\"1478\":2,\"1655\":2,\"1832\":2,\"2009\":2,\"2186\":2,\"2313\":2,\"2405\":2,\"2532\":2,\"2624\":2,\"2751\":2,\"2843\":2}}],[\"externally\",{\"1\":{\"85\":1}}],[\"exposing\",{\"1\":{\"893\":1,\"2296\":1,\"2515\":1,\"2734\":1}}],[\"expanded\",{\"1\":{\"464\":1}}],[\"expertise\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"experienced\",{\"1\":{\"411\":2,\"622\":2,\"668\":2,\"714\":2,\"760\":2}}],[\"experience\",{\"0\":{\"71\":1},\"1\":{\"71\":1,\"112\":1,\"113\":1,\"411\":1,\"415\":2,\"622\":1,\"626\":2,\"668\":1,\"672\":2,\"714\":1,\"718\":2,\"760\":1,\"764\":2}}],[\"expected\",{\"1\":{\"281\":1,\"292\":1,\"334\":2,\"363\":2,\"389\":2,\"435\":1,\"461\":1,\"484\":1,\"510\":1,\"540\":1,\"570\":1,\"600\":1,\"646\":1,\"692\":1,\"738\":1,\"784\":1}}],[\"expression$\",{\"1\":{\"368\":1}}],[\"expressions\",{\"0\":{\"368\":1},\"1\":{\"155\":3,\"370\":1}}],[\"expression\",{\"1\":{\"155\":15,\"367\":1,\"368\":1}}],[\"explanations\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"explain\",{\"1\":{\"91\":1}}],[\"explained\",{\"1\":{\"85\":1}}],[\"explicit\",{\"1\":{\"155\":1}}],[\"explicitconstructorcall\",{\"1\":{\"155\":2}}],[\"explore\",{\"1\":{\"427\":1,\"776\":1}}],[\"exploring\",{\"1\":{\"12\":1}}],[\"exploit\",{\"1\":{\"37\":1}}],[\"exploited\",{\"1\":{\"37\":1}}],[\"exists\",{\"1\":{\"424\":2,\"454\":2,\"477\":2,\"503\":2,\"529\":2,\"559\":2,\"589\":2,\"635\":2,\"681\":2,\"727\":2,\"773\":2}}],[\"existing\",{\"1\":{\"141\":1,\"142\":2,\"143\":5,\"144\":2,\"145\":1,\"146\":1,\"377\":1,\"430\":1,\"456\":3,\"479\":3,\"505\":3,\"535\":1,\"565\":1,\"595\":1,\"641\":1,\"687\":1,\"733\":1,\"779\":1,\"892\":1,\"1397\":1,\"1574\":1,\"1751\":1,\"1928\":1,\"2105\":1,\"2295\":1,\"2514\":1,\"2733\":1}}],[\"exist\",{\"1\":{\"35\":1,\"392\":1}}],[\"excited\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"exclusive\",{\"0\":{\"320\":1,\"364\":1,\"365\":1,\"367\":1},\"1\":{\"320\":1,\"365\":1,\"367\":1,\"370\":1}}],[\"exclude\",{\"1\":{\"300\":2,\"303\":2,\"429\":1,\"778\":1}}],[\"excluded\",{\"0\":{\"229\":1,\"887\":1,\"1066\":1,\"1217\":1,\"1392\":1,\"1569\":1,\"1746\":1,\"1923\":1,\"2100\":1,\"2290\":1,\"2509\":1,\"2728\":1},\"1\":{\"229\":2,\"300\":4,\"303\":1,\"887\":2,\"1066\":2,\"1217\":2,\"1392\":2,\"1569\":2,\"1746\":2,\"1923\":2,\"2100\":2,\"2290\":2,\"2509\":2,\"2728\":2}}],[\"excel\",{\"0\":{\"282\":1,\"293\":1},\"1\":{\"282\":2,\"293\":2}}],[\"excellent\",{\"1\":{\"1\":1,\"105\":1}}],[\"excepted\",{\"1\":{\"272\":1,\"917\":1,\"1009\":1,\"1137\":1,\"1308\":1,\"1485\":1,\"1662\":1,\"1839\":1,\"2016\":1,\"2193\":1,\"2320\":1,\"2412\":1,\"2539\":1,\"2631\":1,\"2758\":1,\"2850\":1}}],[\"exceptions\",{\"1\":{\"189\":1,\"190\":1,\"198\":1,\"199\":1,\"243\":1,\"244\":1,\"853\":1,\"854\":1,\"856\":1,\"857\":1,\"938\":1,\"939\":1,\"1034\":1,\"1035\":1,\"1037\":1,\"1038\":1,\"1104\":1,\"1105\":1,\"1185\":1,\"1186\":1,\"1188\":1,\"1189\":1,\"1242\":1,\"1243\":1,\"1358\":1,\"1359\":1,\"1361\":1,\"1362\":1,\"1418\":1,\"1419\":1,\"1535\":1,\"1536\":1,\"1538\":1,\"1539\":1,\"1595\":1,\"1596\":1,\"1712\":1,\"1713\":1,\"1715\":1,\"1716\":1,\"1772\":1,\"1773\":1,\"1889\":1,\"1890\":1,\"1892\":1,\"1893\":1,\"1949\":1,\"1950\":1,\"2066\":1,\"2067\":1,\"2069\":1,\"2070\":1,\"2126\":1,\"2127\":1,\"2256\":1,\"2257\":1,\"2259\":1,\"2260\":1,\"2341\":1,\"2342\":1,\"2475\":1,\"2476\":1,\"2478\":1,\"2479\":1,\"2560\":1,\"2561\":1,\"2694\":1,\"2695\":1,\"2697\":1,\"2698\":1,\"2779\":1,\"2780\":1}}],[\"except\",{\"1\":{\"95\":1,\"165\":1,\"307\":1,\"310\":1,\"344\":2}}],[\"exchanged\",{\"1\":{\"90\":1,\"379\":1}}],[\"exchange\",{\"1\":{\"0\":1,\"9\":1,\"26\":1,\"78\":1,\"90\":1,\"91\":2,\"94\":3,\"125\":1,\"352\":1}}],[\"enough\",{\"1\":{\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"651\":1,\"697\":1,\"743\":1,\"789\":1}}],[\"engage\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"engines\",{\"1\":{\"0\":1,\"32\":1}}],[\"engine\",{\"0\":{\"86\":1,\"109\":1,\"164\":1,\"884\":1,\"885\":1,\"886\":1,\"1389\":1,\"1390\":1,\"1391\":1,\"1566\":1,\"1567\":1,\"1568\":1,\"1743\":1,\"1744\":1,\"1745\":1,\"1920\":1,\"1921\":1,\"1922\":1,\"2097\":1,\"2098\":1,\"2099\":1,\"2287\":1,\"2288\":1,\"2289\":1,\"2506\":1,\"2507\":1,\"2508\":1,\"2725\":1,\"2726\":1,\"2727\":1},\"1\":{\"0\":1,\"8\":1,\"32\":2,\"84\":3,\"92\":1,\"93\":1,\"95\":2,\"106\":1,\"109\":1,\"113\":1,\"148\":1,\"149\":1,\"161\":1,\"164\":1,\"165\":2,\"279\":1,\"290\":1,\"328\":2,\"427\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"776\":1,\"782\":1,\"884\":2,\"885\":2,\"886\":2,\"1389\":2,\"1390\":2,\"1391\":2,\"1566\":2,\"1567\":2,\"1568\":2,\"1743\":2,\"1744\":2,\"1745\":2,\"1920\":2,\"1921\":2,\"1922\":2,\"2097\":2,\"2098\":2,\"2099\":2,\"2287\":2,\"2288\":2,\"2289\":2,\"2506\":2,\"2507\":2,\"2508\":2,\"2725\":2,\"2726\":2,\"2727\":2}}],[\"enhancing\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"enhancement\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"enhanced\",{\"1\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"enhance\",{\"1\":{\"12\":1,\"340\":1,\"400\":1,\"415\":1,\"611\":1,\"626\":1,\"657\":1,\"672\":1,\"703\":1,\"718\":1,\"749\":1,\"764\":1}}],[\"envelop\",{\"1\":{\"352\":1}}],[\"environment\",{\"0\":{\"342\":1},\"1\":{\"33\":1,\"134\":2,\"285\":5,\"286\":3,\"296\":5,\"297\":3,\"300\":2,\"315\":1,\"316\":1,\"323\":8,\"325\":1,\"334\":1,\"337\":2,\"341\":1,\"342\":5,\"345\":4,\"348\":3,\"358\":1,\"384\":1,\"390\":1,\"425\":2,\"427\":1,\"438\":5,\"439\":3,\"442\":2,\"456\":1,\"464\":5,\"465\":3,\"479\":1,\"487\":5,\"488\":3,\"505\":1,\"513\":5,\"514\":3,\"519\":1,\"543\":5,\"544\":3,\"547\":2,\"560\":2,\"573\":5,\"574\":3,\"577\":2,\"590\":2,\"603\":5,\"604\":3,\"607\":2,\"636\":2,\"649\":5,\"650\":3,\"653\":2,\"682\":2,\"695\":5,\"696\":3,\"699\":2,\"728\":2,\"741\":5,\"742\":3,\"745\":2,\"774\":2,\"776\":1,\"787\":5,\"788\":3,\"791\":2,\"798\":1,\"905\":1,\"925\":1,\"997\":1,\"1229\":1,\"1297\":1,\"1405\":1,\"1473\":1,\"1582\":1,\"1650\":1,\"1759\":1,\"1827\":1,\"1936\":1,\"2004\":1,\"2113\":1,\"2181\":1,\"2201\":1,\"2308\":1,\"2328\":1,\"2400\":1,\"2420\":1,\"2527\":1,\"2547\":1,\"2619\":1,\"2639\":1,\"2746\":1,\"2766\":1,\"2838\":1}}],[\"environments\",{\"0\":{\"11\":1},\"1\":{\"113\":1,\"896\":1,\"963\":1,\"2299\":1,\"2366\":1,\"2518\":1,\"2585\":1,\"2737\":1,\"2804\":1}}],[\"enabling\",{\"1\":{\"155\":1}}],[\"enabled><\",{\"1\":{\"158\":2}}],[\"enabled\",{\"1\":{\"156\":1,\"182\":1,\"208\":1,\"209\":1,\"213\":1,\"214\":1,\"224\":1,\"348\":1,\"798\":1,\"812\":1,\"815\":1,\"816\":1,\"847\":1,\"848\":1,\"865\":1,\"866\":1,\"870\":1,\"871\":1,\"881\":1,\"902\":1,\"903\":1,\"925\":1,\"972\":1,\"975\":1,\"976\":1,\"993\":1,\"994\":1,\"1030\":1,\"1047\":1,\"1048\":1,\"1052\":1,\"1053\":1,\"1063\":1,\"1080\":1,\"1083\":1,\"1084\":1,\"1148\":1,\"1151\":1,\"1152\":1,\"1181\":1,\"1198\":1,\"1199\":1,\"1203\":1,\"1204\":1,\"1214\":1,\"1229\":1,\"1272\":1,\"1275\":1,\"1276\":1,\"1293\":1,\"1294\":1,\"1320\":1,\"1323\":1,\"1324\":1,\"1353\":1,\"1354\":1,\"1370\":1,\"1371\":1,\"1375\":1,\"1376\":1,\"1386\":1,\"1405\":1,\"1448\":1,\"1451\":1,\"1452\":1,\"1469\":1,\"1470\":1,\"1497\":1,\"1500\":1,\"1501\":1,\"1530\":1,\"1531\":1,\"1547\":1,\"1548\":1,\"1552\":1,\"1553\":1,\"1563\":1,\"1582\":1,\"1625\":1,\"1628\":1,\"1629\":1,\"1646\":1,\"1647\":1,\"1674\":1,\"1677\":1,\"1678\":1,\"1707\":1,\"1708\":1,\"1724\":1,\"1725\":1,\"1729\":1,\"1730\":1,\"1740\":1,\"1759\":1,\"1802\":1,\"1805\":1,\"1806\":1,\"1823\":1,\"1824\":1,\"1851\":1,\"1854\":1,\"1855\":1,\"1884\":1,\"1885\":1,\"1901\":1,\"1902\":1,\"1906\":1,\"1907\":1,\"1917\":1,\"1936\":1,\"1979\":1,\"1982\":1,\"1983\":1,\"2000\":1,\"2001\":1,\"2028\":1,\"2031\":1,\"2032\":1,\"2061\":1,\"2062\":1,\"2078\":1,\"2079\":1,\"2083\":1,\"2084\":1,\"2094\":1,\"2113\":1,\"2156\":1,\"2159\":1,\"2160\":1,\"2177\":1,\"2178\":1,\"2201\":1,\"2215\":1,\"2218\":1,\"2219\":1,\"2250\":1,\"2251\":1,\"2268\":1,\"2269\":1,\"2273\":1,\"2274\":1,\"2284\":1,\"2305\":1,\"2306\":1,\"2328\":1,\"2375\":1,\"2378\":1,\"2379\":1,\"2396\":1,\"2397\":1,\"2420\":1,\"2434\":1,\"2437\":1,\"2438\":1,\"2469\":1,\"2470\":1,\"2487\":1,\"2488\":1,\"2492\":1,\"2493\":1,\"2503\":1,\"2524\":1,\"2525\":1,\"2547\":1,\"2594\":1,\"2597\":1,\"2598\":1,\"2615\":1,\"2616\":1,\"2639\":1,\"2653\":1,\"2656\":1,\"2657\":1,\"2688\":1,\"2689\":1,\"2706\":1,\"2707\":1,\"2711\":1,\"2712\":1,\"2722\":1,\"2743\":1,\"2744\":1,\"2766\":1,\"2813\":1,\"2816\":1,\"2817\":1,\"2834\":1,\"2835\":1}}],[\"enables\",{\"1\":{\"8\":1,\"94\":1,\"112\":1}}],[\"enable\",{\"1\":{\"0\":2,\"32\":1,\"77\":1,\"90\":2,\"93\":1,\"94\":1,\"123\":1,\"180\":1,\"181\":1,\"182\":1,\"191\":1,\"200\":1,\"215\":1,\"218\":1,\"219\":1,\"220\":1,\"225\":1,\"226\":1,\"246\":1,\"345\":1,\"433\":2,\"459\":2,\"482\":2,\"508\":2,\"538\":2,\"568\":2,\"598\":2,\"644\":2,\"690\":2,\"736\":2,\"782\":2,\"798\":2,\"811\":1,\"812\":1,\"814\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"855\":1,\"858\":1,\"872\":1,\"875\":1,\"876\":1,\"877\":1,\"882\":1,\"883\":1,\"903\":1,\"925\":2,\"941\":1,\"953\":1,\"954\":1,\"955\":1,\"971\":1,\"972\":1,\"974\":1,\"994\":1,\"995\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1036\":1,\"1039\":1,\"1054\":1,\"1057\":1,\"1058\":1,\"1059\":1,\"1064\":1,\"1065\":1,\"1079\":1,\"1080\":1,\"1082\":1,\"1107\":1,\"1147\":1,\"1148\":1,\"1150\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1187\":1,\"1190\":1,\"1205\":1,\"1208\":1,\"1209\":1,\"1210\":1,\"1215\":1,\"1216\":1,\"1229\":2,\"1245\":1,\"1271\":1,\"1272\":1,\"1274\":1,\"1294\":1,\"1295\":1,\"1319\":1,\"1320\":1,\"1322\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1360\":1,\"1363\":1,\"1377\":1,\"1380\":1,\"1381\":1,\"1382\":1,\"1387\":1,\"1388\":1,\"1405\":2,\"1421\":1,\"1447\":1,\"1448\":1,\"1450\":1,\"1470\":1,\"1471\":1,\"1496\":1,\"1497\":1,\"1499\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1537\":1,\"1540\":1,\"1554\":1,\"1557\":1,\"1558\":1,\"1559\":1,\"1564\":1,\"1565\":1,\"1582\":2,\"1598\":1,\"1624\":1,\"1625\":1,\"1627\":1,\"1647\":1,\"1648\":1,\"1673\":1,\"1674\":1,\"1676\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1714\":1,\"1717\":1,\"1731\":1,\"1734\":1,\"1735\":1,\"1736\":1,\"1741\":1,\"1742\":1,\"1759\":2,\"1775\":1,\"1801\":1,\"1802\":1,\"1804\":1,\"1824\":1,\"1825\":1,\"1850\":1,\"1851\":1,\"1853\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1891\":1,\"1894\":1,\"1908\":1,\"1911\":1,\"1912\":1,\"1913\":1,\"1918\":1,\"1919\":1,\"1936\":2,\"1952\":1,\"1978\":1,\"1979\":1,\"1981\":1,\"2001\":1,\"2002\":1,\"2027\":1,\"2028\":1,\"2030\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2068\":1,\"2071\":1,\"2085\":1,\"2088\":1,\"2089\":1,\"2090\":1,\"2095\":1,\"2096\":1,\"2113\":2,\"2129\":1,\"2155\":1,\"2156\":1,\"2158\":1,\"2178\":1,\"2179\":1,\"2201\":2,\"2214\":1,\"2215\":1,\"2217\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2258\":1,\"2261\":1,\"2275\":1,\"2278\":1,\"2279\":1,\"2280\":1,\"2285\":1,\"2286\":1,\"2306\":1,\"2328\":2,\"2344\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2374\":1,\"2375\":1,\"2377\":1,\"2397\":1,\"2398\":1,\"2420\":2,\"2433\":1,\"2434\":1,\"2436\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2477\":1,\"2480\":1,\"2494\":1,\"2497\":1,\"2498\":1,\"2499\":1,\"2504\":1,\"2505\":1,\"2525\":1,\"2547\":2,\"2563\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2593\":1,\"2594\":1,\"2596\":1,\"2616\":1,\"2617\":1,\"2639\":2,\"2652\":1,\"2653\":1,\"2655\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2696\":1,\"2699\":1,\"2713\":1,\"2716\":1,\"2717\":1,\"2718\":1,\"2723\":1,\"2724\":1,\"2744\":1,\"2766\":2,\"2782\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2812\":1,\"2813\":1,\"2815\":1,\"2835\":1,\"2836\":1}}],[\"enum\",{\"1\":{\"155\":21}}],[\"en\",{\"1\":{\"112\":1}}],[\"enty\",{\"1\":{\"798\":1,\"925\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"entrypoint\",{\"1\":{\"323\":1}}],[\"entry\",{\"1\":{\"140\":1,\"798\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"entries\",{\"0\":{\"396\":1},\"1\":{\"108\":1,\"163\":1,\"272\":1,\"285\":1,\"296\":1,\"357\":1,\"358\":1,\"383\":1,\"384\":1,\"396\":1,\"438\":1,\"440\":1,\"464\":1,\"466\":1,\"487\":1,\"489\":1,\"513\":1,\"515\":1,\"543\":1,\"545\":1,\"573\":1,\"575\":1,\"603\":1,\"605\":1,\"649\":1,\"651\":1,\"695\":1,\"697\":1,\"741\":1,\"743\":1,\"787\":1,\"789\":1,\"801\":1,\"897\":1,\"917\":1,\"928\":1,\"964\":1,\"1009\":1,\"1071\":1,\"1125\":1,\"1137\":1,\"1222\":1,\"1232\":1,\"1264\":1,\"1308\":1,\"1398\":1,\"1408\":1,\"1440\":1,\"1485\":1,\"1575\":1,\"1585\":1,\"1617\":1,\"1662\":1,\"1752\":1,\"1762\":1,\"1794\":1,\"1839\":1,\"1929\":1,\"1939\":1,\"1971\":1,\"2016\":1,\"2106\":1,\"2116\":1,\"2148\":1,\"2193\":1,\"2204\":1,\"2300\":1,\"2320\":1,\"2331\":1,\"2367\":1,\"2412\":1,\"2423\":1,\"2519\":1,\"2539\":1,\"2550\":1,\"2586\":1,\"2631\":1,\"2642\":1,\"2738\":1,\"2758\":1,\"2769\":1,\"2805\":1,\"2850\":1}}],[\"entered\",{\"1\":{\"106\":1,\"161\":1}}],[\"entire\",{\"1\":{\"77\":1,\"91\":1,\"130\":1,\"131\":1,\"150\":1}}],[\"encounter\",{\"1\":{\"409\":1,\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"620\":1,\"651\":1,\"666\":1,\"697\":1,\"712\":1,\"743\":1,\"758\":1,\"789\":1}}],[\"encourage\",{\"1\":{\"35\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"encoded\",{\"1\":{\"183\":1,\"184\":1,\"201\":1,\"208\":1,\"209\":1,\"220\":1,\"221\":1,\"224\":1,\"237\":1,\"238\":1,\"245\":1,\"271\":1,\"273\":1,\"274\":1,\"275\":1,\"284\":4,\"286\":1,\"295\":4,\"297\":1,\"437\":4,\"463\":4,\"486\":4,\"512\":4,\"542\":4,\"572\":4,\"602\":4,\"648\":4,\"694\":4,\"740\":4,\"786\":4,\"817\":1,\"818\":1,\"822\":1,\"824\":1,\"850\":1,\"851\":1,\"859\":1,\"865\":1,\"866\":1,\"877\":1,\"878\":1,\"881\":1,\"904\":1,\"916\":1,\"918\":1,\"919\":1,\"920\":1,\"935\":1,\"936\":1,\"940\":1,\"977\":1,\"978\":1,\"982\":1,\"984\":1,\"996\":1,\"1008\":1,\"1010\":1,\"1011\":1,\"1012\":1,\"1031\":1,\"1032\":1,\"1040\":1,\"1047\":1,\"1048\":1,\"1059\":1,\"1060\":1,\"1063\":1,\"1085\":1,\"1086\":1,\"1090\":1,\"1092\":1,\"1101\":1,\"1102\":1,\"1106\":1,\"1136\":1,\"1138\":1,\"1139\":1,\"1140\":1,\"1153\":1,\"1154\":1,\"1158\":1,\"1160\":1,\"1182\":1,\"1183\":1,\"1191\":1,\"1198\":1,\"1199\":1,\"1210\":1,\"1211\":1,\"1214\":1,\"1239\":1,\"1240\":1,\"1244\":1,\"1277\":1,\"1278\":1,\"1282\":1,\"1284\":1,\"1296\":1,\"1307\":1,\"1309\":1,\"1310\":1,\"1311\":1,\"1325\":1,\"1326\":1,\"1330\":1,\"1332\":1,\"1355\":1,\"1356\":1,\"1364\":1,\"1370\":1,\"1371\":1,\"1382\":1,\"1383\":1,\"1386\":1,\"1415\":1,\"1416\":1,\"1420\":1,\"1453\":1,\"1454\":1,\"1458\":1,\"1460\":1,\"1472\":1,\"1484\":1,\"1486\":1,\"1487\":1,\"1488\":1,\"1502\":1,\"1503\":1,\"1507\":1,\"1509\":1,\"1532\":1,\"1533\":1,\"1541\":1,\"1547\":1,\"1548\":1,\"1559\":1,\"1560\":1,\"1563\":1,\"1592\":1,\"1593\":1,\"1597\":1,\"1630\":1,\"1631\":1,\"1635\":1,\"1637\":1,\"1649\":1,\"1661\":1,\"1663\":1,\"1664\":1,\"1665\":1,\"1679\":1,\"1680\":1,\"1684\":1,\"1686\":1,\"1709\":1,\"1710\":1,\"1718\":1,\"1724\":1,\"1725\":1,\"1736\":1,\"1737\":1,\"1740\":1,\"1769\":1,\"1770\":1,\"1774\":1,\"1807\":1,\"1808\":1,\"1812\":1,\"1814\":1,\"1826\":1,\"1838\":1,\"1840\":1,\"1841\":1,\"1842\":1,\"1856\":1,\"1857\":1,\"1861\":1,\"1863\":1,\"1886\":1,\"1887\":1,\"1895\":1,\"1901\":1,\"1902\":1,\"1913\":1,\"1914\":1,\"1917\":1,\"1946\":1,\"1947\":1,\"1951\":1,\"1984\":1,\"1985\":1,\"1989\":1,\"1991\":1,\"2003\":1,\"2015\":1,\"2017\":1,\"2018\":1,\"2019\":1,\"2033\":1,\"2034\":1,\"2038\":1,\"2040\":1,\"2063\":1,\"2064\":1,\"2072\":1,\"2078\":1,\"2079\":1,\"2090\":1,\"2091\":1,\"2094\":1,\"2123\":1,\"2124\":1,\"2128\":1,\"2161\":1,\"2162\":1,\"2166\":1,\"2168\":1,\"2180\":1,\"2192\":1,\"2194\":1,\"2195\":1,\"2196\":1,\"2220\":1,\"2221\":1,\"2225\":1,\"2227\":1,\"2253\":1,\"2254\":1,\"2262\":1,\"2268\":1,\"2269\":1,\"2280\":1,\"2281\":1,\"2284\":1,\"2307\":1,\"2319\":1,\"2321\":1,\"2322\":1,\"2323\":1,\"2338\":1,\"2339\":1,\"2343\":1,\"2380\":1,\"2381\":1,\"2385\":1,\"2387\":1,\"2399\":1,\"2411\":1,\"2413\":1,\"2414\":1,\"2415\":1,\"2439\":1,\"2440\":1,\"2444\":1,\"2446\":1,\"2472\":1,\"2473\":1,\"2481\":1,\"2487\":1,\"2488\":1,\"2499\":1,\"2500\":1,\"2503\":1,\"2526\":1,\"2538\":1,\"2540\":1,\"2541\":1,\"2542\":1,\"2557\":1,\"2558\":1,\"2562\":1,\"2599\":1,\"2600\":1,\"2604\":1,\"2606\":1,\"2618\":1,\"2630\":1,\"2632\":1,\"2633\":1,\"2634\":1,\"2658\":1,\"2659\":1,\"2663\":1,\"2665\":1,\"2691\":1,\"2692\":1,\"2700\":1,\"2706\":1,\"2707\":1,\"2718\":1,\"2719\":1,\"2722\":1,\"2745\":1,\"2757\":1,\"2759\":1,\"2760\":1,\"2761\":1,\"2776\":1,\"2777\":1,\"2781\":1,\"2818\":1,\"2819\":1,\"2823\":1,\"2825\":1,\"2837\":1,\"2849\":1,\"2851\":1,\"2852\":1,\"2853\":1}}],[\"encoding=\",{\"1\":{\"155\":1}}],[\"encrypting\",{\"1\":{\"286\":1,\"297\":1}}],[\"encryption\",{\"1\":{\"37\":1,\"105\":1}}],[\"encrypted\",{\"1\":{\"40\":1,\"184\":1,\"185\":1,\"209\":1,\"210\":1,\"238\":1,\"239\":1,\"284\":2,\"285\":2,\"286\":2,\"295\":2,\"296\":2,\"297\":2,\"437\":2,\"438\":2,\"439\":2,\"463\":2,\"464\":2,\"465\":2,\"486\":2,\"487\":2,\"488\":2,\"512\":2,\"513\":2,\"514\":2,\"542\":2,\"543\":2,\"544\":2,\"572\":2,\"573\":2,\"574\":2,\"602\":2,\"603\":2,\"604\":2,\"648\":2,\"649\":2,\"650\":2,\"694\":2,\"695\":2,\"696\":2,\"740\":2,\"741\":2,\"742\":2,\"786\":2,\"787\":2,\"788\":2,\"818\":1,\"819\":1,\"851\":1,\"852\":1,\"866\":1,\"867\":1,\"936\":1,\"937\":1,\"978\":1,\"979\":1,\"1032\":1,\"1033\":1,\"1048\":1,\"1049\":1,\"1086\":1,\"1087\":1,\"1102\":1,\"1103\":1,\"1154\":1,\"1155\":1,\"1183\":1,\"1184\":1,\"1199\":1,\"1200\":1,\"1240\":1,\"1241\":1,\"1278\":1,\"1279\":1,\"1326\":1,\"1327\":1,\"1356\":1,\"1357\":1,\"1371\":1,\"1372\":1,\"1416\":1,\"1417\":1,\"1454\":1,\"1455\":1,\"1503\":1,\"1504\":1,\"1533\":1,\"1534\":1,\"1548\":1,\"1549\":1,\"1593\":1,\"1594\":1,\"1631\":1,\"1632\":1,\"1680\":1,\"1681\":1,\"1710\":1,\"1711\":1,\"1725\":1,\"1726\":1,\"1770\":1,\"1771\":1,\"1808\":1,\"1809\":1,\"1857\":1,\"1858\":1,\"1887\":1,\"1888\":1,\"1902\":1,\"1903\":1,\"1947\":1,\"1948\":1,\"1985\":1,\"1986\":1,\"2034\":1,\"2035\":1,\"2064\":1,\"2065\":1,\"2079\":1,\"2080\":1,\"2124\":1,\"2125\":1,\"2162\":1,\"2163\":1,\"2221\":1,\"2222\":1,\"2254\":1,\"2255\":1,\"2269\":1,\"2270\":1,\"2339\":1,\"2340\":1,\"2381\":1,\"2382\":1,\"2440\":1,\"2441\":1,\"2473\":1,\"2474\":1,\"2488\":1,\"2489\":1,\"2558\":1,\"2559\":1,\"2600\":1,\"2601\":1,\"2659\":1,\"2660\":1,\"2692\":1,\"2693\":1,\"2707\":1,\"2708\":1,\"2777\":1,\"2778\":1,\"2819\":1,\"2820\":1}}],[\"end\",{\"1\":{\"37\":2,\"90\":1,\"113\":1,\"155\":2,\"180\":1,\"182\":1,\"286\":1,\"297\":1,\"334\":1,\"360\":5,\"386\":5,\"439\":1,\"465\":1,\"488\":1,\"514\":1,\"544\":1,\"574\":1,\"604\":1,\"650\":1,\"696\":1,\"742\":1,\"788\":1,\"845\":1,\"847\":1,\"848\":1,\"915\":1,\"1007\":1,\"1028\":1,\"1030\":1,\"1179\":1,\"1181\":1,\"1351\":1,\"1353\":1,\"1354\":1,\"1483\":1,\"1528\":1,\"1530\":1,\"1531\":1,\"1660\":1,\"1705\":1,\"1707\":1,\"1708\":1,\"1837\":1,\"1882\":1,\"1884\":1,\"1885\":1,\"2014\":1,\"2059\":1,\"2061\":1,\"2062\":1,\"2191\":1,\"2248\":1,\"2250\":1,\"2251\":1,\"2318\":1,\"2410\":1,\"2467\":1,\"2469\":1,\"2470\":1,\"2537\":1,\"2629\":1,\"2686\":1,\"2688\":1,\"2689\":1,\"2756\":1,\"2848\":1}}],[\"endpoints\",{\"1\":{\"106\":1,\"109\":1,\"161\":1,\"164\":1}}],[\"endpoint\",{\"0\":{\"108\":1,\"163\":1},\"1\":{\"0\":1,\"8\":1,\"32\":1,\"81\":1,\"84\":2,\"93\":1,\"95\":2,\"106\":1,\"108\":1,\"109\":1,\"130\":1,\"131\":1,\"134\":1,\"161\":1,\"163\":1,\"164\":1,\"165\":2,\"286\":1,\"297\":1,\"300\":1,\"303\":1,\"306\":1,\"309\":1,\"312\":1,\"424\":1,\"439\":1,\"445\":1,\"454\":1,\"465\":1,\"477\":1,\"488\":1,\"494\":1,\"503\":1,\"514\":1,\"520\":1,\"529\":1,\"544\":1,\"550\":1,\"559\":1,\"574\":1,\"580\":1,\"589\":1,\"604\":1,\"610\":1,\"635\":1,\"650\":1,\"656\":1,\"681\":1,\"696\":1,\"702\":1,\"727\":1,\"742\":1,\"748\":1,\"773\":1,\"788\":1,\"794\":1}}],[\"ensure\",{\"1\":{\"9\":1,\"10\":1,\"33\":2,\"78\":1,\"81\":1,\"412\":2,\"415\":1,\"442\":2,\"547\":2,\"577\":2,\"607\":2,\"623\":2,\"626\":1,\"653\":2,\"669\":2,\"672\":1,\"699\":2,\"715\":2,\"718\":1,\"745\":2,\"761\":2,\"764\":1,\"791\":2}}],[\"ensures\",{\"1\":{\"8\":1,\"90\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"ensuring\",{\"1\":{\"5\":1,\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"o3\",{\"1\":{\"905\":1,\"997\":1,\"1297\":1,\"1473\":1,\"1650\":1,\"1827\":1,\"2004\":1,\"2181\":1,\"2308\":1,\"2400\":1,\"2527\":1,\"2619\":1,\"2746\":1,\"2838\":1}}],[\"odic\",{\"0\":{\"904\":1,\"996\":1,\"1296\":1,\"1472\":1,\"1649\":1,\"1826\":1,\"2003\":1,\"2180\":1,\"2307\":1,\"2399\":1,\"2526\":1,\"2618\":1,\"2745\":1,\"2837\":1}}],[\"oder\",{\"1\":{\"17\":2,\"19\":1,\"22\":2}}],[\"oidc\",{\"0\":{\"811\":1,\"812\":1,\"813\":1,\"814\":1,\"815\":1,\"816\":1,\"817\":1,\"818\":1,\"819\":2,\"820\":1,\"821\":1,\"822\":1,\"823\":1,\"971\":1,\"972\":1,\"973\":1,\"974\":1,\"975\":1,\"976\":1,\"977\":1,\"978\":1,\"979\":2,\"980\":1,\"981\":1,\"982\":1,\"983\":1,\"1079\":1,\"1080\":1,\"1081\":1,\"1082\":1,\"1083\":1,\"1084\":1,\"1085\":1,\"1086\":1,\"1087\":2,\"1088\":1,\"1089\":1,\"1090\":1,\"1091\":1,\"1147\":1,\"1148\":1,\"1149\":1,\"1150\":1,\"1151\":1,\"1152\":1,\"1153\":1,\"1154\":1,\"1155\":2,\"1156\":1,\"1157\":1,\"1158\":1,\"1159\":1,\"1271\":1,\"1272\":1,\"1273\":1,\"1274\":1,\"1275\":1,\"1276\":1,\"1277\":1,\"1278\":1,\"1279\":2,\"1280\":1,\"1281\":1,\"1282\":1,\"1283\":1,\"1319\":1,\"1320\":1,\"1321\":1,\"1322\":1,\"1323\":1,\"1324\":1,\"1325\":1,\"1326\":1,\"1327\":2,\"1328\":1,\"1329\":1,\"1330\":1,\"1331\":1,\"1447\":1,\"1448\":1,\"1449\":1,\"1450\":1,\"1451\":1,\"1452\":1,\"1453\":1,\"1454\":1,\"1455\":2,\"1456\":1,\"1457\":1,\"1458\":1,\"1459\":1,\"1496\":1,\"1497\":1,\"1498\":1,\"1499\":1,\"1500\":1,\"1501\":1,\"1502\":1,\"1503\":1,\"1504\":2,\"1505\":1,\"1506\":1,\"1507\":1,\"1508\":1,\"1624\":1,\"1625\":1,\"1626\":1,\"1627\":1,\"1628\":1,\"1629\":1,\"1630\":1,\"1631\":1,\"1632\":2,\"1633\":1,\"1634\":1,\"1635\":1,\"1636\":1,\"1673\":1,\"1674\":1,\"1675\":1,\"1676\":1,\"1677\":1,\"1678\":1,\"1679\":1,\"1680\":1,\"1681\":2,\"1682\":1,\"1683\":1,\"1684\":1,\"1685\":1,\"1801\":1,\"1802\":1,\"1803\":1,\"1804\":1,\"1805\":1,\"1806\":1,\"1807\":1,\"1808\":1,\"1809\":2,\"1810\":1,\"1811\":1,\"1812\":1,\"1813\":1,\"1850\":1,\"1851\":1,\"1852\":1,\"1853\":1,\"1854\":1,\"1855\":1,\"1856\":1,\"1857\":1,\"1858\":2,\"1859\":1,\"1860\":1,\"1861\":1,\"1862\":1,\"1978\":1,\"1979\":1,\"1980\":1,\"1981\":1,\"1982\":1,\"1983\":1,\"1984\":1,\"1985\":1,\"1986\":2,\"1987\":1,\"1988\":1,\"1989\":1,\"1990\":1,\"2027\":1,\"2028\":1,\"2029\":1,\"2030\":1,\"2031\":1,\"2032\":1,\"2033\":1,\"2034\":1,\"2035\":2,\"2036\":1,\"2037\":1,\"2038\":1,\"2039\":1,\"2155\":1,\"2156\":1,\"2157\":1,\"2158\":1,\"2159\":1,\"2160\":1,\"2161\":1,\"2162\":1,\"2163\":2,\"2164\":1,\"2165\":1,\"2166\":1,\"2167\":1,\"2214\":1,\"2215\":1,\"2216\":1,\"2217\":1,\"2218\":1,\"2219\":1,\"2220\":1,\"2221\":1,\"2222\":2,\"2223\":1,\"2224\":1,\"2225\":1,\"2226\":1,\"2374\":1,\"2375\":1,\"2376\":1,\"2377\":1,\"2378\":1,\"2379\":1,\"2380\":1,\"2381\":1,\"2382\":2,\"2383\":1,\"2384\":1,\"2385\":1,\"2386\":1,\"2433\":1,\"2434\":1,\"2435\":1,\"2436\":1,\"2437\":1,\"2438\":1,\"2439\":1,\"2440\":1,\"2441\":2,\"2442\":1,\"2443\":1,\"2444\":1,\"2445\":1,\"2593\":1,\"2594\":1,\"2595\":1,\"2596\":1,\"2597\":1,\"2598\":1,\"2599\":1,\"2600\":1,\"2601\":2,\"2602\":1,\"2603\":1,\"2604\":1,\"2605\":1,\"2652\":1,\"2653\":1,\"2654\":1,\"2655\":1,\"2656\":1,\"2657\":1,\"2658\":1,\"2659\":1,\"2660\":2,\"2661\":1,\"2662\":1,\"2663\":1,\"2664\":1,\"2812\":1,\"2813\":1,\"2814\":1,\"2815\":1,\"2816\":1,\"2817\":1,\"2818\":1,\"2819\":1,\"2820\":2,\"2821\":1,\"2822\":1,\"2823\":1,\"2824\":1},\"1\":{\"811\":5,\"812\":5,\"813\":2,\"814\":3,\"815\":3,\"816\":3,\"817\":3,\"818\":5,\"819\":4,\"820\":2,\"821\":2,\"822\":3,\"823\":2,\"903\":6,\"904\":2,\"905\":7,\"921\":1,\"971\":5,\"972\":5,\"973\":2,\"974\":3,\"975\":3,\"976\":3,\"977\":3,\"978\":5,\"979\":4,\"980\":2,\"981\":2,\"982\":3,\"983\":2,\"994\":6,\"995\":2,\"996\":2,\"997\":7,\"1013\":1,\"1079\":5,\"1080\":5,\"1081\":2,\"1082\":3,\"1083\":3,\"1084\":3,\"1085\":3,\"1086\":5,\"1087\":4,\"1088\":2,\"1089\":2,\"1090\":3,\"1091\":2,\"1147\":5,\"1148\":5,\"1149\":2,\"1150\":3,\"1151\":3,\"1152\":3,\"1153\":3,\"1154\":5,\"1155\":4,\"1156\":2,\"1157\":2,\"1158\":3,\"1159\":2,\"1271\":5,\"1272\":5,\"1273\":2,\"1274\":3,\"1275\":3,\"1276\":3,\"1277\":3,\"1278\":5,\"1279\":4,\"1280\":2,\"1281\":2,\"1282\":3,\"1283\":2,\"1294\":6,\"1295\":2,\"1296\":2,\"1297\":7,\"1312\":1,\"1319\":5,\"1320\":5,\"1321\":2,\"1322\":3,\"1323\":3,\"1324\":3,\"1325\":3,\"1326\":5,\"1327\":4,\"1328\":2,\"1329\":2,\"1330\":3,\"1331\":2,\"1447\":5,\"1448\":5,\"1449\":2,\"1450\":3,\"1451\":3,\"1452\":3,\"1453\":3,\"1454\":5,\"1455\":4,\"1456\":2,\"1457\":2,\"1458\":3,\"1459\":2,\"1470\":6,\"1471\":2,\"1472\":2,\"1473\":7,\"1489\":1,\"1496\":5,\"1497\":5,\"1498\":2,\"1499\":3,\"1500\":3,\"1501\":3,\"1502\":3,\"1503\":5,\"1504\":4,\"1505\":2,\"1506\":2,\"1507\":3,\"1508\":2,\"1624\":5,\"1625\":5,\"1626\":2,\"1627\":3,\"1628\":3,\"1629\":3,\"1630\":3,\"1631\":5,\"1632\":4,\"1633\":2,\"1634\":2,\"1635\":3,\"1636\":2,\"1647\":6,\"1648\":2,\"1649\":2,\"1650\":7,\"1666\":1,\"1673\":5,\"1674\":5,\"1675\":2,\"1676\":3,\"1677\":3,\"1678\":3,\"1679\":3,\"1680\":5,\"1681\":4,\"1682\":2,\"1683\":2,\"1684\":3,\"1685\":2,\"1801\":5,\"1802\":5,\"1803\":2,\"1804\":3,\"1805\":3,\"1806\":3,\"1807\":3,\"1808\":5,\"1809\":4,\"1810\":2,\"1811\":2,\"1812\":3,\"1813\":2,\"1824\":6,\"1825\":2,\"1826\":2,\"1827\":7,\"1843\":1,\"1850\":5,\"1851\":5,\"1852\":2,\"1853\":3,\"1854\":3,\"1855\":3,\"1856\":3,\"1857\":5,\"1858\":4,\"1859\":2,\"1860\":2,\"1861\":3,\"1862\":2,\"1978\":5,\"1979\":5,\"1980\":2,\"1981\":3,\"1982\":3,\"1983\":3,\"1984\":3,\"1985\":5,\"1986\":4,\"1987\":2,\"1988\":2,\"1989\":3,\"1990\":2,\"2001\":6,\"2002\":2,\"2003\":2,\"2004\":7,\"2020\":1,\"2027\":5,\"2028\":5,\"2029\":2,\"2030\":3,\"2031\":3,\"2032\":3,\"2033\":3,\"2034\":5,\"2035\":4,\"2036\":2,\"2037\":2,\"2038\":3,\"2039\":2,\"2155\":5,\"2156\":5,\"2157\":2,\"2158\":3,\"2159\":3,\"2160\":3,\"2161\":3,\"2162\":5,\"2163\":4,\"2164\":2,\"2165\":2,\"2166\":3,\"2167\":2,\"2178\":6,\"2179\":2,\"2180\":2,\"2181\":7,\"2197\":1,\"2214\":5,\"2215\":5,\"2216\":2,\"2217\":3,\"2218\":3,\"2219\":3,\"2220\":3,\"2221\":5,\"2222\":4,\"2223\":2,\"2224\":2,\"2225\":3,\"2226\":2,\"2306\":6,\"2307\":2,\"2308\":7,\"2324\":1,\"2374\":5,\"2375\":5,\"2376\":2,\"2377\":3,\"2378\":3,\"2379\":3,\"2380\":3,\"2381\":5,\"2382\":4,\"2383\":2,\"2384\":2,\"2385\":3,\"2386\":2,\"2397\":6,\"2398\":2,\"2399\":2,\"2400\":7,\"2416\":1,\"2433\":5,\"2434\":5,\"2435\":2,\"2436\":3,\"2437\":3,\"2438\":3,\"2439\":3,\"2440\":5,\"2441\":4,\"2442\":2,\"2443\":2,\"2444\":3,\"2445\":2,\"2525\":6,\"2526\":2,\"2527\":7,\"2543\":1,\"2593\":5,\"2594\":5,\"2595\":2,\"2596\":3,\"2597\":3,\"2598\":3,\"2599\":3,\"2600\":5,\"2601\":4,\"2602\":2,\"2603\":2,\"2604\":3,\"2605\":2,\"2616\":6,\"2617\":2,\"2618\":2,\"2619\":7,\"2635\":1,\"2652\":5,\"2653\":5,\"2654\":2,\"2655\":3,\"2656\":3,\"2657\":3,\"2658\":3,\"2659\":5,\"2660\":4,\"2661\":2,\"2662\":2,\"2663\":3,\"2664\":2,\"2744\":6,\"2745\":2,\"2746\":7,\"2762\":1,\"2812\":5,\"2813\":5,\"2814\":2,\"2815\":3,\"2816\":3,\"2817\":3,\"2818\":3,\"2819\":5,\"2820\":4,\"2821\":2,\"2822\":2,\"2823\":3,\"2824\":2,\"2835\":6,\"2836\":2,\"2837\":2,\"2838\":7,\"2854\":1}}],[\"oauth\",{\"1\":{\"798\":1,\"802\":1,\"806\":2,\"902\":1,\"925\":1,\"929\":1,\"933\":2,\"993\":1,\"1229\":1,\"1233\":1,\"1237\":2,\"1293\":1,\"1405\":1,\"1409\":1,\"1413\":2,\"1469\":1,\"1582\":1,\"1586\":1,\"1590\":2,\"1646\":1,\"1759\":1,\"1763\":1,\"1767\":2,\"1823\":1,\"1936\":1,\"1940\":1,\"1944\":2,\"2000\":1,\"2113\":1,\"2117\":1,\"2121\":2,\"2177\":1,\"2201\":1,\"2205\":1,\"2209\":2,\"2305\":1,\"2328\":1,\"2332\":1,\"2336\":2,\"2396\":1,\"2420\":1,\"2424\":1,\"2428\":2,\"2524\":1,\"2547\":1,\"2551\":1,\"2555\":2,\"2615\":1,\"2639\":1,\"2643\":1,\"2647\":2,\"2743\":1,\"2766\":1,\"2770\":1,\"2774\":2,\"2834\":1}}],[\"omitted\",{\"1\":{\"272\":1,\"273\":1,\"917\":1,\"918\":1,\"1009\":1,\"1010\":1,\"1137\":1,\"1138\":1,\"1308\":1,\"1309\":1,\"1485\":1,\"1486\":1,\"1662\":1,\"1663\":1,\"1839\":1,\"1840\":1,\"2016\":1,\"2017\":1,\"2193\":1,\"2194\":1,\"2320\":1,\"2321\":1,\"2412\":1,\"2413\":1,\"2539\":1,\"2540\":1,\"2631\":1,\"2632\":1,\"2758\":1,\"2759\":1,\"2850\":1,\"2851\":1}}],[\"oversight\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"override\",{\"1\":{\"386\":1}}],[\"overwrite\",{\"1\":{\"150\":2}}],[\"overwrites\",{\"0\":{\"150\":1},\"1\":{\"150\":1}}],[\"overwritten\",{\"1\":{\"150\":3}}],[\"over\",{\"1\":{\"122\":2,\"208\":1,\"209\":1,\"215\":1,\"224\":1,\"225\":1,\"226\":1,\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1,\"865\":1,\"866\":1,\"872\":1,\"881\":1,\"882\":1,\"883\":1,\"1047\":1,\"1048\":1,\"1054\":1,\"1063\":1,\"1064\":1,\"1065\":1,\"1198\":1,\"1199\":1,\"1205\":1,\"1214\":1,\"1215\":1,\"1216\":1,\"1370\":1,\"1371\":1,\"1377\":1,\"1386\":1,\"1387\":1,\"1388\":1,\"1547\":1,\"1548\":1,\"1554\":1,\"1563\":1,\"1564\":1,\"1565\":1,\"1724\":1,\"1725\":1,\"1731\":1,\"1740\":1,\"1741\":1,\"1742\":1,\"1901\":1,\"1902\":1,\"1908\":1,\"1917\":1,\"1918\":1,\"1919\":1,\"2078\":1,\"2079\":1,\"2085\":1,\"2094\":1,\"2095\":1,\"2096\":1,\"2268\":1,\"2269\":1,\"2275\":1,\"2284\":1,\"2285\":1,\"2286\":1,\"2487\":1,\"2488\":1,\"2494\":1,\"2503\":1,\"2504\":1,\"2505\":1,\"2706\":1,\"2707\":1,\"2713\":1,\"2722\":1,\"2723\":1,\"2724\":1}}],[\"overview\",{\"0\":{\"4\":1,\"6\":1,\"24\":1,\"31\":1,\"65\":1,\"98\":1,\"120\":1,\"122\":1,\"417\":1,\"421\":1,\"423\":1,\"447\":1,\"451\":1,\"453\":1,\"470\":1,\"474\":1,\"476\":1,\"496\":1,\"500\":1,\"502\":1,\"522\":1,\"526\":1,\"528\":1,\"552\":1,\"556\":1,\"558\":1,\"582\":1,\"586\":1,\"588\":1,\"628\":1,\"632\":1,\"634\":1,\"674\":1,\"678\":1,\"680\":1,\"720\":1,\"724\":1,\"726\":1,\"766\":1,\"770\":1,\"772\":1,\"796\":1,\"798\":1,\"902\":1,\"907\":1,\"923\":1,\"925\":1,\"993\":1,\"999\":1,\"1015\":1,\"1142\":1,\"1227\":1,\"1229\":1,\"1293\":1,\"1299\":1,\"1314\":1,\"1403\":1,\"1405\":1,\"1469\":1,\"1475\":1,\"1491\":1,\"1580\":1,\"1582\":1,\"1646\":1,\"1652\":1,\"1668\":1,\"1757\":1,\"1759\":1,\"1823\":1,\"1829\":1,\"1845\":1,\"1934\":1,\"1936\":1,\"2000\":1,\"2006\":1,\"2022\":1,\"2111\":1,\"2113\":1,\"2177\":1,\"2183\":1,\"2199\":1,\"2201\":1,\"2305\":1,\"2310\":1,\"2326\":1,\"2328\":1,\"2396\":1,\"2402\":1,\"2418\":1,\"2420\":1,\"2524\":1,\"2529\":1,\"2545\":1,\"2547\":1,\"2615\":1,\"2621\":1,\"2637\":1,\"2639\":1,\"2743\":1,\"2748\":1,\"2764\":1,\"2766\":1,\"2834\":1,\"2840\":1},\"1\":{\"113\":1,\"281\":1,\"292\":1,\"395\":1,\"427\":1,\"435\":1,\"461\":1,\"484\":1,\"510\":1,\"531\":1,\"540\":1,\"561\":1,\"570\":1,\"591\":1,\"600\":1,\"637\":1,\"646\":1,\"683\":1,\"692\":1,\"729\":1,\"738\":1,\"776\":1,\"784\":1}}],[\"occurred\",{\"1\":{\"333\":1,\"347\":1,\"362\":1,\"372\":1,\"388\":1}}],[\"occur\",{\"1\":{\"102\":1,\"103\":1,\"116\":1,\"189\":1,\"190\":1,\"198\":1,\"199\":1,\"243\":1,\"244\":1,\"853\":1,\"854\":1,\"856\":1,\"857\":1,\"938\":1,\"939\":1,\"1034\":1,\"1035\":1,\"1037\":1,\"1038\":1,\"1104\":1,\"1105\":1,\"1185\":1,\"1186\":1,\"1188\":1,\"1189\":1,\"1242\":1,\"1243\":1,\"1358\":1,\"1359\":1,\"1361\":1,\"1362\":1,\"1418\":1,\"1419\":1,\"1535\":1,\"1536\":1,\"1538\":1,\"1539\":1,\"1595\":1,\"1596\":1,\"1712\":1,\"1713\":1,\"1715\":1,\"1716\":1,\"1772\":1,\"1773\":1,\"1889\":1,\"1890\":1,\"1892\":1,\"1893\":1,\"1949\":1,\"1950\":1,\"2066\":1,\"2067\":1,\"2069\":1,\"2070\":1,\"2126\":1,\"2127\":1,\"2256\":1,\"2257\":1,\"2259\":1,\"2260\":1,\"2341\":1,\"2342\":1,\"2475\":1,\"2476\":1,\"2478\":1,\"2479\":1,\"2560\":1,\"2561\":1,\"2694\":1,\"2695\":1,\"2697\":1,\"2698\":1,\"2779\":1,\"2780\":1}}],[\"obtain\",{\"1\":{\"94\":1}}],[\"objective\",{\"1\":{\"81\":1}}],[\"owner\",{\"1\":{\"130\":3,\"285\":2,\"286\":2,\"296\":2,\"297\":2,\"299\":4,\"438\":3,\"439\":1,\"464\":3,\"465\":1,\"487\":3,\"488\":1,\"513\":3,\"514\":1,\"543\":3,\"544\":1,\"573\":3,\"574\":1,\"603\":3,\"604\":1,\"649\":3,\"650\":1,\"695\":3,\"696\":1,\"741\":3,\"742\":1,\"787\":3,\"788\":1}}],[\"own\",{\"1\":{\"81\":1,\"86\":1,\"150\":1,\"158\":1,\"344\":1,\"430\":1,\"456\":1,\"479\":1,\"505\":1,\"535\":1,\"565\":1,\"595\":1,\"641\":1,\"687\":1,\"733\":1,\"779\":1,\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"opt\",{\"1\":{\"214\":1,\"285\":11,\"286\":14,\"296\":11,\"297\":13,\"299\":9,\"300\":16,\"302\":4,\"303\":10,\"305\":4,\"306\":6,\"308\":4,\"309\":4,\"311\":4,\"312\":4,\"323\":18,\"429\":2,\"438\":12,\"439\":9,\"440\":6,\"442\":6,\"444\":4,\"445\":4,\"464\":12,\"465\":9,\"466\":6,\"468\":4,\"487\":12,\"488\":9,\"489\":6,\"491\":4,\"493\":4,\"494\":4,\"513\":12,\"514\":9,\"515\":6,\"517\":4,\"519\":4,\"520\":4,\"543\":12,\"544\":9,\"545\":6,\"547\":6,\"549\":4,\"550\":4,\"573\":12,\"574\":9,\"575\":6,\"577\":6,\"579\":4,\"580\":4,\"603\":12,\"604\":9,\"605\":6,\"607\":6,\"609\":4,\"610\":4,\"649\":12,\"650\":9,\"651\":6,\"653\":6,\"655\":4,\"656\":4,\"695\":12,\"696\":9,\"697\":6,\"699\":6,\"701\":4,\"702\":4,\"741\":12,\"742\":9,\"743\":6,\"745\":6,\"747\":4,\"748\":4,\"778\":2,\"787\":12,\"788\":9,\"789\":6,\"791\":6,\"793\":4,\"794\":4,\"871\":1,\"1053\":1,\"1204\":1,\"1376\":1,\"1553\":1,\"1730\":1,\"1907\":1,\"2084\":1,\"2274\":1,\"2493\":1,\"2712\":1}}],[\"options\",{\"1\":{\"1016\":1,\"1100\":1}}],[\"optionally\",{\"1\":{\"903\":1,\"994\":1,\"1294\":1,\"1470\":1,\"1647\":1,\"1824\":1,\"2001\":1,\"2178\":1,\"2306\":1,\"2397\":1,\"2525\":1,\"2616\":1,\"2744\":1,\"2835\":1}}],[\"optional\",{\"1\":{\"343\":2,\"438\":1,\"513\":1,\"519\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1,\"902\":1,\"921\":1,\"993\":1,\"1013\":1,\"1293\":1,\"1312\":1,\"1469\":1,\"1489\":1,\"1646\":1,\"1666\":1,\"1823\":1,\"1843\":1,\"2000\":1,\"2020\":1,\"2177\":1,\"2197\":1,\"2305\":1,\"2324\":1,\"2396\":1,\"2416\":1,\"2524\":1,\"2543\":1,\"2615\":1,\"2635\":1,\"2743\":1,\"2762\":1,\"2834\":1,\"2854\":1}}],[\"option\",{\"1\":{\"213\":1,\"214\":1,\"832\":1,\"870\":1,\"871\":1,\"942\":1,\"1017\":1,\"1052\":1,\"1053\":1,\"1108\":1,\"1168\":1,\"1203\":1,\"1204\":1,\"1246\":1,\"1340\":1,\"1375\":1,\"1376\":1,\"1422\":1,\"1517\":1,\"1552\":1,\"1553\":1,\"1599\":1,\"1694\":1,\"1729\":1,\"1730\":1,\"1776\":1,\"1871\":1,\"1906\":1,\"1907\":1,\"1953\":1,\"2048\":1,\"2083\":1,\"2084\":1,\"2130\":1,\"2235\":1,\"2273\":1,\"2274\":1,\"2345\":1,\"2454\":1,\"2492\":1,\"2493\":1,\"2564\":1,\"2673\":1,\"2711\":1,\"2712\":1,\"2783\":1}}],[\"option>\",{\"1\":{\"156\":2}}],[\"opportunity\",{\"1\":{\"37\":1,\"94\":1,\"112\":1,\"113\":1}}],[\"operator\",{\"1\":{\"155\":14}}],[\"operations\",{\"1\":{\"520\":1}}],[\"operation\",{\"1\":{\"77\":1,\"156\":3}}],[\"operational\",{\"1\":{\"11\":1}}],[\"operating\",{\"1\":{\"33\":2}}],[\"operate\",{\"1\":{\"33\":1,\"77\":1}}],[\"opensource\",{\"1\":{\"328\":1}}],[\"openssl\",{\"1\":{\"286\":1,\"297\":1,\"439\":1,\"465\":1,\"488\":1,\"514\":1,\"544\":1,\"574\":1,\"604\":1,\"650\":1,\"696\":1,\"742\":1,\"788\":1}}],[\"opening\",{\"1\":{\"155\":51,\"314\":2}}],[\"openid\",{\"0\":{\"901\":1,\"992\":1,\"1292\":1,\"1468\":1,\"1645\":1,\"1822\":1,\"1999\":1,\"2176\":1,\"2304\":1,\"2395\":1,\"2523\":1,\"2614\":1,\"2742\":1,\"2833\":1},\"1\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"421\":2,\"474\":1,\"500\":1,\"526\":1,\"556\":1,\"586\":1,\"632\":1,\"678\":2,\"724\":2,\"770\":2,\"796\":1,\"798\":5,\"801\":2,\"902\":2,\"903\":1,\"904\":1,\"923\":1,\"925\":4,\"928\":2,\"993\":2,\"994\":1,\"996\":1,\"1227\":1,\"1229\":4,\"1232\":2,\"1293\":2,\"1294\":1,\"1296\":1,\"1403\":1,\"1405\":4,\"1408\":2,\"1469\":2,\"1470\":1,\"1472\":1,\"1580\":1,\"1582\":4,\"1585\":2,\"1646\":2,\"1647\":1,\"1649\":1,\"1757\":1,\"1759\":4,\"1762\":2,\"1823\":2,\"1824\":1,\"1826\":1,\"1934\":1,\"1936\":4,\"1939\":2,\"2000\":2,\"2001\":1,\"2003\":1,\"2111\":1,\"2113\":4,\"2116\":2,\"2177\":2,\"2178\":1,\"2180\":1,\"2199\":1,\"2201\":5,\"2204\":2,\"2305\":2,\"2306\":1,\"2307\":1,\"2326\":1,\"2328\":4,\"2331\":2,\"2396\":2,\"2397\":1,\"2399\":1,\"2418\":1,\"2420\":5,\"2423\":2,\"2524\":2,\"2525\":1,\"2526\":1,\"2545\":1,\"2547\":4,\"2550\":2,\"2615\":2,\"2616\":1,\"2618\":1,\"2637\":1,\"2639\":5,\"2642\":2,\"2743\":2,\"2744\":1,\"2745\":1,\"2764\":1,\"2766\":4,\"2769\":2,\"2834\":2,\"2835\":1,\"2837\":1}}],[\"openehrclientstubfactory\",{\"1\":{\"228\":1}}],[\"openehrclient\",{\"1\":{\"149\":1}}],[\"openehrclientjerseyfactory\",{\"1\":{\"149\":1}}],[\"openehrclientfactory\",{\"1\":{\"149\":3}}],[\"openehr\",{\"0\":{\"149\":1,\"228\":1},\"1\":{\"95\":1,\"148\":1,\"149\":14,\"165\":1,\"228\":4,\"300\":3,\"303\":3,\"306\":3}}],[\"open\",{\"1\":{\"9\":1,\"105\":1,\"112\":1,\"113\":1,\"123\":1,\"391\":1,\"392\":1,\"403\":2,\"415\":1,\"440\":2,\"530\":2,\"614\":2,\"626\":1,\"660\":2,\"672\":1,\"706\":2,\"718\":1,\"743\":2,\"752\":2,\"764\":1,\"789\":2}}],[\"ourselves\",{\"1\":{\"93\":1}}],[\"our\",{\"0\":{\"35\":1,\"38\":1},\"1\":{\"35\":3,\"36\":1,\"37\":1,\"38\":3,\"69\":1,\"401\":1,\"403\":1,\"411\":2,\"413\":6,\"414\":2,\"415\":12,\"612\":1,\"614\":1,\"622\":2,\"624\":6,\"625\":2,\"626\":12,\"658\":1,\"660\":1,\"668\":2,\"670\":6,\"671\":2,\"672\":12,\"704\":1,\"706\":1,\"714\":2,\"716\":6,\"717\":2,\"718\":12,\"750\":1,\"752\":1,\"760\":2,\"762\":6,\"763\":2,\"764\":12}}],[\"outdated\",{\"1\":{\"452\":2,\"475\":2,\"501\":2}}],[\"output\",{\"1\":{\"299\":1}}],[\"outer\",{\"1\":{\"155\":1}}],[\"outgoing\",{\"1\":{\"102\":1,\"367\":1,\"370\":2}}],[\"outside\",{\"1\":{\"84\":1}}],[\"outstanding\",{\"1\":{\"1\":1}}],[\"out\",{\"1\":{\"12\":1,\"91\":1,\"282\":1,\"293\":1,\"360\":1,\"386\":2,\"413\":1,\"414\":1,\"442\":1,\"547\":1,\"577\":1,\"607\":1,\"624\":1,\"625\":1,\"653\":1,\"670\":1,\"671\":1,\"699\":1,\"716\":1,\"717\":1,\"745\":1,\"762\":1,\"763\":1,\"791\":1}}],[\"oldstable\",{\"1\":{\"418\":1,\"448\":1,\"471\":1,\"497\":1,\"523\":1,\"553\":1,\"583\":1,\"629\":1,\"675\":1,\"721\":1,\"767\":1}}],[\"older\",{\"1\":{\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"167\":1,\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"651\":1,\"697\":1,\"743\":1,\"789\":1}}],[\"old\",{\"1\":{\"30\":1,\"442\":10,\"468\":1,\"491\":1,\"517\":1,\"519\":1,\"520\":3,\"547\":10,\"577\":10,\"607\":10,\"653\":10,\"699\":10,\"745\":10,\"791\":10,\"891\":1,\"1396\":1,\"1573\":1,\"1750\":1,\"1927\":1,\"2104\":1,\"2294\":1,\"2513\":1,\"2732\":1}}],[\"o\",{\"1\":{\"26\":2,\"279\":2,\"290\":2,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"offer\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"offers\",{\"1\":{\"5\":1,\"91\":1}}],[\"official\",{\"1\":{\"285\":1,\"296\":1}}],[\"off\",{\"1\":{\"155\":2}}],[\"of\",{\"0\":{\"2\":1,\"6\":1,\"73\":1,\"74\":2,\"75\":1,\"78\":1,\"83\":1,\"401\":1,\"612\":1,\"658\":1,\"704\":1,\"750\":1},\"1\":{\"0\":1,\"1\":1,\"6\":2,\"9\":1,\"10\":2,\"26\":1,\"30\":1,\"33\":5,\"35\":2,\"36\":1,\"37\":2,\"38\":2,\"40\":1,\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"67\":1,\"72\":1,\"73\":4,\"74\":4,\"75\":3,\"77\":12,\"78\":7,\"81\":5,\"84\":3,\"85\":1,\"87\":1,\"89\":1,\"90\":6,\"91\":6,\"92\":3,\"93\":2,\"94\":5,\"95\":6,\"98\":1,\"99\":1,\"100\":3,\"102\":1,\"103\":1,\"105\":3,\"106\":3,\"108\":1,\"109\":1,\"112\":2,\"113\":6,\"115\":1,\"116\":2,\"122\":3,\"124\":2,\"125\":3,\"126\":1,\"130\":1,\"131\":1,\"134\":1,\"135\":2,\"143\":1,\"148\":6,\"149\":6,\"150\":3,\"153\":2,\"155\":5,\"161\":3,\"163\":1,\"164\":1,\"165\":6,\"170\":1,\"173\":1,\"174\":1,\"177\":1,\"182\":1,\"191\":1,\"200\":1,\"203\":1,\"204\":1,\"205\":2,\"213\":1,\"214\":3,\"219\":1,\"224\":1,\"227\":1,\"228\":1,\"229\":2,\"230\":2,\"232\":1,\"233\":2,\"234\":1,\"236\":1,\"246\":1,\"249\":1,\"250\":1,\"252\":1,\"256\":1,\"257\":1,\"258\":1,\"259\":1,\"261\":2,\"262\":2,\"265\":1,\"266\":1,\"276\":1,\"281\":1,\"285\":9,\"286\":6,\"287\":1,\"292\":1,\"296\":9,\"297\":6,\"299\":2,\"300\":2,\"302\":1,\"303\":2,\"305\":1,\"306\":2,\"307\":1,\"308\":1,\"309\":2,\"310\":1,\"311\":1,\"312\":2,\"314\":2,\"315\":1,\"317\":2,\"320\":1,\"325\":1,\"327\":2,\"328\":3,\"329\":1,\"330\":3,\"331\":1,\"333\":1,\"334\":5,\"336\":2,\"337\":1,\"338\":2,\"340\":1,\"341\":2,\"342\":5,\"343\":5,\"344\":2,\"345\":5,\"347\":1,\"348\":5,\"350\":1,\"352\":1,\"353\":3,\"355\":1,\"357\":2,\"358\":2,\"359\":2,\"360\":4,\"362\":1,\"363\":8,\"365\":1,\"367\":2,\"368\":2,\"369\":3,\"372\":1,\"373\":4,\"377\":1,\"381\":1,\"383\":2,\"384\":2,\"385\":2,\"386\":2,\"388\":1,\"389\":11,\"390\":1,\"392\":1,\"395\":1,\"396\":2,\"397\":2,\"398\":1,\"399\":2,\"400\":1,\"401\":2,\"411\":4,\"412\":1,\"413\":2,\"414\":1,\"415\":5,\"418\":2,\"419\":1,\"422\":1,\"423\":1,\"424\":2,\"427\":1,\"428\":1,\"430\":2,\"433\":1,\"435\":1,\"438\":8,\"439\":5,\"441\":1,\"442\":5,\"444\":1,\"445\":1,\"448\":2,\"449\":1,\"452\":2,\"453\":1,\"454\":2,\"456\":5,\"459\":1,\"461\":1,\"464\":9,\"465\":6,\"467\":1,\"471\":2,\"472\":1,\"475\":2,\"476\":1,\"477\":2,\"479\":5,\"482\":1,\"484\":1,\"487\":8,\"488\":6,\"490\":1,\"493\":1,\"494\":1,\"497\":2,\"498\":1,\"501\":2,\"502\":1,\"503\":2,\"505\":5,\"508\":1,\"510\":1,\"513\":8,\"514\":6,\"516\":1,\"519\":2,\"520\":3,\"523\":2,\"524\":1,\"527\":1,\"528\":1,\"529\":2,\"531\":1,\"535\":2,\"538\":1,\"540\":1,\"543\":8,\"544\":6,\"546\":1,\"547\":5,\"549\":1,\"550\":1,\"553\":2,\"554\":1,\"557\":1,\"558\":1,\"559\":2,\"561\":1,\"565\":2,\"568\":1,\"570\":1,\"573\":8,\"574\":5,\"576\":1,\"577\":5,\"579\":1,\"580\":1,\"583\":2,\"584\":1,\"587\":1,\"588\":1,\"589\":2,\"591\":1,\"595\":2,\"598\":1,\"600\":1,\"603\":8,\"604\":5,\"606\":1,\"607\":5,\"609\":1,\"610\":1,\"611\":1,\"612\":2,\"622\":4,\"623\":1,\"624\":2,\"625\":1,\"626\":5,\"629\":2,\"630\":1,\"633\":1,\"634\":1,\"635\":2,\"637\":1,\"641\":2,\"644\":1,\"646\":1,\"649\":8,\"650\":5,\"652\":1,\"653\":5,\"655\":1,\"656\":1,\"657\":1,\"658\":2,\"668\":4,\"669\":1,\"670\":2,\"671\":1,\"672\":5,\"675\":2,\"676\":1,\"679\":1,\"680\":1,\"681\":2,\"683\":1,\"687\":2,\"690\":1,\"692\":1,\"695\":8,\"696\":5,\"698\":1,\"699\":5,\"701\":1,\"702\":1,\"703\":1,\"704\":2,\"714\":4,\"715\":1,\"716\":2,\"717\":1,\"718\":5,\"721\":2,\"722\":1,\"725\":1,\"726\":1,\"727\":2,\"729\":1,\"733\":2,\"736\":1,\"738\":1,\"741\":8,\"742\":5,\"744\":1,\"745\":5,\"747\":1,\"748\":1,\"749\":1,\"750\":2,\"760\":4,\"761\":1,\"762\":2,\"763\":1,\"764\":5,\"767\":2,\"768\":1,\"771\":1,\"772\":1,\"773\":2,\"776\":1,\"777\":1,\"779\":2,\"782\":1,\"784\":1,\"787\":8,\"788\":5,\"790\":1,\"791\":5,\"793\":1,\"794\":1,\"798\":2,\"799\":1,\"800\":1,\"801\":1,\"803\":1,\"806\":2,\"810\":1,\"836\":1,\"837\":1,\"840\":1,\"843\":1,\"844\":1,\"847\":2,\"848\":2,\"849\":1,\"855\":1,\"858\":1,\"861\":1,\"862\":2,\"870\":1,\"871\":3,\"876\":1,\"881\":1,\"887\":2,\"888\":2,\"890\":1,\"891\":2,\"892\":2,\"893\":1,\"904\":1,\"909\":1,\"910\":1,\"925\":3,\"926\":1,\"927\":1,\"928\":1,\"930\":1,\"932\":1,\"933\":2,\"941\":1,\"946\":1,\"947\":1,\"949\":1,\"953\":1,\"954\":1,\"955\":1,\"956\":1,\"957\":1,\"958\":1,\"959\":1,\"970\":1,\"996\":1,\"1001\":1,\"1002\":1,\"1021\":1,\"1022\":1,\"1025\":1,\"1030\":1,\"1036\":1,\"1039\":1,\"1042\":1,\"1043\":1,\"1044\":2,\"1052\":1,\"1053\":3,\"1058\":1,\"1063\":1,\"1066\":2,\"1067\":2,\"1069\":1,\"1070\":2,\"1078\":1,\"1107\":1,\"1112\":1,\"1113\":1,\"1115\":1,\"1119\":1,\"1120\":1,\"1121\":1,\"1130\":1,\"1131\":1,\"1146\":1,\"1172\":1,\"1173\":1,\"1176\":1,\"1181\":1,\"1187\":1,\"1190\":1,\"1193\":1,\"1194\":1,\"1195\":2,\"1203\":1,\"1204\":3,\"1209\":1,\"1214\":1,\"1217\":2,\"1218\":2,\"1220\":1,\"1221\":2,\"1229\":3,\"1230\":1,\"1231\":1,\"1232\":1,\"1234\":1,\"1236\":1,\"1237\":2,\"1245\":1,\"1250\":1,\"1251\":1,\"1253\":1,\"1257\":1,\"1258\":1,\"1259\":1,\"1260\":1,\"1270\":1,\"1296\":1,\"1301\":1,\"1302\":1,\"1318\":1,\"1344\":1,\"1345\":1,\"1348\":1,\"1353\":2,\"1354\":2,\"1360\":1,\"1363\":1,\"1366\":1,\"1367\":2,\"1375\":1,\"1376\":3,\"1381\":1,\"1386\":1,\"1392\":2,\"1393\":2,\"1395\":1,\"1396\":2,\"1397\":2,\"1405\":3,\"1406\":1,\"1407\":1,\"1408\":1,\"1410\":1,\"1412\":1,\"1413\":2,\"1421\":1,\"1426\":1,\"1427\":1,\"1429\":1,\"1433\":1,\"1434\":1,\"1435\":1,\"1436\":1,\"1446\":1,\"1472\":1,\"1477\":1,\"1478\":1,\"1495\":1,\"1521\":1,\"1522\":1,\"1525\":1,\"1530\":2,\"1531\":2,\"1537\":1,\"1540\":1,\"1543\":1,\"1544\":2,\"1552\":1,\"1553\":3,\"1558\":1,\"1563\":1,\"1569\":2,\"1570\":2,\"1572\":1,\"1573\":2,\"1574\":2,\"1582\":3,\"1583\":1,\"1584\":1,\"1585\":1,\"1587\":1,\"1589\":1,\"1590\":2,\"1598\":1,\"1603\":1,\"1604\":1,\"1606\":1,\"1610\":1,\"1611\":1,\"1612\":1,\"1613\":1,\"1623\":1,\"1649\":1,\"1654\":1,\"1655\":1,\"1672\":1,\"1698\":1,\"1699\":1,\"1702\":1,\"1707\":2,\"1708\":2,\"1714\":1,\"1717\":1,\"1720\":1,\"1721\":2,\"1729\":1,\"1730\":3,\"1735\":1,\"1740\":1,\"1746\":2,\"1747\":2,\"1749\":1,\"1750\":2,\"1751\":2,\"1759\":3,\"1760\":1,\"1761\":1,\"1762\":1,\"1764\":1,\"1766\":1,\"1767\":2,\"1775\":1,\"1780\":1,\"1781\":1,\"1783\":1,\"1787\":1,\"1788\":1,\"1789\":1,\"1790\":1,\"1800\":1,\"1826\":1,\"1831\":1,\"1832\":1,\"1849\":1,\"1875\":1,\"1876\":1,\"1879\":1,\"1884\":2,\"1885\":2,\"1891\":1,\"1894\":1,\"1897\":1,\"1898\":2,\"1906\":1,\"1907\":3,\"1912\":1,\"1917\":1,\"1923\":2,\"1924\":2,\"1926\":1,\"1927\":2,\"1928\":2,\"1936\":3,\"1937\":1,\"1938\":1,\"1939\":1,\"1941\":1,\"1943\":1,\"1944\":2,\"1952\":1,\"1957\":1,\"1958\":1,\"1960\":1,\"1964\":1,\"1965\":1,\"1966\":1,\"1967\":1,\"1977\":1,\"2003\":1,\"2008\":1,\"2009\":1,\"2026\":1,\"2052\":1,\"2053\":1,\"2056\":1,\"2061\":2,\"2062\":2,\"2068\":1,\"2071\":1,\"2074\":1,\"2075\":2,\"2083\":1,\"2084\":3,\"2089\":1,\"2094\":1,\"2100\":2,\"2101\":2,\"2103\":1,\"2104\":2,\"2105\":2,\"2113\":3,\"2114\":1,\"2115\":1,\"2116\":1,\"2118\":1,\"2120\":1,\"2121\":2,\"2129\":1,\"2134\":1,\"2135\":1,\"2137\":1,\"2141\":1,\"2142\":1,\"2143\":1,\"2144\":1,\"2154\":1,\"2180\":1,\"2185\":1,\"2186\":1,\"2201\":2,\"2202\":1,\"2203\":1,\"2204\":1,\"2206\":1,\"2209\":2,\"2213\":1,\"2239\":1,\"2240\":1,\"2243\":1,\"2246\":1,\"2247\":1,\"2250\":2,\"2251\":2,\"2252\":1,\"2258\":1,\"2261\":1,\"2264\":1,\"2265\":2,\"2273\":1,\"2274\":3,\"2279\":1,\"2284\":1,\"2290\":2,\"2291\":2,\"2293\":1,\"2294\":2,\"2295\":2,\"2296\":1,\"2307\":1,\"2312\":1,\"2313\":1,\"2328\":3,\"2329\":1,\"2330\":1,\"2331\":1,\"2333\":1,\"2335\":1,\"2336\":2,\"2344\":1,\"2349\":1,\"2350\":1,\"2352\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2359\":1,\"2360\":1,\"2361\":1,\"2362\":1,\"2373\":1,\"2399\":1,\"2404\":1,\"2405\":1,\"2420\":2,\"2421\":1,\"2422\":1,\"2423\":1,\"2425\":1,\"2428\":2,\"2432\":1,\"2458\":1,\"2459\":1,\"2462\":1,\"2465\":1,\"2466\":1,\"2469\":2,\"2470\":2,\"2471\":1,\"2477\":1,\"2480\":1,\"2483\":1,\"2484\":2,\"2492\":1,\"2493\":3,\"2498\":1,\"2503\":1,\"2509\":2,\"2510\":2,\"2512\":1,\"2513\":2,\"2514\":2,\"2515\":1,\"2526\":1,\"2531\":1,\"2532\":1,\"2547\":3,\"2548\":1,\"2549\":1,\"2550\":1,\"2552\":1,\"2554\":1,\"2555\":2,\"2563\":1,\"2568\":1,\"2569\":1,\"2571\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2578\":1,\"2579\":1,\"2580\":1,\"2581\":1,\"2592\":1,\"2618\":1,\"2623\":1,\"2624\":1,\"2639\":2,\"2640\":1,\"2641\":1,\"2642\":1,\"2644\":1,\"2647\":2,\"2651\":1,\"2677\":1,\"2678\":1,\"2681\":1,\"2684\":1,\"2685\":1,\"2688\":2,\"2689\":2,\"2690\":1,\"2696\":1,\"2699\":1,\"2702\":1,\"2703\":2,\"2711\":1,\"2712\":3,\"2717\":1,\"2722\":1,\"2728\":2,\"2729\":2,\"2731\":1,\"2732\":2,\"2733\":2,\"2734\":1,\"2745\":1,\"2750\":1,\"2751\":1,\"2766\":3,\"2767\":1,\"2768\":1,\"2769\":1,\"2771\":1,\"2773\":1,\"2774\":2,\"2782\":1,\"2787\":1,\"2788\":1,\"2790\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2797\":1,\"2798\":1,\"2799\":1,\"2800\":1,\"2811\":1,\"2837\":1,\"2842\":1,\"2843\":1}}],[\"origin\",{\"1\":{\"257\":2}}],[\"origins\",{\"0\":{\"257\":1},\"1\":{\"257\":2}}],[\"orchestrates\",{\"1\":{\"94\":1}}],[\"org\",{\"0\":{\"170\":1,\"171\":2,\"172\":1,\"173\":1,\"174\":1,\"175\":2,\"176\":1,\"177\":1,\"178\":2,\"179\":1,\"180\":1,\"181\":1,\"182\":1,\"183\":1,\"184\":1,\"185\":2,\"186\":2,\"187\":1,\"188\":1,\"189\":1,\"190\":1,\"191\":1,\"192\":2,\"193\":1,\"194\":1,\"195\":2,\"196\":1,\"197\":1,\"198\":1,\"199\":1,\"200\":1,\"201\":1,\"202\":1,\"203\":1,\"204\":1,\"205\":1,\"206\":1,\"207\":1,\"208\":1,\"209\":1,\"210\":2,\"211\":1,\"212\":1,\"213\":1,\"214\":1,\"215\":2,\"216\":1,\"217\":1,\"218\":1,\"219\":1,\"220\":1,\"221\":2,\"222\":1,\"223\":1,\"224\":1,\"225\":1,\"226\":1,\"227\":1,\"228\":1,\"229\":1,\"230\":1,\"231\":1,\"232\":1,\"233\":1,\"234\":1,\"237\":1,\"238\":1,\"239\":2,\"240\":2,\"241\":1,\"242\":1,\"243\":1,\"244\":1,\"245\":1,\"246\":1,\"247\":2,\"248\":1,\"249\":1,\"250\":1,\"251\":2,\"252\":1,\"253\":2,\"254\":1,\"255\":1,\"256\":1,\"257\":1,\"258\":1,\"259\":1,\"260\":1,\"261\":1,\"262\":1},\"1\":{\"84\":1,\"130\":2,\"148\":3,\"149\":3,\"155\":317,\"156\":1,\"158\":4,\"170\":2,\"171\":2,\"172\":1,\"173\":1,\"174\":1,\"175\":2,\"176\":2,\"177\":1,\"178\":2,\"179\":1,\"180\":1,\"181\":1,\"182\":1,\"183\":1,\"184\":3,\"185\":2,\"186\":2,\"187\":1,\"188\":1,\"189\":1,\"190\":1,\"191\":1,\"192\":2,\"193\":1,\"194\":1,\"195\":2,\"196\":1,\"197\":1,\"198\":1,\"199\":1,\"200\":1,\"201\":1,\"202\":1,\"203\":1,\"204\":1,\"205\":1,\"206\":1,\"207\":1,\"208\":2,\"209\":4,\"210\":2,\"211\":1,\"212\":1,\"213\":1,\"214\":1,\"215\":3,\"216\":1,\"217\":1,\"218\":1,\"219\":1,\"220\":1,\"221\":2,\"222\":1,\"223\":1,\"224\":2,\"225\":2,\"226\":1,\"227\":2,\"228\":2,\"229\":1,\"230\":1,\"231\":1,\"232\":1,\"233\":1,\"234\":2,\"237\":1,\"238\":3,\"239\":2,\"240\":2,\"241\":1,\"242\":1,\"243\":1,\"244\":1,\"245\":1,\"246\":1,\"247\":2,\"248\":1,\"249\":1,\"250\":1,\"251\":2,\"252\":1,\"253\":2,\"254\":2,\"255\":1,\"256\":1,\"257\":1,\"258\":1,\"259\":1,\"260\":1,\"261\":1,\"262\":1,\"285\":7,\"286\":3,\"296\":8,\"297\":3,\"299\":1,\"300\":10,\"302\":1,\"303\":5,\"305\":1,\"306\":2,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"323\":90,\"328\":3,\"329\":1,\"334\":2,\"342\":1,\"344\":1,\"345\":2,\"348\":1,\"353\":1,\"354\":2,\"357\":5,\"358\":5,\"359\":10,\"360\":1,\"363\":2,\"373\":1,\"380\":2,\"383\":5,\"384\":5,\"385\":12,\"389\":3,\"394\":4,\"442\":1,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"791\":1,\"806\":2,\"905\":1,\"933\":2,\"997\":1,\"1237\":2,\"1297\":1,\"1413\":2,\"1473\":1,\"1590\":2,\"1650\":1,\"1767\":2,\"1827\":1,\"1944\":2,\"2004\":1,\"2121\":2,\"2181\":1,\"2209\":2,\"2308\":1,\"2336\":2,\"2400\":1,\"2428\":2,\"2527\":1,\"2555\":2,\"2619\":1,\"2647\":2,\"2746\":1,\"2774\":2,\"2838\":1}}],[\"organisational\",{\"1\":{\"94\":1}}],[\"organisationaffiliation\",{\"1\":{\"81\":1}}],[\"organisations\",{\"1\":{\"84\":2,\"87\":1,\"105\":3,\"108\":1}}],[\"organisation\",{\"1\":{\"84\":3,\"85\":2,\"86\":1,\"105\":1}}],[\"organizationaffiliation\",{\"1\":{\"357\":1,\"358\":1,\"383\":2,\"384\":1}}],[\"organizational\",{\"1\":{\"0\":1,\"78\":1,\"90\":2,\"94\":1,\"112\":1,\"113\":1,\"395\":1}}],[\"organization\",{\"0\":{\"204\":1,\"259\":1,\"958\":1,\"959\":1,\"1043\":1,\"1121\":1,\"1194\":1,\"1259\":1,\"1260\":1,\"1435\":1,\"1436\":1,\"1612\":1,\"1613\":1,\"1789\":1,\"1790\":1,\"1966\":1,\"1967\":1,\"2143\":1,\"2144\":1,\"2361\":1,\"2362\":1,\"2580\":1,\"2581\":1,\"2799\":1,\"2800\":1},\"1\":{\"81\":5,\"93\":3,\"95\":1,\"99\":1,\"103\":1,\"123\":1,\"165\":1,\"204\":2,\"229\":1,\"259\":2,\"285\":6,\"286\":3,\"296\":6,\"297\":3,\"300\":4,\"303\":2,\"319\":2,\"323\":6,\"329\":2,\"330\":2,\"331\":1,\"334\":4,\"338\":2,\"344\":1,\"348\":3,\"350\":4,\"352\":3,\"353\":2,\"357\":8,\"358\":7,\"359\":8,\"360\":3,\"363\":10,\"373\":4,\"377\":3,\"379\":1,\"383\":8,\"384\":7,\"385\":6,\"389\":15,\"424\":3,\"438\":5,\"439\":1,\"454\":4,\"464\":4,\"465\":3,\"477\":4,\"487\":5,\"488\":4,\"503\":4,\"513\":5,\"514\":4,\"529\":4,\"543\":5,\"544\":4,\"559\":3,\"573\":5,\"574\":1,\"589\":3,\"603\":5,\"604\":1,\"635\":3,\"649\":5,\"650\":1,\"681\":3,\"695\":5,\"696\":1,\"727\":3,\"741\":5,\"742\":1,\"773\":3,\"787\":5,\"788\":1,\"887\":1,\"925\":2,\"958\":2,\"959\":2,\"1043\":2,\"1066\":1,\"1121\":2,\"1194\":2,\"1217\":1,\"1229\":2,\"1259\":2,\"1260\":2,\"1392\":1,\"1405\":2,\"1435\":2,\"1436\":2,\"1569\":1,\"1582\":2,\"1612\":2,\"1613\":2,\"1746\":1,\"1759\":2,\"1789\":2,\"1790\":2,\"1923\":1,\"1936\":2,\"1966\":2,\"1967\":2,\"2100\":1,\"2113\":2,\"2143\":2,\"2144\":2,\"2290\":1,\"2328\":2,\"2361\":2,\"2362\":2,\"2509\":1,\"2547\":2,\"2580\":2,\"2581\":2,\"2728\":1,\"2766\":2,\"2799\":2,\"2800\":2}}],[\"organizations\",{\"1\":{\"0\":1,\"5\":1,\"6\":1,\"10\":1,\"81\":3,\"90\":1,\"93\":1,\"95\":4,\"96\":1,\"100\":1,\"102\":4,\"103\":2,\"106\":4,\"108\":1,\"112\":1,\"113\":2,\"126\":1,\"161\":4,\"163\":2,\"165\":4,\"166\":1,\"276\":1,\"285\":2,\"286\":1,\"287\":1,\"296\":2,\"297\":1,\"319\":1,\"321\":1,\"327\":1,\"344\":3,\"350\":3,\"352\":1,\"357\":4,\"358\":2,\"375\":1,\"383\":4,\"384\":2,\"395\":1,\"396\":1,\"399\":1,\"424\":1,\"438\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"559\":1,\"573\":1,\"589\":1,\"603\":1,\"635\":1,\"649\":1,\"681\":1,\"695\":1,\"727\":1,\"741\":1,\"773\":1,\"787\":1,\"798\":1,\"2201\":1,\"2420\":1,\"2639\":1}}],[\"ort\",{\"1\":{\"14\":1,\"41\":1}}],[\"or\",{\"0\":{\"171\":1,\"175\":1,\"178\":1,\"185\":1,\"186\":1,\"192\":1,\"195\":1,\"210\":1,\"215\":1,\"221\":1,\"239\":1,\"240\":1,\"247\":1,\"251\":1,\"253\":1,\"819\":1,\"828\":1,\"834\":1,\"838\":1,\"841\":1,\"852\":1,\"867\":1,\"872\":1,\"878\":1,\"898\":1,\"937\":1,\"944\":1,\"948\":1,\"950\":1,\"965\":1,\"979\":1,\"988\":1,\"1019\":1,\"1023\":1,\"1026\":1,\"1033\":1,\"1049\":1,\"1054\":1,\"1060\":1,\"1072\":1,\"1087\":1,\"1096\":1,\"1103\":1,\"1110\":1,\"1114\":1,\"1116\":1,\"1126\":1,\"1155\":1,\"1164\":1,\"1170\":1,\"1174\":1,\"1177\":1,\"1184\":1,\"1200\":1,\"1205\":1,\"1211\":1,\"1223\":1,\"1241\":1,\"1248\":1,\"1252\":1,\"1254\":1,\"1265\":1,\"1279\":1,\"1288\":1,\"1327\":1,\"1336\":1,\"1342\":1,\"1346\":1,\"1349\":1,\"1357\":1,\"1372\":1,\"1377\":1,\"1383\":1,\"1399\":1,\"1417\":1,\"1424\":1,\"1428\":1,\"1430\":1,\"1441\":1,\"1455\":1,\"1464\":1,\"1504\":1,\"1513\":1,\"1519\":1,\"1523\":1,\"1526\":1,\"1534\":1,\"1549\":1,\"1554\":1,\"1560\":1,\"1576\":1,\"1594\":1,\"1601\":1,\"1605\":1,\"1607\":1,\"1618\":1,\"1632\":1,\"1641\":1,\"1681\":1,\"1690\":1,\"1696\":1,\"1700\":1,\"1703\":1,\"1711\":1,\"1726\":1,\"1731\":1,\"1737\":1,\"1753\":1,\"1771\":1,\"1778\":1,\"1782\":1,\"1784\":1,\"1795\":1,\"1809\":1,\"1818\":1,\"1858\":1,\"1867\":1,\"1873\":1,\"1877\":1,\"1880\":1,\"1888\":1,\"1903\":1,\"1908\":1,\"1914\":1,\"1930\":1,\"1948\":1,\"1955\":1,\"1959\":1,\"1961\":1,\"1972\":1,\"1986\":1,\"1995\":1,\"2035\":1,\"2044\":1,\"2050\":1,\"2054\":1,\"2057\":1,\"2065\":1,\"2080\":1,\"2085\":1,\"2091\":1,\"2107\":1,\"2125\":1,\"2132\":1,\"2136\":1,\"2138\":1,\"2149\":1,\"2163\":1,\"2172\":1,\"2222\":1,\"2231\":1,\"2237\":1,\"2241\":1,\"2244\":1,\"2255\":1,\"2270\":1,\"2275\":1,\"2281\":1,\"2301\":1,\"2340\":1,\"2347\":1,\"2351\":1,\"2353\":1,\"2368\":1,\"2382\":1,\"2391\":1,\"2441\":1,\"2450\":1,\"2456\":1,\"2460\":1,\"2463\":1,\"2474\":1,\"2489\":1,\"2494\":1,\"2500\":1,\"2520\":1,\"2559\":1,\"2566\":1,\"2570\":1,\"2572\":1,\"2587\":1,\"2601\":1,\"2610\":1,\"2660\":1,\"2669\":1,\"2675\":1,\"2679\":1,\"2682\":1,\"2693\":1,\"2708\":1,\"2713\":1,\"2719\":1,\"2739\":1,\"2778\":1,\"2785\":1,\"2789\":1,\"2791\":1,\"2806\":1,\"2820\":1,\"2829\":1},\"1\":{\"0\":1,\"12\":2,\"33\":1,\"36\":1,\"37\":2,\"38\":1,\"39\":1,\"40\":1,\"71\":1,\"77\":1,\"82\":1,\"87\":1,\"90\":7,\"91\":3,\"93\":3,\"94\":1,\"95\":2,\"96\":1,\"98\":1,\"109\":1,\"113\":1,\"116\":1,\"122\":1,\"134\":2,\"155\":1,\"164\":1,\"165\":2,\"166\":1,\"173\":1,\"182\":1,\"184\":1,\"201\":1,\"209\":1,\"217\":1,\"222\":1,\"223\":1,\"224\":1,\"229\":1,\"232\":1,\"233\":1,\"238\":1,\"245\":1,\"249\":1,\"257\":1,\"258\":1,\"261\":1,\"262\":1,\"265\":1,\"273\":1,\"280\":1,\"284\":1,\"285\":1,\"286\":8,\"291\":1,\"295\":1,\"296\":1,\"297\":3,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"315\":1,\"329\":2,\"330\":2,\"334\":2,\"341\":1,\"343\":1,\"344\":1,\"348\":1,\"352\":2,\"353\":1,\"355\":1,\"357\":2,\"358\":1,\"377\":3,\"381\":1,\"383\":2,\"384\":1,\"389\":2,\"390\":1,\"397\":1,\"410\":3,\"411\":2,\"412\":1,\"413\":3,\"414\":2,\"415\":2,\"423\":2,\"424\":1,\"425\":2,\"428\":1,\"429\":1,\"430\":1,\"434\":1,\"435\":1,\"437\":1,\"438\":1,\"439\":1,\"441\":1,\"443\":1,\"453\":2,\"455\":2,\"456\":1,\"460\":1,\"461\":1,\"463\":1,\"464\":2,\"465\":1,\"467\":1,\"476\":2,\"478\":2,\"479\":1,\"483\":1,\"484\":1,\"486\":1,\"487\":1,\"488\":1,\"490\":1,\"502\":2,\"504\":2,\"505\":1,\"509\":1,\"510\":1,\"512\":1,\"513\":1,\"514\":1,\"516\":1,\"519\":1,\"528\":2,\"529\":1,\"530\":2,\"535\":1,\"539\":1,\"540\":1,\"542\":1,\"543\":1,\"544\":1,\"546\":1,\"548\":1,\"558\":2,\"559\":1,\"560\":2,\"565\":1,\"569\":1,\"570\":1,\"572\":1,\"573\":1,\"574\":1,\"576\":1,\"578\":1,\"588\":2,\"589\":1,\"590\":2,\"595\":1,\"599\":1,\"600\":1,\"602\":1,\"603\":1,\"604\":1,\"606\":1,\"608\":1,\"621\":3,\"622\":2,\"623\":1,\"624\":3,\"625\":2,\"626\":2,\"634\":2,\"635\":1,\"636\":2,\"641\":1,\"645\":1,\"646\":1,\"648\":1,\"649\":1,\"650\":1,\"652\":1,\"654\":1,\"667\":3,\"668\":2,\"669\":1,\"670\":3,\"671\":2,\"672\":2,\"680\":2,\"681\":1,\"682\":2,\"687\":1,\"691\":1,\"692\":1,\"694\":1,\"695\":1,\"696\":1,\"698\":1,\"700\":1,\"713\":3,\"714\":2,\"715\":1,\"716\":3,\"717\":2,\"718\":2,\"726\":2,\"727\":1,\"728\":2,\"733\":1,\"737\":1,\"738\":1,\"740\":1,\"741\":1,\"742\":1,\"744\":1,\"746\":1,\"759\":3,\"760\":2,\"761\":1,\"762\":3,\"763\":2,\"764\":2,\"772\":2,\"773\":1,\"774\":2,\"777\":1,\"778\":1,\"779\":1,\"783\":1,\"784\":1,\"786\":1,\"787\":1,\"788\":1,\"790\":1,\"792\":1,\"798\":3,\"799\":2,\"800\":1,\"818\":1,\"822\":1,\"824\":1,\"836\":1,\"847\":1,\"848\":1,\"851\":1,\"859\":1,\"866\":1,\"874\":1,\"879\":1,\"880\":1,\"881\":1,\"887\":1,\"890\":1,\"891\":1,\"892\":1,\"897\":2,\"909\":1,\"918\":1,\"925\":1,\"926\":2,\"927\":1,\"936\":1,\"940\":1,\"946\":1,\"957\":1,\"964\":2,\"978\":1,\"982\":1,\"984\":1,\"1001\":1,\"1010\":1,\"1021\":1,\"1030\":1,\"1032\":1,\"1040\":1,\"1048\":1,\"1056\":1,\"1061\":1,\"1062\":1,\"1063\":1,\"1066\":1,\"1069\":1,\"1070\":1,\"1071\":2,\"1086\":1,\"1090\":1,\"1092\":1,\"1102\":1,\"1106\":1,\"1112\":1,\"1120\":1,\"1125\":2,\"1130\":1,\"1138\":1,\"1154\":1,\"1158\":1,\"1160\":1,\"1172\":1,\"1181\":1,\"1183\":1,\"1191\":1,\"1199\":1,\"1207\":1,\"1212\":1,\"1213\":1,\"1214\":1,\"1217\":1,\"1220\":1,\"1221\":1,\"1222\":2,\"1229\":1,\"1230\":2,\"1231\":1,\"1240\":1,\"1244\":1,\"1250\":1,\"1258\":1,\"1262\":1,\"1264\":2,\"1278\":1,\"1282\":1,\"1284\":1,\"1301\":1,\"1309\":1,\"1326\":1,\"1330\":1,\"1332\":1,\"1344\":1,\"1353\":1,\"1354\":1,\"1356\":1,\"1364\":1,\"1371\":1,\"1379\":1,\"1384\":1,\"1385\":1,\"1386\":1,\"1392\":1,\"1395\":1,\"1396\":1,\"1397\":1,\"1398\":2,\"1405\":1,\"1406\":2,\"1407\":1,\"1416\":1,\"1420\":1,\"1426\":1,\"1434\":1,\"1440\":2,\"1454\":1,\"1458\":1,\"1460\":1,\"1477\":1,\"1486\":1,\"1503\":1,\"1507\":1,\"1509\":1,\"1521\":1,\"1530\":1,\"1531\":1,\"1533\":1,\"1541\":1,\"1548\":1,\"1556\":1,\"1561\":1,\"1562\":1,\"1563\":1,\"1569\":1,\"1572\":1,\"1573\":1,\"1574\":1,\"1575\":2,\"1582\":1,\"1583\":2,\"1584\":1,\"1593\":1,\"1597\":1,\"1603\":1,\"1611\":1,\"1617\":2,\"1631\":1,\"1635\":1,\"1637\":1,\"1654\":1,\"1663\":1,\"1680\":1,\"1684\":1,\"1686\":1,\"1698\":1,\"1707\":1,\"1708\":1,\"1710\":1,\"1718\":1,\"1725\":1,\"1733\":1,\"1738\":1,\"1739\":1,\"1740\":1,\"1746\":1,\"1749\":1,\"1750\":1,\"1751\":1,\"1752\":2,\"1759\":1,\"1760\":2,\"1761\":1,\"1770\":1,\"1774\":1,\"1780\":1,\"1788\":1,\"1794\":2,\"1808\":1,\"1812\":1,\"1814\":1,\"1831\":1,\"1840\":1,\"1857\":1,\"1861\":1,\"1863\":1,\"1875\":1,\"1884\":1,\"1885\":1,\"1887\":1,\"1895\":1,\"1902\":1,\"1910\":1,\"1915\":1,\"1916\":1,\"1917\":1,\"1923\":1,\"1926\":1,\"1927\":1,\"1928\":1,\"1929\":2,\"1936\":1,\"1937\":2,\"1938\":1,\"1947\":1,\"1951\":1,\"1957\":1,\"1965\":1,\"1971\":2,\"1985\":1,\"1989\":1,\"1991\":1,\"2008\":1,\"2017\":1,\"2034\":1,\"2038\":1,\"2040\":1,\"2052\":1,\"2061\":1,\"2062\":1,\"2064\":1,\"2072\":1,\"2079\":1,\"2087\":1,\"2092\":1,\"2093\":1,\"2094\":1,\"2100\":1,\"2103\":1,\"2104\":1,\"2105\":1,\"2106\":2,\"2113\":1,\"2114\":2,\"2115\":1,\"2124\":1,\"2128\":1,\"2134\":1,\"2142\":1,\"2148\":2,\"2162\":1,\"2166\":1,\"2168\":1,\"2185\":1,\"2194\":1,\"2201\":3,\"2202\":2,\"2203\":1,\"2221\":1,\"2225\":1,\"2227\":1,\"2239\":1,\"2250\":1,\"2251\":1,\"2254\":1,\"2262\":1,\"2269\":1,\"2277\":1,\"2282\":1,\"2283\":1,\"2284\":1,\"2290\":1,\"2293\":1,\"2294\":1,\"2295\":1,\"2300\":2,\"2312\":1,\"2321\":1,\"2328\":1,\"2329\":2,\"2330\":1,\"2339\":1,\"2343\":1,\"2349\":1,\"2360\":1,\"2367\":2,\"2381\":1,\"2385\":1,\"2387\":1,\"2404\":1,\"2413\":1,\"2420\":3,\"2421\":2,\"2422\":1,\"2440\":1,\"2444\":1,\"2446\":1,\"2458\":1,\"2469\":1,\"2470\":1,\"2473\":1,\"2481\":1,\"2488\":1,\"2496\":1,\"2501\":1,\"2502\":1,\"2503\":1,\"2509\":1,\"2512\":1,\"2513\":1,\"2514\":1,\"2519\":2,\"2531\":1,\"2540\":1,\"2547\":1,\"2548\":2,\"2549\":1,\"2558\":1,\"2562\":1,\"2568\":1,\"2579\":1,\"2586\":2,\"2600\":1,\"2604\":1,\"2606\":1,\"2623\":1,\"2632\":1,\"2639\":3,\"2640\":2,\"2641\":1,\"2659\":1,\"2663\":1,\"2665\":1,\"2677\":1,\"2688\":1,\"2689\":1,\"2692\":1,\"2700\":1,\"2707\":1,\"2715\":1,\"2720\":1,\"2721\":1,\"2722\":1,\"2728\":1,\"2731\":1,\"2732\":1,\"2733\":1,\"2738\":2,\"2750\":1,\"2759\":1,\"2766\":1,\"2767\":2,\"2768\":1,\"2777\":1,\"2781\":1,\"2787\":1,\"2798\":1,\"2805\":2,\"2819\":1,\"2823\":1,\"2825\":1,\"2842\":1,\"2851\":1}}],[\"order\",{\"1\":{\"0\":1,\"32\":1,\"95\":1,\"124\":1,\"134\":1,\"141\":2,\"142\":1,\"143\":2,\"145\":1,\"146\":1,\"158\":1,\"165\":1,\"170\":1,\"227\":1,\"228\":1,\"234\":1,\"286\":1,\"315\":1,\"318\":1,\"328\":1,\"340\":1,\"352\":1,\"353\":1,\"377\":1,\"379\":2,\"390\":1,\"394\":1,\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"others\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"other\",{\"1\":{\"0\":1,\"9\":1,\"32\":1,\"37\":1,\"73\":1,\"81\":1,\"84\":2,\"87\":1,\"91\":1,\"93\":1,\"94\":1,\"95\":4,\"106\":1,\"108\":2,\"112\":1,\"113\":1,\"143\":1,\"161\":1,\"163\":2,\"165\":4,\"285\":1,\"296\":1,\"314\":1,\"367\":1,\"377\":1,\"404\":1,\"413\":1,\"415\":2,\"435\":4,\"438\":2,\"461\":4,\"464\":2,\"484\":4,\"487\":2,\"510\":4,\"513\":2,\"540\":4,\"543\":2,\"570\":4,\"573\":2,\"600\":4,\"603\":2,\"615\":1,\"624\":1,\"626\":2,\"646\":4,\"649\":2,\"661\":1,\"670\":1,\"672\":2,\"692\":4,\"695\":2,\"707\":1,\"716\":1,\"718\":2,\"738\":4,\"741\":2,\"753\":1,\"762\":1,\"764\":2,\"784\":4,\"787\":2,\"798\":1,\"2201\":1,\"2420\":1,\"2639\":1}}],[\"onopen\",{\"1\":{\"440\":2,\"466\":2,\"489\":2,\"515\":2,\"545\":2,\"575\":2,\"605\":2,\"651\":2,\"697\":2,\"743\":2,\"789\":2}}],[\"onactivitystart\",{\"0\":{\"181\":1,\"846\":1,\"1029\":1,\"1180\":1,\"1352\":1,\"1529\":1,\"1706\":1,\"1883\":1,\"2060\":1,\"2249\":1,\"2468\":1,\"2687\":1},\"1\":{\"181\":1,\"846\":1,\"1029\":1,\"1180\":1,\"1352\":1,\"1529\":1,\"1706\":1,\"1883\":1,\"2060\":1,\"2249\":1,\"2468\":1,\"2687\":1}}],[\"onactivityend\",{\"0\":{\"180\":1,\"845\":1,\"1028\":1,\"1179\":1,\"1351\":1,\"1528\":1,\"1705\":1,\"1882\":1,\"2059\":1,\"2248\":1,\"2467\":1,\"2686\":1},\"1\":{\"180\":1,\"845\":1,\"1028\":1,\"1179\":1,\"1351\":1,\"1528\":1,\"1705\":1,\"1882\":1,\"2059\":1,\"2248\":1,\"2467\":1,\"2686\":1}}],[\"onboarding\",{\"1\":{\"113\":1}}],[\"ones\",{\"1\":{\"93\":1,\"144\":2,\"368\":1,\"442\":1,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"791\":1}}],[\"one\",{\"1\":{\"93\":2,\"123\":1,\"141\":1,\"143\":2,\"150\":1,\"155\":24,\"156\":1,\"158\":1,\"201\":1,\"222\":1,\"224\":1,\"245\":1,\"285\":1,\"296\":1,\"319\":1,\"334\":2,\"350\":1,\"394\":1,\"430\":1,\"438\":1,\"442\":1,\"456\":1,\"464\":1,\"479\":1,\"487\":1,\"505\":1,\"513\":1,\"520\":2,\"535\":1,\"543\":1,\"547\":1,\"565\":1,\"573\":1,\"577\":1,\"595\":1,\"603\":1,\"607\":1,\"641\":1,\"649\":1,\"653\":1,\"687\":1,\"695\":1,\"699\":1,\"733\":1,\"741\":1,\"745\":1,\"779\":1,\"787\":1,\"791\":1,\"800\":2,\"822\":1,\"824\":1,\"859\":1,\"879\":1,\"881\":1,\"897\":1,\"927\":2,\"940\":1,\"964\":1,\"982\":1,\"984\":1,\"1040\":1,\"1061\":1,\"1063\":1,\"1071\":1,\"1090\":1,\"1092\":1,\"1106\":1,\"1125\":1,\"1158\":1,\"1160\":1,\"1191\":1,\"1212\":1,\"1214\":1,\"1222\":1,\"1231\":2,\"1244\":1,\"1264\":1,\"1282\":1,\"1284\":1,\"1330\":1,\"1332\":1,\"1364\":1,\"1384\":1,\"1386\":1,\"1398\":1,\"1407\":2,\"1420\":1,\"1440\":1,\"1458\":1,\"1460\":1,\"1507\":1,\"1509\":1,\"1541\":1,\"1561\":1,\"1563\":1,\"1575\":1,\"1584\":2,\"1597\":1,\"1617\":1,\"1635\":1,\"1637\":1,\"1684\":1,\"1686\":1,\"1718\":1,\"1738\":1,\"1740\":1,\"1752\":1,\"1761\":2,\"1774\":1,\"1794\":1,\"1812\":1,\"1814\":1,\"1861\":1,\"1863\":1,\"1895\":1,\"1915\":1,\"1917\":1,\"1929\":1,\"1938\":2,\"1951\":1,\"1971\":1,\"1989\":1,\"1991\":1,\"2038\":1,\"2040\":1,\"2072\":1,\"2092\":1,\"2094\":1,\"2106\":1,\"2115\":2,\"2128\":1,\"2148\":1,\"2166\":1,\"2168\":1,\"2203\":2,\"2225\":1,\"2227\":1,\"2262\":1,\"2282\":1,\"2284\":1,\"2300\":1,\"2330\":2,\"2343\":1,\"2367\":1,\"2385\":1,\"2387\":1,\"2422\":2,\"2444\":1,\"2446\":1,\"2481\":1,\"2501\":1,\"2503\":1,\"2519\":1,\"2549\":2,\"2562\":1,\"2586\":1,\"2604\":1,\"2606\":1,\"2641\":2,\"2663\":1,\"2665\":1,\"2700\":1,\"2720\":1,\"2722\":1,\"2738\":1,\"2768\":2,\"2781\":1,\"2805\":1,\"2823\":1,\"2825\":1}}],[\"once\",{\"1\":{\"38\":1,\"84\":1,\"101\":1,\"354\":1,\"355\":1,\"356\":1,\"380\":1,\"381\":1,\"382\":1}}],[\"ontologie\",{\"1\":{\"14\":1}}],[\"only\",{\"1\":{\"5\":1,\"81\":1,\"86\":1,\"89\":1,\"98\":1,\"99\":1,\"105\":2,\"123\":1,\"150\":2,\"152\":1,\"155\":1,\"173\":1,\"180\":1,\"181\":1,\"182\":1,\"186\":1,\"187\":1,\"188\":1,\"189\":1,\"190\":1,\"192\":1,\"193\":1,\"194\":1,\"195\":1,\"196\":1,\"197\":1,\"198\":1,\"199\":1,\"229\":1,\"232\":1,\"240\":1,\"241\":1,\"242\":1,\"243\":1,\"244\":1,\"249\":1,\"258\":1,\"276\":1,\"281\":3,\"285\":1,\"286\":1,\"292\":3,\"296\":1,\"297\":1,\"323\":9,\"331\":1,\"334\":1,\"344\":1,\"355\":1,\"356\":1,\"359\":2,\"381\":1,\"382\":1,\"385\":2,\"403\":1,\"404\":1,\"435\":3,\"438\":1,\"439\":1,\"442\":1,\"453\":1,\"455\":1,\"461\":3,\"464\":1,\"465\":1,\"476\":1,\"478\":1,\"484\":3,\"487\":1,\"488\":1,\"502\":1,\"504\":1,\"510\":3,\"513\":1,\"514\":1,\"530\":1,\"540\":3,\"543\":1,\"544\":1,\"547\":1,\"570\":3,\"573\":1,\"574\":1,\"577\":1,\"600\":3,\"603\":1,\"604\":1,\"607\":1,\"614\":1,\"615\":1,\"646\":3,\"649\":1,\"650\":1,\"653\":1,\"660\":1,\"661\":1,\"692\":3,\"695\":1,\"696\":1,\"699\":1,\"706\":1,\"707\":1,\"738\":3,\"741\":1,\"742\":1,\"745\":1,\"752\":1,\"753\":1,\"784\":3,\"787\":1,\"788\":1,\"791\":1,\"798\":2,\"825\":1,\"826\":1,\"827\":1,\"828\":1,\"829\":1,\"832\":1,\"836\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"853\":1,\"854\":1,\"856\":1,\"857\":1,\"887\":1,\"890\":1,\"895\":1,\"902\":1,\"925\":3,\"933\":2,\"938\":1,\"939\":1,\"942\":1,\"946\":1,\"953\":1,\"954\":1,\"955\":1,\"957\":1,\"962\":1,\"985\":1,\"986\":1,\"987\":1,\"988\":1,\"989\":1,\"993\":1,\"1017\":1,\"1021\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1034\":1,\"1035\":1,\"1037\":1,\"1038\":1,\"1066\":1,\"1069\":1,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":1,\"1097\":1,\"1104\":1,\"1105\":1,\"1108\":1,\"1112\":1,\"1120\":1,\"1124\":1,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":1,\"1165\":1,\"1168\":1,\"1172\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1185\":1,\"1186\":1,\"1188\":1,\"1189\":1,\"1217\":1,\"1220\":1,\"1229\":3,\"1237\":2,\"1242\":1,\"1243\":1,\"1246\":1,\"1250\":1,\"1258\":1,\"1263\":1,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":1,\"1289\":1,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":1,\"1337\":1,\"1340\":1,\"1344\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1358\":1,\"1359\":1,\"1361\":1,\"1362\":1,\"1392\":1,\"1395\":1,\"1405\":3,\"1413\":2,\"1418\":1,\"1419\":1,\"1422\":1,\"1426\":1,\"1434\":1,\"1439\":1,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":1,\"1465\":1,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":1,\"1514\":1,\"1517\":1,\"1521\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1535\":1,\"1536\":1,\"1538\":1,\"1539\":1,\"1569\":1,\"1572\":1,\"1582\":3,\"1590\":2,\"1595\":1,\"1596\":1,\"1599\":1,\"1603\":1,\"1611\":1,\"1616\":1,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":1,\"1642\":1,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":1,\"1691\":1,\"1694\":1,\"1698\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1712\":1,\"1713\":1,\"1715\":1,\"1716\":1,\"1746\":1,\"1749\":1,\"1759\":3,\"1767\":2,\"1772\":1,\"1773\":1,\"1776\":1,\"1780\":1,\"1788\":1,\"1793\":1,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":1,\"1819\":1,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":1,\"1868\":1,\"1871\":1,\"1875\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1889\":1,\"1890\":1,\"1892\":1,\"1893\":1,\"1923\":1,\"1926\":1,\"1936\":3,\"1944\":2,\"1949\":1,\"1950\":1,\"1953\":1,\"1957\":1,\"1965\":1,\"1970\":1,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":1,\"1996\":1,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":1,\"2045\":1,\"2048\":1,\"2052\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2066\":1,\"2067\":1,\"2069\":1,\"2070\":1,\"2100\":1,\"2103\":1,\"2113\":3,\"2121\":2,\"2126\":1,\"2127\":1,\"2130\":1,\"2134\":1,\"2142\":1,\"2147\":1,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":1,\"2173\":1,\"2201\":2,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":1,\"2232\":1,\"2235\":1,\"2239\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2256\":1,\"2257\":1,\"2259\":1,\"2260\":1,\"2290\":1,\"2293\":1,\"2298\":1,\"2305\":1,\"2328\":3,\"2336\":2,\"2341\":1,\"2342\":1,\"2345\":1,\"2349\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2360\":1,\"2365\":1,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":1,\"2392\":1,\"2396\":1,\"2420\":2,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":1,\"2451\":1,\"2454\":1,\"2458\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2475\":1,\"2476\":1,\"2478\":1,\"2479\":1,\"2509\":1,\"2512\":1,\"2517\":1,\"2524\":1,\"2547\":3,\"2555\":2,\"2560\":1,\"2561\":1,\"2564\":1,\"2568\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2579\":1,\"2584\":1,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":1,\"2611\":1,\"2615\":1,\"2639\":2,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":1,\"2670\":1,\"2673\":1,\"2677\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2694\":1,\"2695\":1,\"2697\":1,\"2698\":1,\"2728\":1,\"2731\":1,\"2736\":1,\"2743\":1,\"2766\":3,\"2774\":2,\"2779\":1,\"2780\":1,\"2783\":1,\"2787\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2798\":1,\"2803\":1,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":1,\"2830\":1,\"2834\":1}}],[\"on\",{\"0\":{\"282\":1,\"293\":1,\"441\":1,\"467\":1,\"490\":1,\"516\":1,\"546\":1,\"576\":1,\"606\":1,\"652\":1,\"698\":1,\"744\":1,\"790\":1},\"1\":{\"0\":1,\"5\":1,\"12\":1,\"28\":1,\"32\":1,\"33\":3,\"37\":1,\"69\":1,\"70\":1,\"74\":1,\"75\":1,\"77\":2,\"78\":1,\"84\":1,\"86\":2,\"91\":1,\"92\":1,\"93\":5,\"95\":7,\"98\":1,\"108\":1,\"109\":1,\"112\":2,\"113\":3,\"115\":1,\"116\":1,\"122\":1,\"123\":2,\"126\":2,\"133\":4,\"143\":2,\"148\":2,\"149\":1,\"155\":35,\"156\":8,\"163\":1,\"164\":1,\"165\":7,\"166\":1,\"213\":1,\"214\":1,\"219\":1,\"229\":1,\"232\":1,\"258\":1,\"281\":1,\"282\":2,\"285\":1,\"286\":3,\"292\":1,\"293\":2,\"296\":1,\"297\":3,\"299\":2,\"300\":2,\"302\":2,\"303\":2,\"305\":2,\"306\":2,\"308\":2,\"309\":1,\"311\":2,\"312\":1,\"314\":2,\"316\":1,\"318\":1,\"320\":1,\"323\":6,\"325\":1,\"328\":1,\"337\":1,\"340\":1,\"342\":1,\"344\":1,\"348\":1,\"352\":1,\"360\":1,\"365\":1,\"369\":1,\"370\":2,\"373\":2,\"386\":2,\"389\":1,\"395\":1,\"396\":2,\"403\":2,\"407\":1,\"409\":1,\"410\":2,\"411\":3,\"415\":4,\"418\":1,\"419\":1,\"423\":1,\"425\":1,\"427\":1,\"438\":1,\"440\":1,\"441\":1,\"444\":2,\"445\":1,\"448\":1,\"449\":1,\"453\":2,\"455\":2,\"464\":1,\"466\":1,\"467\":1,\"471\":1,\"472\":1,\"476\":2,\"478\":2,\"487\":1,\"489\":1,\"490\":1,\"493\":2,\"494\":1,\"497\":1,\"498\":1,\"502\":2,\"504\":2,\"513\":1,\"515\":1,\"516\":1,\"519\":2,\"520\":1,\"523\":1,\"524\":1,\"528\":2,\"530\":1,\"543\":1,\"545\":1,\"546\":1,\"549\":2,\"550\":1,\"553\":1,\"554\":1,\"558\":1,\"560\":1,\"573\":1,\"575\":1,\"576\":1,\"579\":2,\"580\":1,\"583\":1,\"584\":1,\"588\":1,\"590\":1,\"603\":1,\"605\":1,\"606\":1,\"609\":2,\"610\":1,\"614\":2,\"618\":1,\"620\":1,\"621\":2,\"622\":3,\"626\":4,\"629\":1,\"630\":1,\"634\":1,\"636\":1,\"649\":1,\"651\":1,\"652\":1,\"655\":2,\"656\":1,\"660\":2,\"664\":1,\"666\":1,\"667\":2,\"668\":3,\"672\":4,\"675\":1,\"676\":1,\"680\":1,\"682\":1,\"695\":1,\"697\":1,\"698\":1,\"701\":2,\"702\":1,\"706\":2,\"710\":1,\"712\":1,\"713\":2,\"714\":3,\"718\":4,\"721\":1,\"722\":1,\"726\":1,\"728\":1,\"741\":1,\"743\":1,\"744\":1,\"747\":2,\"748\":1,\"752\":2,\"756\":1,\"758\":1,\"759\":2,\"760\":3,\"764\":4,\"767\":1,\"768\":1,\"772\":1,\"774\":1,\"776\":1,\"787\":1,\"789\":1,\"790\":1,\"793\":2,\"794\":1,\"870\":1,\"871\":1,\"876\":1,\"887\":1,\"890\":1,\"904\":1,\"957\":1,\"996\":1,\"1052\":1,\"1053\":1,\"1058\":1,\"1066\":1,\"1069\":1,\"1120\":1,\"1203\":1,\"1204\":1,\"1209\":1,\"1217\":1,\"1220\":1,\"1258\":1,\"1296\":1,\"1375\":1,\"1376\":1,\"1381\":1,\"1392\":1,\"1395\":1,\"1434\":1,\"1472\":1,\"1552\":1,\"1553\":1,\"1558\":1,\"1569\":1,\"1572\":1,\"1611\":1,\"1649\":1,\"1729\":1,\"1730\":1,\"1735\":1,\"1746\":1,\"1749\":1,\"1788\":1,\"1826\":1,\"1906\":1,\"1907\":1,\"1912\":1,\"1923\":1,\"1926\":1,\"1965\":1,\"2003\":1,\"2083\":1,\"2084\":1,\"2089\":1,\"2100\":1,\"2103\":1,\"2142\":1,\"2180\":1,\"2273\":1,\"2274\":1,\"2279\":1,\"2290\":1,\"2293\":1,\"2307\":1,\"2360\":1,\"2399\":1,\"2492\":1,\"2493\":1,\"2498\":1,\"2509\":1,\"2512\":1,\"2526\":1,\"2579\":1,\"2618\":1,\"2711\":1,\"2712\":1,\"2717\":1,\"2728\":1,\"2731\":1,\"2745\":1,\"2798\":1,\"2837\":1}}],[\"icon\",{\"1\":{\"403\":1,\"614\":1,\"660\":1,\"706\":1,\"752\":1}}],[\"icons\",{\"1\":{\"352\":1}}],[\"icd\",{\"1\":{\"90\":1}}],[\"io\",{\"1\":{\"279\":1,\"290\":1,\"299\":4,\"300\":4,\"302\":4,\"303\":4,\"305\":4,\"306\":4,\"308\":4,\"309\":2,\"311\":4,\"312\":2,\"323\":6,\"337\":2,\"433\":1,\"444\":4,\"445\":2,\"459\":1,\"482\":1,\"493\":4,\"494\":2,\"508\":1,\"519\":4,\"520\":2,\"538\":1,\"549\":4,\"550\":2,\"568\":1,\"579\":4,\"580\":2,\"598\":1,\"609\":4,\"610\":2,\"644\":1,\"655\":4,\"656\":2,\"690\":1,\"701\":4,\"702\":2,\"736\":1,\"747\":4,\"748\":2,\"782\":1,\"793\":4,\"794\":2,\"905\":1,\"997\":1,\"1297\":1,\"1473\":1,\"1650\":1,\"1827\":1,\"2004\":1,\"2181\":1,\"2308\":1,\"2400\":1,\"2527\":1,\"2619\":1,\"2746\":1,\"2838\":1}}],[\"ipam\",{\"1\":{\"323\":3}}],[\"ipv4\",{\"1\":{\"323\":6}}],[\"ip\",{\"0\":{\"265\":1,\"909\":1,\"1001\":1,\"1130\":1,\"1301\":1,\"1477\":1,\"1654\":1,\"1831\":1,\"2008\":1,\"2185\":1,\"2312\":1,\"2404\":1,\"2531\":1,\"2623\":1,\"2750\":1,\"2842\":1},\"1\":{\"265\":1,\"909\":1,\"1001\":1,\"1130\":1,\"1301\":1,\"1477\":1,\"1654\":1,\"1831\":1,\"2008\":1,\"2185\":1,\"2312\":1,\"2404\":1,\"2531\":1,\"2623\":1,\"2750\":1,\"2842\":1}}],[\"illustrate\",{\"1\":{\"99\":1,\"113\":1}}],[\"idle\",{\"1\":{\"821\":1,\"981\":1,\"1089\":1,\"1157\":1,\"1281\":1,\"1329\":1,\"1457\":1,\"1506\":1,\"1634\":1,\"1683\":1,\"1811\":1,\"1860\":1,\"1988\":1,\"2037\":1,\"2165\":1,\"2224\":1,\"2384\":1,\"2443\":1,\"2603\":1,\"2662\":1,\"2822\":1}}],[\"idletimeout\",{\"0\":{\"821\":1,\"981\":1,\"1089\":1,\"1157\":1,\"1281\":1,\"1329\":1,\"1457\":1,\"1506\":1,\"1634\":1,\"1683\":1,\"1811\":1,\"1860\":1,\"1988\":1,\"2037\":1,\"2165\":1,\"2224\":1,\"2384\":1,\"2443\":1,\"2603\":1,\"2662\":1,\"2822\":1},\"1\":{\"821\":1,\"981\":1,\"1089\":1,\"1157\":1,\"1281\":1,\"1329\":1,\"1457\":1,\"1506\":1,\"1634\":1,\"1683\":1,\"1811\":1,\"1860\":1,\"1988\":1,\"2037\":1,\"2165\":1,\"2224\":1,\"2384\":1,\"2443\":1,\"2603\":1,\"2662\":1,\"2822\":1}}],[\"id>\",{\"1\":{\"158\":3,\"394\":1}}],[\"id=\",{\"1\":{\"155\":317}}],[\"ids\",{\"1\":{\"148\":1}}],[\"idea\",{\"1\":{\"152\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"ideas\",{\"1\":{\"113\":1,\"114\":1,\"400\":1,\"415\":1,\"425\":1,\"441\":1,\"455\":1,\"467\":1,\"478\":1,\"490\":1,\"504\":1,\"516\":1,\"530\":1,\"546\":1,\"560\":1,\"576\":1,\"590\":1,\"606\":1,\"611\":1,\"626\":1,\"636\":1,\"652\":1,\"657\":1,\"672\":1,\"682\":1,\"698\":1,\"703\":1,\"718\":1,\"728\":1,\"744\":1,\"749\":1,\"764\":1,\"774\":1,\"790\":1}}],[\"ide\",{\"0\":{\"397\":1},\"1\":{\"130\":2,\"315\":1,\"317\":1,\"336\":1,\"338\":3,\"390\":1,\"397\":1,\"403\":1,\"614\":1,\"660\":1,\"706\":1,\"752\":1}}],[\"identify\",{\"1\":{\"343\":2,\"353\":1,\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"identifying\",{\"1\":{\"95\":1,\"165\":1}}],[\"identifier\",{\"0\":{\"204\":1,\"259\":1,\"958\":1,\"1043\":1,\"1121\":1,\"1194\":1,\"1259\":1,\"1435\":1,\"1612\":1,\"1789\":1,\"1966\":1,\"2143\":1,\"2361\":1,\"2580\":1,\"2799\":1},\"1\":{\"204\":2,\"259\":2,\"285\":3,\"286\":3,\"296\":3,\"297\":3,\"300\":4,\"303\":2,\"323\":6,\"331\":1,\"344\":1,\"357\":8,\"358\":6,\"359\":6,\"379\":1,\"383\":8,\"384\":6,\"385\":6,\"424\":1,\"438\":2,\"454\":1,\"464\":3,\"465\":3,\"477\":1,\"487\":2,\"488\":2,\"503\":1,\"513\":2,\"514\":2,\"529\":1,\"543\":2,\"544\":2,\"559\":1,\"573\":2,\"589\":1,\"603\":2,\"635\":1,\"649\":2,\"681\":1,\"695\":2,\"727\":1,\"741\":2,\"773\":1,\"787\":2,\"958\":2,\"1043\":2,\"1121\":2,\"1194\":2,\"1259\":2,\"1435\":2,\"1612\":2,\"1789\":2,\"1966\":2,\"2143\":2,\"2361\":2,\"2580\":2,\"2799\":2}}],[\"identified\",{\"1\":{\"95\":1,\"165\":1,\"343\":1}}],[\"id\",{\"0\":{\"815\":1,\"975\":1,\"1083\":1,\"1151\":1,\"1275\":1,\"1323\":1,\"1451\":1,\"1500\":1,\"1628\":1,\"1677\":1,\"1805\":1,\"1854\":1,\"1982\":1,\"2031\":1,\"2159\":1,\"2218\":1,\"2378\":1,\"2437\":1,\"2597\":1,\"2656\":1,\"2816\":1},\"1\":{\"108\":1,\"109\":1,\"163\":1,\"164\":1,\"466\":2,\"489\":2,\"515\":2,\"545\":2,\"575\":2,\"605\":2,\"651\":2,\"697\":2,\"811\":1,\"812\":1,\"815\":2,\"903\":1,\"905\":1,\"971\":1,\"972\":1,\"975\":2,\"994\":1,\"997\":1,\"1079\":1,\"1080\":1,\"1083\":2,\"1147\":1,\"1148\":1,\"1151\":2,\"1271\":1,\"1272\":1,\"1275\":2,\"1294\":1,\"1297\":1,\"1319\":1,\"1320\":1,\"1323\":2,\"1447\":1,\"1448\":1,\"1451\":2,\"1470\":1,\"1473\":1,\"1496\":1,\"1497\":1,\"1500\":2,\"1624\":1,\"1625\":1,\"1628\":2,\"1647\":1,\"1650\":1,\"1673\":1,\"1674\":1,\"1677\":2,\"1801\":1,\"1802\":1,\"1805\":2,\"1824\":1,\"1827\":1,\"1850\":1,\"1851\":1,\"1854\":2,\"1978\":1,\"1979\":1,\"1982\":2,\"2001\":1,\"2004\":1,\"2027\":1,\"2028\":1,\"2031\":2,\"2155\":1,\"2156\":1,\"2159\":2,\"2178\":1,\"2181\":1,\"2214\":1,\"2215\":1,\"2218\":2,\"2306\":1,\"2308\":1,\"2374\":1,\"2375\":1,\"2378\":2,\"2397\":1,\"2400\":1,\"2433\":1,\"2434\":1,\"2437\":2,\"2525\":1,\"2527\":1,\"2593\":1,\"2594\":1,\"2597\":2,\"2616\":1,\"2619\":1,\"2652\":1,\"2653\":1,\"2656\":2,\"2744\":1,\"2746\":1,\"2812\":1,\"2813\":1,\"2816\":2,\"2835\":1,\"2838\":1}}],[\"idat\",{\"1\":{\"95\":1,\"148\":1,\"165\":1}}],[\"ihe\",{\"1\":{\"95\":2,\"148\":1,\"165\":2}}],[\"ihres\",{\"1\":{\"16\":1}}],[\"i\",{\"1\":{\"26\":1,\"99\":1,\"123\":1,\"343\":1}}],[\"image\",{\"1\":{\"299\":4,\"300\":4,\"302\":4,\"303\":4,\"305\":4,\"306\":4,\"308\":4,\"309\":2,\"311\":4,\"312\":2,\"323\":8,\"444\":4,\"445\":2,\"493\":4,\"494\":2,\"519\":5,\"520\":3,\"549\":4,\"550\":2,\"579\":4,\"580\":2,\"609\":4,\"610\":2,\"655\":4,\"656\":2,\"701\":4,\"702\":2,\"747\":4,\"748\":2,\"793\":4,\"794\":2,\"808\":1,\"809\":1,\"829\":2,\"831\":1,\"905\":1,\"968\":1,\"969\":1,\"989\":2,\"991\":1,\"997\":1,\"1076\":1,\"1077\":1,\"1097\":2,\"1099\":1,\"1144\":1,\"1145\":1,\"1165\":2,\"1167\":1,\"1268\":1,\"1269\":1,\"1289\":2,\"1291\":1,\"1297\":1,\"1316\":1,\"1317\":1,\"1337\":2,\"1339\":1,\"1444\":1,\"1445\":1,\"1465\":2,\"1467\":1,\"1473\":1,\"1493\":1,\"1494\":1,\"1514\":2,\"1516\":1,\"1621\":1,\"1622\":1,\"1642\":2,\"1644\":1,\"1650\":1,\"1670\":1,\"1671\":1,\"1691\":2,\"1693\":1,\"1798\":1,\"1799\":1,\"1819\":2,\"1821\":1,\"1827\":1,\"1847\":1,\"1848\":1,\"1868\":2,\"1870\":1,\"1975\":1,\"1976\":1,\"1996\":2,\"1998\":1,\"2004\":1,\"2024\":1,\"2025\":1,\"2045\":2,\"2047\":1,\"2152\":1,\"2153\":1,\"2173\":2,\"2175\":1,\"2181\":1,\"2211\":1,\"2212\":1,\"2232\":2,\"2234\":1,\"2308\":1,\"2371\":1,\"2372\":1,\"2392\":2,\"2394\":1,\"2400\":1,\"2430\":1,\"2431\":1,\"2451\":2,\"2453\":1,\"2527\":1,\"2590\":1,\"2591\":1,\"2611\":2,\"2613\":1,\"2619\":1,\"2649\":1,\"2650\":1,\"2670\":2,\"2672\":1,\"2746\":1,\"2809\":1,\"2810\":1,\"2830\":2,\"2832\":1,\"2838\":1}}],[\"images\",{\"1\":{\"131\":1,\"137\":2,\"138\":2,\"276\":1,\"287\":1,\"337\":1}}],[\"imagine\",{\"1\":{\"98\":1}}],[\"im\",{\"1\":{\"16\":1,\"17\":2,\"896\":1,\"963\":1,\"2299\":1,\"2366\":1,\"2518\":1,\"2585\":1,\"2737\":1,\"2804\":1}}],[\"improving\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"improvement\",{\"1\":{\"400\":1,\"413\":1,\"414\":1,\"415\":1,\"425\":1,\"441\":1,\"455\":1,\"467\":1,\"478\":1,\"490\":1,\"504\":1,\"516\":1,\"530\":1,\"546\":1,\"560\":1,\"576\":1,\"590\":1,\"606\":1,\"611\":1,\"624\":1,\"625\":1,\"626\":1,\"636\":1,\"652\":1,\"657\":1,\"670\":1,\"671\":1,\"672\":1,\"682\":1,\"698\":1,\"703\":1,\"716\":1,\"717\":1,\"718\":1,\"728\":1,\"744\":1,\"749\":1,\"762\":1,\"763\":1,\"764\":1,\"774\":1,\"790\":1}}],[\"improvements\",{\"1\":{\"113\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"improved\",{\"1\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1}}],[\"improve\",{\"1\":{\"6\":1,\"78\":1,\"413\":1,\"415\":2,\"624\":1,\"626\":2,\"670\":1,\"672\":2,\"716\":1,\"718\":2,\"762\":1,\"764\":2}}],[\"imported\",{\"1\":{\"328\":1}}],[\"import\",{\"1\":{\"155\":1,\"156\":4,\"403\":3,\"614\":3,\"660\":3,\"706\":3,\"752\":3}}],[\"imports\",{\"1\":{\"155\":2}}],[\"importantly\",{\"1\":{\"90\":1}}],[\"important\",{\"1\":{\"33\":1,\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"85\":1,\"93\":2,\"98\":1,\"113\":1,\"329\":1,\"393\":1,\"395\":1,\"406\":1,\"409\":1,\"443\":1,\"548\":1,\"578\":1,\"608\":1,\"617\":1,\"620\":1,\"654\":1,\"663\":1,\"666\":1,\"700\":1,\"709\":1,\"712\":1,\"746\":1,\"755\":1,\"758\":1,\"792\":1}}],[\"imple\",{\"1\":{\"155\":1}}],[\"implementing\",{\"0\":{\"314\":1},\"1\":{\"116\":1,\"148\":1,\"149\":1,\"328\":1,\"393\":1}}],[\"implemented\",{\"1\":{\"93\":1,\"320\":1,\"365\":1,\"379\":1,\"395\":1}}],[\"implements\",{\"1\":{\"32\":1,\"84\":1,\"328\":2,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2328\":1,\"2547\":1,\"2766\":1}}],[\"implement\",{\"0\":{\"13\":1},\"1\":{\"5\":1,\"13\":1,\"33\":2,\"78\":1,\"92\":1,\"143\":1,\"144\":1,\"148\":2,\"149\":2,\"314\":1,\"316\":1,\"325\":1}}],[\"implementations\",{\"1\":{\"170\":1,\"227\":1,\"228\":1,\"234\":1}}],[\"implementation\",{\"1\":{\"5\":1,\"26\":2,\"29\":1,\"92\":2,\"148\":1,\"149\":1,\"150\":1,\"170\":2,\"227\":2,\"228\":2,\"234\":2,\"328\":1,\"331\":1,\"348\":1,\"368\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"impl\",{\"1\":{\"146\":2,\"149\":3,\"300\":2,\"303\":2,\"306\":2}}],[\"impact\",{\"1\":{\"37\":1,\"401\":1,\"411\":1,\"414\":1,\"612\":1,\"622\":1,\"625\":1,\"658\":1,\"668\":1,\"671\":1,\"704\":1,\"714\":1,\"717\":1,\"750\":1,\"760\":1,\"763\":1}}],[\"if\",{\"0\":{\"144\":1},\"1\":{\"12\":1,\"13\":1,\"37\":4,\"38\":1,\"40\":1,\"69\":1,\"71\":1,\"82\":1,\"89\":1,\"93\":2,\"102\":1,\"103\":1,\"108\":1,\"116\":1,\"130\":1,\"131\":1,\"132\":2,\"135\":1,\"152\":1,\"153\":1,\"155\":10,\"163\":1,\"166\":2,\"173\":1,\"184\":1,\"186\":1,\"187\":1,\"188\":1,\"189\":1,\"190\":1,\"192\":1,\"193\":1,\"194\":1,\"195\":1,\"196\":1,\"197\":1,\"198\":1,\"199\":1,\"209\":1,\"215\":1,\"225\":1,\"232\":1,\"238\":1,\"240\":1,\"241\":1,\"242\":1,\"243\":1,\"244\":1,\"249\":1,\"258\":1,\"272\":1,\"273\":1,\"276\":1,\"282\":1,\"285\":3,\"286\":3,\"287\":1,\"293\":1,\"296\":3,\"297\":3,\"298\":1,\"300\":2,\"301\":2,\"303\":2,\"304\":1,\"306\":2,\"321\":1,\"334\":3,\"348\":1,\"352\":1,\"363\":2,\"375\":1,\"377\":2,\"379\":1,\"386\":1,\"389\":2,\"403\":1,\"410\":3,\"413\":3,\"415\":5,\"424\":2,\"434\":1,\"438\":3,\"439\":3,\"440\":2,\"442\":2,\"452\":1,\"454\":2,\"456\":1,\"460\":1,\"464\":4,\"465\":3,\"466\":2,\"475\":1,\"477\":2,\"479\":1,\"483\":1,\"487\":3,\"488\":3,\"489\":2,\"492\":1,\"501\":1,\"503\":2,\"505\":1,\"509\":1,\"513\":3,\"514\":3,\"515\":2,\"518\":1,\"519\":1,\"529\":2,\"539\":1,\"543\":3,\"544\":3,\"545\":2,\"547\":2,\"548\":1,\"559\":2,\"569\":1,\"573\":3,\"574\":3,\"575\":2,\"577\":2,\"589\":2,\"599\":1,\"603\":3,\"604\":3,\"605\":2,\"607\":2,\"614\":1,\"621\":3,\"624\":3,\"626\":5,\"635\":2,\"645\":1,\"649\":3,\"650\":3,\"651\":2,\"653\":2,\"660\":1,\"667\":3,\"670\":3,\"672\":5,\"681\":2,\"691\":1,\"695\":3,\"696\":3,\"697\":2,\"699\":2,\"706\":1,\"713\":3,\"716\":3,\"718\":5,\"727\":2,\"737\":1,\"741\":3,\"742\":3,\"743\":2,\"745\":2,\"752\":1,\"759\":3,\"762\":3,\"764\":5,\"773\":2,\"783\":1,\"787\":3,\"788\":3,\"789\":2,\"791\":2,\"798\":1,\"800\":1,\"801\":1,\"815\":1,\"816\":1,\"818\":1,\"836\":1,\"851\":1,\"853\":1,\"854\":1,\"856\":1,\"857\":1,\"866\":1,\"872\":1,\"882\":1,\"885\":1,\"886\":1,\"890\":1,\"897\":1,\"898\":1,\"900\":1,\"904\":1,\"917\":1,\"918\":1,\"925\":1,\"927\":1,\"928\":1,\"932\":2,\"936\":1,\"938\":1,\"939\":1,\"946\":1,\"957\":1,\"964\":1,\"965\":1,\"967\":1,\"975\":1,\"976\":1,\"978\":1,\"996\":1,\"1009\":1,\"1010\":1,\"1021\":1,\"1032\":1,\"1034\":1,\"1035\":1,\"1037\":1,\"1038\":1,\"1048\":1,\"1054\":1,\"1064\":1,\"1069\":1,\"1071\":1,\"1072\":1,\"1074\":1,\"1083\":1,\"1084\":1,\"1086\":1,\"1102\":1,\"1104\":1,\"1105\":1,\"1112\":1,\"1120\":1,\"1125\":1,\"1126\":1,\"1128\":1,\"1137\":1,\"1138\":1,\"1151\":1,\"1152\":1,\"1154\":1,\"1172\":1,\"1183\":1,\"1185\":1,\"1186\":1,\"1188\":1,\"1189\":1,\"1199\":1,\"1205\":1,\"1215\":1,\"1220\":1,\"1222\":1,\"1223\":1,\"1225\":1,\"1229\":1,\"1231\":1,\"1232\":1,\"1236\":2,\"1240\":1,\"1242\":1,\"1243\":1,\"1250\":1,\"1258\":1,\"1262\":1,\"1264\":1,\"1265\":1,\"1267\":1,\"1275\":1,\"1276\":1,\"1278\":1,\"1296\":1,\"1308\":1,\"1309\":1,\"1323\":1,\"1324\":1,\"1326\":1,\"1344\":1,\"1356\":1,\"1358\":1,\"1359\":1,\"1361\":1,\"1362\":1,\"1371\":1,\"1377\":1,\"1387\":1,\"1390\":1,\"1391\":1,\"1395\":1,\"1398\":1,\"1399\":1,\"1401\":1,\"1405\":1,\"1407\":1,\"1408\":1,\"1412\":2,\"1416\":1,\"1418\":1,\"1419\":1,\"1426\":1,\"1434\":1,\"1440\":1,\"1441\":1,\"1443\":1,\"1451\":1,\"1452\":1,\"1454\":1,\"1472\":1,\"1485\":1,\"1486\":1,\"1500\":1,\"1501\":1,\"1503\":1,\"1521\":1,\"1533\":1,\"1535\":1,\"1536\":1,\"1538\":1,\"1539\":1,\"1548\":1,\"1554\":1,\"1564\":1,\"1567\":1,\"1568\":1,\"1572\":1,\"1575\":1,\"1576\":1,\"1578\":1,\"1582\":1,\"1584\":1,\"1585\":1,\"1589\":2,\"1593\":1,\"1595\":1,\"1596\":1,\"1603\":1,\"1611\":1,\"1617\":1,\"1618\":1,\"1620\":1,\"1628\":1,\"1629\":1,\"1631\":1,\"1649\":1,\"1662\":1,\"1663\":1,\"1677\":1,\"1678\":1,\"1680\":1,\"1698\":1,\"1710\":1,\"1712\":1,\"1713\":1,\"1715\":1,\"1716\":1,\"1725\":1,\"1731\":1,\"1741\":1,\"1744\":1,\"1745\":1,\"1749\":1,\"1752\":1,\"1753\":1,\"1755\":1,\"1759\":1,\"1761\":1,\"1762\":1,\"1766\":2,\"1770\":1,\"1772\":1,\"1773\":1,\"1780\":1,\"1788\":1,\"1794\":1,\"1795\":1,\"1797\":1,\"1805\":1,\"1806\":1,\"1808\":1,\"1826\":1,\"1839\":1,\"1840\":1,\"1854\":1,\"1855\":1,\"1857\":1,\"1875\":1,\"1887\":1,\"1889\":1,\"1890\":1,\"1892\":1,\"1893\":1,\"1902\":1,\"1908\":1,\"1918\":1,\"1921\":1,\"1922\":1,\"1926\":1,\"1929\":1,\"1930\":1,\"1932\":1,\"1936\":1,\"1938\":1,\"1939\":1,\"1943\":2,\"1947\":1,\"1949\":1,\"1950\":1,\"1957\":1,\"1965\":1,\"1971\":1,\"1972\":1,\"1974\":1,\"1982\":1,\"1983\":1,\"1985\":1,\"2003\":1,\"2016\":1,\"2017\":1,\"2031\":1,\"2032\":1,\"2034\":1,\"2052\":1,\"2064\":1,\"2066\":1,\"2067\":1,\"2069\":1,\"2070\":1,\"2079\":1,\"2085\":1,\"2095\":1,\"2098\":1,\"2099\":1,\"2103\":1,\"2106\":1,\"2107\":1,\"2109\":1,\"2113\":1,\"2115\":1,\"2116\":1,\"2120\":2,\"2124\":1,\"2126\":1,\"2127\":1,\"2134\":1,\"2142\":1,\"2148\":1,\"2149\":1,\"2151\":1,\"2159\":1,\"2160\":1,\"2162\":1,\"2180\":1,\"2193\":1,\"2194\":1,\"2201\":1,\"2203\":1,\"2204\":1,\"2218\":1,\"2219\":1,\"2221\":1,\"2239\":1,\"2254\":1,\"2256\":1,\"2257\":1,\"2259\":1,\"2260\":1,\"2269\":1,\"2275\":1,\"2285\":1,\"2288\":1,\"2289\":1,\"2293\":1,\"2300\":1,\"2301\":1,\"2303\":1,\"2307\":1,\"2320\":1,\"2321\":1,\"2328\":1,\"2330\":1,\"2331\":1,\"2335\":2,\"2339\":1,\"2341\":1,\"2342\":1,\"2349\":1,\"2360\":1,\"2367\":1,\"2368\":1,\"2370\":1,\"2378\":1,\"2379\":1,\"2381\":1,\"2399\":1,\"2412\":1,\"2413\":1,\"2420\":1,\"2422\":1,\"2423\":1,\"2437\":1,\"2438\":1,\"2440\":1,\"2458\":1,\"2473\":1,\"2475\":1,\"2476\":1,\"2478\":1,\"2479\":1,\"2488\":1,\"2494\":1,\"2504\":1,\"2507\":1,\"2508\":1,\"2512\":1,\"2519\":1,\"2520\":1,\"2522\":1,\"2526\":1,\"2539\":1,\"2540\":1,\"2547\":1,\"2549\":1,\"2550\":1,\"2554\":2,\"2558\":1,\"2560\":1,\"2561\":1,\"2568\":1,\"2579\":1,\"2586\":1,\"2587\":1,\"2589\":1,\"2597\":1,\"2598\":1,\"2600\":1,\"2618\":1,\"2631\":1,\"2632\":1,\"2639\":1,\"2641\":1,\"2642\":1,\"2656\":1,\"2657\":1,\"2659\":1,\"2677\":1,\"2692\":1,\"2694\":1,\"2695\":1,\"2697\":1,\"2698\":1,\"2707\":1,\"2713\":1,\"2723\":1,\"2726\":1,\"2727\":1,\"2731\":1,\"2738\":1,\"2739\":1,\"2741\":1,\"2745\":1,\"2758\":1,\"2759\":1,\"2766\":1,\"2768\":1,\"2769\":1,\"2773\":2,\"2777\":1,\"2779\":1,\"2780\":1,\"2787\":1,\"2798\":1,\"2805\":1,\"2806\":1,\"2808\":1,\"2816\":1,\"2817\":1,\"2819\":1,\"2837\":1,\"2850\":1,\"2851\":1}}],[\"its\",{\"1\":{\"11\":1,\"33\":1,\"85\":1,\"95\":1,\"123\":1,\"150\":1,\"165\":1,\"281\":1,\"292\":1,\"334\":1,\"345\":1,\"360\":1,\"409\":1,\"412\":1,\"415\":1,\"435\":1,\"461\":1,\"484\":1,\"510\":1,\"540\":1,\"570\":1,\"600\":1,\"620\":1,\"623\":1,\"626\":1,\"646\":1,\"666\":1,\"669\":1,\"672\":1,\"692\":1,\"712\":1,\"715\":1,\"718\":1,\"738\":1,\"758\":1,\"761\":1,\"764\":1,\"784\":1}}],[\"it\",{\"1\":{\"1\":1,\"6\":1,\"9\":1,\"12\":1,\"33\":2,\"37\":2,\"84\":2,\"85\":1,\"90\":1,\"91\":1,\"92\":1,\"93\":2,\"98\":4,\"116\":1,\"124\":1,\"143\":1,\"145\":1,\"148\":1,\"149\":1,\"150\":1,\"282\":1,\"285\":1,\"286\":1,\"293\":1,\"296\":1,\"297\":1,\"328\":1,\"329\":3,\"334\":1,\"343\":2,\"344\":1,\"348\":1,\"360\":1,\"386\":1,\"396\":1,\"407\":1,\"410\":2,\"411\":1,\"413\":1,\"415\":2,\"439\":1,\"443\":1,\"465\":1,\"488\":1,\"514\":1,\"520\":2,\"544\":1,\"548\":1,\"574\":1,\"578\":1,\"604\":1,\"608\":1,\"618\":1,\"621\":2,\"622\":1,\"624\":1,\"626\":2,\"650\":1,\"654\":1,\"664\":1,\"667\":2,\"668\":1,\"670\":1,\"672\":2,\"696\":1,\"700\":1,\"710\":1,\"713\":2,\"714\":1,\"716\":1,\"718\":2,\"742\":1,\"746\":1,\"756\":1,\"759\":2,\"760\":1,\"762\":1,\"764\":2,\"788\":1,\"792\":1}}],[\"innovative\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"inject\",{\"1\":{\"345\":1}}],[\"ingress\",{\"1\":{\"166\":1}}],[\"initdb\",{\"1\":{\"323\":1}}],[\"init\",{\"0\":{\"258\":1,\"957\":1,\"1120\":1,\"1258\":1,\"1434\":1,\"1611\":1,\"1788\":1,\"1965\":1,\"2142\":1,\"2360\":1,\"2579\":1,\"2798\":1},\"1\":{\"258\":1,\"323\":2,\"957\":1,\"1120\":1,\"1258\":1,\"1434\":1,\"1611\":1,\"1788\":1,\"1965\":1,\"2142\":1,\"2360\":1,\"2579\":1,\"2798\":1}}],[\"initial\",{\"1\":{\"258\":1,\"957\":1,\"1120\":1,\"1258\":1,\"1434\":1,\"1611\":1,\"1788\":1,\"1965\":1,\"2142\":1,\"2360\":1,\"2579\":1,\"2798\":1}}],[\"initializer\",{\"1\":{\"155\":12,\"156\":3}}],[\"initiate\",{\"1\":{\"39\":1}}],[\"initiative\",{\"1\":{\"6\":1,\"17\":1,\"22\":1,\"77\":1,\"94\":2,\"112\":2,\"113\":1,\"123\":1,\"415\":1,\"429\":1,\"533\":2,\"563\":2,\"593\":3,\"626\":1,\"639\":3,\"672\":1,\"685\":3,\"718\":1,\"731\":4,\"764\":1,\"778\":1}}],[\"inits\",{\"1\":{\"155\":2}}],[\"input\",{\"0\":{\"318\":1,\"339\":1,\"340\":1,\"343\":1},\"1\":{\"135\":2,\"341\":1,\"343\":5,\"345\":4,\"348\":2,\"360\":1,\"370\":2,\"373\":1,\"379\":2,\"386\":4,\"389\":3,\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"inherits\",{\"1\":{\"343\":1}}],[\"inherit\",{\"1\":{\"130\":1}}],[\"inside\",{\"1\":{\"328\":1,\"337\":1}}],[\"insights\",{\"1\":{\"415\":2,\"626\":2,\"672\":2,\"718\":2,\"764\":2}}],[\"insight\",{\"1\":{\"112\":1}}],[\"inspect\",{\"1\":{\"166\":1}}],[\"insert\",{\"1\":{\"141\":2,\"155\":358}}],[\"instead\",{\"1\":{\"442\":2,\"468\":1,\"491\":1,\"517\":1,\"547\":2,\"577\":2,\"607\":2,\"653\":2,\"699\":2,\"745\":2,\"791\":2}}],[\"institutions\",{\"1\":{\"94\":2,\"123\":1}}],[\"institution\",{\"1\":{\"73\":1}}],[\"institutional\",{\"1\":{\"6\":1,\"123\":1}}],[\"institute\",{\"0\":{\"73\":1,\"74\":1,\"75\":1},\"1\":{\"73\":1,\"74\":2,\"75\":1,\"78\":1,\"423\":1,\"453\":1,\"476\":1,\"502\":1,\"528\":1,\"558\":1,\"588\":1,\"634\":1,\"680\":1,\"726\":1,\"772\":1}}],[\"instantiation\",{\"1\":{\"330\":1,\"352\":1,\"353\":1}}],[\"instantiatesuri\",{\"0\":{\"353\":1},\"1\":{\"353\":1,\"360\":2,\"386\":1}}],[\"instantiated\",{\"1\":{\"330\":1,\"352\":1,\"353\":1,\"354\":1,\"380\":1}}],[\"instantiate\",{\"1\":{\"329\":1,\"331\":1}}],[\"instances\",{\"0\":{\"379\":1},\"1\":{\"94\":1,\"148\":1,\"327\":3,\"329\":1,\"342\":1,\"343\":3,\"352\":1,\"363\":1,\"373\":1,\"377\":1,\"379\":2,\"389\":1,\"442\":4,\"468\":2,\"491\":2,\"517\":2,\"547\":4,\"577\":4,\"607\":4,\"653\":4,\"699\":4,\"745\":4,\"791\":4}}],[\"instance\",{\"0\":{\"420\":1,\"450\":1,\"473\":1,\"499\":1,\"525\":1,\"555\":1,\"585\":1,\"631\":1,\"677\":1,\"723\":1,\"769\":1},\"1\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"93\":1,\"149\":1,\"158\":1,\"285\":2,\"286\":4,\"296\":2,\"297\":4,\"299\":4,\"300\":4,\"303\":4,\"306\":2,\"329\":1,\"330\":2,\"334\":2,\"341\":1,\"343\":3,\"348\":1,\"352\":2,\"353\":2,\"354\":1,\"358\":1,\"359\":1,\"367\":1,\"368\":1,\"369\":1,\"370\":1,\"377\":1,\"379\":2,\"380\":1,\"384\":1,\"385\":1,\"394\":1,\"424\":1,\"430\":1,\"438\":1,\"442\":1,\"454\":1,\"456\":1,\"464\":1,\"468\":1,\"477\":1,\"479\":1,\"487\":1,\"491\":1,\"503\":1,\"505\":1,\"513\":1,\"517\":1,\"529\":1,\"535\":1,\"543\":1,\"547\":1,\"559\":1,\"565\":1,\"573\":1,\"577\":1,\"589\":1,\"595\":1,\"603\":1,\"607\":1,\"635\":1,\"641\":1,\"649\":1,\"653\":1,\"681\":1,\"687\":1,\"695\":1,\"699\":1,\"727\":1,\"733\":1,\"741\":1,\"745\":1,\"773\":1,\"779\":1,\"787\":1,\"791\":1}}],[\"installing\",{\"0\":{\"159\":1}}],[\"installed\",{\"1\":{\"84\":2,\"122\":1,\"125\":1,\"130\":1,\"131\":1,\"407\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"618\":1,\"644\":1,\"664\":1,\"690\":1,\"710\":1,\"736\":1,\"756\":1,\"782\":1}}],[\"install\",{\"0\":{\"426\":1,\"430\":1,\"456\":1,\"479\":1,\"505\":1,\"531\":1,\"535\":1,\"561\":1,\"565\":1,\"591\":1,\"595\":1,\"637\":1,\"641\":1,\"683\":1,\"687\":1,\"729\":1,\"733\":1,\"775\":1,\"779\":1},\"1\":{\"33\":2,\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"129\":1,\"130\":3,\"131\":2,\"158\":1,\"159\":1,\"276\":1,\"279\":5,\"287\":1,\"290\":5,\"300\":1,\"303\":1,\"306\":1,\"309\":1,\"312\":1,\"333\":1,\"334\":2,\"347\":1,\"348\":1,\"362\":1,\"363\":1,\"372\":1,\"373\":1,\"388\":1,\"389\":1,\"421\":1,\"426\":1,\"427\":1,\"430\":1,\"433\":4,\"442\":1,\"445\":1,\"451\":1,\"456\":2,\"459\":4,\"468\":1,\"474\":1,\"479\":2,\"482\":4,\"491\":1,\"494\":1,\"500\":1,\"505\":2,\"508\":4,\"517\":1,\"520\":1,\"526\":1,\"535\":1,\"538\":4,\"547\":1,\"550\":1,\"556\":1,\"565\":1,\"568\":4,\"577\":1,\"580\":1,\"586\":1,\"595\":1,\"598\":4,\"607\":1,\"610\":1,\"632\":1,\"641\":1,\"644\":4,\"653\":1,\"656\":1,\"678\":1,\"687\":1,\"690\":4,\"699\":1,\"702\":1,\"724\":1,\"733\":1,\"736\":4,\"745\":1,\"748\":1,\"770\":1,\"775\":1,\"776\":1,\"779\":1,\"782\":4,\"791\":1,\"794\":1}}],[\"installations\",{\"1\":{\"327\":1,\"519\":1}}],[\"installationshinweise\",{\"0\":{\"18\":1},\"1\":{\"14\":1}}],[\"installation\",{\"1\":{\"17\":1,\"19\":1,\"22\":1,\"159\":1,\"173\":1,\"232\":1,\"249\":1,\"258\":1,\"391\":2,\"393\":2,\"395\":2,\"397\":4,\"398\":2,\"424\":1,\"428\":2,\"430\":4,\"442\":5,\"456\":4,\"468\":1,\"479\":4,\"491\":1,\"505\":4,\"517\":1,\"529\":1,\"535\":4,\"547\":5,\"559\":1,\"565\":4,\"577\":5,\"589\":1,\"595\":4,\"607\":5,\"635\":1,\"641\":4,\"653\":5,\"681\":1,\"687\":4,\"699\":5,\"727\":1,\"733\":4,\"745\":5,\"773\":1,\"777\":2,\"779\":4,\"791\":5,\"836\":1,\"890\":1,\"946\":1,\"957\":1,\"1021\":1,\"1069\":1,\"1112\":1,\"1120\":1,\"1172\":1,\"1220\":1,\"1250\":1,\"1258\":1,\"1344\":1,\"1395\":1,\"1426\":1,\"1434\":1,\"1521\":1,\"1572\":1,\"1603\":1,\"1611\":1,\"1698\":1,\"1749\":1,\"1780\":1,\"1788\":1,\"1875\":1,\"1926\":1,\"1957\":1,\"1965\":1,\"2052\":1,\"2103\":1,\"2134\":1,\"2142\":1,\"2239\":1,\"2293\":1,\"2349\":1,\"2360\":1,\"2458\":1,\"2512\":1,\"2568\":1,\"2579\":1,\"2677\":1,\"2731\":1,\"2787\":1,\"2798\":1}}],[\"instructions\",{\"1\":{\"20\":5,\"21\":2,\"33\":2,\"286\":1,\"297\":1,\"307\":1,\"310\":1,\"430\":1,\"442\":1,\"453\":1,\"456\":1,\"468\":1,\"476\":1,\"479\":1,\"491\":1,\"492\":1,\"502\":1,\"505\":1,\"517\":1,\"518\":1,\"528\":1,\"535\":1,\"547\":1,\"548\":1,\"565\":1,\"577\":1,\"595\":1,\"607\":1,\"641\":1,\"653\":1,\"687\":1,\"699\":1,\"733\":1,\"745\":1,\"779\":1,\"791\":1}}],[\"indicator\",{\"1\":{\"896\":1,\"963\":1,\"2299\":1,\"2366\":1,\"2518\":1,\"2585\":1,\"2737\":1,\"2804\":1}}],[\"indicates\",{\"1\":{\"257\":1}}],[\"individual\",{\"1\":{\"98\":1,\"150\":1}}],[\"individuals\",{\"1\":{\"39\":1,\"112\":1}}],[\"indentoptions>\",{\"1\":{\"156\":1}}],[\"indent\",{\"1\":{\"155\":14}}],[\"indentations\",{\"1\":{\"155\":1}}],[\"indentation\",{\"1\":{\"155\":3}}],[\"index\",{\"1\":{\"95\":1,\"148\":1,\"165\":1,\"227\":1}}],[\"independent\",{\"1\":{\"94\":1,\"113\":1}}],[\"invaluable\",{\"1\":{\"413\":1,\"415\":1,\"624\":1,\"626\":1,\"670\":1,\"672\":1,\"716\":1,\"718\":1,\"762\":1,\"764\":1}}],[\"invite\",{\"1\":{\"282\":1,\"293\":1,\"400\":1,\"611\":1,\"657\":1,\"703\":1,\"749\":1}}],[\"involves\",{\"1\":{\"298\":1,\"301\":1,\"304\":1,\"307\":1,\"310\":1,\"427\":1,\"443\":1,\"492\":1,\"518\":1,\"548\":1,\"578\":1,\"608\":1,\"654\":1,\"700\":1,\"746\":1,\"776\":1,\"792\":1}}],[\"involved\",{\"1\":{\"78\":2,\"112\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"invocation\",{\"1\":{\"155\":9}}],[\"investigation\",{\"1\":{\"38\":1}}],[\"investigate\",{\"1\":{\"37\":1,\"38\":1}}],[\"int\",{\"1\":{\"323\":3}}],[\"introduced\",{\"1\":{\"116\":1}}],[\"introduction\",{\"0\":{\"32\":1,\"94\":1,\"326\":1,\"337\":1,\"341\":1,\"351\":1,\"366\":1,\"376\":1},\"1\":{\"28\":1}}],[\"intranet\",{\"1\":{\"84\":1}}],[\"into\",{\"1\":{\"9\":1,\"12\":1,\"85\":1,\"89\":1,\"90\":1,\"91\":1,\"112\":1,\"113\":1,\"123\":2,\"137\":3,\"148\":1,\"149\":1,\"153\":4,\"285\":2,\"286\":2,\"296\":2,\"297\":2,\"314\":1,\"334\":1,\"344\":1,\"348\":1,\"363\":1,\"373\":1,\"389\":1,\"411\":1,\"438\":2,\"439\":2,\"442\":1,\"464\":2,\"465\":2,\"468\":1,\"487\":2,\"488\":2,\"491\":1,\"513\":2,\"514\":2,\"517\":1,\"543\":2,\"544\":2,\"547\":1,\"573\":2,\"574\":2,\"577\":1,\"603\":2,\"604\":2,\"607\":1,\"622\":1,\"649\":2,\"650\":2,\"653\":1,\"668\":1,\"695\":2,\"696\":2,\"699\":1,\"714\":1,\"741\":2,\"742\":2,\"745\":1,\"760\":1,\"787\":2,\"788\":2,\"791\":1}}],[\"intellij\",{\"0\":{\"156\":1},\"1\":{\"152\":1,\"315\":1,\"338\":1,\"390\":1,\"397\":3,\"403\":2,\"614\":2,\"660\":2,\"706\":2,\"752\":2}}],[\"intended\",{\"1\":{\"99\":1,\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1}}],[\"interaction\",{\"1\":{\"352\":1}}],[\"interception\",{\"1\":{\"281\":2,\"292\":2,\"435\":2,\"461\":2,\"484\":2,\"510\":2,\"540\":2,\"570\":2,\"600\":2,\"646\":2,\"692\":2,\"738\":2,\"784\":2}}],[\"interconnectivity\",{\"1\":{\"90\":1}}],[\"intermediate\",{\"0\":{\"321\":1,\"374\":1,\"375\":1},\"1\":{\"271\":1,\"330\":1,\"352\":1,\"355\":1,\"377\":1,\"381\":1,\"386\":3,\"916\":1,\"1008\":1,\"1136\":1,\"1307\":1,\"1484\":1,\"1661\":1,\"1838\":1,\"2015\":1,\"2192\":1,\"2319\":1,\"2411\":1,\"2538\":1,\"2630\":1,\"2757\":1,\"2849\":1}}],[\"interface\",{\"1\":{\"130\":1,\"131\":1,\"143\":1,\"146\":1,\"148\":5,\"149\":3,\"150\":1,\"285\":1,\"296\":1,\"328\":3,\"798\":3,\"804\":1,\"902\":2,\"925\":3,\"931\":1,\"993\":2,\"1229\":3,\"1235\":1,\"1293\":2,\"1405\":3,\"1411\":1,\"1469\":2,\"1582\":3,\"1588\":1,\"1646\":2,\"1759\":3,\"1765\":1,\"1823\":2,\"1936\":3,\"1942\":1,\"2000\":2,\"2113\":3,\"2119\":1,\"2177\":2,\"2201\":3,\"2207\":1,\"2305\":2,\"2328\":3,\"2334\":1,\"2396\":2,\"2420\":3,\"2426\":1,\"2524\":2,\"2547\":3,\"2553\":1,\"2615\":2,\"2639\":3,\"2645\":1,\"2743\":2,\"2766\":3,\"2772\":1,\"2834\":2}}],[\"interfaces\",{\"1\":{\"73\":1}}],[\"interval\",{\"1\":{\"101\":4,\"323\":1,\"519\":1,\"520\":1}}],[\"internet\",{\"1\":{\"95\":1,\"135\":1,\"165\":1,\"195\":1,\"196\":1,\"197\":1,\"240\":1,\"241\":1,\"242\":1,\"281\":3,\"292\":3,\"323\":8,\"435\":3,\"461\":3,\"484\":3,\"510\":3,\"540\":3,\"570\":3,\"600\":3,\"646\":3,\"692\":3,\"738\":3,\"784\":3}}],[\"international\",{\"1\":{\"94\":1}}],[\"internal\",{\"1\":{\"86\":2,\"95\":2,\"105\":2,\"165\":2,\"186\":1,\"187\":1,\"188\":1,\"192\":1,\"193\":1,\"194\":1,\"281\":1,\"292\":1,\"435\":1,\"461\":1,\"484\":1,\"510\":1,\"540\":1,\"570\":1,\"600\":1,\"646\":1,\"692\":1,\"738\":1,\"784\":1}}],[\"interpretation\",{\"1\":{\"90\":1}}],[\"interested\",{\"1\":{\"12\":1,\"112\":1}}],[\"interoperability\",{\"0\":{\"90\":1},\"1\":{\"6\":1,\"26\":1,\"73\":1,\"89\":1,\"90\":3,\"91\":1}}],[\"interoperable\",{\"1\":{\"0\":1,\"12\":1,\"94\":1}}],[\"integrated\",{\"1\":{\"90\":1,\"123\":1,\"150\":1}}],[\"integrating\",{\"1\":{\"12\":1}}],[\"integration\",{\"0\":{\"130\":1,\"131\":1,\"133\":1},\"1\":{\"11\":1,\"74\":1,\"77\":2,\"78\":1,\"87\":1,\"94\":1,\"123\":2,\"124\":1,\"126\":1,\"134\":1,\"147\":1}}],[\"integrity\",{\"1\":{\"5\":1,\"10\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"incredibly\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"increments\",{\"1\":{\"155\":2}}],[\"increase\",{\"1\":{\"78\":1,\"137\":1}}],[\"incoming\",{\"1\":{\"95\":4,\"96\":1,\"102\":1,\"165\":4,\"166\":1}}],[\"incorporated\",{\"1\":{\"9\":1}}],[\"included\",{\"1\":{\"95\":1,\"105\":1,\"143\":1,\"165\":1,\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1}}],[\"include\",{\"1\":{\"37\":1,\"73\":1,\"141\":2,\"143\":2,\"159\":1,\"213\":1,\"415\":1,\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"626\":1,\"651\":1,\"672\":1,\"697\":1,\"718\":1,\"743\":1,\"764\":1,\"789\":1,\"870\":1,\"1052\":1,\"1203\":1,\"1375\":1,\"1552\":1,\"1729\":1,\"1906\":1,\"2083\":1,\"2273\":1,\"2492\":1,\"2711\":1}}],[\"includes\",{\"1\":{\"0\":1,\"10\":1,\"32\":1,\"39\":1,\"79\":1,\"90\":1,\"130\":1,\"131\":1,\"148\":1,\"149\":1,\"345\":1}}],[\"including\",{\"1\":{\"37\":1,\"79\":1,\"112\":1,\"130\":1,\"131\":1,\"137\":2,\"138\":2,\"148\":1,\"149\":1,\"159\":1,\"271\":1,\"916\":1,\"1008\":1,\"1136\":1,\"1307\":1,\"1484\":1,\"1661\":1,\"1838\":1,\"2015\":1,\"2192\":1,\"2319\":1,\"2411\":1,\"2538\":1,\"2630\":1,\"2757\":1,\"2849\":1}}],[\"infastructure\",{\"1\":{\"530\":1}}],[\"infile=certificate\",{\"1\":{\"798\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"infile=client\",{\"1\":{\"285\":1,\"296\":1,\"438\":1,\"464\":1,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1,\"959\":1,\"1260\":1,\"1436\":1,\"1613\":1,\"1790\":1,\"1967\":1,\"2144\":1,\"2362\":1,\"2581\":1,\"2800\":1}}],[\"infinite\",{\"1\":{\"205\":1,\"230\":1,\"862\":1,\"888\":1,\"1044\":1,\"1067\":1,\"1195\":1,\"1218\":1,\"1367\":1,\"1393\":1,\"1544\":1,\"1570\":1,\"1721\":1,\"1747\":1,\"1898\":1,\"1924\":1,\"2075\":1,\"2101\":1,\"2265\":1,\"2291\":1,\"2484\":1,\"2510\":1,\"2703\":1,\"2729\":1}}],[\"infos\",{\"1\":{\"280\":1,\"291\":1}}],[\"info\",{\"0\":{\"2856\":1},\"1\":{\"213\":1,\"300\":2,\"303\":2,\"306\":2,\"309\":2,\"312\":2,\"440\":4,\"445\":2,\"466\":2,\"489\":2,\"494\":2,\"515\":2,\"520\":2,\"545\":2,\"550\":2,\"575\":2,\"580\":2,\"605\":2,\"610\":2,\"651\":2,\"656\":2,\"697\":2,\"702\":2,\"743\":4,\"748\":2,\"789\":4,\"794\":2,\"870\":1,\"1052\":1,\"1203\":1,\"1375\":1,\"1552\":1,\"1729\":1,\"1906\":1,\"2083\":1,\"2273\":1,\"2492\":1,\"2711\":1}}],[\"informed\",{\"1\":{\"38\":1}}],[\"inform\",{\"1\":{\"26\":9}}],[\"informational\",{\"1\":{\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"651\":1,\"697\":1,\"743\":1,\"789\":1}}],[\"information\",{\"0\":{\"124\":1,\"160\":1},\"1\":{\"13\":1,\"30\":1,\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"70\":1,\"74\":1,\"82\":1,\"87\":2,\"88\":1,\"89\":1,\"90\":1,\"91\":3,\"95\":1,\"105\":1,\"106\":1,\"108\":1,\"109\":1,\"122\":1,\"123\":1,\"126\":1,\"158\":1,\"159\":1,\"165\":1,\"182\":1,\"281\":1,\"282\":1,\"292\":1,\"293\":1,\"352\":1,\"411\":1,\"415\":1,\"423\":2,\"435\":1,\"438\":1,\"440\":1,\"441\":1,\"453\":3,\"461\":1,\"466\":1,\"467\":1,\"476\":3,\"484\":1,\"487\":1,\"489\":1,\"490\":1,\"502\":3,\"510\":1,\"513\":1,\"515\":1,\"516\":1,\"528\":2,\"540\":1,\"543\":1,\"545\":1,\"546\":1,\"558\":2,\"570\":1,\"573\":1,\"575\":1,\"576\":1,\"588\":2,\"600\":1,\"603\":1,\"605\":1,\"606\":1,\"622\":1,\"626\":1,\"634\":2,\"646\":1,\"649\":1,\"651\":1,\"652\":1,\"668\":1,\"672\":1,\"680\":2,\"692\":1,\"695\":1,\"697\":1,\"698\":1,\"714\":1,\"718\":1,\"726\":2,\"738\":1,\"741\":1,\"743\":1,\"744\":1,\"760\":1,\"764\":1,\"772\":2,\"784\":1,\"787\":1,\"789\":1,\"790\":1,\"843\":1,\"844\":1,\"847\":1,\"848\":1,\"849\":1,\"953\":1,\"954\":1,\"955\":1,\"1030\":1,\"1181\":1,\"1353\":1,\"1354\":1,\"1530\":1,\"1531\":1,\"1707\":1,\"1708\":1,\"1884\":1,\"1885\":1,\"2061\":1,\"2062\":1,\"2246\":1,\"2247\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2465\":1,\"2466\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2684\":1,\"2685\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2794\":1,\"2795\":1,\"2796\":1}}],[\"informatician\",{\"1\":{\"1\":1}}],[\"informatics\",{\"0\":{\"74\":1,\"77\":1},\"1\":{\"0\":1,\"1\":1,\"6\":1,\"73\":1,\"74\":1,\"75\":1,\"77\":1,\"78\":1,\"94\":3,\"112\":1,\"113\":1,\"114\":1,\"123\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"inf\",{\"1\":{\"148\":1,\"149\":1,\"328\":1}}],[\"infrastructure\",{\"1\":{\"0\":1,\"20\":1,\"77\":1,\"94\":1,\"113\":2,\"125\":1,\"126\":1,\"424\":1,\"425\":3,\"453\":1,\"454\":1,\"476\":1,\"477\":1,\"502\":1,\"503\":1,\"529\":1,\"530\":2,\"559\":1,\"560\":3,\"589\":1,\"590\":3,\"635\":1,\"636\":3,\"681\":1,\"682\":3,\"727\":1,\"728\":3,\"773\":1,\"774\":3}}],[\"in\",{\"0\":{\"11\":1,\"78\":1,\"88\":1,\"96\":1,\"166\":1,\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1},\"1\":{\"0\":3,\"1\":2,\"5\":3,\"11\":2,\"12\":1,\"13\":2,\"14\":2,\"15\":1,\"16\":2,\"17\":1,\"26\":5,\"29\":2,\"30\":1,\"32\":2,\"33\":1,\"35\":1,\"37\":2,\"38\":2,\"39\":2,\"42\":1,\"43\":1,\"44\":1,\"45\":1,\"46\":1,\"47\":1,\"48\":1,\"49\":1,\"50\":1,\"51\":1,\"52\":1,\"53\":1,\"54\":1,\"55\":1,\"56\":1,\"57\":1,\"58\":1,\"59\":1,\"60\":1,\"61\":1,\"62\":1,\"63\":1,\"70\":1,\"73\":1,\"74\":1,\"75\":1,\"77\":6,\"78\":3,\"81\":1,\"84\":4,\"85\":3,\"86\":3,\"87\":3,\"91\":1,\"92\":1,\"93\":4,\"94\":1,\"95\":1,\"96\":2,\"98\":2,\"99\":1,\"101\":1,\"102\":2,\"105\":4,\"106\":1,\"109\":1,\"112\":3,\"113\":4,\"116\":2,\"122\":2,\"124\":1,\"125\":2,\"126\":2,\"130\":2,\"131\":6,\"132\":2,\"134\":2,\"135\":1,\"137\":4,\"138\":5,\"141\":3,\"142\":1,\"143\":3,\"145\":2,\"146\":1,\"148\":1,\"149\":1,\"150\":2,\"155\":184,\"156\":3,\"158\":2,\"159\":1,\"161\":1,\"165\":1,\"166\":2,\"170\":1,\"173\":1,\"176\":1,\"189\":1,\"190\":1,\"198\":1,\"199\":1,\"204\":1,\"213\":1,\"214\":1,\"227\":1,\"228\":1,\"229\":1,\"234\":1,\"243\":1,\"244\":1,\"249\":1,\"258\":1,\"259\":1,\"285\":1,\"286\":1,\"296\":1,\"300\":8,\"303\":8,\"306\":4,\"309\":2,\"312\":2,\"314\":1,\"315\":2,\"316\":1,\"318\":1,\"319\":1,\"320\":2,\"321\":1,\"325\":1,\"327\":1,\"328\":3,\"330\":1,\"331\":1,\"334\":2,\"337\":3,\"338\":4,\"340\":1,\"342\":3,\"343\":4,\"344\":3,\"345\":4,\"348\":4,\"350\":2,\"352\":4,\"353\":3,\"357\":2,\"358\":1,\"359\":1,\"360\":5,\"363\":4,\"365\":2,\"367\":1,\"368\":2,\"370\":1,\"373\":3,\"375\":1,\"377\":4,\"378\":1,\"379\":4,\"383\":2,\"384\":1,\"385\":1,\"386\":6,\"389\":6,\"390\":2,\"392\":2,\"394\":1,\"396\":2,\"401\":2,\"408\":1,\"409\":1,\"410\":2,\"411\":1,\"412\":3,\"413\":3,\"414\":1,\"415\":3,\"418\":3,\"419\":3,\"427\":1,\"429\":2,\"430\":1,\"438\":1,\"440\":5,\"442\":1,\"445\":2,\"448\":3,\"449\":3,\"456\":1,\"464\":1,\"466\":5,\"471\":3,\"472\":3,\"479\":1,\"487\":1,\"489\":5,\"494\":2,\"497\":3,\"498\":3,\"505\":1,\"513\":1,\"515\":5,\"520\":2,\"523\":3,\"524\":3,\"530\":1,\"535\":1,\"543\":1,\"545\":5,\"547\":1,\"550\":2,\"553\":3,\"554\":3,\"565\":1,\"573\":1,\"575\":5,\"577\":1,\"580\":2,\"583\":3,\"584\":3,\"595\":1,\"603\":1,\"605\":5,\"607\":1,\"610\":2,\"612\":2,\"619\":1,\"620\":1,\"621\":2,\"622\":1,\"623\":3,\"624\":3,\"625\":1,\"626\":3,\"629\":3,\"630\":3,\"641\":1,\"649\":1,\"651\":5,\"653\":1,\"656\":2,\"658\":2,\"665\":1,\"666\":1,\"667\":2,\"668\":1,\"669\":3,\"670\":3,\"671\":1,\"672\":3,\"675\":3,\"676\":3,\"687\":1,\"695\":1,\"697\":5,\"699\":1,\"702\":2,\"704\":2,\"711\":1,\"712\":1,\"713\":2,\"714\":1,\"715\":3,\"716\":3,\"717\":1,\"718\":3,\"721\":3,\"722\":3,\"733\":1,\"741\":1,\"743\":5,\"745\":1,\"748\":2,\"750\":2,\"757\":1,\"758\":1,\"759\":2,\"760\":1,\"761\":3,\"762\":3,\"763\":1,\"764\":3,\"767\":3,\"768\":3,\"776\":1,\"778\":2,\"779\":1,\"787\":1,\"789\":5,\"791\":1,\"794\":2,\"798\":1,\"801\":3,\"808\":1,\"809\":1,\"820\":1,\"821\":1,\"825\":1,\"826\":1,\"827\":1,\"828\":1,\"829\":2,\"831\":1,\"833\":1,\"836\":1,\"839\":1,\"853\":1,\"854\":1,\"856\":1,\"857\":1,\"870\":1,\"871\":1,\"887\":1,\"894\":1,\"925\":1,\"928\":3,\"932\":2,\"938\":1,\"939\":1,\"943\":1,\"946\":1,\"957\":1,\"958\":1,\"961\":1,\"968\":1,\"969\":1,\"980\":1,\"981\":1,\"985\":1,\"986\":1,\"987\":1,\"988\":1,\"989\":2,\"991\":1,\"1018\":1,\"1021\":1,\"1024\":1,\"1034\":1,\"1035\":1,\"1037\":1,\"1038\":1,\"1043\":1,\"1052\":1,\"1053\":1,\"1066\":1,\"1076\":1,\"1077\":1,\"1088\":1,\"1089\":1,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":1,\"1097\":2,\"1099\":1,\"1104\":1,\"1105\":1,\"1109\":1,\"1112\":1,\"1120\":1,\"1121\":1,\"1144\":1,\"1145\":1,\"1156\":1,\"1157\":1,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":1,\"1165\":2,\"1167\":1,\"1169\":1,\"1172\":1,\"1175\":1,\"1185\":1,\"1186\":1,\"1188\":1,\"1189\":1,\"1194\":1,\"1203\":1,\"1204\":1,\"1217\":1,\"1229\":1,\"1232\":3,\"1236\":2,\"1242\":1,\"1243\":1,\"1247\":1,\"1250\":1,\"1258\":1,\"1259\":1,\"1262\":1,\"1268\":1,\"1269\":1,\"1280\":1,\"1281\":1,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":1,\"1289\":2,\"1291\":1,\"1316\":1,\"1317\":1,\"1328\":1,\"1329\":1,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":1,\"1337\":2,\"1339\":1,\"1341\":1,\"1344\":1,\"1347\":1,\"1358\":1,\"1359\":1,\"1361\":1,\"1362\":1,\"1375\":1,\"1376\":1,\"1392\":1,\"1405\":1,\"1408\":3,\"1412\":2,\"1418\":1,\"1419\":1,\"1423\":1,\"1426\":1,\"1434\":1,\"1435\":1,\"1438\":1,\"1444\":1,\"1445\":1,\"1456\":1,\"1457\":1,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":1,\"1465\":2,\"1467\":1,\"1493\":1,\"1494\":1,\"1505\":1,\"1506\":1,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":1,\"1514\":2,\"1516\":1,\"1518\":1,\"1521\":1,\"1524\":1,\"1535\":1,\"1536\":1,\"1538\":1,\"1539\":1,\"1552\":1,\"1553\":1,\"1569\":1,\"1582\":1,\"1585\":3,\"1589\":2,\"1595\":1,\"1596\":1,\"1600\":1,\"1603\":1,\"1611\":1,\"1612\":1,\"1615\":1,\"1621\":1,\"1622\":1,\"1633\":1,\"1634\":1,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":1,\"1642\":2,\"1644\":1,\"1670\":1,\"1671\":1,\"1682\":1,\"1683\":1,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":1,\"1691\":2,\"1693\":1,\"1695\":1,\"1698\":1,\"1701\":1,\"1712\":1,\"1713\":1,\"1715\":1,\"1716\":1,\"1729\":1,\"1730\":1,\"1746\":1,\"1759\":1,\"1762\":3,\"1766\":2,\"1772\":1,\"1773\":1,\"1777\":1,\"1780\":1,\"1788\":1,\"1789\":1,\"1792\":1,\"1798\":1,\"1799\":1,\"1810\":1,\"1811\":1,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":1,\"1819\":2,\"1821\":1,\"1847\":1,\"1848\":1,\"1859\":1,\"1860\":1,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":1,\"1868\":2,\"1870\":1,\"1872\":1,\"1875\":1,\"1878\":1,\"1889\":1,\"1890\":1,\"1892\":1,\"1893\":1,\"1906\":1,\"1907\":1,\"1923\":1,\"1936\":1,\"1939\":3,\"1943\":2,\"1949\":1,\"1950\":1,\"1954\":1,\"1957\":1,\"1965\":1,\"1966\":1,\"1969\":1,\"1975\":1,\"1976\":1,\"1987\":1,\"1988\":1,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":1,\"1996\":2,\"1998\":1,\"2024\":1,\"2025\":1,\"2036\":1,\"2037\":1,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":1,\"2045\":2,\"2047\":1,\"2049\":1,\"2052\":1,\"2055\":1,\"2066\":1,\"2067\":1,\"2069\":1,\"2070\":1,\"2083\":1,\"2084\":1,\"2100\":1,\"2113\":1,\"2116\":3,\"2120\":2,\"2126\":1,\"2127\":1,\"2131\":1,\"2134\":1,\"2142\":1,\"2143\":1,\"2146\":1,\"2152\":1,\"2153\":1,\"2164\":1,\"2165\":1,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":1,\"2173\":2,\"2175\":1,\"2201\":1,\"2204\":3,\"2211\":1,\"2212\":1,\"2223\":1,\"2224\":1,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":1,\"2232\":2,\"2234\":1,\"2236\":1,\"2239\":1,\"2242\":1,\"2256\":1,\"2257\":1,\"2259\":1,\"2260\":1,\"2273\":1,\"2274\":1,\"2290\":1,\"2297\":1,\"2328\":1,\"2331\":3,\"2335\":2,\"2341\":1,\"2342\":1,\"2346\":1,\"2349\":1,\"2360\":1,\"2361\":1,\"2364\":1,\"2371\":1,\"2372\":1,\"2383\":1,\"2384\":1,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":1,\"2392\":2,\"2394\":1,\"2420\":1,\"2423\":3,\"2430\":1,\"2431\":1,\"2442\":1,\"2443\":1,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":1,\"2451\":2,\"2453\":1,\"2455\":1,\"2458\":1,\"2461\":1,\"2475\":1,\"2476\":1,\"2478\":1,\"2479\":1,\"2492\":1,\"2493\":1,\"2509\":1,\"2516\":1,\"2547\":1,\"2550\":3,\"2554\":2,\"2560\":1,\"2561\":1,\"2565\":1,\"2568\":1,\"2579\":1,\"2580\":1,\"2583\":1,\"2590\":1,\"2591\":1,\"2602\":1,\"2603\":1,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":1,\"2611\":2,\"2613\":1,\"2639\":1,\"2642\":3,\"2649\":1,\"2650\":1,\"2661\":1,\"2662\":1,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":1,\"2670\":2,\"2672\":1,\"2674\":1,\"2677\":1,\"2680\":1,\"2694\":1,\"2695\":1,\"2697\":1,\"2698\":1,\"2711\":1,\"2712\":1,\"2728\":1,\"2735\":1,\"2766\":1,\"2769\":3,\"2773\":2,\"2779\":1,\"2780\":1,\"2784\":1,\"2787\":1,\"2798\":1,\"2799\":1,\"2802\":1,\"2809\":1,\"2810\":1,\"2821\":1,\"2822\":1,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":1,\"2830\":2,\"2832\":1}}],[\"iso\",{\"1\":{\"378\":1}}],[\"isready\",{\"1\":{\"323\":1}}],[\"issuing\",{\"1\":{\"285\":1,\"296\":1,\"438\":1,\"464\":1,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1}}],[\"issued\",{\"1\":{\"434\":1,\"460\":1,\"483\":1,\"509\":1,\"539\":1,\"569\":1,\"599\":1,\"645\":1,\"691\":1,\"737\":1,\"783\":1}}],[\"issues\",{\"1\":{\"38\":1,\"71\":1,\"113\":1,\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1}}],[\"issue\",{\"1\":{\"37\":2,\"38\":2,\"137\":3,\"154\":1,\"404\":1,\"405\":1,\"410\":4,\"413\":2,\"415\":3,\"615\":1,\"616\":1,\"621\":4,\"624\":2,\"626\":3,\"661\":1,\"662\":1,\"667\":4,\"670\":2,\"672\":3,\"707\":1,\"708\":1,\"713\":4,\"716\":2,\"718\":3,\"753\":1,\"754\":1,\"759\":4,\"762\":2,\"764\":3}}],[\"ist\",{\"1\":{\"14\":1,\"15\":1}}],[\"is\",{\"1\":{\"0\":4,\"1\":2,\"5\":2,\"6\":1,\"9\":1,\"10\":1,\"11\":1,\"13\":1,\"26\":1,\"30\":1,\"32\":2,\"33\":2,\"38\":1,\"42\":2,\"44\":2,\"46\":2,\"48\":2,\"50\":2,\"52\":2,\"54\":2,\"56\":2,\"58\":2,\"60\":2,\"62\":2,\"68\":1,\"73\":2,\"74\":1,\"77\":1,\"78\":2,\"81\":3,\"84\":4,\"85\":2,\"86\":4,\"87\":4,\"90\":2,\"91\":2,\"92\":3,\"93\":8,\"94\":5,\"95\":5,\"96\":2,\"98\":7,\"99\":2,\"100\":1,\"101\":1,\"102\":1,\"103\":1,\"105\":4,\"106\":3,\"108\":1,\"112\":1,\"113\":2,\"116\":1,\"122\":1,\"123\":5,\"125\":1,\"126\":2,\"132\":1,\"134\":1,\"135\":1,\"148\":1,\"149\":1,\"150\":1,\"152\":1,\"161\":3,\"163\":1,\"164\":1,\"165\":5,\"166\":2,\"170\":1,\"182\":1,\"184\":1,\"189\":1,\"190\":1,\"198\":1,\"199\":1,\"209\":1,\"227\":1,\"228\":1,\"234\":1,\"238\":1,\"243\":1,\"244\":1,\"273\":1,\"276\":1,\"281\":1,\"285\":7,\"286\":3,\"287\":1,\"292\":1,\"296\":7,\"297\":2,\"300\":3,\"303\":3,\"306\":3,\"309\":3,\"312\":3,\"314\":2,\"315\":1,\"319\":1,\"327\":1,\"328\":6,\"329\":3,\"330\":1,\"334\":2,\"337\":1,\"340\":1,\"344\":5,\"348\":2,\"350\":1,\"352\":5,\"353\":2,\"358\":1,\"360\":1,\"363\":1,\"368\":1,\"373\":1,\"377\":1,\"378\":1,\"379\":3,\"384\":1,\"386\":1,\"389\":1,\"390\":1,\"391\":1,\"396\":1,\"399\":1,\"403\":1,\"404\":1,\"405\":1,\"408\":1,\"409\":1,\"411\":1,\"412\":2,\"413\":1,\"415\":2,\"423\":1,\"425\":1,\"429\":1,\"433\":1,\"435\":1,\"438\":3,\"439\":2,\"440\":1,\"441\":1,\"442\":1,\"443\":1,\"445\":3,\"452\":1,\"453\":2,\"455\":1,\"456\":1,\"459\":1,\"461\":1,\"464\":3,\"465\":2,\"466\":1,\"467\":1,\"468\":1,\"475\":1,\"476\":2,\"478\":1,\"479\":1,\"482\":1,\"484\":1,\"487\":3,\"488\":2,\"489\":1,\"490\":1,\"491\":1,\"494\":3,\"501\":1,\"502\":2,\"504\":1,\"505\":1,\"508\":1,\"510\":1,\"513\":3,\"514\":2,\"515\":1,\"516\":1,\"517\":1,\"519\":2,\"520\":5,\"528\":1,\"530\":1,\"538\":1,\"540\":1,\"543\":3,\"544\":2,\"545\":1,\"546\":1,\"547\":1,\"548\":1,\"550\":3,\"558\":1,\"560\":1,\"568\":1,\"570\":1,\"573\":3,\"574\":2,\"575\":1,\"576\":1,\"577\":1,\"578\":1,\"580\":3,\"588\":1,\"590\":1,\"598\":1,\"600\":1,\"603\":3,\"604\":2,\"605\":1,\"606\":1,\"607\":1,\"608\":1,\"610\":3,\"614\":1,\"615\":1,\"616\":1,\"619\":1,\"620\":1,\"622\":1,\"623\":2,\"624\":1,\"626\":2,\"634\":1,\"636\":1,\"644\":1,\"646\":1,\"649\":3,\"650\":2,\"651\":1,\"652\":1,\"653\":1,\"654\":1,\"656\":3,\"660\":1,\"661\":1,\"662\":1,\"665\":1,\"666\":1,\"668\":1,\"669\":2,\"670\":1,\"672\":2,\"680\":1,\"682\":1,\"690\":1,\"692\":1,\"695\":3,\"696\":2,\"697\":1,\"698\":1,\"699\":1,\"700\":1,\"702\":3,\"706\":1,\"707\":1,\"708\":1,\"711\":1,\"712\":1,\"714\":1,\"715\":2,\"716\":1,\"718\":2,\"726\":1,\"728\":1,\"736\":1,\"738\":1,\"741\":3,\"742\":2,\"743\":1,\"744\":1,\"745\":1,\"746\":1,\"748\":3,\"752\":1,\"753\":1,\"754\":1,\"757\":1,\"758\":1,\"760\":1,\"761\":2,\"762\":1,\"764\":2,\"772\":1,\"774\":1,\"778\":1,\"782\":1,\"784\":1,\"787\":3,\"788\":2,\"789\":1,\"790\":1,\"791\":1,\"792\":1,\"794\":3,\"798\":2,\"815\":1,\"816\":1,\"818\":1,\"847\":1,\"848\":1,\"851\":1,\"853\":1,\"854\":1,\"856\":1,\"857\":1,\"866\":1,\"885\":1,\"897\":1,\"902\":1,\"918\":1,\"925\":3,\"936\":1,\"938\":1,\"939\":1,\"964\":1,\"975\":1,\"976\":1,\"978\":1,\"993\":1,\"1010\":1,\"1030\":1,\"1032\":1,\"1034\":1,\"1035\":1,\"1037\":1,\"1038\":1,\"1048\":1,\"1071\":1,\"1083\":1,\"1084\":1,\"1086\":1,\"1102\":1,\"1104\":1,\"1105\":1,\"1125\":1,\"1138\":1,\"1151\":1,\"1152\":1,\"1154\":1,\"1181\":1,\"1183\":1,\"1185\":1,\"1186\":1,\"1188\":1,\"1189\":1,\"1199\":1,\"1222\":1,\"1229\":3,\"1240\":1,\"1242\":1,\"1243\":1,\"1264\":1,\"1275\":1,\"1276\":1,\"1278\":1,\"1293\":1,\"1309\":1,\"1323\":1,\"1324\":1,\"1326\":1,\"1353\":1,\"1354\":1,\"1356\":1,\"1358\":1,\"1359\":1,\"1361\":1,\"1362\":1,\"1371\":1,\"1390\":1,\"1398\":1,\"1405\":3,\"1416\":1,\"1418\":1,\"1419\":1,\"1440\":1,\"1451\":1,\"1452\":1,\"1454\":1,\"1469\":1,\"1486\":1,\"1500\":1,\"1501\":1,\"1503\":1,\"1530\":1,\"1531\":1,\"1533\":1,\"1535\":1,\"1536\":1,\"1538\":1,\"1539\":1,\"1548\":1,\"1567\":1,\"1575\":1,\"1582\":3,\"1593\":1,\"1595\":1,\"1596\":1,\"1617\":1,\"1628\":1,\"1629\":1,\"1631\":1,\"1646\":1,\"1663\":1,\"1677\":1,\"1678\":1,\"1680\":1,\"1707\":1,\"1708\":1,\"1710\":1,\"1712\":1,\"1713\":1,\"1715\":1,\"1716\":1,\"1725\":1,\"1744\":1,\"1752\":1,\"1759\":3,\"1770\":1,\"1772\":1,\"1773\":1,\"1794\":1,\"1805\":1,\"1806\":1,\"1808\":1,\"1823\":1,\"1840\":1,\"1854\":1,\"1855\":1,\"1857\":1,\"1884\":1,\"1885\":1,\"1887\":1,\"1889\":1,\"1890\":1,\"1892\":1,\"1893\":1,\"1902\":1,\"1921\":1,\"1929\":1,\"1936\":3,\"1947\":1,\"1949\":1,\"1950\":1,\"1971\":1,\"1982\":1,\"1983\":1,\"1985\":1,\"2000\":1,\"2017\":1,\"2031\":1,\"2032\":1,\"2034\":1,\"2061\":1,\"2062\":1,\"2064\":1,\"2066\":1,\"2067\":1,\"2069\":1,\"2070\":1,\"2079\":1,\"2098\":1,\"2106\":1,\"2113\":3,\"2124\":1,\"2126\":1,\"2127\":1,\"2148\":1,\"2159\":1,\"2160\":1,\"2162\":1,\"2177\":1,\"2194\":1,\"2201\":2,\"2218\":1,\"2219\":1,\"2221\":1,\"2250\":1,\"2251\":1,\"2254\":1,\"2256\":1,\"2257\":1,\"2259\":1,\"2260\":1,\"2269\":1,\"2288\":1,\"2300\":1,\"2305\":1,\"2321\":1,\"2328\":3,\"2339\":1,\"2341\":1,\"2342\":1,\"2367\":1,\"2378\":1,\"2379\":1,\"2381\":1,\"2396\":1,\"2413\":1,\"2420\":2,\"2437\":1,\"2438\":1,\"2440\":1,\"2469\":1,\"2470\":1,\"2473\":1,\"2475\":1,\"2476\":1,\"2478\":1,\"2479\":1,\"2488\":1,\"2507\":1,\"2519\":1,\"2524\":1,\"2540\":1,\"2547\":3,\"2558\":1,\"2560\":1,\"2561\":1,\"2586\":1,\"2597\":1,\"2598\":1,\"2600\":1,\"2615\":1,\"2632\":1,\"2639\":2,\"2656\":1,\"2657\":1,\"2659\":1,\"2688\":1,\"2689\":1,\"2692\":1,\"2694\":1,\"2695\":1,\"2697\":1,\"2698\":1,\"2707\":1,\"2726\":1,\"2738\":1,\"2743\":1,\"2759\":1,\"2766\":3,\"2777\":1,\"2779\":1,\"2780\":1,\"2805\":1,\"2816\":1,\"2817\":1,\"2819\":1,\"2834\":1,\"2851\":1}}],[\"pg\",{\"1\":{\"323\":1}}],[\"psn\",{\"1\":{\"286\":1,\"300\":2}}],[\"pseudonymizationclientstubfactory\",{\"1\":{\"234\":1}}],[\"pseudonymization\",{\"0\":{\"234\":1},\"1\":{\"0\":1,\"6\":1,\"32\":1,\"78\":1,\"234\":4}}],[\"pseudonymize\",{\"1\":{\"0\":1,\"94\":1,\"234\":1}}],[\"pkcs\",{\"1\":{\"801\":1,\"928\":1,\"1232\":1,\"1408\":1,\"1585\":1,\"1762\":1,\"1939\":1,\"2116\":1,\"2204\":1,\"2331\":1,\"2423\":1,\"2550\":1,\"2642\":1,\"2769\":1}}],[\"pkcs12\",{\"1\":{\"220\":1,\"221\":1,\"877\":1,\"878\":1,\"1059\":1,\"1060\":1,\"1210\":1,\"1211\":1,\"1382\":1,\"1383\":1,\"1559\":1,\"1560\":1,\"1736\":1,\"1737\":1,\"1913\":1,\"1914\":1,\"2090\":1,\"2091\":1,\"2280\":1,\"2281\":1,\"2499\":1,\"2500\":1,\"2718\":1,\"2719\":1}}],[\"pkg\",{\"1\":{\"158\":1}}],[\"pki\",{\"1\":{\"106\":2,\"108\":1,\"109\":1,\"161\":2,\"163\":1,\"164\":1,\"280\":3,\"285\":1,\"291\":3,\"296\":1,\"434\":3,\"460\":3,\"464\":1,\"483\":3,\"509\":3,\"539\":3,\"569\":3,\"599\":3,\"645\":3,\"691\":3,\"737\":3,\"783\":3}}],[\"phase\",{\"1\":{\"153\":1,\"342\":1}}],[\"pformat\",{\"1\":{\"152\":1,\"403\":1,\"614\":1,\"660\":1,\"706\":1,\"752\":1}}],[\"peer\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"pexercise\",{\"1\":{\"333\":1,\"347\":1,\"362\":1,\"372\":1,\"388\":1}}],[\"pem\",{\"1\":{\"130\":1,\"131\":1,\"183\":2,\"184\":2,\"185\":1,\"201\":2,\"208\":2,\"209\":2,\"210\":1,\"224\":2,\"237\":2,\"238\":2,\"239\":1,\"245\":2,\"271\":2,\"272\":1,\"273\":2,\"274\":2,\"275\":2,\"284\":14,\"285\":12,\"286\":11,\"295\":14,\"296\":12,\"297\":11,\"323\":73,\"334\":1,\"437\":14,\"438\":15,\"439\":7,\"463\":14,\"464\":15,\"465\":7,\"486\":14,\"487\":15,\"488\":7,\"512\":14,\"513\":15,\"514\":7,\"542\":14,\"543\":15,\"544\":7,\"572\":14,\"573\":15,\"574\":7,\"602\":14,\"603\":15,\"604\":7,\"648\":14,\"649\":15,\"650\":7,\"694\":14,\"695\":15,\"696\":7,\"740\":14,\"741\":15,\"742\":7,\"786\":14,\"787\":15,\"788\":7,\"798\":1,\"817\":2,\"818\":2,\"819\":1,\"822\":2,\"824\":2,\"850\":2,\"851\":2,\"852\":1,\"859\":2,\"865\":2,\"866\":2,\"867\":1,\"881\":2,\"904\":1,\"905\":4,\"916\":2,\"917\":1,\"918\":2,\"919\":2,\"920\":2,\"925\":1,\"935\":2,\"936\":2,\"937\":1,\"940\":2,\"959\":1,\"977\":2,\"978\":2,\"979\":1,\"982\":2,\"984\":2,\"996\":1,\"997\":4,\"1008\":2,\"1009\":1,\"1010\":2,\"1011\":2,\"1012\":2,\"1031\":2,\"1032\":2,\"1033\":1,\"1040\":2,\"1047\":2,\"1048\":2,\"1049\":1,\"1063\":2,\"1085\":2,\"1086\":2,\"1087\":1,\"1090\":2,\"1092\":2,\"1101\":2,\"1102\":2,\"1103\":1,\"1106\":2,\"1136\":2,\"1137\":1,\"1138\":2,\"1139\":2,\"1140\":2,\"1153\":2,\"1154\":2,\"1155\":1,\"1158\":2,\"1160\":2,\"1182\":2,\"1183\":2,\"1184\":1,\"1191\":2,\"1198\":2,\"1199\":2,\"1200\":1,\"1214\":2,\"1229\":1,\"1239\":2,\"1240\":2,\"1241\":1,\"1244\":2,\"1260\":1,\"1277\":2,\"1278\":2,\"1279\":1,\"1282\":2,\"1284\":2,\"1296\":1,\"1297\":4,\"1307\":2,\"1308\":1,\"1309\":2,\"1310\":2,\"1311\":2,\"1325\":2,\"1326\":2,\"1327\":1,\"1330\":2,\"1332\":2,\"1355\":2,\"1356\":2,\"1357\":1,\"1364\":2,\"1370\":2,\"1371\":2,\"1372\":1,\"1386\":2,\"1405\":1,\"1415\":2,\"1416\":2,\"1417\":1,\"1420\":2,\"1436\":1,\"1453\":2,\"1454\":2,\"1455\":1,\"1458\":2,\"1460\":2,\"1472\":1,\"1473\":4,\"1484\":2,\"1485\":1,\"1486\":2,\"1487\":2,\"1488\":2,\"1502\":2,\"1503\":2,\"1504\":1,\"1507\":2,\"1509\":2,\"1532\":2,\"1533\":2,\"1534\":1,\"1541\":2,\"1547\":2,\"1548\":2,\"1549\":1,\"1563\":2,\"1582\":1,\"1592\":2,\"1593\":2,\"1594\":1,\"1597\":2,\"1613\":1,\"1630\":2,\"1631\":2,\"1632\":1,\"1635\":2,\"1637\":2,\"1649\":1,\"1650\":4,\"1661\":2,\"1662\":1,\"1663\":2,\"1664\":2,\"1665\":2,\"1679\":2,\"1680\":2,\"1681\":1,\"1684\":2,\"1686\":2,\"1709\":2,\"1710\":2,\"1711\":1,\"1718\":2,\"1724\":2,\"1725\":2,\"1726\":1,\"1740\":2,\"1759\":1,\"1769\":2,\"1770\":2,\"1771\":1,\"1774\":2,\"1790\":1,\"1807\":2,\"1808\":2,\"1809\":1,\"1812\":2,\"1814\":2,\"1826\":1,\"1827\":4,\"1838\":2,\"1839\":1,\"1840\":2,\"1841\":2,\"1842\":2,\"1856\":2,\"1857\":2,\"1858\":1,\"1861\":2,\"1863\":2,\"1886\":2,\"1887\":2,\"1888\":1,\"1895\":2,\"1901\":2,\"1902\":2,\"1903\":1,\"1917\":2,\"1936\":1,\"1946\":2,\"1947\":2,\"1948\":1,\"1951\":2,\"1967\":1,\"1984\":2,\"1985\":2,\"1986\":1,\"1989\":2,\"1991\":2,\"2003\":1,\"2004\":4,\"2015\":2,\"2016\":1,\"2017\":2,\"2018\":2,\"2019\":2,\"2033\":2,\"2034\":2,\"2035\":1,\"2038\":2,\"2040\":2,\"2063\":2,\"2064\":2,\"2065\":1,\"2072\":2,\"2078\":2,\"2079\":2,\"2080\":1,\"2094\":2,\"2113\":1,\"2123\":2,\"2124\":2,\"2125\":1,\"2128\":2,\"2144\":1,\"2161\":2,\"2162\":2,\"2163\":1,\"2166\":2,\"2168\":2,\"2180\":1,\"2181\":4,\"2192\":2,\"2193\":1,\"2194\":2,\"2195\":2,\"2196\":2,\"2201\":1,\"2220\":2,\"2221\":2,\"2222\":1,\"2225\":2,\"2227\":2,\"2253\":2,\"2254\":2,\"2255\":1,\"2262\":2,\"2268\":2,\"2269\":2,\"2270\":1,\"2284\":2,\"2307\":1,\"2308\":4,\"2319\":2,\"2320\":1,\"2321\":2,\"2322\":2,\"2323\":2,\"2328\":1,\"2338\":2,\"2339\":2,\"2340\":1,\"2343\":2,\"2362\":1,\"2380\":2,\"2381\":2,\"2382\":1,\"2385\":2,\"2387\":2,\"2399\":1,\"2400\":4,\"2411\":2,\"2412\":1,\"2413\":2,\"2414\":2,\"2415\":2,\"2420\":1,\"2439\":2,\"2440\":2,\"2441\":1,\"2444\":2,\"2446\":2,\"2472\":2,\"2473\":2,\"2474\":1,\"2481\":2,\"2487\":2,\"2488\":2,\"2489\":1,\"2503\":2,\"2526\":1,\"2527\":4,\"2538\":2,\"2539\":1,\"2540\":2,\"2541\":2,\"2542\":2,\"2547\":1,\"2557\":2,\"2558\":2,\"2559\":1,\"2562\":2,\"2581\":1,\"2599\":2,\"2600\":2,\"2601\":1,\"2604\":2,\"2606\":2,\"2618\":1,\"2619\":4,\"2630\":2,\"2631\":1,\"2632\":2,\"2633\":2,\"2634\":2,\"2639\":1,\"2658\":2,\"2659\":2,\"2660\":1,\"2663\":2,\"2665\":2,\"2691\":2,\"2692\":2,\"2693\":1,\"2700\":2,\"2706\":2,\"2707\":2,\"2708\":1,\"2722\":2,\"2745\":1,\"2746\":4,\"2757\":2,\"2758\":1,\"2759\":2,\"2760\":2,\"2761\":2,\"2766\":1,\"2776\":2,\"2777\":2,\"2778\":1,\"2781\":2,\"2800\":1,\"2818\":2,\"2819\":2,\"2820\":1,\"2823\":2,\"2825\":2,\"2837\":1,\"2838\":4,\"2849\":2,\"2850\":1,\"2851\":2,\"2852\":2,\"2853\":2}}],[\"period\",{\"1\":{\"377\":1}}],[\"periodic\",{\"1\":{\"100\":1}}],[\"permanently\",{\"1\":{\"285\":1,\"296\":1}}],[\"permanent\",{\"0\":{\"252\":1,\"253\":2,\"254\":1,\"262\":1,\"949\":1,\"950\":2,\"951\":1,\"1115\":1,\"1116\":2,\"1117\":1,\"1253\":1,\"1254\":2,\"1255\":1,\"1429\":1,\"1430\":2,\"1431\":1,\"1606\":1,\"1607\":2,\"1608\":1,\"1783\":1,\"1784\":2,\"1785\":1,\"1960\":1,\"1961\":2,\"1962\":1,\"2137\":1,\"2138\":2,\"2139\":1,\"2352\":1,\"2353\":2,\"2354\":1,\"2571\":1,\"2572\":2,\"2573\":1,\"2790\":1,\"2791\":2,\"2792\":1},\"1\":{\"141\":1,\"252\":3,\"253\":4,\"254\":3,\"262\":2,\"285\":2,\"296\":2,\"323\":33,\"438\":1,\"464\":1,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1,\"931\":1,\"949\":3,\"950\":4,\"951\":3,\"1115\":3,\"1116\":4,\"1117\":3,\"1235\":1,\"1253\":3,\"1254\":4,\"1255\":3,\"1411\":1,\"1429\":3,\"1430\":4,\"1431\":3,\"1588\":1,\"1606\":3,\"1607\":4,\"1608\":3,\"1765\":1,\"1783\":3,\"1784\":4,\"1785\":3,\"1942\":1,\"1960\":3,\"1961\":4,\"1962\":3,\"2119\":1,\"2137\":3,\"2138\":4,\"2139\":3,\"2334\":1,\"2352\":3,\"2353\":4,\"2354\":3,\"2553\":1,\"2571\":3,\"2572\":4,\"2573\":3,\"2772\":1,\"2790\":3,\"2791\":4,\"2792\":3}}],[\"permissions\",{\"1\":{\"170\":1,\"410\":1,\"438\":1,\"464\":1,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"621\":1,\"649\":1,\"667\":1,\"695\":1,\"713\":1,\"741\":1,\"759\":1,\"787\":1}}],[\"permission\",{\"1\":{\"37\":1}}],[\"per\",{\"1\":{\"101\":1,\"355\":1,\"356\":1,\"381\":1,\"382\":1}}],[\"performs\",{\"1\":{\"101\":1,\"102\":1,\"103\":1}}],[\"performed\",{\"1\":{\"95\":1,\"165\":1}}],[\"perform\",{\"1\":{\"81\":1,\"98\":1,\"122\":1,\"442\":3,\"468\":1,\"491\":1,\"517\":1,\"547\":3,\"577\":3,\"607\":3,\"653\":3,\"699\":3,\"745\":3,\"791\":3}}],[\"person\",{\"1\":{\"424\":1,\"454\":1,\"477\":1,\"503\":1,\"529\":1,\"559\":1,\"589\":1,\"635\":1,\"681\":1,\"727\":1,\"773\":1}}],[\"personal\",{\"1\":{\"158\":2,\"261\":1,\"262\":1,\"285\":1,\"296\":1,\"394\":2,\"412\":6,\"423\":1,\"438\":1,\"453\":1,\"464\":1,\"476\":1,\"487\":1,\"502\":1,\"513\":1,\"528\":1,\"543\":1,\"558\":1,\"573\":1,\"588\":1,\"603\":1,\"623\":6,\"634\":1,\"649\":1,\"669\":6,\"680\":1,\"695\":1,\"715\":6,\"726\":1,\"741\":1,\"761\":6,\"772\":1,\"787\":1}}],[\"personalized\",{\"1\":{\"12\":1}}],[\"persisted\",{\"1\":{\"86\":1}}],[\"persisting\",{\"1\":{\"85\":1}}],[\"perspective\",{\"1\":{\"28\":1,\"77\":1,\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"p12keystore\",{\"0\":{\"220\":1,\"221\":2,\"877\":1,\"878\":2,\"1059\":1,\"1060\":2,\"1210\":1,\"1211\":2,\"1382\":1,\"1383\":2,\"1559\":1,\"1560\":2,\"1736\":1,\"1737\":2,\"1913\":1,\"1914\":2,\"2090\":1,\"2091\":2,\"2280\":1,\"2281\":2,\"2499\":1,\"2500\":2,\"2718\":1,\"2719\":2},\"1\":{\"220\":1,\"221\":2,\"877\":1,\"878\":2,\"1059\":1,\"1060\":2,\"1210\":1,\"1211\":2,\"1382\":1,\"1383\":2,\"1559\":1,\"1560\":2,\"1736\":1,\"1737\":2,\"1913\":1,\"1914\":2,\"2090\":1,\"2091\":2,\"2280\":1,\"2281\":2,\"2499\":1,\"2500\":2,\"2718\":1,\"2719\":2}}],[\"p12\",{\"1\":{\"130\":2,\"131\":2,\"134\":1,\"220\":1,\"221\":1,\"334\":2,\"363\":1,\"389\":1,\"877\":1,\"878\":1,\"1059\":1,\"1060\":1,\"1210\":1,\"1211\":1,\"1382\":1,\"1383\":1,\"1559\":1,\"1560\":1,\"1736\":1,\"1737\":1,\"1913\":1,\"1914\":1,\"2090\":1,\"2091\":1,\"2280\":1,\"2281\":1,\"2499\":1,\"2500\":1,\"2718\":1,\"2719\":1}}],[\"pdq\",{\"1\":{\"148\":4,\"300\":3,\"303\":3,\"306\":3}}],[\"pdf\",{\"1\":{\"106\":1,\"161\":1,\"314\":1}}],[\"pdp\",{\"1\":{\"95\":2,\"165\":2}}],[\"picture\",{\"1\":{\"93\":1}}],[\"ping\",{\"0\":{\"100\":1,\"101\":1,\"102\":1},\"1\":{\"20\":1,\"92\":1,\"98\":1,\"100\":3,\"101\":2,\"102\":4,\"103\":2,\"286\":2,\"297\":2,\"300\":7,\"303\":7,\"306\":3,\"309\":3,\"312\":3,\"418\":1,\"419\":1,\"427\":1,\"445\":1,\"448\":1,\"449\":1,\"471\":1,\"472\":1,\"494\":1,\"497\":1,\"498\":1,\"520\":3,\"523\":1,\"524\":1,\"532\":2,\"550\":1,\"553\":1,\"554\":1,\"562\":2,\"580\":1,\"583\":1,\"584\":1,\"592\":2,\"610\":1,\"629\":1,\"630\":1,\"638\":2,\"656\":1,\"675\":1,\"676\":1,\"684\":2,\"702\":1,\"721\":1,\"722\":1,\"730\":2,\"748\":1,\"767\":1,\"768\":1,\"776\":1,\"794\":1}}],[\"pool\",{\"1\":{\"884\":1,\"885\":2,\"886\":1,\"1389\":1,\"1390\":2,\"1391\":1,\"1566\":1,\"1567\":2,\"1568\":1,\"1743\":1,\"1744\":2,\"1745\":1,\"1920\":1,\"1921\":2,\"1922\":1,\"2097\":1,\"2098\":2,\"2099\":1,\"2287\":1,\"2288\":2,\"2289\":1,\"2506\":1,\"2507\":2,\"2508\":1,\"2725\":1,\"2726\":2,\"2727\":1}}],[\"popup\",{\"1\":{\"455\":1,\"478\":1,\"504\":1,\"530\":1}}],[\"power\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"pom\",{\"1\":{\"137\":1,\"138\":1,\"159\":1,\"342\":1}}],[\"point\",{\"1\":{\"95\":1,\"165\":1,\"442\":2,\"547\":2,\"577\":2,\"607\":2,\"653\":2,\"699\":2,\"745\":2,\"791\":2}}],[\"possibly\",{\"1\":{\"373\":1}}],[\"possible\",{\"0\":{\"2\":1,\"83\":1},\"1\":{\"37\":2,\"67\":1,\"90\":1,\"98\":3,\"204\":1,\"259\":1,\"344\":1,\"958\":1,\"1043\":1,\"1121\":1,\"1194\":1,\"1259\":1,\"1435\":1,\"1612\":1,\"1789\":1,\"1966\":1,\"2143\":1,\"2361\":1,\"2580\":1,\"2799\":1}}],[\"possibilities\",{\"1\":{\"318\":1,\"340\":1}}],[\"position\",{\"1\":{\"155\":13}}],[\"positions\",{\"1\":{\"155\":10}}],[\"posted\",{\"1\":{\"334\":1,\"377\":1}}],[\"posting\",{\"1\":{\"334\":1,\"348\":1,\"363\":1,\"373\":1,\"389\":1}}],[\"postgres\",{\"1\":{\"323\":6}}],[\"postgresql\",{\"1\":{\"95\":2,\"130\":2,\"132\":1,\"165\":2,\"173\":1,\"249\":1,\"323\":7,\"327\":1,\"836\":1,\"946\":1,\"1021\":1,\"1112\":1,\"1172\":1,\"1250\":1,\"1344\":1,\"1426\":1,\"1521\":1,\"1603\":1,\"1698\":1,\"1780\":1,\"1875\":1,\"1957\":1,\"2052\":1,\"2134\":1,\"2239\":1,\"2349\":1,\"2458\":1,\"2568\":1,\"2677\":1,\"2787\":1}}],[\"postfix\",{\"1\":{\"155\":2}}],[\"poses\",{\"1\":{\"123\":1}}],[\"ports\",{\"1\":{\"299\":1,\"302\":1,\"305\":1,\"308\":1,\"311\":1,\"323\":7,\"897\":1,\"964\":1,\"1071\":1,\"1125\":1,\"1222\":1,\"1264\":1,\"1398\":1,\"1440\":1,\"1575\":1,\"1617\":1,\"1752\":1,\"1794\":1,\"1929\":1,\"1971\":1,\"2106\":1,\"2148\":1,\"2300\":1,\"2367\":1,\"2519\":1,\"2586\":1,\"2738\":1,\"2805\":1}}],[\"portion\",{\"1\":{\"115\":1}}],[\"port\",{\"0\":{\"216\":1,\"266\":1,\"809\":1,\"831\":1,\"873\":1,\"910\":1,\"969\":1,\"991\":1,\"1002\":1,\"1055\":1,\"1077\":1,\"1099\":1,\"1131\":1,\"1145\":1,\"1167\":1,\"1206\":1,\"1269\":1,\"1291\":1,\"1302\":1,\"1317\":1,\"1339\":1,\"1378\":1,\"1445\":1,\"1467\":1,\"1478\":1,\"1494\":1,\"1516\":1,\"1555\":1,\"1622\":1,\"1644\":1,\"1655\":1,\"1671\":1,\"1693\":1,\"1732\":1,\"1799\":1,\"1821\":1,\"1832\":1,\"1848\":1,\"1870\":1,\"1909\":1,\"1976\":1,\"1998\":1,\"2009\":1,\"2025\":1,\"2047\":1,\"2086\":1,\"2153\":1,\"2175\":1,\"2186\":1,\"2212\":1,\"2234\":1,\"2276\":1,\"2313\":1,\"2372\":1,\"2394\":1,\"2405\":1,\"2431\":1,\"2453\":1,\"2495\":1,\"2532\":1,\"2591\":1,\"2613\":1,\"2624\":1,\"2650\":1,\"2672\":1,\"2714\":1,\"2751\":1,\"2810\":1,\"2832\":1,\"2843\":1},\"1\":{\"95\":1,\"165\":1,\"216\":2,\"266\":1,\"281\":1,\"285\":1,\"292\":1,\"296\":1,\"337\":2,\"435\":1,\"438\":1,\"461\":1,\"464\":1,\"484\":1,\"487\":1,\"510\":1,\"513\":1,\"540\":1,\"543\":1,\"570\":1,\"573\":1,\"600\":1,\"603\":1,\"646\":1,\"649\":1,\"692\":1,\"695\":1,\"738\":1,\"741\":1,\"784\":1,\"787\":1,\"809\":2,\"831\":2,\"873\":2,\"897\":1,\"910\":1,\"964\":1,\"969\":2,\"991\":2,\"1002\":1,\"1055\":2,\"1071\":1,\"1077\":2,\"1099\":2,\"1125\":1,\"1131\":1,\"1145\":2,\"1167\":2,\"1206\":2,\"1222\":1,\"1264\":1,\"1269\":2,\"1291\":2,\"1302\":1,\"1317\":2,\"1339\":2,\"1378\":2,\"1398\":1,\"1440\":1,\"1445\":2,\"1467\":2,\"1478\":1,\"1494\":2,\"1516\":2,\"1555\":2,\"1575\":1,\"1617\":1,\"1622\":2,\"1644\":2,\"1655\":1,\"1671\":2,\"1693\":2,\"1732\":2,\"1752\":1,\"1794\":1,\"1799\":2,\"1821\":2,\"1832\":1,\"1848\":2,\"1870\":2,\"1909\":2,\"1929\":1,\"1971\":1,\"1976\":2,\"1998\":2,\"2009\":1,\"2025\":2,\"2047\":2,\"2086\":2,\"2106\":1,\"2148\":1,\"2153\":2,\"2175\":2,\"2186\":1,\"2212\":2,\"2234\":2,\"2276\":2,\"2300\":1,\"2313\":1,\"2367\":1,\"2372\":2,\"2394\":2,\"2405\":1,\"2431\":2,\"2453\":2,\"2495\":2,\"2519\":1,\"2532\":1,\"2586\":1,\"2591\":2,\"2613\":2,\"2624\":1,\"2650\":2,\"2672\":2,\"2714\":2,\"2738\":1,\"2751\":1,\"2805\":1,\"2810\":2,\"2832\":2,\"2843\":1}}],[\"portal\",{\"1\":{\"77\":1,\"87\":1,\"94\":1,\"122\":2,\"124\":1,\"423\":3,\"453\":3,\"476\":3,\"502\":3,\"528\":3,\"558\":3,\"588\":3,\"634\":3,\"680\":3,\"726\":3,\"772\":3}}],[\"potential\",{\"1\":{\"36\":1,\"37\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"policy\",{\"0\":{\"34\":1},\"1\":{\"39\":1,\"40\":1,\"90\":1,\"95\":1,\"165\":1}}],[\"pong\",{\"0\":{\"100\":1,\"103\":1},\"1\":{\"20\":1,\"92\":1,\"98\":1,\"100\":2,\"102\":2,\"103\":3,\"300\":2,\"303\":2,\"306\":2,\"309\":2,\"312\":2,\"418\":1,\"419\":1,\"427\":1,\"445\":1,\"448\":1,\"449\":1,\"471\":1,\"472\":1,\"494\":1,\"497\":1,\"498\":1,\"520\":3,\"523\":1,\"524\":1,\"532\":2,\"550\":1,\"553\":1,\"554\":1,\"562\":2,\"580\":1,\"583\":1,\"584\":1,\"592\":2,\"610\":1,\"629\":1,\"630\":1,\"638\":2,\"656\":1,\"675\":1,\"676\":1,\"684\":2,\"702\":1,\"721\":1,\"722\":1,\"730\":2,\"748\":1,\"767\":1,\"768\":1,\"776\":1,\"794\":1}}],[\"purpose\",{\"1\":{\"163\":1,\"164\":1,\"344\":1}}],[\"purposes\",{\"1\":{\"87\":1,\"261\":1,\"262\":1,\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1}}],[\"put\",{\"1\":{\"155\":1}}],[\"pull\",{\"0\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1},\"1\":{\"137\":1,\"152\":1,\"403\":1,\"410\":2,\"411\":5,\"413\":2,\"415\":1,\"614\":1,\"621\":2,\"622\":5,\"624\":2,\"626\":1,\"660\":1,\"667\":2,\"668\":5,\"670\":2,\"672\":1,\"706\":1,\"713\":2,\"714\":5,\"716\":2,\"718\":1,\"752\":1,\"759\":2,\"760\":5,\"762\":2,\"764\":1}}],[\"pushing\",{\"1\":{\"152\":1,\"403\":1,\"614\":1,\"660\":1,\"706\":1,\"752\":1}}],[\"push\",{\"1\":{\"137\":3,\"138\":2}}],[\"publish\",{\"1\":{\"93\":1,\"137\":1,\"138\":1}}],[\"publication\",{\"1\":{\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1}}],[\"publications\",{\"0\":{\"25\":1,\"26\":1}}],[\"publicly\",{\"1\":{\"37\":1}}],[\"public\",{\"0\":{\"76\":1},\"1\":{\"4\":1,\"36\":1,\"75\":1,\"286\":5,\"297\":5,\"409\":1,\"620\":1,\"666\":1,\"712\":1,\"758\":1}}],[\"punkt\",{\"1\":{\"16\":1}}],[\"place\",{\"1\":{\"414\":1,\"442\":1,\"547\":1,\"577\":1,\"607\":1,\"625\":1,\"653\":1,\"671\":1,\"699\":1,\"717\":1,\"745\":1,\"763\":1,\"791\":1}}],[\"placeholders\",{\"0\":{\"344\":1},\"1\":{\"344\":1}}],[\"play\",{\"1\":{\"414\":1,\"625\":1,\"671\":1,\"717\":1,\"763\":1}}],[\"planning\",{\"1\":{\"116\":1}}],[\"planen\",{\"1\":{\"16\":1}}],[\"platform\",{\"1\":{\"26\":1,\"124\":1,\"125\":1}}],[\"plugin`\",{\"1\":{\"306\":1}}],[\"plugin\",{\"0\":{\"232\":1,\"313\":1,\"328\":1,\"418\":1,\"448\":1,\"471\":1,\"497\":1,\"523\":1,\"553\":1,\"583\":1,\"629\":1,\"675\":1,\"721\":1,\"767\":1,\"890\":1,\"1069\":1,\"1220\":1,\"1395\":1,\"1572\":1,\"1749\":1,\"1926\":1,\"2103\":1,\"2293\":1,\"2512\":1,\"2731\":1},\"1\":{\"20\":1,\"42\":1,\"43\":1,\"44\":1,\"45\":1,\"46\":1,\"47\":1,\"48\":1,\"49\":1,\"50\":1,\"51\":1,\"52\":1,\"53\":1,\"54\":1,\"55\":1,\"56\":1,\"57\":1,\"58\":1,\"59\":1,\"60\":1,\"61\":1,\"62\":1,\"63\":1,\"77\":2,\"86\":1,\"98\":3,\"100\":1,\"148\":2,\"149\":2,\"150\":4,\"180\":1,\"181\":1,\"182\":1,\"232\":1,\"286\":4,\"297\":4,\"300\":4,\"303\":4,\"306\":3,\"317\":1,\"323\":6,\"327\":1,\"328\":5,\"336\":1,\"341\":1,\"344\":1,\"415\":2,\"417\":1,\"418\":4,\"419\":5,\"426\":1,\"427\":3,\"430\":1,\"433\":1,\"435\":1,\"442\":2,\"447\":1,\"448\":4,\"449\":5,\"456\":1,\"459\":1,\"461\":1,\"468\":1,\"470\":1,\"471\":4,\"472\":5,\"479\":1,\"482\":1,\"484\":1,\"491\":1,\"496\":1,\"497\":4,\"498\":5,\"505\":1,\"508\":1,\"510\":1,\"517\":1,\"520\":3,\"522\":1,\"523\":4,\"524\":5,\"535\":1,\"538\":1,\"540\":1,\"547\":2,\"552\":1,\"553\":4,\"554\":5,\"565\":1,\"568\":1,\"570\":1,\"577\":2,\"582\":1,\"583\":4,\"584\":5,\"595\":1,\"598\":1,\"600\":1,\"607\":2,\"626\":2,\"628\":1,\"629\":4,\"630\":5,\"641\":1,\"644\":1,\"646\":1,\"653\":2,\"672\":2,\"674\":1,\"675\":4,\"676\":5,\"687\":1,\"690\":1,\"692\":1,\"699\":2,\"718\":2,\"720\":1,\"721\":4,\"722\":5,\"733\":1,\"736\":1,\"738\":1,\"745\":2,\"764\":2,\"766\":1,\"767\":4,\"768\":5,\"775\":1,\"776\":3,\"779\":1,\"782\":1,\"784\":1,\"791\":2,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"890\":1,\"932\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1069\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1220\":1,\"1236\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1395\":1,\"1412\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1572\":1,\"1589\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1749\":1,\"1766\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1926\":1,\"1943\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2103\":1,\"2120\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2293\":1,\"2335\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2512\":1,\"2554\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2731\":1,\"2773\":1}}],[\"plugins\",{\"0\":{\"97\":1,\"314\":1,\"416\":1,\"426\":1,\"446\":1,\"469\":1,\"495\":1,\"521\":1,\"531\":1,\"551\":1,\"561\":1,\"581\":1,\"591\":1,\"627\":1,\"637\":1,\"673\":1,\"683\":1,\"719\":1,\"729\":1,\"765\":1,\"775\":1},\"1\":{\"5\":1,\"33\":2,\"77\":3,\"86\":1,\"98\":3,\"169\":1,\"232\":1,\"286\":3,\"297\":3,\"298\":1,\"300\":8,\"301\":1,\"303\":8,\"304\":1,\"306\":4,\"314\":1,\"318\":1,\"340\":1,\"341\":1,\"412\":1,\"415\":3,\"419\":1,\"426\":1,\"427\":2,\"435\":1,\"439\":1,\"442\":2,\"449\":1,\"461\":1,\"465\":1,\"468\":2,\"472\":1,\"484\":1,\"488\":1,\"491\":2,\"498\":1,\"510\":1,\"514\":1,\"517\":2,\"524\":1,\"531\":1,\"540\":1,\"544\":1,\"547\":2,\"554\":1,\"561\":1,\"570\":1,\"574\":1,\"577\":2,\"584\":1,\"591\":1,\"600\":1,\"604\":1,\"607\":2,\"623\":1,\"626\":3,\"630\":1,\"637\":1,\"646\":1,\"650\":1,\"653\":2,\"669\":1,\"672\":3,\"676\":1,\"683\":1,\"692\":1,\"696\":1,\"699\":2,\"715\":1,\"718\":3,\"722\":1,\"729\":1,\"738\":1,\"742\":1,\"745\":2,\"761\":1,\"764\":3,\"768\":1,\"775\":1,\"776\":2,\"784\":1,\"788\":1,\"791\":2,\"890\":1,\"932\":1,\"1069\":1,\"1220\":1,\"1236\":1,\"1395\":1,\"1412\":1,\"1572\":1,\"1589\":1,\"1749\":1,\"1766\":1,\"1926\":1,\"1943\":1,\"2103\":1,\"2120\":1,\"2293\":1,\"2335\":1,\"2512\":1,\"2554\":1,\"2731\":1,\"2773\":1}}],[\"please\",{\"1\":{\"13\":2,\"20\":1,\"37\":2,\"40\":1,\"69\":1,\"169\":1,\"236\":1,\"298\":1,\"301\":2,\"304\":1,\"412\":1,\"413\":2,\"415\":3,\"425\":1,\"435\":1,\"440\":1,\"441\":2,\"442\":5,\"452\":1,\"453\":2,\"455\":1,\"456\":1,\"461\":1,\"466\":1,\"467\":2,\"468\":3,\"475\":1,\"476\":2,\"478\":1,\"479\":1,\"484\":1,\"489\":1,\"490\":2,\"491\":3,\"492\":1,\"501\":1,\"502\":2,\"504\":1,\"505\":1,\"510\":1,\"515\":1,\"516\":2,\"517\":3,\"518\":1,\"520\":1,\"528\":1,\"530\":1,\"540\":1,\"545\":1,\"546\":2,\"547\":5,\"548\":1,\"560\":1,\"570\":1,\"575\":1,\"576\":2,\"577\":5,\"590\":1,\"600\":1,\"605\":1,\"606\":2,\"607\":5,\"623\":1,\"624\":2,\"626\":3,\"636\":1,\"646\":1,\"651\":1,\"652\":2,\"653\":5,\"669\":1,\"670\":2,\"672\":3,\"682\":1,\"692\":1,\"697\":1,\"698\":2,\"699\":5,\"715\":1,\"716\":2,\"718\":3,\"728\":1,\"738\":1,\"743\":1,\"744\":2,\"745\":5,\"761\":1,\"762\":2,\"764\":3,\"774\":1,\"784\":1,\"789\":1,\"790\":2,\"791\":5,\"1016\":1,\"1100\":1}}],[\"pleased\",{\"1\":{\"1\":1}}],[\"payload=application\",{\"1\":{\"202\":1,\"207\":1,\"860\":1,\"864\":1,\"1041\":1,\"1046\":1,\"1192\":1,\"1197\":1,\"1365\":1,\"1369\":1,\"1542\":1,\"1546\":1,\"1719\":1,\"1723\":1,\"1896\":1,\"1900\":1,\"2073\":1,\"2077\":1,\"2263\":1,\"2267\":1,\"2482\":1,\"2486\":1,\"2701\":1,\"2705\":1}}],[\"packaged\",{\"1\":{\"318\":1,\"340\":1}}],[\"packages<\",{\"1\":{\"158\":1}}],[\"packages\",{\"0\":{\"158\":1,\"394\":1},\"1\":{\"156\":1,\"158\":2,\"159\":1,\"394\":3}}],[\"package\",{\"0\":{\"157\":1,\"159\":1},\"1\":{\"148\":1,\"149\":1,\"155\":3,\"159\":5,\"342\":3,\"394\":1}}],[\"passed\",{\"1\":{\"337\":1}}],[\"pass\",{\"0\":{\"267\":1,\"268\":1,\"269\":1,\"270\":1,\"911\":1,\"912\":1,\"913\":1,\"914\":1,\"1003\":1,\"1004\":1,\"1005\":1,\"1006\":1,\"1132\":1,\"1133\":1,\"1134\":1,\"1135\":1,\"1303\":1,\"1304\":1,\"1305\":1,\"1306\":1,\"1479\":1,\"1480\":1,\"1481\":1,\"1482\":1,\"1656\":1,\"1657\":1,\"1658\":1,\"1659\":1,\"1833\":1,\"1834\":1,\"1835\":1,\"1836\":1,\"2010\":1,\"2011\":1,\"2012\":1,\"2013\":1,\"2187\":1,\"2188\":1,\"2189\":1,\"2190\":1,\"2314\":1,\"2315\":1,\"2316\":1,\"2317\":1,\"2406\":1,\"2407\":1,\"2408\":1,\"2409\":1,\"2533\":1,\"2534\":1,\"2535\":1,\"2536\":1,\"2625\":1,\"2626\":1,\"2627\":1,\"2628\":1,\"2752\":1,\"2753\":1,\"2754\":1,\"2755\":1,\"2844\":1,\"2845\":1,\"2846\":1,\"2847\":1},\"1\":{\"166\":1,\"318\":1,\"340\":1}}],[\"passwords\",{\"1\":{\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"password>\",{\"1\":{\"158\":1,\"394\":1}}],[\"password\",{\"0\":{\"171\":2,\"175\":2,\"178\":2,\"185\":2,\"186\":2,\"192\":2,\"195\":2,\"210\":2,\"215\":2,\"221\":2,\"239\":2,\"240\":2,\"247\":2,\"251\":2,\"253\":2,\"819\":2,\"828\":2,\"834\":2,\"838\":2,\"841\":2,\"852\":2,\"867\":2,\"872\":2,\"878\":2,\"898\":2,\"937\":2,\"944\":2,\"948\":2,\"950\":2,\"965\":2,\"979\":2,\"988\":2,\"1019\":2,\"1023\":2,\"1026\":2,\"1033\":2,\"1049\":2,\"1054\":2,\"1060\":2,\"1072\":2,\"1087\":2,\"1096\":2,\"1103\":2,\"1110\":2,\"1114\":2,\"1116\":2,\"1126\":2,\"1155\":2,\"1164\":2,\"1170\":2,\"1174\":2,\"1177\":2,\"1184\":2,\"1200\":2,\"1205\":2,\"1211\":2,\"1223\":2,\"1241\":2,\"1248\":2,\"1252\":2,\"1254\":2,\"1265\":2,\"1279\":2,\"1288\":2,\"1327\":2,\"1336\":2,\"1342\":2,\"1346\":2,\"1349\":2,\"1357\":2,\"1372\":2,\"1377\":2,\"1383\":2,\"1399\":2,\"1417\":2,\"1424\":2,\"1428\":2,\"1430\":2,\"1441\":2,\"1455\":2,\"1464\":2,\"1504\":2,\"1513\":2,\"1519\":2,\"1523\":2,\"1526\":2,\"1534\":2,\"1549\":2,\"1554\":2,\"1560\":2,\"1576\":2,\"1594\":2,\"1601\":2,\"1605\":2,\"1607\":2,\"1618\":2,\"1632\":2,\"1641\":2,\"1681\":2,\"1690\":2,\"1696\":2,\"1700\":2,\"1703\":2,\"1711\":2,\"1726\":2,\"1731\":2,\"1737\":2,\"1753\":2,\"1771\":2,\"1778\":2,\"1782\":2,\"1784\":2,\"1795\":2,\"1809\":2,\"1818\":2,\"1858\":2,\"1867\":2,\"1873\":2,\"1877\":2,\"1880\":2,\"1888\":2,\"1903\":2,\"1908\":2,\"1914\":2,\"1930\":2,\"1948\":2,\"1955\":2,\"1959\":2,\"1961\":2,\"1972\":2,\"1986\":2,\"1995\":2,\"2035\":2,\"2044\":2,\"2050\":2,\"2054\":2,\"2057\":2,\"2065\":2,\"2080\":2,\"2085\":2,\"2091\":2,\"2107\":2,\"2125\":2,\"2132\":2,\"2136\":2,\"2138\":2,\"2149\":2,\"2163\":2,\"2172\":2,\"2222\":2,\"2231\":2,\"2237\":2,\"2241\":2,\"2244\":2,\"2255\":2,\"2270\":2,\"2275\":2,\"2281\":2,\"2301\":2,\"2340\":2,\"2347\":2,\"2351\":2,\"2353\":2,\"2368\":2,\"2382\":2,\"2391\":2,\"2441\":2,\"2450\":2,\"2456\":2,\"2460\":2,\"2463\":2,\"2474\":2,\"2489\":2,\"2494\":2,\"2500\":2,\"2520\":2,\"2559\":2,\"2566\":2,\"2570\":2,\"2572\":2,\"2587\":2,\"2601\":2,\"2610\":2,\"2660\":2,\"2669\":2,\"2675\":2,\"2679\":2,\"2682\":2,\"2693\":2,\"2708\":2,\"2713\":2,\"2719\":2,\"2739\":2,\"2778\":2,\"2785\":2,\"2789\":2,\"2791\":2,\"2806\":2,\"2820\":2,\"2829\":2},\"1\":{\"130\":3,\"131\":2,\"134\":4,\"135\":1,\"171\":4,\"175\":4,\"178\":4,\"184\":2,\"185\":4,\"186\":3,\"192\":3,\"195\":3,\"209\":2,\"210\":4,\"215\":4,\"221\":4,\"225\":1,\"238\":2,\"239\":4,\"240\":3,\"247\":4,\"251\":4,\"253\":4,\"285\":14,\"286\":14,\"296\":14,\"297\":14,\"323\":103,\"334\":7,\"363\":2,\"389\":2,\"438\":14,\"439\":14,\"464\":14,\"465\":14,\"487\":14,\"488\":14,\"513\":14,\"514\":14,\"543\":14,\"544\":14,\"573\":14,\"574\":14,\"603\":14,\"604\":14,\"649\":14,\"650\":14,\"695\":14,\"696\":14,\"741\":14,\"742\":14,\"787\":14,\"788\":14,\"818\":2,\"819\":4,\"828\":2,\"834\":4,\"838\":4,\"841\":4,\"851\":2,\"852\":4,\"866\":2,\"867\":4,\"872\":4,\"878\":4,\"882\":1,\"898\":4,\"936\":2,\"937\":4,\"944\":4,\"948\":4,\"950\":4,\"965\":4,\"978\":2,\"979\":4,\"988\":2,\"1019\":4,\"1023\":4,\"1026\":4,\"1032\":2,\"1033\":4,\"1048\":2,\"1049\":4,\"1054\":4,\"1060\":4,\"1064\":1,\"1072\":4,\"1086\":2,\"1087\":4,\"1096\":2,\"1102\":2,\"1103\":4,\"1110\":4,\"1114\":4,\"1116\":4,\"1126\":4,\"1154\":2,\"1155\":4,\"1164\":2,\"1170\":4,\"1174\":4,\"1177\":4,\"1183\":2,\"1184\":4,\"1199\":2,\"1200\":4,\"1205\":4,\"1211\":4,\"1215\":1,\"1223\":4,\"1240\":2,\"1241\":4,\"1248\":4,\"1252\":4,\"1254\":4,\"1265\":4,\"1278\":2,\"1279\":4,\"1288\":2,\"1326\":2,\"1327\":4,\"1336\":2,\"1342\":4,\"1346\":4,\"1349\":4,\"1356\":2,\"1357\":4,\"1371\":2,\"1372\":4,\"1377\":4,\"1383\":4,\"1387\":1,\"1399\":4,\"1416\":2,\"1417\":4,\"1424\":4,\"1428\":4,\"1430\":4,\"1441\":4,\"1454\":2,\"1455\":4,\"1464\":2,\"1503\":2,\"1504\":4,\"1513\":2,\"1519\":4,\"1523\":4,\"1526\":4,\"1533\":2,\"1534\":4,\"1548\":2,\"1549\":4,\"1554\":4,\"1560\":4,\"1564\":1,\"1576\":4,\"1593\":2,\"1594\":4,\"1601\":4,\"1605\":4,\"1607\":4,\"1618\":4,\"1631\":2,\"1632\":4,\"1641\":2,\"1680\":2,\"1681\":4,\"1690\":2,\"1696\":4,\"1700\":4,\"1703\":4,\"1710\":2,\"1711\":4,\"1725\":2,\"1726\":4,\"1731\":4,\"1737\":4,\"1741\":1,\"1753\":4,\"1770\":2,\"1771\":4,\"1778\":4,\"1782\":4,\"1784\":4,\"1795\":4,\"1808\":2,\"1809\":4,\"1818\":2,\"1857\":2,\"1858\":4,\"1867\":2,\"1873\":4,\"1877\":4,\"1880\":4,\"1887\":2,\"1888\":4,\"1902\":2,\"1903\":4,\"1908\":4,\"1914\":4,\"1918\":1,\"1930\":4,\"1947\":2,\"1948\":4,\"1955\":4,\"1959\":4,\"1961\":4,\"1972\":4,\"1985\":2,\"1986\":4,\"1995\":2,\"2034\":2,\"2035\":4,\"2044\":2,\"2050\":4,\"2054\":4,\"2057\":4,\"2064\":2,\"2065\":4,\"2079\":2,\"2080\":4,\"2085\":4,\"2091\":4,\"2095\":1,\"2107\":4,\"2124\":2,\"2125\":4,\"2132\":4,\"2136\":4,\"2138\":4,\"2149\":4,\"2162\":2,\"2163\":4,\"2172\":2,\"2221\":2,\"2222\":4,\"2231\":2,\"2237\":4,\"2241\":4,\"2244\":4,\"2254\":2,\"2255\":4,\"2269\":2,\"2270\":4,\"2275\":4,\"2281\":4,\"2285\":1,\"2301\":4,\"2339\":2,\"2340\":4,\"2347\":4,\"2351\":4,\"2353\":4,\"2368\":4,\"2381\":2,\"2382\":4,\"2391\":2,\"2440\":2,\"2441\":4,\"2450\":2,\"2456\":4,\"2460\":4,\"2463\":4,\"2473\":2,\"2474\":4,\"2488\":2,\"2489\":4,\"2494\":4,\"2500\":4,\"2504\":1,\"2520\":4,\"2558\":2,\"2559\":4,\"2566\":4,\"2570\":4,\"2572\":4,\"2587\":4,\"2600\":2,\"2601\":4,\"2610\":2,\"2659\":2,\"2660\":4,\"2669\":2,\"2675\":4,\"2679\":4,\"2682\":4,\"2692\":2,\"2693\":4,\"2707\":2,\"2708\":4,\"2713\":4,\"2719\":4,\"2723\":1,\"2739\":4,\"2777\":2,\"2778\":4,\"2785\":4,\"2789\":4,\"2791\":4,\"2806\":4,\"2819\":2,\"2820\":4,\"2829\":2}}],[\"paste\",{\"1\":{\"141\":1,\"142\":1,\"143\":5,\"145\":1,\"146\":4,\"147\":2}}],[\"past\",{\"1\":{\"141\":1}}],[\"pandemic\",{\"1\":{\"125\":1}}],[\"parallel\",{\"1\":{\"892\":1,\"1397\":1,\"1574\":1,\"1751\":1,\"1928\":1,\"2105\":1,\"2295\":1,\"2514\":1,\"2733\":1}}],[\"parameterized\",{\"1\":{\"155\":6}}],[\"parameter\",{\"0\":{\"202\":1,\"207\":1,\"860\":1,\"864\":1,\"904\":1,\"996\":1,\"1041\":1,\"1046\":1,\"1192\":1,\"1197\":1,\"1296\":1,\"1365\":1,\"1369\":1,\"1472\":1,\"1542\":1,\"1546\":1,\"1649\":1,\"1719\":1,\"1723\":1,\"1826\":1,\"1896\":1,\"1900\":1,\"2003\":1,\"2073\":1,\"2077\":1,\"2180\":1,\"2263\":1,\"2267\":1,\"2307\":1,\"2399\":1,\"2482\":1,\"2486\":1,\"2526\":1,\"2618\":1,\"2701\":1,\"2705\":1,\"2745\":1,\"2837\":1},\"1\":{\"143\":4,\"146\":1,\"155\":5,\"156\":2,\"202\":1,\"207\":1,\"271\":1,\"272\":1,\"273\":1,\"274\":1,\"275\":1,\"285\":2,\"296\":2,\"345\":3,\"348\":2,\"369\":1,\"370\":1,\"373\":1,\"379\":2,\"386\":3,\"389\":2,\"442\":2,\"464\":1,\"547\":2,\"577\":2,\"607\":2,\"653\":2,\"699\":2,\"745\":2,\"791\":2,\"798\":2,\"860\":1,\"864\":1,\"896\":1,\"902\":1,\"903\":1,\"904\":3,\"916\":1,\"917\":1,\"918\":1,\"919\":1,\"920\":1,\"921\":1,\"925\":3,\"963\":1,\"993\":1,\"994\":1,\"995\":2,\"996\":3,\"1008\":1,\"1009\":1,\"1010\":1,\"1011\":1,\"1012\":1,\"1013\":1,\"1041\":1,\"1046\":1,\"1136\":1,\"1137\":1,\"1138\":1,\"1139\":1,\"1140\":1,\"1192\":1,\"1197\":1,\"1229\":3,\"1293\":1,\"1294\":1,\"1295\":2,\"1296\":3,\"1307\":1,\"1308\":1,\"1309\":1,\"1310\":1,\"1311\":1,\"1312\":1,\"1365\":1,\"1369\":1,\"1405\":3,\"1469\":1,\"1470\":1,\"1471\":2,\"1472\":3,\"1484\":1,\"1485\":1,\"1486\":1,\"1487\":1,\"1488\":1,\"1489\":1,\"1542\":1,\"1546\":1,\"1582\":3,\"1646\":1,\"1647\":1,\"1648\":2,\"1649\":3,\"1661\":1,\"1662\":1,\"1663\":1,\"1664\":1,\"1665\":1,\"1666\":1,\"1719\":1,\"1723\":1,\"1759\":3,\"1823\":1,\"1824\":1,\"1825\":2,\"1826\":3,\"1838\":1,\"1839\":1,\"1840\":1,\"1841\":1,\"1842\":1,\"1843\":1,\"1896\":1,\"1900\":1,\"1936\":3,\"2000\":1,\"2001\":1,\"2002\":2,\"2003\":3,\"2015\":1,\"2016\":1,\"2017\":1,\"2018\":1,\"2019\":1,\"2020\":1,\"2073\":1,\"2077\":1,\"2113\":3,\"2177\":1,\"2178\":1,\"2179\":2,\"2180\":3,\"2192\":1,\"2193\":1,\"2194\":1,\"2195\":1,\"2196\":1,\"2197\":1,\"2201\":2,\"2263\":1,\"2267\":1,\"2299\":1,\"2305\":1,\"2306\":1,\"2307\":3,\"2319\":1,\"2320\":1,\"2321\":1,\"2322\":1,\"2323\":1,\"2324\":1,\"2328\":3,\"2366\":1,\"2396\":1,\"2397\":1,\"2398\":2,\"2399\":3,\"2411\":1,\"2412\":1,\"2413\":1,\"2414\":1,\"2415\":1,\"2416\":1,\"2420\":2,\"2482\":1,\"2486\":1,\"2518\":1,\"2524\":1,\"2525\":1,\"2526\":3,\"2538\":1,\"2539\":1,\"2540\":1,\"2541\":1,\"2542\":1,\"2543\":1,\"2547\":3,\"2585\":1,\"2615\":1,\"2616\":1,\"2617\":2,\"2618\":3,\"2630\":1,\"2631\":1,\"2632\":1,\"2633\":1,\"2634\":1,\"2635\":1,\"2639\":2,\"2701\":1,\"2705\":1,\"2737\":1,\"2743\":1,\"2744\":1,\"2745\":3,\"2757\":1,\"2758\":1,\"2759\":1,\"2760\":1,\"2761\":1,\"2762\":1,\"2766\":3,\"2804\":1,\"2834\":1,\"2835\":1,\"2836\":2,\"2837\":3,\"2849\":1,\"2850\":1,\"2851\":1,\"2852\":1,\"2853\":1,\"2854\":1}}],[\"parameters\",{\"0\":{\"169\":1,\"236\":1,\"264\":1,\"318\":1,\"339\":1,\"340\":1,\"343\":1,\"807\":1,\"908\":1,\"934\":1,\"1000\":1,\"1014\":1,\"1016\":1,\"1075\":1,\"1100\":1,\"1129\":1,\"1143\":1,\"1238\":1,\"1300\":1,\"1315\":1,\"1414\":1,\"1476\":1,\"1492\":1,\"1591\":1,\"1653\":1,\"1669\":1,\"1768\":1,\"1830\":1,\"1846\":1,\"1945\":1,\"2007\":1,\"2023\":1,\"2122\":1,\"2184\":1,\"2210\":1,\"2311\":1,\"2337\":1,\"2403\":1,\"2429\":1,\"2530\":1,\"2556\":1,\"2622\":1,\"2648\":1,\"2749\":1,\"2775\":1,\"2841\":1},\"1\":{\"108\":1,\"109\":1,\"143\":4,\"147\":1,\"155\":13,\"156\":3,\"169\":1,\"236\":1,\"285\":2,\"286\":1,\"296\":2,\"297\":1,\"318\":1,\"340\":1,\"341\":1,\"343\":5,\"360\":1,\"386\":1,\"421\":4,\"438\":2,\"439\":1,\"464\":2,\"465\":1,\"474\":3,\"487\":2,\"488\":1,\"500\":3,\"513\":2,\"514\":1,\"526\":3,\"543\":2,\"544\":1,\"556\":3,\"573\":2,\"574\":1,\"586\":3,\"603\":2,\"604\":1,\"632\":3,\"649\":2,\"650\":1,\"678\":4,\"695\":2,\"696\":1,\"724\":4,\"741\":2,\"742\":1,\"770\":4,\"787\":2,\"788\":1,\"796\":1,\"903\":1,\"907\":1,\"923\":1,\"994\":1,\"999\":1,\"1015\":4,\"1016\":1,\"1100\":1,\"1142\":1,\"1227\":1,\"1294\":1,\"1299\":1,\"1314\":1,\"1403\":1,\"1470\":1,\"1475\":1,\"1491\":1,\"1580\":1,\"1647\":1,\"1652\":1,\"1668\":1,\"1757\":1,\"1824\":1,\"1829\":1,\"1845\":1,\"1934\":1,\"2001\":1,\"2006\":1,\"2022\":1,\"2111\":1,\"2178\":1,\"2183\":1,\"2199\":1,\"2306\":1,\"2310\":1,\"2326\":1,\"2397\":1,\"2402\":1,\"2418\":1,\"2525\":1,\"2529\":1,\"2545\":1,\"2616\":1,\"2621\":1,\"2637\":1,\"2744\":1,\"2748\":1,\"2764\":1,\"2835\":1,\"2840\":1}}],[\"paren\",{\"1\":{\"155\":43}}],[\"parens\",{\"1\":{\"155\":5}}],[\"parenthesized\",{\"1\":{\"155\":5}}],[\"parentheses\",{\"1\":{\"155\":10}}],[\"parent\",{\"1\":{\"81\":2,\"333\":1,\"347\":1,\"362\":1,\"372\":1,\"388\":1}}],[\"partner\",{\"1\":{\"94\":1}}],[\"partners\",{\"0\":{\"72\":1},\"1\":{\"4\":1,\"78\":1,\"81\":1,\"94\":1,\"105\":1,\"423\":1,\"435\":4,\"453\":1,\"461\":4,\"476\":1,\"484\":4,\"502\":1,\"510\":4,\"528\":1,\"540\":4,\"558\":1,\"570\":4,\"588\":1,\"600\":4,\"634\":1,\"646\":4,\"680\":1,\"692\":4,\"726\":1,\"738\":4,\"772\":1,\"784\":4}}],[\"parts\",{\"1\":{\"93\":1,\"327\":1}}],[\"parties\",{\"1\":{\"81\":1}}],[\"participants\",{\"1\":{\"112\":2,\"113\":1}}],[\"participating\",{\"1\":{\"0\":1,\"8\":1,\"32\":1,\"84\":1,\"105\":1,\"106\":1,\"161\":1}}],[\"particular\",{\"1\":{\"77\":2,\"78\":1,\"116\":1}}],[\"party\",{\"1\":{\"26\":1,\"78\":1,\"81\":1,\"130\":1,\"131\":1}}],[\"part\",{\"1\":{\"6\":1,\"73\":1,\"95\":1,\"100\":1,\"124\":1,\"125\":2,\"165\":1,\"341\":1,\"343\":1,\"399\":1,\"415\":2,\"430\":1,\"456\":2,\"479\":2,\"505\":2,\"519\":1,\"520\":1,\"535\":1,\"565\":1,\"595\":1,\"626\":2,\"641\":1,\"672\":2,\"687\":1,\"718\":2,\"733\":1,\"764\":2,\"779\":1}}],[\"pattern\",{\"1\":{\"353\":2}}],[\"paths\",{\"1\":{\"320\":1,\"365\":1}}],[\"path\",{\"0\":{\"813\":1,\"829\":1,\"915\":1,\"973\":1,\"989\":1,\"1007\":1,\"1081\":1,\"1097\":1,\"1149\":1,\"1165\":1,\"1273\":1,\"1289\":1,\"1321\":1,\"1337\":1,\"1449\":1,\"1465\":1,\"1483\":1,\"1498\":1,\"1514\":1,\"1626\":1,\"1642\":1,\"1660\":1,\"1675\":1,\"1691\":1,\"1803\":1,\"1819\":1,\"1837\":1,\"1852\":1,\"1868\":1,\"1980\":1,\"1996\":1,\"2014\":1,\"2029\":1,\"2045\":1,\"2157\":1,\"2173\":1,\"2191\":1,\"2216\":1,\"2232\":1,\"2318\":1,\"2376\":1,\"2392\":1,\"2410\":1,\"2435\":1,\"2451\":1,\"2537\":1,\"2595\":1,\"2611\":1,\"2629\":1,\"2654\":1,\"2670\":1,\"2756\":1,\"2814\":1,\"2830\":1,\"2848\":1},\"1\":{\"134\":2,\"334\":1,\"812\":1,\"813\":2,\"829\":2,\"903\":2,\"915\":2,\"972\":1,\"973\":2,\"989\":2,\"994\":2,\"1007\":2,\"1080\":1,\"1081\":2,\"1097\":2,\"1148\":1,\"1149\":2,\"1165\":2,\"1272\":1,\"1273\":2,\"1289\":2,\"1294\":2,\"1320\":1,\"1321\":2,\"1337\":2,\"1448\":1,\"1449\":2,\"1465\":2,\"1470\":2,\"1483\":2,\"1497\":1,\"1498\":2,\"1514\":2,\"1625\":1,\"1626\":2,\"1642\":2,\"1647\":2,\"1660\":2,\"1674\":1,\"1675\":2,\"1691\":2,\"1802\":1,\"1803\":2,\"1819\":2,\"1824\":2,\"1837\":2,\"1851\":1,\"1852\":2,\"1868\":2,\"1979\":1,\"1980\":2,\"1996\":2,\"2001\":2,\"2014\":2,\"2028\":1,\"2029\":2,\"2045\":2,\"2156\":1,\"2157\":2,\"2173\":2,\"2178\":2,\"2191\":2,\"2215\":1,\"2216\":2,\"2232\":2,\"2306\":2,\"2318\":2,\"2375\":1,\"2376\":2,\"2392\":2,\"2397\":2,\"2410\":2,\"2434\":1,\"2435\":2,\"2451\":2,\"2525\":2,\"2537\":2,\"2594\":1,\"2595\":2,\"2611\":2,\"2616\":2,\"2629\":2,\"2653\":1,\"2654\":2,\"2670\":2,\"2744\":2,\"2756\":2,\"2813\":1,\"2814\":2,\"2830\":2,\"2835\":2,\"2848\":2}}],[\"patients\",{\"1\":{\"122\":1}}],[\"patient\",{\"1\":{\"74\":1,\"78\":2,\"91\":1,\"94\":2,\"95\":4,\"148\":2,\"165\":4,\"170\":1,\"227\":2,\"228\":1,\"234\":1}}],[\"patches\",{\"1\":{\"38\":1,\"105\":1}}],[\"patchen\",{\"1\":{\"14\":1}}],[\"pause\",{\"1\":{\"14\":1}}],[\"pages\",{\"1\":{\"33\":1,\"401\":1,\"430\":1,\"435\":1,\"456\":1,\"461\":1,\"479\":1,\"484\":1,\"505\":1,\"510\":1,\"535\":1,\"540\":1,\"565\":1,\"570\":1,\"595\":1,\"600\":1,\"612\":1,\"641\":1,\"646\":1,\"658\":1,\"687\":1,\"692\":1,\"704\":1,\"733\":1,\"738\":1,\"750\":1,\"779\":1,\"784\":1}}],[\"page\",{\"0\":{\"260\":1,\"960\":1,\"1122\":1,\"1261\":1,\"1437\":1,\"1614\":1,\"1791\":1,\"1968\":1,\"2145\":1,\"2363\":1,\"2582\":1,\"2801\":1},\"1\":{\"12\":1,\"37\":1,\"95\":1,\"165\":1,\"260\":2,\"418\":1,\"438\":2,\"439\":1,\"487\":2,\"488\":1,\"513\":2,\"514\":1,\"543\":2,\"544\":1,\"573\":2,\"574\":1,\"603\":2,\"604\":1,\"629\":1,\"649\":2,\"650\":1,\"675\":1,\"695\":2,\"696\":1,\"721\":1,\"741\":2,\"742\":1,\"767\":1,\"787\":2,\"788\":1,\"798\":1,\"904\":1,\"925\":1,\"960\":2,\"996\":1,\"1122\":2,\"1229\":1,\"1261\":2,\"1296\":1,\"1405\":1,\"1437\":2,\"1472\":1,\"1582\":1,\"1614\":2,\"1649\":1,\"1759\":1,\"1791\":2,\"1826\":1,\"1936\":1,\"1968\":2,\"2003\":1,\"2113\":1,\"2145\":2,\"2180\":1,\"2201\":1,\"2307\":1,\"2328\":1,\"2363\":2,\"2399\":1,\"2420\":1,\"2526\":1,\"2547\":1,\"2582\":2,\"2618\":1,\"2639\":1,\"2745\":1,\"2766\":1,\"2801\":2,\"2837\":1}}],[\"paper\",{\"1\":{\"1\":2}}],[\"practionier\",{\"1\":{\"805\":1,\"2208\":1,\"2427\":1,\"2646\":1}}],[\"practitioner\",{\"0\":{\"803\":1,\"805\":1,\"930\":1,\"932\":1,\"1234\":1,\"1236\":1,\"1410\":1,\"1412\":1,\"1587\":1,\"1589\":1,\"1764\":1,\"1766\":1,\"1941\":1,\"1943\":1,\"2118\":1,\"2120\":1,\"2206\":1,\"2208\":1,\"2333\":1,\"2335\":1,\"2425\":1,\"2427\":1,\"2552\":1,\"2554\":1,\"2644\":1,\"2646\":1,\"2771\":1,\"2773\":1},\"1\":{\"932\":3,\"933\":4,\"1236\":3,\"1237\":4,\"1412\":3,\"1413\":4,\"1589\":3,\"1590\":4,\"1766\":3,\"1767\":4,\"1943\":3,\"1944\":4,\"2120\":3,\"2121\":4,\"2335\":3,\"2336\":4,\"2554\":3,\"2555\":4,\"2773\":3,\"2774\":4}}],[\"praktische\",{\"1\":{\"14\":1}}],[\"pr\",{\"1\":{\"137\":1}}],[\"prevent\",{\"1\":{\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1}}],[\"previously\",{\"1\":{\"158\":1,\"233\":1,\"338\":1,\"370\":1,\"394\":1,\"891\":1,\"1070\":1,\"1221\":1,\"1396\":1,\"1573\":1,\"1750\":1,\"1927\":1,\"2104\":1,\"2294\":1,\"2513\":1,\"2732\":1}}],[\"previous\",{\"1\":{\"132\":1,\"213\":1,\"368\":1,\"870\":1,\"1052\":1,\"1203\":1,\"1375\":1,\"1552\":1,\"1729\":1,\"1906\":1,\"2083\":1,\"2273\":1,\"2492\":1,\"2711\":1}}],[\"preferences\",{\"1\":{\"403\":1,\"614\":1,\"660\":1,\"706\":1,\"752\":1}}],[\"prefixes\",{\"1\":{\"442\":1,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"791\":1}}],[\"prefix\",{\"1\":{\"155\":2}}],[\"preparation\",{\"1\":{\"299\":1,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"444\":1,\"445\":1,\"493\":1,\"494\":1,\"519\":1,\"520\":1,\"549\":1,\"550\":1,\"579\":1,\"580\":1,\"609\":1,\"610\":1,\"655\":1,\"656\":1,\"701\":1,\"702\":1,\"747\":1,\"748\":1,\"793\":1,\"794\":1}}],[\"prepared\",{\"1\":{\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"299\":1,\"327\":1,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"prepare\",{\"0\":{\"284\":1,\"295\":1,\"437\":1,\"463\":1,\"486\":1,\"512\":1,\"542\":1,\"572\":1,\"602\":1,\"648\":1,\"694\":1,\"740\":1,\"786\":1},\"1\":{\"342\":1}}],[\"pre\",{\"1\":{\"276\":1,\"286\":1,\"287\":1,\"297\":1,\"299\":1,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"444\":1,\"445\":1,\"493\":1,\"494\":1,\"519\":1,\"520\":1,\"549\":1,\"550\":1,\"579\":1,\"580\":1,\"609\":1,\"610\":1,\"655\":1,\"656\":1,\"701\":1,\"702\":1,\"747\":1,\"748\":1,\"793\":1,\"794\":1}}],[\"preread\",{\"1\":{\"166\":2}}],[\"prerequisites\",{\"0\":{\"277\":1,\"288\":1,\"315\":1,\"390\":1,\"424\":1,\"428\":1,\"431\":1,\"454\":1,\"457\":1,\"477\":1,\"480\":1,\"503\":1,\"506\":1,\"529\":1,\"536\":1,\"559\":1,\"566\":1,\"589\":1,\"596\":1,\"635\":1,\"642\":1,\"681\":1,\"688\":1,\"727\":1,\"734\":1,\"773\":1,\"777\":1,\"780\":1},\"1\":{\"399\":1,\"425\":1,\"455\":1,\"478\":1,\"504\":1,\"530\":1,\"560\":1,\"590\":1,\"636\":1,\"682\":1,\"728\":1,\"774\":1}}],[\"prerequisite\",{\"1\":{\"129\":1,\"130\":1,\"131\":1}}],[\"predefined\",{\"1\":{\"101\":2,\"343\":1}}],[\"prescriptions\",{\"1\":{\"122\":1}}],[\"president\",{\"1\":{\"1\":1}}],[\"preserve\",{\"1\":{\"155\":2}}],[\"preserving\",{\"1\":{\"0\":1,\"32\":1}}],[\"present\",{\"1\":{\"113\":3,\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1}}],[\"presentation\",{\"1\":{\"1\":1}}],[\"presented\",{\"1\":{\"1\":2}}],[\"präsentation\",{\"1\":{\"14\":1}}],[\"prior\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"prioritizes\",{\"1\":{\"5\":1}}],[\"printed\",{\"1\":{\"345\":1}}],[\"print\",{\"1\":{\"286\":1,\"297\":1,\"334\":4,\"348\":3,\"363\":2,\"389\":3,\"439\":1,\"465\":1,\"488\":1,\"514\":1,\"544\":1,\"574\":1,\"604\":1,\"650\":1,\"696\":1,\"742\":1,\"788\":1}}],[\"principles\",{\"1\":{\"36\":1}}],[\"private\",{\"0\":{\"184\":1,\"185\":2,\"209\":1,\"210\":2,\"238\":1,\"239\":2,\"818\":1,\"819\":2,\"851\":1,\"852\":2,\"866\":1,\"867\":2,\"936\":1,\"937\":2,\"978\":1,\"979\":2,\"1032\":1,\"1033\":2,\"1048\":1,\"1049\":2,\"1086\":1,\"1087\":2,\"1102\":1,\"1103\":2,\"1154\":1,\"1155\":2,\"1183\":1,\"1184\":2,\"1199\":1,\"1200\":2,\"1240\":1,\"1241\":2,\"1278\":1,\"1279\":2,\"1326\":1,\"1327\":2,\"1356\":1,\"1357\":2,\"1371\":1,\"1372\":2,\"1416\":1,\"1417\":2,\"1454\":1,\"1455\":2,\"1503\":1,\"1504\":2,\"1533\":1,\"1534\":2,\"1548\":1,\"1549\":2,\"1593\":1,\"1594\":2,\"1631\":1,\"1632\":2,\"1680\":1,\"1681\":2,\"1710\":1,\"1711\":2,\"1725\":1,\"1726\":2,\"1770\":1,\"1771\":2,\"1808\":1,\"1809\":2,\"1857\":1,\"1858\":2,\"1887\":1,\"1888\":2,\"1902\":1,\"1903\":2,\"1947\":1,\"1948\":2,\"1985\":1,\"1986\":2,\"2034\":1,\"2035\":2,\"2064\":1,\"2065\":2,\"2079\":1,\"2080\":2,\"2124\":1,\"2125\":2,\"2162\":1,\"2163\":2,\"2221\":1,\"2222\":2,\"2254\":1,\"2255\":2,\"2269\":1,\"2270\":2,\"2339\":1,\"2340\":2,\"2381\":1,\"2382\":2,\"2440\":1,\"2441\":2,\"2473\":1,\"2474\":2,\"2488\":1,\"2489\":2,\"2558\":1,\"2559\":2,\"2600\":1,\"2601\":2,\"2659\":1,\"2660\":2,\"2692\":1,\"2693\":2,\"2707\":1,\"2708\":2,\"2777\":1,\"2778\":2,\"2819\":1,\"2820\":2},\"1\":{\"130\":4,\"131\":4,\"184\":6,\"185\":4,\"209\":6,\"210\":4,\"220\":1,\"238\":6,\"239\":4,\"275\":1,\"284\":5,\"285\":11,\"286\":10,\"295\":5,\"296\":11,\"297\":10,\"323\":47,\"334\":2,\"437\":5,\"438\":11,\"439\":10,\"463\":5,\"464\":11,\"465\":10,\"486\":5,\"487\":11,\"488\":10,\"512\":5,\"513\":11,\"514\":10,\"542\":5,\"543\":11,\"544\":10,\"572\":5,\"573\":11,\"574\":10,\"602\":5,\"603\":11,\"604\":10,\"648\":5,\"649\":11,\"650\":10,\"694\":5,\"695\":11,\"696\":10,\"740\":5,\"741\":11,\"742\":10,\"786\":5,\"787\":11,\"788\":10,\"818\":6,\"819\":4,\"827\":1,\"828\":1,\"851\":6,\"852\":4,\"866\":6,\"867\":4,\"877\":1,\"920\":1,\"936\":6,\"937\":4,\"978\":6,\"979\":4,\"987\":1,\"988\":1,\"1012\":1,\"1032\":6,\"1033\":4,\"1048\":6,\"1049\":4,\"1059\":1,\"1086\":6,\"1087\":4,\"1095\":1,\"1096\":1,\"1102\":6,\"1103\":4,\"1140\":1,\"1154\":6,\"1155\":4,\"1163\":1,\"1164\":1,\"1183\":6,\"1184\":4,\"1199\":6,\"1200\":4,\"1210\":1,\"1240\":6,\"1241\":4,\"1278\":6,\"1279\":4,\"1287\":1,\"1288\":1,\"1311\":1,\"1326\":6,\"1327\":4,\"1335\":1,\"1336\":1,\"1356\":6,\"1357\":4,\"1371\":6,\"1372\":4,\"1382\":1,\"1416\":6,\"1417\":4,\"1454\":6,\"1455\":4,\"1463\":1,\"1464\":1,\"1488\":1,\"1503\":6,\"1504\":4,\"1512\":1,\"1513\":1,\"1533\":6,\"1534\":4,\"1548\":6,\"1549\":4,\"1559\":1,\"1593\":6,\"1594\":4,\"1631\":6,\"1632\":4,\"1640\":1,\"1641\":1,\"1665\":1,\"1680\":6,\"1681\":4,\"1689\":1,\"1690\":1,\"1710\":6,\"1711\":4,\"1725\":6,\"1726\":4,\"1736\":1,\"1770\":6,\"1771\":4,\"1808\":6,\"1809\":4,\"1817\":1,\"1818\":1,\"1842\":1,\"1857\":6,\"1858\":4,\"1866\":1,\"1867\":1,\"1887\":6,\"1888\":4,\"1902\":6,\"1903\":4,\"1913\":1,\"1947\":6,\"1948\":4,\"1985\":6,\"1986\":4,\"1994\":1,\"1995\":1,\"2019\":1,\"2034\":6,\"2035\":4,\"2043\":1,\"2044\":1,\"2064\":6,\"2065\":4,\"2079\":6,\"2080\":4,\"2090\":1,\"2124\":6,\"2125\":4,\"2162\":6,\"2163\":4,\"2171\":1,\"2172\":1,\"2196\":1,\"2221\":6,\"2222\":4,\"2230\":1,\"2231\":1,\"2254\":6,\"2255\":4,\"2269\":6,\"2270\":4,\"2280\":1,\"2323\":1,\"2339\":6,\"2340\":4,\"2381\":6,\"2382\":4,\"2390\":1,\"2391\":1,\"2415\":1,\"2440\":6,\"2441\":4,\"2449\":1,\"2450\":1,\"2473\":6,\"2474\":4,\"2488\":6,\"2489\":4,\"2499\":1,\"2542\":1,\"2558\":6,\"2559\":4,\"2600\":6,\"2601\":4,\"2609\":1,\"2610\":1,\"2634\":1,\"2659\":6,\"2660\":4,\"2668\":1,\"2669\":1,\"2692\":6,\"2693\":4,\"2707\":6,\"2708\":4,\"2718\":1,\"2761\":1,\"2777\":6,\"2778\":4,\"2819\":6,\"2820\":4,\"2828\":1,\"2829\":1,\"2853\":1}}],[\"privacy\",{\"1\":{\"0\":1,\"32\":1,\"125\":1}}],[\"primary\",{\"1\":{\"94\":1,\"123\":1,\"150\":1}}],[\"primarily\",{\"1\":{\"9\":1}}],[\"primär\",{\"1\":{\"16\":1}}],[\"prompted\",{\"1\":{\"442\":1,\"468\":3,\"491\":3,\"517\":3,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"791\":1}}],[\"promise\",{\"0\":{\"38\":1},\"1\":{\"39\":1,\"123\":1}}],[\"proposed\",{\"1\":{\"415\":3,\"626\":3,\"672\":3,\"718\":3,\"764\":3}}],[\"propose\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"properties\",{\"1\":{\"799\":1,\"802\":1,\"926\":1,\"929\":1,\"1230\":1,\"1233\":1,\"1406\":1,\"1409\":1,\"1583\":1,\"1586\":1,\"1760\":1,\"1763\":1,\"1937\":1,\"1940\":1,\"2114\":1,\"2117\":1,\"2202\":1,\"2205\":1,\"2329\":1,\"2332\":1,\"2421\":1,\"2424\":1,\"2548\":1,\"2551\":1,\"2640\":1,\"2643\":1,\"2767\":1,\"2770\":1}}],[\"property\",{\"1\":{\"148\":2,\"149\":2,\"170\":1,\"171\":1,\"172\":1,\"173\":1,\"174\":1,\"175\":1,\"176\":1,\"177\":1,\"178\":1,\"179\":1,\"180\":1,\"181\":1,\"182\":1,\"183\":1,\"184\":1,\"185\":1,\"186\":1,\"187\":1,\"188\":1,\"189\":1,\"190\":1,\"191\":1,\"192\":1,\"193\":1,\"194\":1,\"195\":1,\"196\":1,\"197\":1,\"198\":1,\"199\":1,\"200\":1,\"201\":1,\"202\":1,\"203\":1,\"204\":1,\"205\":1,\"206\":1,\"207\":1,\"208\":1,\"209\":1,\"210\":1,\"211\":1,\"212\":1,\"213\":1,\"214\":1,\"215\":1,\"216\":1,\"217\":1,\"218\":1,\"219\":1,\"220\":1,\"221\":1,\"222\":1,\"223\":1,\"224\":1,\"225\":1,\"226\":1,\"227\":1,\"228\":1,\"229\":1,\"230\":1,\"231\":1,\"232\":1,\"233\":1,\"234\":1,\"237\":1,\"238\":1,\"239\":1,\"240\":1,\"241\":1,\"242\":1,\"243\":1,\"244\":1,\"245\":1,\"246\":1,\"247\":1,\"248\":1,\"249\":1,\"250\":1,\"251\":1,\"252\":1,\"253\":1,\"254\":1,\"255\":1,\"256\":1,\"257\":1,\"258\":1,\"259\":1,\"260\":1,\"261\":1,\"262\":1,\"342\":5,\"800\":1,\"801\":2,\"804\":1,\"808\":1,\"809\":1,\"810\":1,\"811\":1,\"812\":1,\"813\":1,\"814\":1,\"815\":1,\"816\":1,\"817\":1,\"818\":1,\"819\":1,\"820\":1,\"821\":1,\"822\":1,\"823\":1,\"824\":1,\"825\":1,\"826\":1,\"827\":1,\"828\":1,\"829\":1,\"830\":1,\"831\":1,\"832\":1,\"833\":1,\"834\":1,\"835\":1,\"836\":1,\"837\":1,\"838\":1,\"839\":1,\"840\":1,\"841\":1,\"842\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"850\":1,\"851\":1,\"852\":1,\"853\":1,\"854\":1,\"855\":1,\"856\":1,\"857\":1,\"858\":1,\"859\":1,\"860\":1,\"861\":1,\"862\":1,\"863\":1,\"864\":1,\"865\":1,\"866\":1,\"867\":1,\"868\":1,\"869\":1,\"870\":1,\"871\":1,\"872\":1,\"873\":1,\"874\":1,\"875\":1,\"876\":1,\"877\":1,\"878\":1,\"879\":1,\"880\":1,\"881\":1,\"882\":1,\"883\":1,\"884\":1,\"885\":1,\"886\":1,\"887\":1,\"888\":1,\"889\":1,\"890\":1,\"891\":1,\"892\":1,\"893\":1,\"894\":1,\"895\":1,\"896\":1,\"897\":1,\"898\":1,\"899\":1,\"900\":1,\"927\":1,\"928\":2,\"931\":1,\"932\":1,\"935\":1,\"936\":1,\"937\":1,\"938\":1,\"939\":1,\"940\":1,\"941\":1,\"942\":1,\"943\":1,\"944\":1,\"945\":1,\"946\":1,\"947\":1,\"948\":1,\"949\":1,\"950\":1,\"951\":1,\"952\":1,\"953\":1,\"954\":1,\"955\":1,\"956\":1,\"957\":1,\"958\":1,\"959\":1,\"960\":1,\"961\":1,\"962\":1,\"963\":1,\"964\":1,\"965\":1,\"966\":1,\"967\":1,\"968\":1,\"969\":1,\"970\":1,\"971\":1,\"972\":1,\"973\":1,\"974\":1,\"975\":1,\"976\":1,\"977\":1,\"978\":1,\"979\":1,\"980\":1,\"981\":1,\"982\":1,\"983\":1,\"984\":1,\"985\":1,\"986\":1,\"987\":1,\"988\":1,\"989\":1,\"990\":1,\"991\":1,\"1017\":1,\"1018\":1,\"1019\":1,\"1020\":1,\"1021\":1,\"1022\":1,\"1023\":1,\"1024\":1,\"1025\":1,\"1026\":1,\"1027\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1031\":1,\"1032\":1,\"1033\":1,\"1034\":1,\"1035\":1,\"1036\":1,\"1037\":1,\"1038\":1,\"1039\":1,\"1040\":1,\"1041\":1,\"1042\":1,\"1043\":1,\"1044\":1,\"1045\":1,\"1046\":1,\"1047\":1,\"1048\":1,\"1049\":1,\"1050\":1,\"1051\":1,\"1052\":1,\"1053\":1,\"1054\":1,\"1055\":1,\"1056\":1,\"1057\":1,\"1058\":1,\"1059\":1,\"1060\":1,\"1061\":1,\"1062\":1,\"1063\":1,\"1064\":1,\"1065\":1,\"1066\":1,\"1067\":1,\"1068\":1,\"1069\":1,\"1070\":1,\"1071\":1,\"1072\":1,\"1073\":1,\"1074\":1,\"1076\":1,\"1077\":1,\"1078\":1,\"1079\":1,\"1080\":1,\"1081\":1,\"1082\":1,\"1083\":1,\"1084\":1,\"1085\":1,\"1086\":1,\"1087\":1,\"1088\":1,\"1089\":1,\"1090\":1,\"1091\":1,\"1092\":1,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":1,\"1097\":1,\"1098\":1,\"1099\":1,\"1101\":1,\"1102\":1,\"1103\":1,\"1104\":1,\"1105\":1,\"1106\":1,\"1107\":1,\"1108\":1,\"1109\":1,\"1110\":1,\"1111\":1,\"1112\":1,\"1113\":1,\"1114\":1,\"1115\":1,\"1116\":1,\"1117\":1,\"1118\":1,\"1119\":1,\"1120\":1,\"1121\":1,\"1122\":1,\"1123\":1,\"1124\":1,\"1125\":1,\"1126\":1,\"1127\":1,\"1128\":1,\"1144\":1,\"1145\":1,\"1146\":1,\"1147\":1,\"1148\":1,\"1149\":1,\"1150\":1,\"1151\":1,\"1152\":1,\"1153\":1,\"1154\":1,\"1155\":1,\"1156\":1,\"1157\":1,\"1158\":1,\"1159\":1,\"1160\":1,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":1,\"1165\":1,\"1166\":1,\"1167\":1,\"1168\":1,\"1169\":1,\"1170\":1,\"1171\":1,\"1172\":1,\"1173\":1,\"1174\":1,\"1175\":1,\"1176\":1,\"1177\":1,\"1178\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1182\":1,\"1183\":1,\"1184\":1,\"1185\":1,\"1186\":1,\"1187\":1,\"1188\":1,\"1189\":1,\"1190\":1,\"1191\":1,\"1192\":1,\"1193\":1,\"1194\":1,\"1195\":1,\"1196\":1,\"1197\":1,\"1198\":1,\"1199\":1,\"1200\":1,\"1201\":1,\"1202\":1,\"1203\":1,\"1204\":1,\"1205\":1,\"1206\":1,\"1207\":1,\"1208\":1,\"1209\":1,\"1210\":1,\"1211\":1,\"1212\":1,\"1213\":1,\"1214\":1,\"1215\":1,\"1216\":1,\"1217\":1,\"1218\":1,\"1219\":1,\"1220\":1,\"1221\":1,\"1222\":1,\"1223\":1,\"1224\":1,\"1225\":1,\"1231\":1,\"1232\":2,\"1235\":1,\"1236\":1,\"1239\":1,\"1240\":1,\"1241\":1,\"1242\":1,\"1243\":1,\"1244\":1,\"1245\":1,\"1246\":1,\"1247\":1,\"1248\":1,\"1249\":1,\"1250\":1,\"1251\":1,\"1252\":1,\"1253\":1,\"1254\":1,\"1255\":1,\"1256\":1,\"1257\":1,\"1258\":1,\"1259\":1,\"1260\":1,\"1261\":1,\"1262\":1,\"1263\":1,\"1264\":1,\"1265\":1,\"1266\":1,\"1267\":1,\"1268\":1,\"1269\":1,\"1270\":1,\"1271\":1,\"1272\":1,\"1273\":1,\"1274\":1,\"1275\":1,\"1276\":1,\"1277\":1,\"1278\":1,\"1279\":1,\"1280\":1,\"1281\":1,\"1282\":1,\"1283\":1,\"1284\":1,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":1,\"1289\":1,\"1290\":1,\"1291\":1,\"1316\":1,\"1317\":1,\"1318\":1,\"1319\":1,\"1320\":1,\"1321\":1,\"1322\":1,\"1323\":1,\"1324\":1,\"1325\":1,\"1326\":1,\"1327\":1,\"1328\":1,\"1329\":1,\"1330\":1,\"1331\":1,\"1332\":1,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":1,\"1337\":1,\"1338\":1,\"1339\":1,\"1340\":1,\"1341\":1,\"1342\":1,\"1343\":1,\"1344\":1,\"1345\":1,\"1346\":1,\"1347\":1,\"1348\":1,\"1349\":1,\"1350\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1355\":1,\"1356\":1,\"1357\":1,\"1358\":1,\"1359\":1,\"1360\":1,\"1361\":1,\"1362\":1,\"1363\":1,\"1364\":1,\"1365\":1,\"1366\":1,\"1367\":1,\"1368\":1,\"1369\":1,\"1370\":1,\"1371\":1,\"1372\":1,\"1373\":1,\"1374\":1,\"1375\":1,\"1376\":1,\"1377\":1,\"1378\":1,\"1379\":1,\"1380\":1,\"1381\":1,\"1382\":1,\"1383\":1,\"1384\":1,\"1385\":1,\"1386\":1,\"1387\":1,\"1388\":1,\"1389\":1,\"1390\":1,\"1391\":1,\"1392\":1,\"1393\":1,\"1394\":1,\"1395\":1,\"1396\":1,\"1397\":1,\"1398\":1,\"1399\":1,\"1400\":1,\"1401\":1,\"1407\":1,\"1408\":2,\"1411\":1,\"1412\":1,\"1415\":1,\"1416\":1,\"1417\":1,\"1418\":1,\"1419\":1,\"1420\":1,\"1421\":1,\"1422\":1,\"1423\":1,\"1424\":1,\"1425\":1,\"1426\":1,\"1427\":1,\"1428\":1,\"1429\":1,\"1430\":1,\"1431\":1,\"1432\":1,\"1433\":1,\"1434\":1,\"1435\":1,\"1436\":1,\"1437\":1,\"1438\":1,\"1439\":1,\"1440\":1,\"1441\":1,\"1442\":1,\"1443\":1,\"1444\":1,\"1445\":1,\"1446\":1,\"1447\":1,\"1448\":1,\"1449\":1,\"1450\":1,\"1451\":1,\"1452\":1,\"1453\":1,\"1454\":1,\"1455\":1,\"1456\":1,\"1457\":1,\"1458\":1,\"1459\":1,\"1460\":1,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":1,\"1465\":1,\"1466\":1,\"1467\":1,\"1493\":1,\"1494\":1,\"1495\":1,\"1496\":1,\"1497\":1,\"1498\":1,\"1499\":1,\"1500\":1,\"1501\":1,\"1502\":1,\"1503\":1,\"1504\":1,\"1505\":1,\"1506\":1,\"1507\":1,\"1508\":1,\"1509\":1,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":1,\"1514\":1,\"1515\":1,\"1516\":1,\"1517\":1,\"1518\":1,\"1519\":1,\"1520\":1,\"1521\":1,\"1522\":1,\"1523\":1,\"1524\":1,\"1525\":1,\"1526\":1,\"1527\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1532\":1,\"1533\":1,\"1534\":1,\"1535\":1,\"1536\":1,\"1537\":1,\"1538\":1,\"1539\":1,\"1540\":1,\"1541\":1,\"1542\":1,\"1543\":1,\"1544\":1,\"1545\":1,\"1546\":1,\"1547\":1,\"1548\":1,\"1549\":1,\"1550\":1,\"1551\":1,\"1552\":1,\"1553\":1,\"1554\":1,\"1555\":1,\"1556\":1,\"1557\":1,\"1558\":1,\"1559\":1,\"1560\":1,\"1561\":1,\"1562\":1,\"1563\":1,\"1564\":1,\"1565\":1,\"1566\":1,\"1567\":1,\"1568\":1,\"1569\":1,\"1570\":1,\"1571\":1,\"1572\":1,\"1573\":1,\"1574\":1,\"1575\":1,\"1576\":1,\"1577\":1,\"1578\":1,\"1584\":1,\"1585\":2,\"1588\":1,\"1589\":1,\"1592\":1,\"1593\":1,\"1594\":1,\"1595\":1,\"1596\":1,\"1597\":1,\"1598\":1,\"1599\":1,\"1600\":1,\"1601\":1,\"1602\":1,\"1603\":1,\"1604\":1,\"1605\":1,\"1606\":1,\"1607\":1,\"1608\":1,\"1609\":1,\"1610\":1,\"1611\":1,\"1612\":1,\"1613\":1,\"1614\":1,\"1615\":1,\"1616\":1,\"1617\":1,\"1618\":1,\"1619\":1,\"1620\":1,\"1621\":1,\"1622\":1,\"1623\":1,\"1624\":1,\"1625\":1,\"1626\":1,\"1627\":1,\"1628\":1,\"1629\":1,\"1630\":1,\"1631\":1,\"1632\":1,\"1633\":1,\"1634\":1,\"1635\":1,\"1636\":1,\"1637\":1,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":1,\"1642\":1,\"1643\":1,\"1644\":1,\"1670\":1,\"1671\":1,\"1672\":1,\"1673\":1,\"1674\":1,\"1675\":1,\"1676\":1,\"1677\":1,\"1678\":1,\"1679\":1,\"1680\":1,\"1681\":1,\"1682\":1,\"1683\":1,\"1684\":1,\"1685\":1,\"1686\":1,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":1,\"1691\":1,\"1692\":1,\"1693\":1,\"1694\":1,\"1695\":1,\"1696\":1,\"1697\":1,\"1698\":1,\"1699\":1,\"1700\":1,\"1701\":1,\"1702\":1,\"1703\":1,\"1704\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1709\":1,\"1710\":1,\"1711\":1,\"1712\":1,\"1713\":1,\"1714\":1,\"1715\":1,\"1716\":1,\"1717\":1,\"1718\":1,\"1719\":1,\"1720\":1,\"1721\":1,\"1722\":1,\"1723\":1,\"1724\":1,\"1725\":1,\"1726\":1,\"1727\":1,\"1728\":1,\"1729\":1,\"1730\":1,\"1731\":1,\"1732\":1,\"1733\":1,\"1734\":1,\"1735\":1,\"1736\":1,\"1737\":1,\"1738\":1,\"1739\":1,\"1740\":1,\"1741\":1,\"1742\":1,\"1743\":1,\"1744\":1,\"1745\":1,\"1746\":1,\"1747\":1,\"1748\":1,\"1749\":1,\"1750\":1,\"1751\":1,\"1752\":1,\"1753\":1,\"1754\":1,\"1755\":1,\"1761\":1,\"1762\":2,\"1765\":1,\"1766\":1,\"1769\":1,\"1770\":1,\"1771\":1,\"1772\":1,\"1773\":1,\"1774\":1,\"1775\":1,\"1776\":1,\"1777\":1,\"1778\":1,\"1779\":1,\"1780\":1,\"1781\":1,\"1782\":1,\"1783\":1,\"1784\":1,\"1785\":1,\"1786\":1,\"1787\":1,\"1788\":1,\"1789\":1,\"1790\":1,\"1791\":1,\"1792\":1,\"1793\":1,\"1794\":1,\"1795\":1,\"1796\":1,\"1797\":1,\"1798\":1,\"1799\":1,\"1800\":1,\"1801\":1,\"1802\":1,\"1803\":1,\"1804\":1,\"1805\":1,\"1806\":1,\"1807\":1,\"1808\":1,\"1809\":1,\"1810\":1,\"1811\":1,\"1812\":1,\"1813\":1,\"1814\":1,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":1,\"1819\":1,\"1820\":1,\"1821\":1,\"1847\":1,\"1848\":1,\"1849\":1,\"1850\":1,\"1851\":1,\"1852\":1,\"1853\":1,\"1854\":1,\"1855\":1,\"1856\":1,\"1857\":1,\"1858\":1,\"1859\":1,\"1860\":1,\"1861\":1,\"1862\":1,\"1863\":1,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":1,\"1868\":1,\"1869\":1,\"1870\":1,\"1871\":1,\"1872\":1,\"1873\":1,\"1874\":1,\"1875\":1,\"1876\":1,\"1877\":1,\"1878\":1,\"1879\":1,\"1880\":1,\"1881\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1886\":1,\"1887\":1,\"1888\":1,\"1889\":1,\"1890\":1,\"1891\":1,\"1892\":1,\"1893\":1,\"1894\":1,\"1895\":1,\"1896\":1,\"1897\":1,\"1898\":1,\"1899\":1,\"1900\":1,\"1901\":1,\"1902\":1,\"1903\":1,\"1904\":1,\"1905\":1,\"1906\":1,\"1907\":1,\"1908\":1,\"1909\":1,\"1910\":1,\"1911\":1,\"1912\":1,\"1913\":1,\"1914\":1,\"1915\":1,\"1916\":1,\"1917\":1,\"1918\":1,\"1919\":1,\"1920\":1,\"1921\":1,\"1922\":1,\"1923\":1,\"1924\":1,\"1925\":1,\"1926\":1,\"1927\":1,\"1928\":1,\"1929\":1,\"1930\":1,\"1931\":1,\"1932\":1,\"1938\":1,\"1939\":2,\"1942\":1,\"1943\":1,\"1946\":1,\"1947\":1,\"1948\":1,\"1949\":1,\"1950\":1,\"1951\":1,\"1952\":1,\"1953\":1,\"1954\":1,\"1955\":1,\"1956\":1,\"1957\":1,\"1958\":1,\"1959\":1,\"1960\":1,\"1961\":1,\"1962\":1,\"1963\":1,\"1964\":1,\"1965\":1,\"1966\":1,\"1967\":1,\"1968\":1,\"1969\":1,\"1970\":1,\"1971\":1,\"1972\":1,\"1973\":1,\"1974\":1,\"1975\":1,\"1976\":1,\"1977\":1,\"1978\":1,\"1979\":1,\"1980\":1,\"1981\":1,\"1982\":1,\"1983\":1,\"1984\":1,\"1985\":1,\"1986\":1,\"1987\":1,\"1988\":1,\"1989\":1,\"1990\":1,\"1991\":1,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":1,\"1996\":1,\"1997\":1,\"1998\":1,\"2024\":1,\"2025\":1,\"2026\":1,\"2027\":1,\"2028\":1,\"2029\":1,\"2030\":1,\"2031\":1,\"2032\":1,\"2033\":1,\"2034\":1,\"2035\":1,\"2036\":1,\"2037\":1,\"2038\":1,\"2039\":1,\"2040\":1,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":1,\"2045\":1,\"2046\":1,\"2047\":1,\"2048\":1,\"2049\":1,\"2050\":1,\"2051\":1,\"2052\":1,\"2053\":1,\"2054\":1,\"2055\":1,\"2056\":1,\"2057\":1,\"2058\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2063\":1,\"2064\":1,\"2065\":1,\"2066\":1,\"2067\":1,\"2068\":1,\"2069\":1,\"2070\":1,\"2071\":1,\"2072\":1,\"2073\":1,\"2074\":1,\"2075\":1,\"2076\":1,\"2077\":1,\"2078\":1,\"2079\":1,\"2080\":1,\"2081\":1,\"2082\":1,\"2083\":1,\"2084\":1,\"2085\":1,\"2086\":1,\"2087\":1,\"2088\":1,\"2089\":1,\"2090\":1,\"2091\":1,\"2092\":1,\"2093\":1,\"2094\":1,\"2095\":1,\"2096\":1,\"2097\":1,\"2098\":1,\"2099\":1,\"2100\":1,\"2101\":1,\"2102\":1,\"2103\":1,\"2104\":1,\"2105\":1,\"2106\":1,\"2107\":1,\"2108\":1,\"2109\":1,\"2115\":1,\"2116\":2,\"2119\":1,\"2120\":1,\"2123\":1,\"2124\":1,\"2125\":1,\"2126\":1,\"2127\":1,\"2128\":1,\"2129\":1,\"2130\":1,\"2131\":1,\"2132\":1,\"2133\":1,\"2134\":1,\"2135\":1,\"2136\":1,\"2137\":1,\"2138\":1,\"2139\":1,\"2140\":1,\"2141\":1,\"2142\":1,\"2143\":1,\"2144\":1,\"2145\":1,\"2146\":1,\"2147\":1,\"2148\":1,\"2149\":1,\"2150\":1,\"2151\":1,\"2152\":1,\"2153\":1,\"2154\":1,\"2155\":1,\"2156\":1,\"2157\":1,\"2158\":1,\"2159\":1,\"2160\":1,\"2161\":1,\"2162\":1,\"2163\":1,\"2164\":1,\"2165\":1,\"2166\":1,\"2167\":1,\"2168\":1,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":1,\"2173\":1,\"2174\":1,\"2175\":1,\"2203\":1,\"2204\":2,\"2207\":1,\"2211\":1,\"2212\":1,\"2213\":1,\"2214\":1,\"2215\":1,\"2216\":1,\"2217\":1,\"2218\":1,\"2219\":1,\"2220\":1,\"2221\":1,\"2222\":1,\"2223\":1,\"2224\":1,\"2225\":1,\"2226\":1,\"2227\":1,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":1,\"2232\":1,\"2233\":1,\"2234\":1,\"2235\":1,\"2236\":1,\"2237\":1,\"2238\":1,\"2239\":1,\"2240\":1,\"2241\":1,\"2242\":1,\"2243\":1,\"2244\":1,\"2245\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2253\":1,\"2254\":1,\"2255\":1,\"2256\":1,\"2257\":1,\"2258\":1,\"2259\":1,\"2260\":1,\"2261\":1,\"2262\":1,\"2263\":1,\"2264\":1,\"2265\":1,\"2266\":1,\"2267\":1,\"2268\":1,\"2269\":1,\"2270\":1,\"2271\":1,\"2272\":1,\"2273\":1,\"2274\":1,\"2275\":1,\"2276\":1,\"2277\":1,\"2278\":1,\"2279\":1,\"2280\":1,\"2281\":1,\"2282\":1,\"2283\":1,\"2284\":1,\"2285\":1,\"2286\":1,\"2287\":1,\"2288\":1,\"2289\":1,\"2290\":1,\"2291\":1,\"2292\":1,\"2293\":1,\"2294\":1,\"2295\":1,\"2296\":1,\"2297\":1,\"2298\":1,\"2299\":1,\"2300\":1,\"2301\":1,\"2302\":1,\"2303\":1,\"2330\":1,\"2331\":2,\"2334\":1,\"2335\":1,\"2338\":1,\"2339\":1,\"2340\":1,\"2341\":1,\"2342\":1,\"2343\":1,\"2344\":1,\"2345\":1,\"2346\":1,\"2347\":1,\"2348\":1,\"2349\":1,\"2350\":1,\"2351\":1,\"2352\":1,\"2353\":1,\"2354\":1,\"2355\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2359\":1,\"2360\":1,\"2361\":1,\"2362\":1,\"2363\":1,\"2364\":1,\"2365\":1,\"2366\":1,\"2367\":1,\"2368\":1,\"2369\":1,\"2370\":1,\"2371\":1,\"2372\":1,\"2373\":1,\"2374\":1,\"2375\":1,\"2376\":1,\"2377\":1,\"2378\":1,\"2379\":1,\"2380\":1,\"2381\":1,\"2382\":1,\"2383\":1,\"2384\":1,\"2385\":1,\"2386\":1,\"2387\":1,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":1,\"2392\":1,\"2393\":1,\"2394\":1,\"2422\":1,\"2423\":2,\"2426\":1,\"2430\":1,\"2431\":1,\"2432\":1,\"2433\":1,\"2434\":1,\"2435\":1,\"2436\":1,\"2437\":1,\"2438\":1,\"2439\":1,\"2440\":1,\"2441\":1,\"2442\":1,\"2443\":1,\"2444\":1,\"2445\":1,\"2446\":1,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":1,\"2451\":1,\"2452\":1,\"2453\":1,\"2454\":1,\"2455\":1,\"2456\":1,\"2457\":1,\"2458\":1,\"2459\":1,\"2460\":1,\"2461\":1,\"2462\":1,\"2463\":1,\"2464\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2472\":1,\"2473\":1,\"2474\":1,\"2475\":1,\"2476\":1,\"2477\":1,\"2478\":1,\"2479\":1,\"2480\":1,\"2481\":1,\"2482\":1,\"2483\":1,\"2484\":1,\"2485\":1,\"2486\":1,\"2487\":1,\"2488\":1,\"2489\":1,\"2490\":1,\"2491\":1,\"2492\":1,\"2493\":1,\"2494\":1,\"2495\":1,\"2496\":1,\"2497\":1,\"2498\":1,\"2499\":1,\"2500\":1,\"2501\":1,\"2502\":1,\"2503\":1,\"2504\":1,\"2505\":1,\"2506\":1,\"2507\":1,\"2508\":1,\"2509\":1,\"2510\":1,\"2511\":1,\"2512\":1,\"2513\":1,\"2514\":1,\"2515\":1,\"2516\":1,\"2517\":1,\"2518\":1,\"2519\":1,\"2520\":1,\"2521\":1,\"2522\":1,\"2549\":1,\"2550\":2,\"2553\":1,\"2554\":1,\"2557\":1,\"2558\":1,\"2559\":1,\"2560\":1,\"2561\":1,\"2562\":1,\"2563\":1,\"2564\":1,\"2565\":1,\"2566\":1,\"2567\":1,\"2568\":1,\"2569\":1,\"2570\":1,\"2571\":1,\"2572\":1,\"2573\":1,\"2574\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2578\":1,\"2579\":1,\"2580\":1,\"2581\":1,\"2582\":1,\"2583\":1,\"2584\":1,\"2585\":1,\"2586\":1,\"2587\":1,\"2588\":1,\"2589\":1,\"2590\":1,\"2591\":1,\"2592\":1,\"2593\":1,\"2594\":1,\"2595\":1,\"2596\":1,\"2597\":1,\"2598\":1,\"2599\":1,\"2600\":1,\"2601\":1,\"2602\":1,\"2603\":1,\"2604\":1,\"2605\":1,\"2606\":1,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":1,\"2611\":1,\"2612\":1,\"2613\":1,\"2641\":1,\"2642\":2,\"2645\":1,\"2649\":1,\"2650\":1,\"2651\":1,\"2652\":1,\"2653\":1,\"2654\":1,\"2655\":1,\"2656\":1,\"2657\":1,\"2658\":1,\"2659\":1,\"2660\":1,\"2661\":1,\"2662\":1,\"2663\":1,\"2664\":1,\"2665\":1,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":1,\"2670\":1,\"2671\":1,\"2672\":1,\"2673\":1,\"2674\":1,\"2675\":1,\"2676\":1,\"2677\":1,\"2678\":1,\"2679\":1,\"2680\":1,\"2681\":1,\"2682\":1,\"2683\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2691\":1,\"2692\":1,\"2693\":1,\"2694\":1,\"2695\":1,\"2696\":1,\"2697\":1,\"2698\":1,\"2699\":1,\"2700\":1,\"2701\":1,\"2702\":1,\"2703\":1,\"2704\":1,\"2705\":1,\"2706\":1,\"2707\":1,\"2708\":1,\"2709\":1,\"2710\":1,\"2711\":1,\"2712\":1,\"2713\":1,\"2714\":1,\"2715\":1,\"2716\":1,\"2717\":1,\"2718\":1,\"2719\":1,\"2720\":1,\"2721\":1,\"2722\":1,\"2723\":1,\"2724\":1,\"2725\":1,\"2726\":1,\"2727\":1,\"2728\":1,\"2729\":1,\"2730\":1,\"2731\":1,\"2732\":1,\"2733\":1,\"2734\":1,\"2735\":1,\"2736\":1,\"2737\":1,\"2738\":1,\"2739\":1,\"2740\":1,\"2741\":1,\"2768\":1,\"2769\":2,\"2772\":1,\"2773\":1,\"2776\":1,\"2777\":1,\"2778\":1,\"2779\":1,\"2780\":1,\"2781\":1,\"2782\":1,\"2783\":1,\"2784\":1,\"2785\":1,\"2786\":1,\"2787\":1,\"2788\":1,\"2789\":1,\"2790\":1,\"2791\":1,\"2792\":1,\"2793\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2797\":1,\"2798\":1,\"2799\":1,\"2800\":1,\"2801\":1,\"2802\":1,\"2803\":1,\"2804\":1,\"2805\":1,\"2806\":1,\"2807\":1,\"2808\":1,\"2809\":1,\"2810\":1,\"2811\":1,\"2812\":1,\"2813\":1,\"2814\":1,\"2815\":1,\"2816\":1,\"2817\":1,\"2818\":1,\"2819\":1,\"2820\":1,\"2821\":1,\"2822\":1,\"2823\":1,\"2824\":1,\"2825\":1,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":1,\"2830\":1,\"2831\":1,\"2832\":1}}],[\"properly\",{\"1\":{\"406\":1,\"617\":1,\"663\":1,\"709\":1,\"755\":1}}],[\"proactive\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"prohibits\",{\"1\":{\"377\":1}}],[\"proceeding\",{\"1\":{\"299\":1,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"444\":1,\"445\":1,\"493\":1,\"494\":1,\"519\":1,\"520\":1,\"549\":1,\"550\":1,\"579\":1,\"580\":1,\"609\":1,\"610\":1,\"655\":1,\"656\":1,\"701\":1,\"702\":1,\"747\":1,\"748\":1,\"793\":1,\"794\":1}}],[\"process|x\",{\"1\":{\"887\":1,\"891\":1,\"1392\":1,\"1396\":1,\"1569\":1,\"1573\":1,\"1746\":1,\"1750\":1,\"1923\":1,\"1927\":1,\"2100\":1,\"2104\":1,\"2290\":1,\"2294\":1,\"2509\":1,\"2513\":1,\"2728\":1,\"2732\":1}}],[\"processkey\",{\"1\":{\"353\":2}}],[\"processdocumentation\",{\"1\":{\"342\":2}}],[\"processplugindefinition\",{\"1\":{\"328\":2,\"344\":2}}],[\"processed\",{\"1\":{\"8\":1}}],[\"processes\",{\"0\":{\"8\":1,\"134\":1,\"150\":1,\"314\":1,\"419\":1,\"449\":1,\"472\":1,\"498\":1,\"524\":1,\"532\":1,\"533\":1,\"534\":1,\"554\":1,\"562\":1,\"563\":1,\"564\":1,\"584\":1,\"592\":1,\"593\":1,\"594\":1,\"630\":1,\"638\":1,\"639\":1,\"640\":1,\"676\":1,\"684\":1,\"685\":1,\"686\":1,\"722\":1,\"730\":1,\"731\":1,\"732\":1,\"768\":1},\"1\":{\"0\":2,\"6\":1,\"26\":2,\"29\":1,\"32\":1,\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"73\":1,\"81\":1,\"84\":1,\"86\":2,\"90\":1,\"92\":3,\"93\":2,\"94\":2,\"95\":2,\"99\":1,\"112\":3,\"113\":4,\"116\":2,\"150\":1,\"165\":2,\"174\":1,\"175\":1,\"176\":1,\"229\":1,\"233\":1,\"286\":15,\"297\":4,\"300\":9,\"303\":9,\"318\":1,\"319\":1,\"328\":3,\"330\":1,\"340\":1,\"342\":1,\"350\":3,\"352\":3,\"353\":1,\"354\":1,\"363\":1,\"373\":1,\"380\":1,\"386\":1,\"389\":1,\"392\":1,\"393\":1,\"395\":2,\"397\":1,\"398\":1,\"415\":1,\"417\":1,\"418\":1,\"423\":1,\"442\":1,\"447\":1,\"448\":1,\"453\":1,\"470\":1,\"471\":1,\"476\":1,\"496\":1,\"497\":1,\"502\":1,\"522\":1,\"523\":1,\"528\":1,\"534\":1,\"547\":1,\"552\":1,\"553\":1,\"558\":1,\"564\":1,\"577\":1,\"582\":1,\"583\":1,\"588\":1,\"594\":1,\"607\":1,\"626\":1,\"628\":1,\"629\":1,\"634\":1,\"640\":1,\"653\":1,\"672\":1,\"674\":1,\"675\":1,\"680\":1,\"686\":1,\"699\":1,\"718\":1,\"720\":1,\"721\":1,\"726\":1,\"732\":1,\"745\":1,\"764\":1,\"766\":1,\"767\":1,\"772\":1,\"791\":1,\"837\":1,\"838\":1,\"839\":1,\"887\":1,\"891\":1,\"892\":1,\"932\":1,\"1022\":1,\"1023\":1,\"1024\":1,\"1066\":1,\"1070\":1,\"1173\":1,\"1174\":1,\"1175\":1,\"1217\":1,\"1221\":1,\"1236\":1,\"1345\":1,\"1346\":1,\"1347\":1,\"1392\":1,\"1396\":1,\"1397\":1,\"1412\":1,\"1522\":1,\"1523\":1,\"1524\":1,\"1569\":1,\"1573\":1,\"1574\":1,\"1589\":1,\"1699\":1,\"1700\":1,\"1701\":1,\"1746\":1,\"1750\":1,\"1751\":1,\"1766\":1,\"1876\":1,\"1877\":1,\"1878\":1,\"1923\":1,\"1927\":1,\"1928\":1,\"1943\":1,\"2053\":1,\"2054\":1,\"2055\":1,\"2100\":1,\"2104\":1,\"2105\":1,\"2120\":1,\"2240\":1,\"2241\":1,\"2242\":1,\"2290\":1,\"2294\":1,\"2295\":1,\"2335\":1,\"2459\":1,\"2460\":1,\"2461\":1,\"2509\":1,\"2513\":1,\"2514\":1,\"2554\":1,\"2678\":1,\"2679\":1,\"2680\":1,\"2728\":1,\"2732\":1,\"2733\":1,\"2773\":1}}],[\"process\",{\"0\":{\"86\":1,\"97\":1,\"100\":1,\"101\":1,\"102\":1,\"103\":1,\"109\":1,\"110\":1,\"123\":1,\"126\":1,\"164\":1,\"229\":1,\"230\":1,\"231\":1,\"232\":1,\"233\":1,\"313\":1,\"314\":1,\"316\":1,\"317\":1,\"322\":1,\"324\":1,\"325\":1,\"328\":1,\"329\":1,\"330\":1,\"334\":1,\"335\":1,\"336\":1,\"348\":1,\"353\":1,\"363\":1,\"369\":1,\"373\":1,\"379\":1,\"389\":1,\"411\":1,\"416\":1,\"418\":1,\"446\":1,\"448\":1,\"469\":1,\"471\":1,\"495\":1,\"497\":1,\"521\":1,\"523\":1,\"551\":1,\"553\":1,\"581\":1,\"583\":1,\"622\":1,\"627\":1,\"629\":1,\"668\":1,\"673\":1,\"675\":1,\"714\":1,\"719\":1,\"721\":1,\"760\":1,\"765\":1,\"767\":1,\"884\":1,\"885\":1,\"886\":1,\"887\":1,\"888\":1,\"889\":1,\"890\":1,\"891\":1,\"892\":1,\"1066\":1,\"1067\":1,\"1068\":1,\"1069\":1,\"1070\":1,\"1217\":1,\"1218\":1,\"1219\":1,\"1220\":1,\"1221\":1,\"1389\":1,\"1390\":1,\"1391\":1,\"1392\":1,\"1393\":1,\"1394\":1,\"1395\":1,\"1396\":1,\"1397\":1,\"1566\":1,\"1567\":1,\"1568\":1,\"1569\":1,\"1570\":1,\"1571\":1,\"1572\":1,\"1573\":1,\"1574\":1,\"1743\":1,\"1744\":1,\"1745\":1,\"1746\":1,\"1747\":1,\"1748\":1,\"1749\":1,\"1750\":1,\"1751\":1,\"1920\":1,\"1921\":1,\"1922\":1,\"1923\":1,\"1924\":1,\"1925\":1,\"1926\":1,\"1927\":1,\"1928\":1,\"2097\":1,\"2098\":1,\"2099\":1,\"2100\":1,\"2101\":1,\"2102\":1,\"2103\":1,\"2104\":1,\"2105\":1,\"2287\":1,\"2288\":1,\"2289\":1,\"2290\":1,\"2291\":1,\"2292\":1,\"2293\":1,\"2294\":1,\"2295\":1,\"2506\":1,\"2507\":1,\"2508\":1,\"2509\":1,\"2510\":1,\"2511\":1,\"2512\":1,\"2513\":1,\"2514\":1,\"2725\":1,\"2726\":1,\"2727\":1,\"2728\":1,\"2729\":1,\"2730\":1,\"2731\":1,\"2732\":1,\"2733\":1},\"1\":{\"0\":3,\"5\":2,\"8\":1,\"17\":1,\"20\":3,\"22\":1,\"26\":1,\"32\":3,\"33\":2,\"42\":1,\"43\":1,\"44\":1,\"45\":1,\"46\":1,\"47\":1,\"48\":1,\"49\":1,\"50\":1,\"51\":1,\"52\":1,\"53\":1,\"54\":1,\"55\":1,\"56\":1,\"57\":1,\"58\":1,\"59\":1,\"60\":1,\"61\":1,\"62\":1,\"63\":1,\"84\":3,\"86\":2,\"92\":6,\"93\":3,\"94\":2,\"95\":2,\"98\":8,\"99\":1,\"100\":4,\"101\":2,\"102\":1,\"103\":1,\"106\":1,\"109\":1,\"113\":2,\"122\":1,\"123\":3,\"124\":2,\"126\":3,\"134\":2,\"148\":1,\"149\":1,\"150\":4,\"159\":2,\"161\":1,\"164\":1,\"165\":2,\"169\":1,\"180\":1,\"181\":1,\"182\":1,\"229\":2,\"230\":2,\"231\":2,\"232\":3,\"233\":2,\"286\":8,\"297\":8,\"298\":1,\"300\":43,\"301\":1,\"303\":34,\"304\":1,\"306\":5,\"309\":2,\"312\":2,\"314\":1,\"316\":1,\"317\":1,\"318\":2,\"319\":2,\"320\":2,\"321\":1,\"323\":7,\"325\":2,\"327\":5,\"328\":8,\"329\":4,\"330\":1,\"331\":3,\"333\":1,\"334\":17,\"336\":1,\"338\":3,\"340\":3,\"341\":3,\"342\":4,\"343\":6,\"344\":2,\"345\":1,\"347\":1,\"348\":12,\"350\":2,\"352\":8,\"353\":6,\"354\":2,\"357\":5,\"358\":3,\"359\":7,\"360\":8,\"362\":1,\"363\":17,\"365\":3,\"367\":2,\"368\":1,\"369\":3,\"370\":6,\"372\":1,\"373\":12,\"375\":2,\"377\":6,\"379\":3,\"380\":2,\"383\":5,\"384\":3,\"385\":7,\"386\":11,\"388\":1,\"389\":23,\"409\":1,\"412\":1,\"415\":4,\"417\":1,\"418\":2,\"419\":2,\"426\":2,\"427\":10,\"429\":8,\"430\":2,\"435\":2,\"439\":1,\"442\":4,\"447\":1,\"448\":2,\"449\":2,\"456\":2,\"461\":2,\"465\":1,\"468\":3,\"470\":1,\"471\":2,\"472\":2,\"479\":2,\"484\":2,\"488\":1,\"491\":3,\"496\":1,\"497\":2,\"498\":2,\"505\":2,\"510\":2,\"514\":1,\"517\":3,\"520\":3,\"522\":1,\"523\":2,\"524\":2,\"531\":1,\"532\":2,\"533\":2,\"535\":2,\"540\":2,\"544\":1,\"547\":4,\"552\":1,\"553\":2,\"554\":2,\"561\":1,\"562\":2,\"563\":2,\"565\":2,\"570\":2,\"574\":1,\"577\":4,\"582\":1,\"583\":2,\"584\":2,\"591\":1,\"592\":2,\"593\":3,\"595\":2,\"600\":2,\"604\":1,\"607\":4,\"620\":1,\"623\":1,\"626\":4,\"628\":1,\"629\":2,\"630\":2,\"637\":1,\"638\":2,\"639\":3,\"641\":2,\"646\":2,\"650\":1,\"653\":4,\"666\":1,\"669\":1,\"672\":4,\"674\":1,\"675\":2,\"676\":2,\"683\":1,\"684\":2,\"685\":3,\"687\":2,\"692\":2,\"696\":1,\"699\":4,\"712\":1,\"715\":1,\"718\":4,\"720\":1,\"721\":2,\"722\":2,\"729\":1,\"730\":2,\"731\":4,\"733\":2,\"738\":2,\"742\":1,\"745\":4,\"758\":1,\"761\":1,\"764\":4,\"766\":1,\"767\":2,\"768\":2,\"775\":2,\"776\":10,\"778\":8,\"779\":2,\"784\":2,\"788\":1,\"791\":4,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"884\":2,\"885\":2,\"886\":2,\"887\":2,\"888\":2,\"889\":2,\"890\":3,\"891\":2,\"892\":1,\"932\":3,\"1028\":1,\"1029\":1,\"1030\":1,\"1066\":2,\"1067\":2,\"1068\":2,\"1069\":3,\"1070\":2,\"1179\":1,\"1180\":1,\"1181\":1,\"1217\":2,\"1218\":2,\"1219\":2,\"1220\":3,\"1221\":2,\"1236\":3,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1389\":2,\"1390\":2,\"1391\":2,\"1392\":2,\"1393\":2,\"1394\":2,\"1395\":3,\"1396\":2,\"1397\":1,\"1412\":3,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1566\":2,\"1567\":2,\"1568\":2,\"1569\":2,\"1570\":2,\"1571\":2,\"1572\":3,\"1573\":2,\"1574\":1,\"1589\":3,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1743\":2,\"1744\":2,\"1745\":2,\"1746\":2,\"1747\":2,\"1748\":2,\"1749\":3,\"1750\":2,\"1751\":1,\"1766\":3,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1920\":2,\"1921\":2,\"1922\":2,\"1923\":2,\"1924\":2,\"1925\":2,\"1926\":3,\"1927\":2,\"1928\":1,\"1943\":3,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2097\":2,\"2098\":2,\"2099\":2,\"2100\":2,\"2101\":2,\"2102\":2,\"2103\":3,\"2104\":2,\"2105\":1,\"2120\":3,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2287\":2,\"2288\":2,\"2289\":2,\"2290\":2,\"2291\":2,\"2292\":2,\"2293\":3,\"2294\":2,\"2295\":1,\"2335\":3,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2506\":2,\"2507\":2,\"2508\":2,\"2509\":2,\"2510\":2,\"2511\":2,\"2512\":3,\"2513\":2,\"2514\":1,\"2554\":3,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2725\":2,\"2726\":2,\"2727\":2,\"2728\":2,\"2729\":2,\"2730\":2,\"2731\":3,\"2732\":2,\"2733\":1,\"2773\":3}}],[\"programming\",{\"1\":{\"392\":1}}],[\"program\",{\"1\":{\"94\":1,\"334\":1}}],[\"progress\",{\"1\":{\"13\":2,\"38\":1,\"93\":1,\"418\":1,\"419\":1,\"448\":1,\"449\":1,\"471\":1,\"472\":1,\"497\":1,\"498\":1,\"523\":1,\"524\":1,\"553\":1,\"554\":1,\"583\":1,\"584\":1,\"629\":1,\"630\":1,\"675\":1,\"676\":1,\"721\":1,\"722\":1,\"767\":1,\"768\":1}}],[\"problem\",{\"1\":{\"93\":1,\"94\":1,\"377\":2}}],[\"professionals\",{\"1\":{\"114\":1}}],[\"profile|\",{\"1\":{\"359\":1,\"385\":1}}],[\"profile>\",{\"1\":{\"155\":1,\"158\":1}}],[\"profile\",{\"0\":{\"356\":1,\"382\":1},\"1\":{\"108\":1,\"109\":1,\"163\":1,\"164\":1,\"280\":2,\"291\":2,\"330\":1,\"334\":1,\"343\":4,\"344\":1,\"345\":1,\"352\":2,\"354\":1,\"356\":1,\"359\":1,\"360\":3,\"363\":1,\"380\":1,\"382\":1,\"385\":1,\"386\":1,\"389\":1,\"434\":2,\"460\":2,\"483\":2,\"509\":2,\"539\":2,\"569\":2,\"599\":2,\"645\":2,\"691\":2,\"737\":2,\"783\":2}}],[\"profiles>\",{\"1\":{\"155\":1,\"158\":1}}],[\"profiles\",{\"1\":{\"91\":3,\"106\":1,\"161\":1,\"379\":1}}],[\"prof\",{\"1\":{\"73\":1,\"79\":1}}],[\"proxytest\",{\"1\":{\"135\":1}}],[\"proxy\",{\"0\":{\"88\":1,\"96\":1,\"135\":1,\"166\":1,\"186\":2,\"187\":1,\"188\":1,\"192\":2,\"193\":1,\"194\":1,\"195\":2,\"196\":1,\"197\":1,\"240\":2,\"241\":1,\"242\":1,\"264\":1,\"267\":1,\"268\":1,\"269\":1,\"270\":1,\"897\":1,\"898\":2,\"899\":1,\"900\":1,\"906\":1,\"911\":1,\"912\":1,\"913\":1,\"914\":1,\"964\":1,\"965\":2,\"966\":1,\"967\":1,\"998\":1,\"1003\":1,\"1004\":1,\"1005\":1,\"1006\":1,\"1071\":1,\"1072\":2,\"1073\":1,\"1074\":1,\"1125\":1,\"1126\":2,\"1127\":1,\"1128\":1,\"1129\":1,\"1132\":1,\"1133\":1,\"1134\":1,\"1135\":1,\"1222\":1,\"1223\":2,\"1224\":1,\"1225\":1,\"1264\":1,\"1265\":2,\"1266\":1,\"1267\":1,\"1298\":1,\"1303\":1,\"1304\":1,\"1305\":1,\"1306\":1,\"1398\":1,\"1399\":2,\"1400\":1,\"1401\":1,\"1440\":1,\"1441\":2,\"1442\":1,\"1443\":1,\"1474\":1,\"1479\":1,\"1480\":1,\"1481\":1,\"1482\":1,\"1575\":1,\"1576\":2,\"1577\":1,\"1578\":1,\"1617\":1,\"1618\":2,\"1619\":1,\"1620\":1,\"1651\":1,\"1656\":1,\"1657\":1,\"1658\":1,\"1659\":1,\"1752\":1,\"1753\":2,\"1754\":1,\"1755\":1,\"1794\":1,\"1795\":2,\"1796\":1,\"1797\":1,\"1828\":1,\"1833\":1,\"1834\":1,\"1835\":1,\"1836\":1,\"1929\":1,\"1930\":2,\"1931\":1,\"1932\":1,\"1971\":1,\"1972\":2,\"1973\":1,\"1974\":1,\"2005\":1,\"2010\":1,\"2011\":1,\"2012\":1,\"2013\":1,\"2106\":1,\"2107\":2,\"2108\":1,\"2109\":1,\"2148\":1,\"2149\":2,\"2150\":1,\"2151\":1,\"2182\":1,\"2187\":1,\"2188\":1,\"2189\":1,\"2190\":1,\"2300\":1,\"2301\":2,\"2302\":1,\"2303\":1,\"2309\":1,\"2314\":1,\"2315\":1,\"2316\":1,\"2317\":1,\"2367\":1,\"2368\":2,\"2369\":1,\"2370\":1,\"2401\":1,\"2406\":1,\"2407\":1,\"2408\":1,\"2409\":1,\"2519\":1,\"2520\":2,\"2521\":1,\"2522\":1,\"2528\":1,\"2533\":1,\"2534\":1,\"2535\":1,\"2536\":1,\"2586\":1,\"2587\":2,\"2588\":1,\"2589\":1,\"2620\":1,\"2625\":1,\"2626\":1,\"2627\":1,\"2628\":1,\"2738\":1,\"2739\":2,\"2740\":1,\"2741\":1,\"2747\":1,\"2752\":1,\"2753\":1,\"2754\":1,\"2755\":1,\"2805\":1,\"2806\":2,\"2807\":1,\"2808\":1,\"2839\":1,\"2844\":1,\"2845\":1,\"2846\":1,\"2847\":1},\"1\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"95\":3,\"96\":3,\"135\":7,\"165\":3,\"166\":4,\"186\":4,\"187\":4,\"188\":3,\"192\":4,\"193\":4,\"194\":3,\"195\":4,\"196\":4,\"197\":3,\"240\":4,\"241\":4,\"242\":3,\"265\":1,\"267\":2,\"268\":2,\"269\":2,\"270\":2,\"285\":2,\"296\":2,\"299\":3,\"302\":3,\"305\":3,\"308\":3,\"311\":3,\"323\":15,\"327\":1,\"421\":2,\"438\":2,\"444\":3,\"464\":2,\"474\":1,\"487\":2,\"493\":3,\"500\":1,\"513\":2,\"519\":3,\"526\":1,\"543\":2,\"549\":3,\"556\":1,\"573\":2,\"579\":3,\"586\":1,\"603\":2,\"609\":3,\"632\":1,\"649\":2,\"655\":3,\"678\":2,\"695\":2,\"701\":3,\"724\":2,\"741\":2,\"747\":3,\"770\":2,\"787\":2,\"793\":3,\"810\":1,\"897\":3,\"898\":4,\"899\":5,\"900\":3,\"902\":2,\"909\":1,\"911\":2,\"912\":2,\"913\":2,\"914\":2,\"915\":1,\"964\":3,\"965\":4,\"966\":5,\"967\":3,\"970\":1,\"993\":2,\"1001\":1,\"1003\":2,\"1004\":2,\"1005\":2,\"1006\":2,\"1007\":1,\"1015\":1,\"1071\":3,\"1072\":4,\"1073\":5,\"1074\":3,\"1078\":1,\"1125\":3,\"1126\":4,\"1127\":5,\"1128\":3,\"1130\":1,\"1132\":2,\"1133\":2,\"1134\":2,\"1135\":2,\"1146\":1,\"1222\":3,\"1223\":4,\"1224\":5,\"1225\":3,\"1264\":3,\"1265\":4,\"1266\":5,\"1267\":3,\"1270\":1,\"1293\":2,\"1301\":1,\"1303\":2,\"1304\":2,\"1305\":2,\"1306\":2,\"1318\":1,\"1398\":3,\"1399\":4,\"1400\":5,\"1401\":3,\"1440\":3,\"1441\":4,\"1442\":5,\"1443\":3,\"1446\":1,\"1469\":2,\"1477\":1,\"1479\":2,\"1480\":2,\"1481\":2,\"1482\":2,\"1483\":1,\"1495\":1,\"1575\":3,\"1576\":4,\"1577\":5,\"1578\":3,\"1617\":3,\"1618\":4,\"1619\":5,\"1620\":3,\"1623\":1,\"1646\":2,\"1654\":1,\"1656\":2,\"1657\":2,\"1658\":2,\"1659\":2,\"1660\":1,\"1672\":1,\"1752\":3,\"1753\":4,\"1754\":5,\"1755\":3,\"1794\":3,\"1795\":4,\"1796\":5,\"1797\":3,\"1800\":1,\"1823\":2,\"1831\":1,\"1833\":2,\"1834\":2,\"1835\":2,\"1836\":2,\"1837\":1,\"1849\":1,\"1929\":3,\"1930\":4,\"1931\":5,\"1932\":3,\"1971\":3,\"1972\":4,\"1973\":5,\"1974\":3,\"1977\":1,\"2000\":2,\"2008\":1,\"2010\":2,\"2011\":2,\"2012\":2,\"2013\":2,\"2014\":1,\"2026\":1,\"2106\":3,\"2107\":4,\"2108\":5,\"2109\":3,\"2148\":3,\"2149\":4,\"2150\":5,\"2151\":3,\"2154\":1,\"2177\":2,\"2185\":1,\"2187\":2,\"2188\":2,\"2189\":2,\"2190\":2,\"2191\":1,\"2213\":1,\"2300\":3,\"2301\":4,\"2302\":5,\"2303\":3,\"2305\":2,\"2312\":1,\"2314\":2,\"2315\":2,\"2316\":2,\"2317\":2,\"2318\":1,\"2367\":3,\"2368\":4,\"2369\":5,\"2370\":3,\"2373\":1,\"2396\":2,\"2404\":1,\"2406\":2,\"2407\":2,\"2408\":2,\"2409\":2,\"2410\":1,\"2432\":1,\"2519\":3,\"2520\":4,\"2521\":5,\"2522\":3,\"2524\":2,\"2531\":1,\"2533\":2,\"2534\":2,\"2535\":2,\"2536\":2,\"2537\":1,\"2586\":3,\"2587\":4,\"2588\":5,\"2589\":3,\"2592\":1,\"2615\":2,\"2623\":1,\"2625\":2,\"2626\":2,\"2627\":2,\"2628\":2,\"2629\":1,\"2651\":1,\"2738\":3,\"2739\":4,\"2740\":5,\"2741\":3,\"2743\":2,\"2750\":1,\"2752\":2,\"2753\":2,\"2754\":2,\"2755\":2,\"2756\":1,\"2805\":3,\"2806\":4,\"2807\":5,\"2808\":3,\"2811\":1,\"2834\":2,\"2842\":1,\"2844\":2,\"2845\":2,\"2846\":2,\"2847\":2,\"2848\":1}}],[\"proof\",{\"1\":{\"37\":1}}],[\"protocol\",{\"1\":{\"105\":1,\"281\":1,\"292\":1,\"435\":1,\"461\":1,\"484\":1,\"510\":1,\"540\":1,\"570\":1,\"600\":1,\"646\":1,\"692\":1,\"738\":1,\"784\":1}}],[\"protocols\",{\"1\":{\"5\":1,\"10\":2}}],[\"prototypical\",{\"1\":{\"78\":1}}],[\"protection\",{\"0\":{\"39\":1}}],[\"protect\",{\"1\":{\"36\":1,\"130\":1,\"131\":1}}],[\"prokosch\",{\"1\":{\"26\":1}}],[\"productive\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"production\",{\"1\":{\"113\":1,\"132\":1,\"285\":1,\"286\":2,\"296\":1,\"297\":2,\"299\":2,\"410\":1,\"424\":1,\"425\":2,\"427\":1,\"442\":1,\"453\":1,\"456\":1,\"476\":1,\"479\":1,\"502\":1,\"505\":1,\"529\":1,\"530\":2,\"547\":1,\"559\":1,\"560\":2,\"577\":1,\"589\":1,\"590\":2,\"607\":1,\"621\":1,\"635\":1,\"636\":2,\"653\":1,\"667\":1,\"681\":1,\"682\":2,\"699\":1,\"713\":1,\"727\":1,\"728\":2,\"745\":1,\"759\":1,\"773\":1,\"774\":2,\"776\":1,\"791\":1}}],[\"produktivsysteme\",{\"1\":{\"14\":1}}],[\"prod\",{\"1\":{\"20\":1,\"131\":4,\"285\":3,\"286\":5,\"296\":3,\"297\":5,\"299\":6,\"896\":2,\"963\":2,\"2299\":2,\"2366\":2,\"2518\":2,\"2585\":2,\"2737\":2,\"2804\":2}}],[\"prozess\",{\"1\":{\"17\":1}}],[\"prozesses\",{\"1\":{\"17\":1}}],[\"prozesse\",{\"1\":{\"15\":1}}],[\"prozessplugins\",{\"0\":{\"20\":1},\"1\":{\"14\":3}}],[\"providing\",{\"1\":{\"8\":1,\"95\":1,\"125\":1,\"165\":1,\"343\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"provider\",{\"0\":{\"817\":1,\"818\":1,\"819\":2,\"820\":1,\"821\":1,\"822\":1,\"823\":1,\"977\":1,\"978\":1,\"979\":2,\"980\":1,\"981\":1,\"982\":1,\"983\":1,\"1085\":1,\"1086\":1,\"1087\":2,\"1088\":1,\"1089\":1,\"1090\":1,\"1091\":1,\"1153\":1,\"1154\":1,\"1155\":2,\"1156\":1,\"1157\":1,\"1158\":1,\"1159\":1,\"1277\":1,\"1278\":1,\"1279\":2,\"1280\":1,\"1281\":1,\"1282\":1,\"1283\":1,\"1325\":1,\"1326\":1,\"1327\":2,\"1328\":1,\"1329\":1,\"1330\":1,\"1331\":1,\"1453\":1,\"1454\":1,\"1455\":2,\"1456\":1,\"1457\":1,\"1458\":1,\"1459\":1,\"1502\":1,\"1503\":1,\"1504\":2,\"1505\":1,\"1506\":1,\"1507\":1,\"1508\":1,\"1630\":1,\"1631\":1,\"1632\":2,\"1633\":1,\"1634\":1,\"1635\":1,\"1636\":1,\"1679\":1,\"1680\":1,\"1681\":2,\"1682\":1,\"1683\":1,\"1684\":1,\"1685\":1,\"1807\":1,\"1808\":1,\"1809\":2,\"1810\":1,\"1811\":1,\"1812\":1,\"1813\":1,\"1856\":1,\"1857\":1,\"1858\":2,\"1859\":1,\"1860\":1,\"1861\":1,\"1862\":1,\"1984\":1,\"1985\":1,\"1986\":2,\"1987\":1,\"1988\":1,\"1989\":1,\"1990\":1,\"2033\":1,\"2034\":1,\"2035\":2,\"2036\":1,\"2037\":1,\"2038\":1,\"2039\":1,\"2161\":1,\"2162\":1,\"2163\":2,\"2164\":1,\"2165\":1,\"2166\":1,\"2167\":1,\"2220\":1,\"2221\":1,\"2222\":2,\"2223\":1,\"2224\":1,\"2225\":1,\"2226\":1,\"2380\":1,\"2381\":1,\"2382\":2,\"2383\":1,\"2384\":1,\"2385\":1,\"2386\":1,\"2439\":1,\"2440\":1,\"2441\":2,\"2442\":1,\"2443\":1,\"2444\":1,\"2445\":1,\"2599\":1,\"2600\":1,\"2601\":2,\"2602\":1,\"2603\":1,\"2604\":1,\"2605\":1,\"2658\":1,\"2659\":1,\"2660\":2,\"2661\":1,\"2662\":1,\"2663\":1,\"2664\":1,\"2818\":1,\"2819\":1,\"2820\":2,\"2821\":1,\"2822\":1,\"2823\":1,\"2824\":1},\"1\":{\"143\":2,\"811\":1,\"814\":1,\"815\":1,\"816\":1,\"817\":3,\"818\":5,\"819\":4,\"820\":2,\"821\":2,\"822\":3,\"823\":2,\"903\":1,\"904\":2,\"905\":2,\"971\":1,\"974\":1,\"975\":1,\"976\":1,\"977\":3,\"978\":5,\"979\":4,\"980\":2,\"981\":2,\"982\":3,\"983\":2,\"994\":1,\"995\":1,\"996\":2,\"997\":2,\"1079\":1,\"1082\":1,\"1083\":1,\"1084\":1,\"1085\":3,\"1086\":5,\"1087\":4,\"1088\":2,\"1089\":2,\"1090\":3,\"1091\":2,\"1147\":1,\"1150\":1,\"1151\":1,\"1152\":1,\"1153\":3,\"1154\":5,\"1155\":4,\"1156\":2,\"1157\":2,\"1158\":3,\"1159\":2,\"1271\":1,\"1274\":1,\"1275\":1,\"1276\":1,\"1277\":3,\"1278\":5,\"1279\":4,\"1280\":2,\"1281\":2,\"1282\":3,\"1283\":2,\"1294\":1,\"1295\":1,\"1296\":2,\"1297\":2,\"1319\":1,\"1322\":1,\"1323\":1,\"1324\":1,\"1325\":3,\"1326\":5,\"1327\":4,\"1328\":2,\"1329\":2,\"1330\":3,\"1331\":2,\"1447\":1,\"1450\":1,\"1451\":1,\"1452\":1,\"1453\":3,\"1454\":5,\"1455\":4,\"1456\":2,\"1457\":2,\"1458\":3,\"1459\":2,\"1470\":1,\"1471\":1,\"1472\":2,\"1473\":2,\"1496\":1,\"1499\":1,\"1500\":1,\"1501\":1,\"1502\":3,\"1503\":5,\"1504\":4,\"1505\":2,\"1506\":2,\"1507\":3,\"1508\":2,\"1624\":1,\"1627\":1,\"1628\":1,\"1629\":1,\"1630\":3,\"1631\":5,\"1632\":4,\"1633\":2,\"1634\":2,\"1635\":3,\"1636\":2,\"1647\":1,\"1648\":1,\"1649\":2,\"1650\":2,\"1673\":1,\"1676\":1,\"1677\":1,\"1678\":1,\"1679\":3,\"1680\":5,\"1681\":4,\"1682\":2,\"1683\":2,\"1684\":3,\"1685\":2,\"1801\":1,\"1804\":1,\"1805\":1,\"1806\":1,\"1807\":3,\"1808\":5,\"1809\":4,\"1810\":2,\"1811\":2,\"1812\":3,\"1813\":2,\"1824\":1,\"1825\":1,\"1826\":2,\"1827\":2,\"1850\":1,\"1853\":1,\"1854\":1,\"1855\":1,\"1856\":3,\"1857\":5,\"1858\":4,\"1859\":2,\"1860\":2,\"1861\":3,\"1862\":2,\"1978\":1,\"1981\":1,\"1982\":1,\"1983\":1,\"1984\":3,\"1985\":5,\"1986\":4,\"1987\":2,\"1988\":2,\"1989\":3,\"1990\":2,\"2001\":1,\"2002\":1,\"2003\":2,\"2004\":2,\"2027\":1,\"2030\":1,\"2031\":1,\"2032\":1,\"2033\":3,\"2034\":5,\"2035\":4,\"2036\":2,\"2037\":2,\"2038\":3,\"2039\":2,\"2155\":1,\"2158\":1,\"2159\":1,\"2160\":1,\"2161\":3,\"2162\":5,\"2163\":4,\"2164\":2,\"2165\":2,\"2166\":3,\"2167\":2,\"2178\":1,\"2179\":1,\"2180\":2,\"2181\":2,\"2214\":1,\"2217\":1,\"2218\":1,\"2219\":1,\"2220\":3,\"2221\":5,\"2222\":4,\"2223\":2,\"2224\":2,\"2225\":3,\"2226\":2,\"2306\":1,\"2307\":2,\"2308\":2,\"2374\":1,\"2377\":1,\"2378\":1,\"2379\":1,\"2380\":3,\"2381\":5,\"2382\":4,\"2383\":2,\"2384\":2,\"2385\":3,\"2386\":2,\"2397\":1,\"2398\":1,\"2399\":2,\"2400\":2,\"2433\":1,\"2436\":1,\"2437\":1,\"2438\":1,\"2439\":3,\"2440\":5,\"2441\":4,\"2442\":2,\"2443\":2,\"2444\":3,\"2445\":2,\"2525\":1,\"2526\":2,\"2527\":2,\"2593\":1,\"2596\":1,\"2597\":1,\"2598\":1,\"2599\":3,\"2600\":5,\"2601\":4,\"2602\":2,\"2603\":2,\"2604\":3,\"2605\":2,\"2616\":1,\"2617\":1,\"2618\":2,\"2619\":2,\"2652\":1,\"2655\":1,\"2656\":1,\"2657\":1,\"2658\":3,\"2659\":5,\"2660\":4,\"2661\":2,\"2662\":2,\"2663\":3,\"2664\":2,\"2744\":1,\"2745\":2,\"2746\":2,\"2812\":1,\"2815\":1,\"2816\":1,\"2817\":1,\"2818\":3,\"2819\":5,\"2820\":4,\"2821\":2,\"2822\":2,\"2823\":3,\"2824\":2,\"2835\":1,\"2836\":1,\"2837\":2,\"2838\":2}}],[\"providers\",{\"1\":{\"113\":1}}],[\"provides\",{\"1\":{\"87\":1,\"124\":1,\"798\":1,\"2201\":1,\"2420\":1,\"2639\":1}}],[\"provided\",{\"1\":{\"37\":2,\"173\":1,\"232\":1,\"249\":1,\"258\":1,\"282\":1,\"293\":1,\"300\":2,\"303\":2,\"306\":2,\"314\":1,\"342\":2,\"419\":1,\"449\":1,\"472\":1,\"498\":1,\"524\":1,\"554\":1,\"584\":1,\"630\":1,\"676\":1,\"722\":1,\"768\":1,\"836\":1,\"890\":1,\"946\":1,\"957\":1,\"1021\":1,\"1069\":1,\"1112\":1,\"1120\":1,\"1172\":1,\"1220\":1,\"1250\":1,\"1258\":1,\"1344\":1,\"1395\":1,\"1426\":1,\"1434\":1,\"1521\":1,\"1572\":1,\"1603\":1,\"1611\":1,\"1698\":1,\"1749\":1,\"1780\":1,\"1788\":1,\"1875\":1,\"1926\":1,\"1957\":1,\"1965\":1,\"2052\":1,\"2103\":1,\"2134\":1,\"2142\":1,\"2239\":1,\"2293\":1,\"2349\":1,\"2360\":1,\"2458\":1,\"2512\":1,\"2568\":1,\"2579\":1,\"2677\":1,\"2731\":1,\"2787\":1,\"2798\":1}}],[\"provide\",{\"1\":{\"0\":1,\"37\":1,\"40\":1,\"94\":1,\"95\":2,\"98\":1,\"105\":1,\"113\":1,\"165\":2,\"423\":1,\"453\":1,\"476\":1,\"502\":1,\"528\":1,\"558\":1,\"588\":1,\"634\":1,\"680\":1,\"726\":1,\"772\":1,\"813\":1,\"973\":1,\"1081\":1,\"1149\":1,\"1273\":1,\"1321\":1,\"1449\":1,\"1498\":1,\"1626\":1,\"1675\":1,\"1803\":1,\"1852\":1,\"1980\":1,\"2029\":1,\"2157\":1,\"2216\":1,\"2376\":1,\"2435\":1,\"2595\":1,\"2654\":1,\"2814\":1}}],[\"provisioning\",{\"1\":{\"6\":1}}],[\"proven\",{\"1\":{\"5\":1,\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"projects\",{\"1\":{\"9\":1,\"75\":1,\"77\":2,\"112\":2,\"113\":1,\"123\":1,\"158\":1,\"391\":1,\"414\":1,\"625\":1,\"671\":1,\"717\":1,\"763\":1}}],[\"project\",{\"0\":{\"5\":1,\"129\":1,\"406\":1,\"617\":1,\"663\":1,\"709\":1,\"755\":1},\"1\":{\"12\":1,\"77\":1,\"79\":1,\"94\":1,\"112\":1,\"113\":2,\"114\":1,\"116\":1,\"125\":2,\"130\":1,\"131\":1,\"327\":5,\"393\":1,\"404\":1,\"406\":1,\"407\":1,\"408\":1,\"409\":2,\"415\":1,\"615\":1,\"617\":1,\"618\":1,\"619\":1,\"620\":2,\"626\":1,\"661\":1,\"663\":1,\"664\":1,\"665\":1,\"666\":2,\"672\":1,\"707\":1,\"709\":1,\"710\":1,\"711\":1,\"712\":2,\"718\":1,\"753\":1,\"755\":1,\"756\":1,\"757\":1,\"758\":2,\"764\":1}}],[\"mpc\",{\"1\":{\"286\":1,\"300\":2,\"303\":2}}],[\"mpi\",{\"0\":{\"148\":1,\"227\":1},\"1\":{\"95\":2,\"148\":12,\"165\":2,\"227\":4,\"300\":3,\"303\":3,\"306\":3}}],[\"my\",{\"1\":{\"266\":1,\"424\":2,\"559\":2,\"589\":2,\"635\":2,\"681\":2,\"727\":2,\"773\":2,\"910\":1,\"1002\":1,\"1131\":1,\"1302\":1,\"1478\":1,\"1655\":1,\"1832\":1,\"2009\":1,\"2186\":1,\"2313\":1,\"2405\":1,\"2532\":1,\"2624\":1,\"2751\":1,\"2843\":1}}],[\"m2\",{\"1\":{\"158\":1,\"394\":1}}],[\"mvn\",{\"1\":{\"129\":1,\"130\":1,\"131\":1,\"152\":1,\"333\":1,\"347\":1,\"362\":1,\"372\":1,\"388\":1,\"403\":1,\"614\":1,\"660\":1,\"706\":1,\"752\":1}}],[\"mdat\",{\"1\":{\"95\":3,\"165\":3}}],[\"moving\",{\"1\":{\"442\":1,\"468\":1,\"491\":1,\"517\":1,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"791\":1}}],[\"most\",{\"1\":{\"328\":1,\"391\":1,\"393\":1,\"395\":1,\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"mostly\",{\"1\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1}}],[\"mount\",{\"1\":{\"300\":2,\"303\":2}}],[\"mod\",{\"1\":{\"921\":1,\"1013\":1,\"1312\":1,\"1489\":1,\"1666\":1,\"1843\":1,\"2020\":1,\"2197\":1,\"2324\":1,\"2416\":1,\"2543\":1,\"2635\":1,\"2762\":1,\"2854\":1}}],[\"modifies\",{\"1\":{\"921\":1,\"1013\":1,\"1312\":1,\"1489\":1,\"1666\":1,\"1843\":1,\"2020\":1,\"2197\":1,\"2324\":1,\"2416\":1,\"2543\":1,\"2635\":1,\"2762\":1,\"2854\":1}}],[\"modified\",{\"1\":{\"903\":1,\"994\":1,\"1294\":1,\"1470\":1,\"1647\":1,\"1824\":1,\"2001\":1,\"2178\":1,\"2306\":1,\"2397\":1,\"2525\":1,\"2616\":1,\"2744\":1,\"2835\":1}}],[\"modification\",{\"1\":{\"348\":1}}],[\"modify\",{\"0\":{\"299\":1,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"444\":1,\"445\":1,\"493\":1,\"494\":1,\"519\":1,\"520\":1,\"549\":1,\"550\":1,\"579\":1,\"580\":1,\"609\":1,\"610\":1,\"655\":1,\"656\":1,\"701\":1,\"702\":1,\"747\":1,\"748\":1,\"793\":1,\"794\":1},\"1\":{\"214\":1,\"285\":2,\"286\":2,\"296\":2,\"297\":2,\"299\":1,\"300\":3,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"325\":1,\"331\":1,\"360\":3,\"386\":4,\"429\":1,\"438\":2,\"439\":2,\"444\":1,\"445\":1,\"464\":2,\"465\":2,\"487\":2,\"488\":2,\"493\":1,\"494\":1,\"513\":2,\"514\":2,\"519\":1,\"520\":1,\"543\":2,\"544\":2,\"549\":1,\"550\":1,\"573\":2,\"574\":2,\"579\":1,\"580\":1,\"603\":2,\"604\":2,\"609\":1,\"610\":1,\"649\":2,\"650\":2,\"655\":1,\"656\":1,\"695\":2,\"696\":2,\"701\":1,\"702\":1,\"741\":2,\"742\":2,\"747\":1,\"748\":1,\"778\":1,\"787\":2,\"788\":2,\"793\":1,\"794\":1,\"829\":1,\"871\":1,\"989\":1,\"1053\":1,\"1097\":1,\"1165\":1,\"1204\":1,\"1289\":1,\"1337\":1,\"1376\":1,\"1465\":1,\"1514\":1,\"1553\":1,\"1642\":1,\"1691\":1,\"1730\":1,\"1819\":1,\"1868\":1,\"1907\":1,\"1996\":1,\"2045\":1,\"2084\":1,\"2173\":1,\"2232\":1,\"2274\":1,\"2392\":1,\"2451\":1,\"2493\":1,\"2611\":1,\"2670\":1,\"2712\":1,\"2830\":1}}],[\"modifying\",{\"0\":{\"369\":1},\"1\":{\"37\":1,\"95\":1,\"165\":1,\"298\":1,\"301\":1,\"304\":1,\"307\":1,\"310\":1,\"345\":1,\"348\":1,\"365\":1,\"443\":1,\"492\":1,\"518\":1,\"548\":1,\"578\":1,\"608\":1,\"654\":1,\"700\":1,\"746\":1,\"792\":1}}],[\"mode\",{\"1\":{\"166\":2}}],[\"modeling\",{\"1\":{\"398\":1}}],[\"modeled\",{\"1\":{\"319\":1,\"350\":1,\"367\":1}}],[\"modeler\",{\"1\":{\"99\":1,\"315\":1,\"390\":1,\"398\":2}}],[\"modelling\",{\"1\":{\"92\":2}}],[\"models\",{\"1\":{\"74\":1,\"90\":1,\"92\":1,\"94\":1,\"98\":1,\"99\":1,\"327\":2}}],[\"model\",{\"1\":{\"70\":1,\"91\":1,\"92\":2,\"99\":2,\"123\":1,\"328\":1,\"330\":1,\"331\":1,\"343\":2,\"360\":1,\"367\":1,\"370\":1}}],[\"module\",{\"1\":{\"77\":2,\"148\":3,\"149\":3,\"150\":2,\"155\":1,\"328\":2,\"333\":1,\"347\":1,\"362\":1,\"372\":1,\"388\":1}}],[\"more\",{\"0\":{\"64\":1},\"1\":{\"30\":1,\"38\":1,\"42\":1,\"43\":1,\"44\":1,\"45\":1,\"46\":1,\"47\":1,\"48\":1,\"49\":1,\"50\":1,\"51\":1,\"52\":1,\"53\":1,\"54\":1,\"55\":1,\"56\":1,\"57\":1,\"58\":1,\"59\":1,\"60\":1,\"61\":1,\"62\":1,\"63\":1,\"70\":1,\"74\":1,\"85\":1,\"86\":1,\"87\":1,\"88\":1,\"92\":1,\"95\":1,\"105\":1,\"106\":1,\"108\":1,\"109\":1,\"122\":1,\"126\":1,\"158\":1,\"159\":1,\"165\":1,\"201\":1,\"224\":1,\"245\":1,\"280\":1,\"291\":1,\"315\":1,\"316\":1,\"317\":1,\"318\":1,\"319\":1,\"320\":1,\"321\":1,\"343\":1,\"369\":1,\"401\":1,\"408\":1,\"411\":2,\"413\":3,\"415\":1,\"426\":1,\"435\":1,\"441\":1,\"461\":1,\"467\":1,\"484\":1,\"490\":1,\"510\":1,\"516\":1,\"540\":1,\"546\":1,\"570\":1,\"576\":1,\"600\":1,\"606\":1,\"612\":1,\"619\":1,\"622\":2,\"624\":3,\"626\":1,\"646\":1,\"652\":1,\"658\":1,\"665\":1,\"668\":2,\"670\":3,\"672\":1,\"692\":1,\"698\":1,\"704\":1,\"711\":1,\"714\":2,\"716\":3,\"718\":1,\"738\":1,\"744\":1,\"750\":1,\"757\":1,\"760\":2,\"762\":3,\"764\":1,\"775\":1,\"784\":1,\"790\":1,\"822\":1,\"824\":1,\"859\":1,\"881\":1,\"940\":1,\"982\":1,\"984\":1,\"1040\":1,\"1063\":1,\"1090\":1,\"1092\":1,\"1106\":1,\"1158\":1,\"1160\":1,\"1191\":1,\"1214\":1,\"1244\":1,\"1282\":1,\"1284\":1,\"1330\":1,\"1332\":1,\"1364\":1,\"1386\":1,\"1420\":1,\"1458\":1,\"1460\":1,\"1507\":1,\"1509\":1,\"1541\":1,\"1563\":1,\"1597\":1,\"1635\":1,\"1637\":1,\"1684\":1,\"1686\":1,\"1718\":1,\"1740\":1,\"1774\":1,\"1812\":1,\"1814\":1,\"1861\":1,\"1863\":1,\"1895\":1,\"1917\":1,\"1951\":1,\"1989\":1,\"1991\":1,\"2038\":1,\"2040\":1,\"2072\":1,\"2094\":1,\"2128\":1,\"2166\":1,\"2168\":1,\"2225\":1,\"2227\":1,\"2262\":1,\"2284\":1,\"2343\":1,\"2385\":1,\"2387\":1,\"2444\":1,\"2446\":1,\"2481\":1,\"2503\":1,\"2562\":1,\"2604\":1,\"2606\":1,\"2663\":1,\"2665\":1,\"2700\":1,\"2722\":1,\"2781\":1,\"2823\":1,\"2825\":1}}],[\"monitoring\",{\"1\":{\"26\":1}}],[\"montags\",{\"1\":{\"14\":1,\"41\":1}}],[\"mödinger\",{\"1\":{\"26\":2,\"79\":1}}],[\"möglichst\",{\"1\":{\"14\":1}}],[\"m\",{\"1\":{\"26\":8,\"279\":1,\"290\":1}}],[\"müssen\",{\"1\":{\"17\":1}}],[\"must\",{\"1\":{\"81\":1,\"91\":1,\"148\":1,\"149\":1,\"150\":1,\"273\":1,\"343\":1,\"367\":1,\"438\":1,\"464\":1,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1,\"815\":1,\"816\":1,\"918\":1,\"975\":1,\"976\":1,\"1010\":1,\"1083\":1,\"1084\":1,\"1138\":1,\"1151\":1,\"1152\":1,\"1275\":1,\"1276\":1,\"1309\":1,\"1323\":1,\"1324\":1,\"1451\":1,\"1452\":1,\"1486\":1,\"1500\":1,\"1501\":1,\"1628\":1,\"1629\":1,\"1663\":1,\"1677\":1,\"1678\":1,\"1805\":1,\"1806\":1,\"1840\":1,\"1854\":1,\"1855\":1,\"1982\":1,\"1983\":1,\"2017\":1,\"2031\":1,\"2032\":1,\"2159\":1,\"2160\":1,\"2194\":1,\"2218\":1,\"2219\":1,\"2321\":1,\"2378\":1,\"2379\":1,\"2413\":1,\"2437\":1,\"2438\":1,\"2540\":1,\"2597\":1,\"2598\":1,\"2632\":1,\"2656\":1,\"2657\":1,\"2759\":1,\"2816\":1,\"2817\":1,\"2851\":1}}],[\"muss\",{\"1\":{\"16\":1}}],[\"much\",{\"1\":{\"74\":1,\"122\":1,\"425\":1,\"441\":1,\"455\":1,\"467\":1,\"478\":1,\"490\":1,\"504\":1,\"516\":1,\"530\":1,\"546\":1,\"560\":1,\"576\":1,\"590\":1,\"606\":1,\"636\":1,\"652\":1,\"682\":1,\"698\":1,\"728\":1,\"744\":1,\"774\":1,\"790\":1}}],[\"multiline\",{\"1\":{\"156\":2}}],[\"multicatch\",{\"1\":{\"155\":2}}],[\"multi\",{\"1\":{\"26\":1,\"112\":1,\"113\":1,\"114\":1,\"137\":1,\"138\":1,\"329\":1,\"343\":1}}],[\"multiple\",{\"0\":{\"377\":1},\"1\":{\"0\":1,\"84\":1,\"94\":1,\"95\":1,\"113\":1,\"155\":5,\"165\":1,\"343\":1,\"379\":1,\"395\":1,\"798\":1,\"800\":1,\"925\":1,\"927\":1,\"1229\":1,\"1231\":1,\"1405\":1,\"1407\":1,\"1582\":1,\"1584\":1,\"1759\":1,\"1761\":1,\"1936\":1,\"1938\":1,\"2113\":1,\"2115\":1,\"2201\":1,\"2203\":1,\"2328\":1,\"2330\":1,\"2420\":1,\"2422\":1,\"2547\":1,\"2549\":1,\"2639\":1,\"2641\":1,\"2766\":1,\"2768\":1}}],[\"marketplace\",{\"1\":{\"426\":2,\"427\":1,\"775\":2,\"776\":1}}],[\"markdown\",{\"1\":{\"342\":1}}],[\"martin\",{\"1\":{\"411\":2,\"622\":2,\"668\":2,\"714\":2,\"760\":2}}],[\"match\",{\"1\":{\"355\":1,\"356\":1,\"381\":1,\"382\":1,\"802\":1,\"806\":2,\"897\":1,\"929\":1,\"932\":1,\"933\":2,\"964\":1,\"1071\":1,\"1125\":1,\"1222\":1,\"1233\":1,\"1236\":1,\"1237\":2,\"1264\":1,\"1398\":1,\"1409\":1,\"1412\":1,\"1413\":2,\"1440\":1,\"1575\":1,\"1586\":1,\"1589\":1,\"1590\":2,\"1617\":1,\"1752\":1,\"1763\":1,\"1766\":1,\"1767\":2,\"1794\":1,\"1929\":1,\"1940\":1,\"1943\":1,\"1944\":2,\"1971\":1,\"2106\":1,\"2117\":1,\"2120\":1,\"2121\":2,\"2148\":1,\"2205\":1,\"2209\":2,\"2300\":1,\"2332\":1,\"2335\":1,\"2336\":2,\"2367\":1,\"2424\":1,\"2428\":2,\"2519\":1,\"2551\":1,\"2554\":1,\"2555\":2,\"2586\":1,\"2643\":1,\"2647\":2,\"2738\":1,\"2770\":1,\"2773\":1,\"2774\":2,\"2805\":1}}],[\"matching\",{\"0\":{\"379\":1,\"799\":1,\"926\":1,\"1230\":1,\"1406\":1,\"1583\":1,\"1760\":1,\"1937\":1,\"2114\":1,\"2202\":1,\"2329\":1,\"2421\":1,\"2548\":1,\"2640\":1,\"2767\":1},\"1\":{\"352\":1,\"357\":1,\"358\":1,\"383\":1,\"384\":1,\"798\":2,\"925\":2,\"1229\":2,\"1405\":2,\"1582\":2,\"1759\":2,\"1936\":2,\"2113\":2,\"2201\":2,\"2328\":2,\"2420\":2,\"2547\":2,\"2639\":2,\"2766\":2}}],[\"matched\",{\"1\":{\"799\":1,\"801\":3,\"803\":1,\"806\":2,\"897\":1,\"926\":1,\"928\":3,\"930\":1,\"933\":2,\"964\":1,\"1071\":1,\"1125\":1,\"1222\":1,\"1230\":1,\"1232\":3,\"1234\":1,\"1237\":2,\"1264\":1,\"1398\":1,\"1406\":1,\"1408\":3,\"1410\":1,\"1413\":2,\"1440\":1,\"1575\":1,\"1583\":1,\"1585\":3,\"1587\":1,\"1590\":2,\"1617\":1,\"1752\":1,\"1760\":1,\"1762\":3,\"1764\":1,\"1767\":2,\"1794\":1,\"1929\":1,\"1937\":1,\"1939\":3,\"1941\":1,\"1944\":2,\"1971\":1,\"2106\":1,\"2114\":1,\"2116\":3,\"2118\":1,\"2121\":2,\"2148\":1,\"2202\":1,\"2204\":3,\"2206\":1,\"2209\":2,\"2300\":1,\"2329\":1,\"2331\":3,\"2333\":1,\"2336\":2,\"2367\":1,\"2421\":1,\"2423\":3,\"2425\":1,\"2428\":2,\"2519\":1,\"2548\":1,\"2550\":3,\"2552\":1,\"2555\":2,\"2586\":1,\"2640\":1,\"2642\":3,\"2644\":1,\"2647\":2,\"2738\":1,\"2767\":1,\"2769\":3,\"2771\":1,\"2774\":2,\"2805\":1}}],[\"matches\",{\"1\":{\"170\":1,\"227\":1,\"228\":1,\"234\":1,\"800\":1,\"927\":1,\"1231\":1,\"1407\":1,\"1584\":1,\"1761\":1,\"1938\":1,\"2115\":1,\"2203\":1,\"2330\":1,\"2422\":1,\"2549\":1,\"2641\":1,\"2768\":1}}],[\"matcherfactory\",{\"1\":{\"143\":1}}],[\"maxpoolsize\",{\"0\":{\"885\":1,\"1390\":1,\"1567\":1,\"1744\":1,\"1921\":1,\"2098\":1,\"2288\":1,\"2507\":1,\"2726\":1},\"1\":{\"885\":1,\"1390\":1,\"1567\":1,\"1744\":1,\"1921\":1,\"2098\":1,\"2288\":1,\"2507\":1,\"2726\":1}}],[\"maximum\",{\"1\":{\"337\":1}}],[\"maximilian\",{\"1\":{\"79\":1}}],[\"max\",{\"0\":{\"205\":1,\"230\":1,\"862\":1,\"888\":1,\"1044\":1,\"1067\":1,\"1195\":1,\"1218\":1,\"1367\":1,\"1393\":1,\"1544\":1,\"1570\":1,\"1721\":1,\"1747\":1,\"1898\":1,\"1924\":1,\"2075\":1,\"2101\":1,\"2265\":1,\"2291\":1,\"2484\":1,\"2510\":1,\"2703\":1,\"2729\":1},\"1\":{\"205\":1,\"230\":1,\"862\":1,\"885\":2,\"888\":1,\"1044\":1,\"1067\":1,\"1195\":1,\"1218\":1,\"1367\":1,\"1390\":2,\"1393\":1,\"1544\":1,\"1567\":2,\"1570\":1,\"1721\":1,\"1744\":2,\"1747\":1,\"1898\":1,\"1921\":2,\"1924\":1,\"2075\":1,\"2098\":2,\"2101\":1,\"2265\":1,\"2288\":2,\"2291\":1,\"2484\":1,\"2507\":2,\"2510\":1,\"2703\":1,\"2726\":2,\"2729\":1}}],[\"map\",{\"1\":{\"166\":1}}],[\"mac\",{\"1\":{\"391\":1,\"396\":1}}],[\"macos\",{\"1\":{\"133\":2}}],[\"machines\",{\"0\":{\"278\":1,\"289\":1,\"432\":1,\"458\":1,\"481\":1,\"507\":1,\"537\":1,\"567\":1,\"597\":1,\"643\":1,\"689\":1,\"735\":1,\"781\":1}}],[\"machine\",{\"1\":{\"130\":1,\"131\":1,\"442\":2,\"547\":2,\"577\":2,\"607\":2,\"653\":2,\"699\":2,\"745\":2,\"791\":2}}],[\"machen\",{\"1\":{\"14\":1}}],[\"maven\",{\"0\":{\"157\":1,\"333\":1,\"347\":1,\"362\":1,\"372\":1,\"388\":1,\"393\":1,\"409\":1,\"620\":1,\"666\":1,\"712\":1,\"758\":1},\"1\":{\"129\":1,\"130\":2,\"131\":2,\"137\":2,\"138\":1,\"152\":1,\"158\":6,\"159\":1,\"315\":1,\"327\":1,\"333\":1,\"334\":2,\"342\":1,\"347\":1,\"348\":1,\"362\":1,\"363\":2,\"372\":1,\"373\":1,\"388\":1,\"389\":2,\"390\":1,\"393\":3,\"394\":4,\"403\":1,\"409\":2,\"614\":1,\"620\":2,\"660\":1,\"666\":2,\"706\":1,\"712\":2,\"752\":1,\"758\":2}}],[\"made\",{\"1\":{\"122\":1,\"173\":1,\"232\":1,\"249\":1,\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1,\"836\":1,\"890\":1,\"946\":1,\"1021\":1,\"1069\":1,\"1112\":1,\"1172\":1,\"1220\":1,\"1250\":1,\"1344\":1,\"1395\":1,\"1426\":1,\"1521\":1,\"1572\":1,\"1603\":1,\"1698\":1,\"1749\":1,\"1780\":1,\"1875\":1,\"1926\":1,\"1957\":1,\"2052\":1,\"2103\":1,\"2134\":1,\"2239\":1,\"2293\":1,\"2349\":1,\"2458\":1,\"2512\":1,\"2568\":1,\"2677\":1,\"2731\":1,\"2787\":1}}],[\"masterpatientindexclientstubfactory\",{\"1\":{\"227\":1}}],[\"masterpatientindexclient\",{\"1\":{\"148\":1}}],[\"masterpatientindexclientpdqfactory\",{\"1\":{\"148\":1}}],[\"masterpatientindexclientfactory\",{\"1\":{\"148\":3}}],[\"master\",{\"1\":{\"95\":1,\"148\":1,\"153\":4,\"165\":1,\"227\":1}}],[\"makers\",{\"1\":{\"114\":1}}],[\"makes\",{\"1\":{\"91\":1}}],[\"make\",{\"1\":{\"81\":1,\"98\":1,\"130\":1,\"131\":1,\"300\":3,\"303\":3,\"306\":1,\"334\":1,\"386\":1,\"400\":1,\"407\":1,\"413\":2,\"414\":1,\"429\":1,\"611\":1,\"618\":1,\"624\":2,\"625\":1,\"657\":1,\"664\":1,\"670\":2,\"671\":1,\"703\":1,\"710\":1,\"716\":2,\"717\":1,\"749\":1,\"756\":1,\"762\":2,\"763\":1,\"778\":1}}],[\"making\",{\"1\":{\"38\":1,\"94\":1}}],[\"major\",{\"1\":{\"42\":2,\"44\":2,\"46\":2,\"48\":2,\"50\":2,\"52\":2,\"54\":2,\"56\":2,\"58\":2,\"60\":2,\"62\":2}}],[\"mandatory\",{\"1\":{\"343\":1,\"379\":1}}],[\"mandatorily\",{\"1\":{\"91\":1}}],[\"manually\",{\"1\":{\"352\":1}}],[\"manual\",{\"0\":{\"130\":1,\"131\":1,\"133\":1,\"334\":1,\"348\":1,\"363\":1,\"373\":1,\"389\":1},\"1\":{\"134\":1,\"137\":1,\"138\":1,\"430\":3,\"442\":1,\"456\":3,\"479\":3,\"505\":3,\"535\":3,\"547\":1,\"565\":3,\"577\":1,\"595\":3,\"607\":1,\"641\":3,\"653\":1,\"687\":3,\"699\":1,\"733\":3,\"745\":1,\"779\":3,\"791\":1}}],[\"managing\",{\"0\":{\"377\":1},\"1\":{\"411\":1,\"425\":1,\"455\":1,\"478\":1,\"504\":1,\"530\":1,\"560\":1,\"590\":1,\"622\":1,\"636\":1,\"668\":1,\"682\":1,\"714\":1,\"728\":1,\"760\":1,\"774\":1}}],[\"managment\",{\"0\":{\"82\":1}}],[\"managed\",{\"1\":{\"423\":1,\"453\":1,\"476\":1,\"502\":1,\"528\":1,\"558\":1,\"588\":1,\"634\":1,\"680\":1,\"726\":1,\"772\":1}}],[\"manage\",{\"1\":{\"393\":1}}],[\"managers\",{\"1\":{\"113\":1}}],[\"manages\",{\"1\":{\"75\":1}}],[\"management\",{\"0\":{\"422\":1,\"452\":1,\"475\":1,\"501\":1,\"527\":1,\"557\":1,\"587\":1,\"633\":1,\"679\":1,\"725\":1,\"771\":1},\"1\":{\"16\":1,\"77\":1,\"94\":1,\"125\":1,\"409\":1,\"421\":1,\"423\":2,\"425\":2,\"451\":1,\"452\":1,\"453\":3,\"455\":1,\"474\":1,\"475\":1,\"476\":3,\"478\":1,\"500\":1,\"501\":1,\"502\":3,\"504\":1,\"526\":1,\"528\":2,\"530\":4,\"556\":1,\"558\":2,\"560\":2,\"586\":1,\"588\":2,\"590\":2,\"620\":1,\"632\":1,\"634\":2,\"636\":2,\"666\":1,\"678\":1,\"680\":2,\"682\":2,\"712\":1,\"724\":1,\"726\":2,\"728\":2,\"758\":1,\"770\":1,\"772\":2,\"774\":2}}],[\"many\",{\"1\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"442\":2,\"547\":2,\"577\":2,\"607\":2,\"653\":2,\"699\":2,\"745\":2,\"791\":2}}],[\"manner\",{\"1\":{\"38\":1}}],[\"main\",{\"0\":{\"328\":1},\"1\":{\"81\":1,\"135\":1,\"137\":5,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"300\":2,\"303\":2,\"306\":2,\"309\":2,\"312\":2,\"327\":2,\"328\":1,\"334\":1,\"348\":1,\"363\":1,\"373\":1,\"389\":1,\"404\":1,\"438\":1,\"445\":2,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"494\":2,\"513\":1,\"514\":1,\"520\":2,\"543\":1,\"544\":1,\"550\":2,\"573\":1,\"580\":2,\"603\":1,\"610\":2,\"615\":1,\"649\":1,\"656\":2,\"661\":1,\"695\":1,\"702\":2,\"707\":1,\"741\":1,\"748\":2,\"753\":1,\"787\":1,\"794\":2}}],[\"maintaining\",{\"1\":{\"10\":1,\"113\":1}}],[\"maintain\",{\"0\":{\"420\":1,\"450\":1,\"473\":1,\"499\":1,\"525\":1,\"555\":1,\"585\":1,\"631\":1,\"677\":1,\"723\":1,\"769\":1},\"1\":{\"5\":1,\"37\":1,\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"mailonerrorlogeventdebugloglocation\",{\"0\":{\"214\":1,\"871\":1,\"1053\":1,\"1204\":1,\"1376\":1,\"1553\":1,\"1730\":1,\"1907\":1,\"2084\":1,\"2274\":1,\"2493\":1,\"2712\":1},\"1\":{\"214\":1,\"871\":1,\"1053\":1,\"1204\":1,\"1376\":1,\"1553\":1,\"1730\":1,\"1907\":1,\"2084\":1,\"2274\":1,\"2493\":1,\"2712\":1}}],[\"mailonerrorlogeventbuffersize\",{\"0\":{\"213\":1,\"870\":1,\"1052\":1,\"1203\":1,\"1375\":1,\"1552\":1,\"1729\":1,\"1906\":1,\"2083\":1,\"2273\":1,\"2492\":1,\"2711\":1},\"1\":{\"213\":1,\"870\":1,\"1052\":1,\"1203\":1,\"1375\":1,\"1552\":1,\"1729\":1,\"1906\":1,\"2083\":1,\"2273\":1,\"2492\":1,\"2711\":1}}],[\"mailbox\",{\"1\":{\"84\":1,\"85\":2}}],[\"mail\",{\"0\":{\"208\":1,\"209\":1,\"210\":2,\"211\":1,\"212\":1,\"213\":1,\"214\":1,\"215\":2,\"216\":1,\"217\":1,\"218\":1,\"219\":1,\"220\":1,\"221\":2,\"222\":1,\"223\":1,\"224\":1,\"225\":1,\"226\":1,\"865\":1,\"866\":1,\"867\":2,\"868\":1,\"869\":1,\"870\":1,\"871\":1,\"872\":2,\"873\":1,\"874\":1,\"875\":1,\"876\":1,\"877\":1,\"878\":2,\"879\":1,\"880\":1,\"881\":1,\"882\":1,\"883\":1,\"1047\":1,\"1048\":1,\"1049\":2,\"1050\":1,\"1051\":1,\"1052\":1,\"1053\":1,\"1054\":2,\"1055\":1,\"1056\":1,\"1057\":1,\"1058\":1,\"1059\":1,\"1060\":2,\"1061\":1,\"1062\":1,\"1063\":1,\"1064\":1,\"1065\":1,\"1198\":1,\"1199\":1,\"1200\":2,\"1201\":1,\"1202\":1,\"1203\":1,\"1204\":1,\"1205\":2,\"1206\":1,\"1207\":1,\"1208\":1,\"1209\":1,\"1210\":1,\"1211\":2,\"1212\":1,\"1213\":1,\"1214\":1,\"1215\":1,\"1216\":1,\"1370\":1,\"1371\":1,\"1372\":2,\"1373\":1,\"1374\":1,\"1375\":1,\"1376\":1,\"1377\":2,\"1378\":1,\"1379\":1,\"1380\":1,\"1381\":1,\"1382\":1,\"1383\":2,\"1384\":1,\"1385\":1,\"1386\":1,\"1387\":1,\"1388\":1,\"1547\":1,\"1548\":1,\"1549\":2,\"1550\":1,\"1551\":1,\"1552\":1,\"1553\":1,\"1554\":2,\"1555\":1,\"1556\":1,\"1557\":1,\"1558\":1,\"1559\":1,\"1560\":2,\"1561\":1,\"1562\":1,\"1563\":1,\"1564\":1,\"1565\":1,\"1724\":1,\"1725\":1,\"1726\":2,\"1727\":1,\"1728\":1,\"1729\":1,\"1730\":1,\"1731\":2,\"1732\":1,\"1733\":1,\"1734\":1,\"1735\":1,\"1736\":1,\"1737\":2,\"1738\":1,\"1739\":1,\"1740\":1,\"1741\":1,\"1742\":1,\"1901\":1,\"1902\":1,\"1903\":2,\"1904\":1,\"1905\":1,\"1906\":1,\"1907\":1,\"1908\":2,\"1909\":1,\"1910\":1,\"1911\":1,\"1912\":1,\"1913\":1,\"1914\":2,\"1915\":1,\"1916\":1,\"1917\":1,\"1918\":1,\"1919\":1,\"2078\":1,\"2079\":1,\"2080\":2,\"2081\":1,\"2082\":1,\"2083\":1,\"2084\":1,\"2085\":2,\"2086\":1,\"2087\":1,\"2088\":1,\"2089\":1,\"2090\":1,\"2091\":2,\"2092\":1,\"2093\":1,\"2094\":1,\"2095\":1,\"2096\":1,\"2268\":1,\"2269\":1,\"2270\":2,\"2271\":1,\"2272\":1,\"2273\":1,\"2274\":1,\"2275\":2,\"2276\":1,\"2277\":1,\"2278\":1,\"2279\":1,\"2280\":1,\"2281\":2,\"2282\":1,\"2283\":1,\"2284\":1,\"2285\":1,\"2286\":1,\"2487\":1,\"2488\":1,\"2489\":2,\"2490\":1,\"2491\":1,\"2492\":1,\"2493\":1,\"2494\":2,\"2495\":1,\"2496\":1,\"2497\":1,\"2498\":1,\"2499\":1,\"2500\":2,\"2501\":1,\"2502\":1,\"2503\":1,\"2504\":1,\"2505\":1,\"2706\":1,\"2707\":1,\"2708\":2,\"2709\":1,\"2710\":1,\"2711\":1,\"2712\":1,\"2713\":2,\"2714\":1,\"2715\":1,\"2716\":1,\"2717\":1,\"2718\":1,\"2719\":2,\"2720\":1,\"2721\":1,\"2722\":1,\"2723\":1,\"2724\":1},\"1\":{\"37\":1,\"67\":1,\"69\":1,\"208\":2,\"209\":4,\"210\":2,\"211\":2,\"212\":1,\"213\":2,\"214\":2,\"215\":3,\"216\":1,\"217\":2,\"218\":1,\"219\":2,\"220\":1,\"221\":2,\"222\":2,\"223\":2,\"224\":2,\"225\":2,\"226\":1,\"424\":1,\"453\":1,\"454\":1,\"476\":1,\"477\":1,\"502\":1,\"503\":1,\"529\":1,\"559\":1,\"589\":1,\"635\":1,\"681\":1,\"727\":1,\"773\":1,\"801\":2,\"806\":2,\"865\":2,\"866\":4,\"867\":2,\"868\":2,\"869\":1,\"870\":2,\"871\":2,\"872\":3,\"873\":1,\"874\":2,\"875\":1,\"876\":2,\"877\":1,\"878\":2,\"879\":2,\"880\":2,\"881\":2,\"882\":2,\"883\":1,\"928\":2,\"933\":2,\"1047\":2,\"1048\":4,\"1049\":2,\"1050\":2,\"1051\":1,\"1052\":2,\"1053\":2,\"1054\":3,\"1055\":1,\"1056\":2,\"1057\":1,\"1058\":2,\"1059\":1,\"1060\":2,\"1061\":2,\"1062\":2,\"1063\":2,\"1064\":2,\"1065\":1,\"1198\":2,\"1199\":4,\"1200\":2,\"1201\":2,\"1202\":1,\"1203\":2,\"1204\":2,\"1205\":3,\"1206\":1,\"1207\":2,\"1208\":1,\"1209\":2,\"1210\":1,\"1211\":2,\"1212\":2,\"1213\":2,\"1214\":2,\"1215\":2,\"1216\":1,\"1232\":2,\"1237\":2,\"1370\":2,\"1371\":4,\"1372\":2,\"1373\":2,\"1374\":1,\"1375\":2,\"1376\":2,\"1377\":3,\"1378\":1,\"1379\":2,\"1380\":1,\"1381\":2,\"1382\":1,\"1383\":2,\"1384\":2,\"1385\":2,\"1386\":2,\"1387\":2,\"1388\":1,\"1408\":2,\"1413\":2,\"1547\":2,\"1548\":4,\"1549\":2,\"1550\":2,\"1551\":1,\"1552\":2,\"1553\":2,\"1554\":3,\"1555\":1,\"1556\":2,\"1557\":1,\"1558\":2,\"1559\":1,\"1560\":2,\"1561\":2,\"1562\":2,\"1563\":2,\"1564\":2,\"1565\":1,\"1585\":2,\"1590\":2,\"1724\":2,\"1725\":4,\"1726\":2,\"1727\":2,\"1728\":1,\"1729\":2,\"1730\":2,\"1731\":3,\"1732\":1,\"1733\":2,\"1734\":1,\"1735\":2,\"1736\":1,\"1737\":2,\"1738\":2,\"1739\":2,\"1740\":2,\"1741\":2,\"1742\":1,\"1762\":2,\"1767\":2,\"1901\":2,\"1902\":4,\"1903\":2,\"1904\":2,\"1905\":1,\"1906\":2,\"1907\":2,\"1908\":3,\"1909\":1,\"1910\":2,\"1911\":1,\"1912\":2,\"1913\":1,\"1914\":2,\"1915\":2,\"1916\":2,\"1917\":2,\"1918\":2,\"1919\":1,\"1939\":2,\"1944\":2,\"2078\":2,\"2079\":4,\"2080\":2,\"2081\":2,\"2082\":1,\"2083\":2,\"2084\":2,\"2085\":3,\"2086\":1,\"2087\":2,\"2088\":1,\"2089\":2,\"2090\":1,\"2091\":2,\"2092\":2,\"2093\":2,\"2094\":2,\"2095\":2,\"2096\":1,\"2116\":2,\"2121\":2,\"2204\":2,\"2209\":2,\"2268\":2,\"2269\":4,\"2270\":2,\"2271\":2,\"2272\":1,\"2273\":2,\"2274\":2,\"2275\":3,\"2276\":1,\"2277\":2,\"2278\":1,\"2279\":2,\"2280\":1,\"2281\":2,\"2282\":2,\"2283\":2,\"2284\":2,\"2285\":2,\"2286\":1,\"2331\":2,\"2336\":2,\"2423\":2,\"2428\":2,\"2487\":2,\"2488\":4,\"2489\":2,\"2490\":2,\"2491\":1,\"2492\":2,\"2493\":2,\"2494\":3,\"2495\":1,\"2496\":2,\"2497\":1,\"2498\":2,\"2499\":1,\"2500\":2,\"2501\":2,\"2502\":2,\"2503\":2,\"2504\":2,\"2505\":1,\"2550\":2,\"2555\":2,\"2642\":2,\"2647\":2,\"2706\":2,\"2707\":4,\"2708\":2,\"2709\":2,\"2710\":1,\"2711\":2,\"2712\":2,\"2713\":3,\"2714\":1,\"2715\":2,\"2716\":1,\"2717\":2,\"2718\":1,\"2719\":2,\"2720\":2,\"2721\":2,\"2722\":2,\"2723\":2,\"2724\":1,\"2769\":2,\"2774\":2}}],[\"mails\",{\"1\":{\"37\":1,\"40\":1,\"213\":1,\"214\":1,\"218\":1,\"220\":1,\"870\":1,\"871\":1,\"875\":1,\"877\":1,\"1052\":1,\"1053\":1,\"1057\":1,\"1059\":1,\"1203\":1,\"1204\":1,\"1208\":1,\"1210\":1,\"1375\":1,\"1376\":1,\"1380\":1,\"1382\":1,\"1552\":1,\"1553\":1,\"1557\":1,\"1559\":1,\"1729\":1,\"1730\":1,\"1734\":1,\"1736\":1,\"1906\":1,\"1907\":1,\"1911\":1,\"1913\":1,\"2083\":1,\"2084\":1,\"2088\":1,\"2090\":1,\"2273\":1,\"2274\":1,\"2278\":1,\"2280\":1,\"2492\":1,\"2493\":1,\"2497\":1,\"2499\":1,\"2711\":1,\"2712\":1,\"2716\":1,\"2718\":1}}],[\"may\",{\"0\":{\"111\":1},\"1\":{\"1\":1,\"91\":1,\"182\":1,\"377\":1,\"409\":1,\"620\":1,\"666\":1,\"712\":1,\"758\":1,\"843\":1,\"844\":1,\"847\":1,\"848\":1,\"849\":1,\"953\":1,\"954\":1,\"955\":1,\"1030\":1,\"1181\":1,\"1353\":1,\"1354\":1,\"1530\":1,\"1531\":1,\"1707\":1,\"1708\":1,\"1884\":1,\"1885\":1,\"2061\":1,\"2062\":1,\"2246\":1,\"2247\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2465\":1,\"2466\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2684\":1,\"2685\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2794\":1,\"2795\":1,\"2796\":1}}],[\"mention\",{\"1\":{\"410\":1,\"621\":1,\"667\":1,\"713\":1,\"759\":1}}],[\"mentioned\",{\"1\":{\"85\":1,\"93\":1}}],[\"meta>\",{\"1\":{\"344\":1}}],[\"metadata\",{\"1\":{\"344\":1}}],[\"meta\",{\"1\":{\"148\":1,\"149\":1,\"328\":1,\"344\":1}}],[\"metaphor\",{\"1\":{\"84\":1}}],[\"methods\",{\"1\":{\"143\":1,\"145\":1,\"146\":1,\"329\":1,\"344\":1}}],[\"method\",{\"1\":{\"143\":4,\"144\":2,\"145\":2,\"146\":1,\"148\":1,\"149\":1,\"150\":4,\"155\":27,\"156\":3,\"331\":1,\"334\":1,\"338\":2,\"348\":1,\"363\":1,\"369\":1,\"373\":1,\"389\":1,\"411\":2,\"622\":2,\"668\":2,\"714\":2,\"760\":2}}],[\"meets\",{\"1\":{\"105\":1}}],[\"meeting\",{\"1\":{\"14\":1}}],[\"messaging\",{\"1\":{\"343\":1}}],[\"messagename\",{\"1\":{\"360\":1,\"386\":1}}],[\"messages\",{\"0\":{\"377\":1},\"1\":{\"102\":1,\"126\":1,\"180\":1,\"181\":1,\"213\":1,\"845\":1,\"846\":1,\"870\":1,\"1028\":1,\"1029\":1,\"1052\":1,\"1179\":1,\"1180\":1,\"1203\":1,\"1351\":1,\"1352\":1,\"1375\":1,\"1528\":1,\"1529\":1,\"1552\":1,\"1705\":1,\"1706\":1,\"1729\":1,\"1882\":1,\"1883\":1,\"1906\":1,\"2059\":1,\"2060\":1,\"2083\":1,\"2248\":1,\"2249\":1,\"2273\":1,\"2467\":1,\"2468\":1,\"2492\":1,\"2686\":1,\"2687\":1,\"2711\":1}}],[\"messageevents\",{\"1\":{\"93\":1}}],[\"message\",{\"0\":{\"180\":1,\"181\":1,\"182\":1,\"319\":1,\"349\":1,\"350\":1,\"352\":1,\"355\":1,\"381\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"953\":1,\"954\":1,\"955\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2794\":1,\"2795\":1,\"2796\":1},\"1\":{\"93\":6,\"102\":3,\"103\":3,\"180\":1,\"181\":1,\"182\":1,\"286\":1,\"297\":1,\"300\":2,\"303\":2,\"306\":2,\"309\":2,\"312\":2,\"319\":1,\"321\":2,\"328\":1,\"330\":1,\"331\":2,\"334\":5,\"343\":5,\"345\":2,\"348\":5,\"350\":2,\"352\":8,\"355\":4,\"359\":2,\"360\":10,\"363\":2,\"375\":3,\"377\":4,\"379\":3,\"381\":4,\"385\":2,\"386\":7,\"389\":7,\"439\":1,\"445\":2,\"465\":1,\"488\":1,\"494\":2,\"514\":1,\"520\":2,\"544\":1,\"550\":2,\"574\":1,\"580\":2,\"604\":1,\"610\":2,\"650\":1,\"656\":2,\"696\":1,\"702\":2,\"742\":1,\"748\":2,\"788\":1,\"794\":2,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"953\":1,\"954\":1,\"955\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2794\":1,\"2795\":1,\"2796\":1}}],[\"mesh\",{\"1\":{\"87\":2}}],[\"meantime\",{\"1\":{\"418\":1,\"419\":1,\"448\":1,\"449\":1,\"471\":1,\"472\":1,\"497\":1,\"498\":1,\"523\":1,\"524\":1,\"553\":1,\"554\":1,\"583\":1,\"584\":1,\"629\":1,\"630\":1,\"675\":1,\"676\":1,\"721\":1,\"722\":1,\"767\":1,\"768\":1}}],[\"meaningful\",{\"1\":{\"414\":1,\"625\":1,\"671\":1,\"717\":1,\"763\":1}}],[\"meaning\",{\"1\":{\"343\":1}}],[\"means\",{\"1\":{\"85\":1,\"91\":1,\"93\":1,\"98\":1,\"105\":1,\"150\":1,\"205\":1,\"230\":1,\"862\":1,\"888\":1,\"892\":1,\"1044\":1,\"1067\":1,\"1195\":1,\"1218\":1,\"1367\":1,\"1393\":1,\"1397\":1,\"1544\":1,\"1570\":1,\"1574\":1,\"1721\":1,\"1747\":1,\"1751\":1,\"1898\":1,\"1924\":1,\"1928\":1,\"2075\":1,\"2101\":1,\"2105\":1,\"2265\":1,\"2291\":1,\"2295\":1,\"2484\":1,\"2510\":1,\"2514\":1,\"2703\":1,\"2729\":1,\"2733\":1}}],[\"measurereport\",{\"1\":{\"93\":1}}],[\"measure\",{\"1\":{\"93\":1}}],[\"mechanism\",{\"1\":{\"86\":1,\"328\":1}}],[\"mechanisms\",{\"1\":{\"33\":1}}],[\"members\",{\"1\":{\"112\":1,\"114\":1,\"155\":1,\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"member\",{\"1\":{\"81\":1,\"155\":3,\"276\":1,\"287\":1,\"342\":1,\"410\":1,\"456\":1,\"479\":1,\"505\":1,\"621\":1,\"667\":1,\"713\":1,\"759\":1}}],[\"memorial\",{\"1\":{\"1\":2}}],[\"melden\",{\"1\":{\"22\":1}}],[\"medics\",{\"0\":{\"133\":1}}],[\"medic\",{\"1\":{\"74\":1}}],[\"medicine\",{\"0\":{\"125\":1},\"1\":{\"26\":1,\"73\":2,\"75\":1,\"77\":1,\"120\":1,\"125\":1,\"401\":1,\"612\":1,\"658\":1,\"704\":1,\"750\":1}}],[\"medical\",{\"0\":{\"74\":1,\"77\":1},\"1\":{\"0\":1,\"1\":2,\"6\":1,\"26\":1,\"29\":1,\"74\":3,\"75\":1,\"77\":1,\"78\":2,\"85\":1,\"86\":2,\"87\":1,\"90\":1,\"94\":5,\"95\":1,\"112\":1,\"113\":2,\"114\":1,\"116\":1,\"123\":3,\"165\":1,\"170\":1,\"228\":1,\"234\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"medizininformatik\",{\"1\":{\"17\":1,\"22\":1,\"112\":1,\"429\":1,\"533\":2,\"563\":2,\"593\":3,\"639\":3,\"685\":3,\"731\":4,\"778\":1}}],[\"merging\",{\"1\":{\"6\":1,\"123\":1}}],[\"merged\",{\"1\":{\"153\":3,\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"merge\",{\"1\":{\"0\":1,\"94\":1,\"137\":3,\"153\":1,\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"migration\",{\"1\":{\"832\":2,\"942\":2,\"1017\":2,\"1108\":2,\"1168\":2,\"1246\":2,\"1340\":2,\"1422\":2,\"1517\":2,\"1599\":2,\"1694\":2,\"1776\":2,\"1871\":2,\"1953\":2,\"2048\":2,\"2130\":2,\"2235\":2,\"2345\":2,\"2454\":2,\"2564\":2,\"2673\":2,\"2783\":2}}],[\"migrations\",{\"1\":{\"171\":1,\"172\":1,\"247\":1,\"248\":1,\"834\":1,\"835\":1,\"944\":1,\"945\":1,\"1019\":1,\"1020\":1,\"1110\":1,\"1111\":1,\"1170\":1,\"1171\":1,\"1248\":1,\"1249\":1,\"1342\":1,\"1343\":1,\"1424\":1,\"1425\":1,\"1519\":1,\"1520\":1,\"1601\":1,\"1602\":1,\"1696\":1,\"1697\":1,\"1778\":1,\"1779\":1,\"1873\":1,\"1874\":1,\"1955\":1,\"1956\":1,\"2050\":1,\"2051\":1,\"2132\":1,\"2133\":1,\"2237\":1,\"2238\":1,\"2347\":1,\"2348\":1,\"2456\":1,\"2457\":1,\"2566\":1,\"2567\":1,\"2675\":1,\"2676\":1,\"2785\":1,\"2786\":1}}],[\"migrate\",{\"1\":{\"443\":1,\"492\":1,\"518\":1,\"548\":2,\"578\":1,\"608\":1,\"654\":1,\"700\":1,\"746\":1,\"792\":1}}],[\"might\",{\"1\":{\"279\":1,\"290\":1,\"409\":1,\"620\":1,\"666\":1,\"712\":1,\"758\":1}}],[\"minor\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"minutes\",{\"1\":{\"386\":1,\"389\":1,\"833\":2,\"943\":2,\"1018\":2,\"1109\":2,\"1169\":2,\"1247\":2,\"1341\":2,\"1423\":2,\"1518\":2,\"1600\":2,\"1695\":2,\"1777\":2,\"1872\":2,\"1954\":2,\"2049\":2,\"2131\":2,\"2236\":2,\"2346\":2,\"2455\":2,\"2565\":2,\"2674\":2,\"2784\":2}}],[\"minimal\",{\"1\":{\"798\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"minimum\",{\"1\":{\"315\":1,\"337\":1,\"390\":1,\"399\":1}}],[\"ministry\",{\"1\":{\"0\":1,\"6\":1,\"94\":2,\"112\":1,\"122\":1}}],[\"min\",{\"1\":{\"278\":2,\"285\":3,\"286\":3,\"289\":2,\"296\":3,\"297\":3,\"432\":2,\"438\":3,\"439\":3,\"458\":2,\"464\":3,\"465\":3,\"481\":2,\"487\":3,\"488\":3,\"507\":2,\"513\":3,\"514\":3,\"537\":2,\"543\":3,\"544\":3,\"567\":2,\"573\":3,\"574\":3,\"597\":2,\"603\":3,\"604\":3,\"643\":2,\"649\":3,\"650\":3,\"689\":2,\"695\":3,\"696\":3,\"735\":2,\"741\":3,\"742\":3,\"781\":2,\"787\":3,\"788\":3}}],[\"mimie\",{\"1\":{\"221\":1,\"878\":1,\"1060\":1,\"1211\":1,\"1383\":1,\"1560\":1,\"1737\":1,\"1914\":1,\"2091\":1,\"2281\":1,\"2500\":1,\"2719\":1}}],[\"mime\",{\"1\":{\"37\":1,\"40\":1,\"220\":2,\"285\":1,\"296\":1,\"464\":1,\"877\":2,\"1059\":2,\"1210\":2,\"1382\":2,\"1559\":2,\"1736\":2,\"1913\":2,\"2090\":2,\"2280\":2,\"2499\":2,\"2718\":2}}],[\"milliseconds\",{\"1\":{\"189\":1,\"190\":1,\"198\":1,\"199\":1,\"206\":1,\"231\":1,\"243\":1,\"244\":1,\"820\":1,\"821\":1,\"853\":1,\"854\":1,\"856\":1,\"857\":1,\"863\":1,\"889\":1,\"938\":1,\"939\":1,\"980\":1,\"981\":1,\"1034\":1,\"1035\":1,\"1037\":1,\"1038\":1,\"1045\":1,\"1068\":1,\"1088\":1,\"1089\":1,\"1104\":1,\"1105\":1,\"1156\":1,\"1157\":1,\"1185\":1,\"1186\":1,\"1188\":1,\"1189\":1,\"1196\":1,\"1219\":1,\"1242\":1,\"1243\":1,\"1280\":1,\"1281\":1,\"1328\":1,\"1329\":1,\"1358\":1,\"1359\":1,\"1361\":1,\"1362\":1,\"1368\":1,\"1394\":1,\"1418\":1,\"1419\":1,\"1456\":1,\"1457\":1,\"1505\":1,\"1506\":1,\"1535\":1,\"1536\":1,\"1538\":1,\"1539\":1,\"1545\":1,\"1571\":1,\"1595\":1,\"1596\":1,\"1633\":1,\"1634\":1,\"1682\":1,\"1683\":1,\"1712\":1,\"1713\":1,\"1715\":1,\"1716\":1,\"1722\":1,\"1748\":1,\"1772\":1,\"1773\":1,\"1810\":1,\"1811\":1,\"1859\":1,\"1860\":1,\"1889\":1,\"1890\":1,\"1892\":1,\"1893\":1,\"1899\":1,\"1925\":1,\"1949\":1,\"1950\":1,\"1987\":1,\"1988\":1,\"2036\":1,\"2037\":1,\"2066\":1,\"2067\":1,\"2069\":1,\"2070\":1,\"2076\":1,\"2102\":1,\"2126\":1,\"2127\":1,\"2164\":1,\"2165\":1,\"2223\":1,\"2224\":1,\"2256\":1,\"2257\":1,\"2259\":1,\"2260\":1,\"2266\":1,\"2292\":1,\"2341\":1,\"2342\":1,\"2383\":1,\"2384\":1,\"2442\":1,\"2443\":1,\"2475\":1,\"2476\":1,\"2478\":1,\"2479\":1,\"2485\":1,\"2511\":1,\"2560\":1,\"2561\":1,\"2602\":1,\"2603\":1,\"2661\":1,\"2662\":1,\"2694\":1,\"2695\":1,\"2697\":1,\"2698\":1,\"2704\":1,\"2730\":1,\"2779\":1,\"2780\":1,\"2821\":1,\"2822\":1}}],[\"million\",{\"1\":{\"122\":2}}],[\"missing\",{\"0\":{\"377\":1},\"1\":{\"155\":1}}],[\"mii\",{\"0\":{\"533\":1,\"563\":1,\"593\":1,\"639\":1,\"685\":1,\"731\":1},\"1\":{\"14\":2,\"16\":2,\"17\":1,\"20\":4,\"22\":1,\"69\":1,\"77\":3,\"112\":1,\"113\":1,\"116\":1,\"415\":2,\"425\":1,\"427\":4,\"429\":4,\"455\":1,\"456\":2,\"468\":1,\"478\":1,\"479\":2,\"491\":1,\"504\":1,\"505\":2,\"517\":1,\"530\":1,\"533\":1,\"560\":1,\"563\":1,\"590\":1,\"593\":3,\"626\":2,\"636\":1,\"639\":4,\"672\":2,\"682\":1,\"685\":4,\"718\":2,\"728\":1,\"731\":6,\"764\":2,\"774\":1,\"776\":4,\"778\":4}}],[\"mitigate\",{\"1\":{\"36\":1}}],[\"mit\",{\"1\":{\"14\":2,\"16\":1,\"17\":1}}],[\"mie\",{\"0\":{\"111\":1},\"1\":{\"1\":2}}],[\"middleware\",{\"1\":{\"0\":1,\"5\":1,\"6\":1,\"94\":1,\"98\":1,\"124\":2}}],[\"rfc\",{\"1\":{\"801\":1,\"928\":1,\"1232\":1,\"1408\":1,\"1585\":1,\"1762\":1,\"1939\":1,\"2116\":1,\"2204\":1,\"2331\":1,\"2423\":1,\"2550\":1,\"2642\":1,\"2769\":1}}],[\"rp\",{\"1\":{\"299\":1,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"444\":1,\"445\":1,\"493\":1,\"494\":1,\"519\":1,\"520\":1,\"549\":1,\"550\":1,\"579\":1,\"580\":1,\"609\":1,\"610\":1,\"655\":1,\"656\":1,\"701\":1,\"702\":1,\"747\":1,\"748\":1,\"793\":1,\"794\":1}}],[\"rsa\",{\"1\":{\"286\":1,\"297\":1}}],[\"rbrace\",{\"1\":{\"156\":1}}],[\"rc\",{\"1\":{\"138\":4}}],[\"rm\",{\"1\":{\"132\":1,\"286\":1,\"297\":1,\"439\":1,\"465\":1,\"488\":1,\"514\":1,\"544\":1,\"574\":1,\"604\":1,\"650\":1,\"696\":1,\"742\":1,\"788\":1}}],[\"rdp\",{\"1\":{\"125\":1,\"427\":1,\"534\":1,\"564\":1,\"594\":1,\"640\":1,\"686\":1,\"732\":1,\"776\":1}}],[\"random\",{\"1\":{\"285\":3,\"286\":3,\"296\":3,\"297\":3,\"438\":3,\"439\":3,\"440\":2,\"464\":3,\"465\":3,\"466\":2,\"487\":3,\"488\":3,\"489\":2,\"513\":3,\"514\":3,\"515\":2,\"543\":3,\"544\":3,\"545\":2,\"573\":3,\"574\":3,\"575\":2,\"603\":3,\"604\":3,\"605\":2,\"649\":3,\"650\":3,\"651\":2,\"695\":3,\"696\":3,\"697\":2,\"741\":3,\"742\":3,\"743\":2,\"787\":3,\"788\":3,\"789\":2}}],[\"range\",{\"1\":{\"9\":1}}],[\"ram\",{\"1\":{\"278\":2,\"289\":2,\"315\":1,\"390\":1,\"399\":1,\"432\":2,\"458\":2,\"481\":2,\"507\":2,\"537\":2,\"567\":2,\"597\":2,\"643\":2,\"689\":2,\"735\":2,\"781\":2}}],[\"ramp\",{\"1\":{\"153\":1}}],[\"rarely\",{\"1\":{\"123\":1}}],[\"rule\",{\"1\":{\"355\":2,\"356\":2,\"381\":2,\"382\":2,\"798\":2,\"800\":1,\"925\":2,\"927\":1,\"1231\":1,\"1407\":1,\"1584\":1,\"1761\":1,\"1938\":1,\"2115\":1,\"2201\":2,\"2203\":1,\"2328\":2,\"2330\":1,\"2420\":2,\"2422\":1,\"2547\":2,\"2549\":1,\"2639\":2,\"2641\":1,\"2766\":2,\"2768\":1}}],[\"ruleset\",{\"1\":{\"405\":1,\"616\":1,\"662\":1,\"708\":1,\"754\":1}}],[\"rules\",{\"1\":{\"91\":1,\"344\":3,\"354\":2,\"380\":2}}],[\"run\",{\"1\":{\"95\":1,\"106\":2,\"132\":2,\"137\":2,\"138\":2,\"161\":2,\"165\":1,\"171\":1,\"175\":1,\"178\":1,\"183\":1,\"184\":1,\"185\":1,\"201\":1,\"208\":1,\"209\":1,\"210\":1,\"220\":1,\"221\":1,\"224\":1,\"237\":1,\"238\":1,\"239\":1,\"245\":1,\"247\":1,\"251\":1,\"253\":1,\"271\":1,\"272\":1,\"273\":1,\"274\":1,\"275\":1,\"285\":1,\"286\":2,\"296\":1,\"297\":2,\"323\":43,\"395\":1,\"399\":1,\"408\":1,\"438\":1,\"439\":2,\"464\":1,\"465\":2,\"487\":1,\"488\":2,\"513\":1,\"514\":2,\"543\":1,\"544\":2,\"573\":1,\"574\":2,\"603\":1,\"604\":2,\"619\":1,\"649\":1,\"650\":2,\"665\":1,\"695\":1,\"696\":2,\"711\":1,\"741\":1,\"742\":2,\"757\":1,\"787\":1,\"788\":2,\"817\":1,\"818\":1,\"819\":1,\"822\":1,\"824\":1,\"834\":1,\"838\":1,\"841\":1,\"850\":1,\"851\":1,\"852\":1,\"859\":1,\"865\":1,\"866\":1,\"867\":1,\"877\":1,\"878\":1,\"881\":1,\"905\":1,\"916\":1,\"917\":1,\"918\":1,\"919\":1,\"920\":1,\"935\":1,\"936\":1,\"937\":1,\"940\":1,\"944\":1,\"948\":1,\"950\":1,\"977\":1,\"978\":1,\"979\":1,\"982\":1,\"984\":1,\"997\":1,\"1008\":1,\"1009\":1,\"1010\":1,\"1011\":1,\"1012\":1,\"1019\":1,\"1023\":1,\"1026\":1,\"1031\":1,\"1032\":1,\"1033\":1,\"1040\":1,\"1047\":1,\"1048\":1,\"1049\":1,\"1059\":1,\"1060\":1,\"1063\":1,\"1085\":1,\"1086\":1,\"1087\":1,\"1090\":1,\"1092\":1,\"1101\":1,\"1102\":1,\"1103\":1,\"1106\":1,\"1110\":1,\"1114\":1,\"1116\":1,\"1136\":1,\"1137\":1,\"1138\":1,\"1139\":1,\"1140\":1,\"1153\":1,\"1154\":1,\"1155\":1,\"1158\":1,\"1160\":1,\"1170\":1,\"1174\":1,\"1177\":1,\"1182\":1,\"1183\":1,\"1184\":1,\"1191\":1,\"1198\":1,\"1199\":1,\"1200\":1,\"1210\":1,\"1211\":1,\"1214\":1,\"1239\":1,\"1240\":1,\"1241\":1,\"1244\":1,\"1248\":1,\"1252\":1,\"1254\":1,\"1277\":1,\"1278\":1,\"1279\":1,\"1282\":1,\"1284\":1,\"1297\":1,\"1307\":1,\"1308\":1,\"1309\":1,\"1310\":1,\"1311\":1,\"1325\":1,\"1326\":1,\"1327\":1,\"1330\":1,\"1332\":1,\"1342\":1,\"1346\":1,\"1349\":1,\"1355\":1,\"1356\":1,\"1357\":1,\"1364\":1,\"1370\":1,\"1371\":1,\"1372\":1,\"1382\":1,\"1383\":1,\"1386\":1,\"1415\":1,\"1416\":1,\"1417\":1,\"1420\":1,\"1424\":1,\"1428\":1,\"1430\":1,\"1453\":1,\"1454\":1,\"1455\":1,\"1458\":1,\"1460\":1,\"1473\":1,\"1484\":1,\"1485\":1,\"1486\":1,\"1487\":1,\"1488\":1,\"1502\":1,\"1503\":1,\"1504\":1,\"1507\":1,\"1509\":1,\"1519\":1,\"1523\":1,\"1526\":1,\"1532\":1,\"1533\":1,\"1534\":1,\"1541\":1,\"1547\":1,\"1548\":1,\"1549\":1,\"1559\":1,\"1560\":1,\"1563\":1,\"1592\":1,\"1593\":1,\"1594\":1,\"1597\":1,\"1601\":1,\"1605\":1,\"1607\":1,\"1630\":1,\"1631\":1,\"1632\":1,\"1635\":1,\"1637\":1,\"1650\":1,\"1661\":1,\"1662\":1,\"1663\":1,\"1664\":1,\"1665\":1,\"1679\":1,\"1680\":1,\"1681\":1,\"1684\":1,\"1686\":1,\"1696\":1,\"1700\":1,\"1703\":1,\"1709\":1,\"1710\":1,\"1711\":1,\"1718\":1,\"1724\":1,\"1725\":1,\"1726\":1,\"1736\":1,\"1737\":1,\"1740\":1,\"1769\":1,\"1770\":1,\"1771\":1,\"1774\":1,\"1778\":1,\"1782\":1,\"1784\":1,\"1807\":1,\"1808\":1,\"1809\":1,\"1812\":1,\"1814\":1,\"1827\":1,\"1838\":1,\"1839\":1,\"1840\":1,\"1841\":1,\"1842\":1,\"1856\":1,\"1857\":1,\"1858\":1,\"1861\":1,\"1863\":1,\"1873\":1,\"1877\":1,\"1880\":1,\"1886\":1,\"1887\":1,\"1888\":1,\"1895\":1,\"1901\":1,\"1902\":1,\"1903\":1,\"1913\":1,\"1914\":1,\"1917\":1,\"1946\":1,\"1947\":1,\"1948\":1,\"1951\":1,\"1955\":1,\"1959\":1,\"1961\":1,\"1984\":1,\"1985\":1,\"1986\":1,\"1989\":1,\"1991\":1,\"2004\":1,\"2015\":1,\"2016\":1,\"2017\":1,\"2018\":1,\"2019\":1,\"2033\":1,\"2034\":1,\"2035\":1,\"2038\":1,\"2040\":1,\"2050\":1,\"2054\":1,\"2057\":1,\"2063\":1,\"2064\":1,\"2065\":1,\"2072\":1,\"2078\":1,\"2079\":1,\"2080\":1,\"2090\":1,\"2091\":1,\"2094\":1,\"2123\":1,\"2124\":1,\"2125\":1,\"2128\":1,\"2132\":1,\"2136\":1,\"2138\":1,\"2161\":1,\"2162\":1,\"2163\":1,\"2166\":1,\"2168\":1,\"2181\":1,\"2192\":1,\"2193\":1,\"2194\":1,\"2195\":1,\"2196\":1,\"2220\":1,\"2221\":1,\"2222\":1,\"2225\":1,\"2227\":1,\"2237\":1,\"2241\":1,\"2244\":1,\"2253\":1,\"2254\":1,\"2255\":1,\"2262\":1,\"2268\":1,\"2269\":1,\"2270\":1,\"2280\":1,\"2281\":1,\"2284\":1,\"2308\":1,\"2319\":1,\"2320\":1,\"2321\":1,\"2322\":1,\"2323\":1,\"2338\":1,\"2339\":1,\"2340\":1,\"2343\":1,\"2347\":1,\"2351\":1,\"2353\":1,\"2380\":1,\"2381\":1,\"2382\":1,\"2385\":1,\"2387\":1,\"2400\":1,\"2411\":1,\"2412\":1,\"2413\":1,\"2414\":1,\"2415\":1,\"2439\":1,\"2440\":1,\"2441\":1,\"2444\":1,\"2446\":1,\"2456\":1,\"2460\":1,\"2463\":1,\"2472\":1,\"2473\":1,\"2474\":1,\"2481\":1,\"2487\":1,\"2488\":1,\"2489\":1,\"2499\":1,\"2500\":1,\"2503\":1,\"2527\":1,\"2538\":1,\"2539\":1,\"2540\":1,\"2541\":1,\"2542\":1,\"2557\":1,\"2558\":1,\"2559\":1,\"2562\":1,\"2566\":1,\"2570\":1,\"2572\":1,\"2599\":1,\"2600\":1,\"2601\":1,\"2604\":1,\"2606\":1,\"2619\":1,\"2630\":1,\"2631\":1,\"2632\":1,\"2633\":1,\"2634\":1,\"2658\":1,\"2659\":1,\"2660\":1,\"2663\":1,\"2665\":1,\"2675\":1,\"2679\":1,\"2682\":1,\"2691\":1,\"2692\":1,\"2693\":1,\"2700\":1,\"2706\":1,\"2707\":1,\"2708\":1,\"2718\":1,\"2719\":1,\"2722\":1,\"2746\":1,\"2757\":1,\"2758\":1,\"2759\":1,\"2760\":1,\"2761\":1,\"2776\":1,\"2777\":1,\"2778\":1,\"2781\":1,\"2785\":1,\"2789\":1,\"2791\":1,\"2818\":1,\"2819\":1,\"2820\":1,\"2823\":1,\"2825\":1,\"2838\":1,\"2849\":1,\"2850\":1,\"2851\":1,\"2852\":1,\"2853\":1}}],[\"running\",{\"1\":{\"33\":1,\"133\":2,\"300\":2,\"303\":2,\"306\":2,\"309\":2,\"312\":2,\"342\":1,\"406\":1,\"445\":2,\"494\":2,\"520\":2,\"550\":2,\"580\":2,\"610\":2,\"617\":1,\"656\":2,\"663\":1,\"702\":2,\"709\":1,\"748\":2,\"755\":1,\"794\":2}}],[\"runs\",{\"1\":{\"0\":1,\"32\":1,\"84\":1}}],[\"right\",{\"1\":{\"87\":2}}],[\"risks\",{\"1\":{\"36\":1}}],[\"r\",{\"1\":{\"26\":6,\"314\":1}}],[\"root\",{\"1\":{\"130\":1,\"131\":1,\"155\":2,\"201\":1,\"224\":1,\"245\":1,\"273\":1,\"286\":1,\"297\":1,\"300\":3,\"303\":3,\"306\":1,\"334\":3,\"429\":2,\"778\":2,\"822\":1,\"824\":1,\"859\":1,\"881\":1,\"904\":2,\"905\":4,\"915\":1,\"918\":1,\"940\":1,\"982\":1,\"984\":1,\"996\":2,\"997\":4,\"1007\":1,\"1010\":1,\"1040\":1,\"1063\":1,\"1090\":1,\"1092\":1,\"1106\":1,\"1138\":1,\"1158\":1,\"1160\":1,\"1191\":1,\"1214\":1,\"1244\":1,\"1282\":1,\"1284\":1,\"1296\":2,\"1297\":4,\"1309\":1,\"1330\":1,\"1332\":1,\"1364\":1,\"1386\":1,\"1420\":1,\"1458\":1,\"1460\":1,\"1472\":2,\"1473\":4,\"1483\":1,\"1486\":1,\"1507\":1,\"1509\":1,\"1541\":1,\"1563\":1,\"1597\":1,\"1635\":1,\"1637\":1,\"1649\":2,\"1650\":4,\"1660\":1,\"1663\":1,\"1684\":1,\"1686\":1,\"1718\":1,\"1740\":1,\"1774\":1,\"1812\":1,\"1814\":1,\"1826\":2,\"1827\":4,\"1837\":1,\"1840\":1,\"1861\":1,\"1863\":1,\"1895\":1,\"1917\":1,\"1951\":1,\"1989\":1,\"1991\":1,\"2003\":2,\"2004\":4,\"2014\":1,\"2017\":1,\"2038\":1,\"2040\":1,\"2072\":1,\"2094\":1,\"2128\":1,\"2166\":1,\"2168\":1,\"2180\":2,\"2181\":4,\"2191\":1,\"2194\":1,\"2225\":1,\"2227\":1,\"2262\":1,\"2284\":1,\"2307\":2,\"2308\":4,\"2318\":1,\"2321\":1,\"2343\":1,\"2385\":1,\"2387\":1,\"2399\":2,\"2400\":4,\"2410\":1,\"2413\":1,\"2444\":1,\"2446\":1,\"2481\":1,\"2503\":1,\"2526\":2,\"2527\":4,\"2537\":1,\"2540\":1,\"2562\":1,\"2604\":1,\"2606\":1,\"2618\":2,\"2619\":4,\"2629\":1,\"2632\":1,\"2663\":1,\"2665\":1,\"2700\":1,\"2722\":1,\"2745\":2,\"2746\":4,\"2756\":1,\"2759\":1,\"2781\":1,\"2823\":1,\"2825\":1,\"2837\":2,\"2838\":4,\"2848\":1,\"2851\":1}}],[\"routing\",{\"1\":{\"96\":1,\"166\":1}}],[\"routine\",{\"1\":{\"0\":1,\"32\":1,\"94\":1,\"123\":1}}],[\"role|dsf\",{\"1\":{\"933\":2,\"1237\":2,\"1413\":2,\"1590\":2,\"1767\":2,\"1944\":2,\"2121\":2,\"2336\":2,\"2555\":2,\"2774\":2}}],[\"rolecreate\",{\"1\":{\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"roleconfig\",{\"0\":{\"894\":1,\"961\":1,\"1123\":1,\"1262\":1,\"1438\":1,\"1615\":1,\"1792\":1,\"1969\":1,\"2146\":1,\"2297\":1,\"2364\":1,\"2516\":1,\"2583\":1,\"2735\":1,\"2802\":1},\"1\":{\"438\":1,\"464\":2,\"487\":1,\"513\":1,\"519\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1,\"798\":3,\"806\":3,\"894\":1,\"925\":3,\"933\":3,\"961\":1,\"1123\":1,\"1229\":3,\"1237\":3,\"1262\":1,\"1405\":3,\"1413\":3,\"1438\":1,\"1582\":3,\"1590\":3,\"1615\":1,\"1759\":3,\"1767\":3,\"1792\":1,\"1936\":3,\"1944\":3,\"1969\":1,\"2113\":3,\"2121\":3,\"2146\":1,\"2201\":3,\"2209\":3,\"2297\":1,\"2328\":3,\"2336\":3,\"2364\":1,\"2420\":3,\"2428\":3,\"2516\":1,\"2547\":3,\"2555\":3,\"2583\":1,\"2639\":3,\"2647\":3,\"2735\":1,\"2766\":3,\"2774\":3,\"2802\":1}}],[\"role\",{\"0\":{\"802\":1,\"804\":1,\"805\":1,\"929\":1,\"931\":1,\"932\":1,\"1233\":1,\"1235\":1,\"1236\":1,\"1409\":1,\"1411\":1,\"1412\":1,\"1586\":1,\"1588\":1,\"1589\":1,\"1763\":1,\"1765\":1,\"1766\":1,\"1940\":1,\"1942\":1,\"1943\":1,\"2117\":1,\"2119\":1,\"2120\":1,\"2205\":1,\"2207\":1,\"2208\":1,\"2332\":1,\"2334\":1,\"2335\":1,\"2424\":1,\"2426\":1,\"2427\":1,\"2551\":1,\"2553\":1,\"2554\":1,\"2643\":1,\"2645\":1,\"2646\":1,\"2770\":1,\"2772\":1,\"2773\":1},\"1\":{\"344\":1,\"357\":10,\"358\":5,\"383\":10,\"384\":5,\"385\":10,\"414\":1,\"464\":1,\"519\":3,\"625\":1,\"671\":1,\"717\":1,\"763\":1,\"798\":3,\"799\":1,\"802\":3,\"804\":1,\"806\":8,\"894\":1,\"925\":3,\"926\":1,\"929\":3,\"931\":1,\"932\":2,\"933\":10,\"961\":1,\"1123\":1,\"1229\":3,\"1230\":1,\"1233\":3,\"1235\":1,\"1236\":2,\"1237\":10,\"1262\":1,\"1405\":3,\"1406\":1,\"1409\":3,\"1411\":1,\"1412\":2,\"1413\":10,\"1438\":1,\"1582\":3,\"1583\":1,\"1586\":3,\"1588\":1,\"1589\":2,\"1590\":10,\"1615\":1,\"1759\":3,\"1760\":1,\"1763\":3,\"1765\":1,\"1766\":2,\"1767\":10,\"1792\":1,\"1936\":3,\"1937\":1,\"1940\":3,\"1942\":1,\"1943\":2,\"1944\":10,\"1969\":1,\"2113\":3,\"2114\":1,\"2117\":3,\"2119\":1,\"2120\":2,\"2121\":10,\"2146\":1,\"2201\":3,\"2202\":1,\"2205\":3,\"2207\":1,\"2209\":8,\"2297\":1,\"2328\":3,\"2329\":1,\"2332\":3,\"2334\":1,\"2335\":2,\"2336\":10,\"2364\":1,\"2420\":3,\"2421\":1,\"2424\":3,\"2426\":1,\"2428\":8,\"2516\":1,\"2547\":3,\"2548\":1,\"2551\":3,\"2553\":1,\"2554\":2,\"2555\":10,\"2583\":1,\"2639\":3,\"2640\":1,\"2643\":3,\"2645\":1,\"2647\":8,\"2735\":1,\"2766\":3,\"2767\":1,\"2770\":3,\"2772\":1,\"2773\":2,\"2774\":10,\"2802\":1}}],[\"roles\",{\"0\":{\"803\":1,\"930\":1,\"1234\":1,\"1410\":1,\"1587\":1,\"1764\":1,\"1941\":1,\"2118\":1,\"2206\":1,\"2333\":1,\"2425\":1,\"2552\":1,\"2644\":1,\"2771\":1},\"1\":{\"81\":2,\"229\":1,\"395\":1,\"519\":1,\"798\":7,\"799\":1,\"800\":1,\"803\":1,\"804\":1,\"805\":1,\"887\":1,\"902\":1,\"925\":7,\"926\":1,\"927\":1,\"930\":1,\"931\":1,\"932\":1,\"993\":1,\"1066\":1,\"1217\":1,\"1229\":7,\"1230\":1,\"1231\":1,\"1234\":1,\"1235\":1,\"1236\":1,\"1262\":1,\"1293\":1,\"1392\":1,\"1405\":7,\"1406\":1,\"1407\":1,\"1410\":1,\"1411\":1,\"1412\":1,\"1469\":1,\"1569\":1,\"1582\":7,\"1583\":1,\"1584\":1,\"1587\":1,\"1588\":1,\"1589\":1,\"1646\":1,\"1746\":1,\"1759\":7,\"1760\":1,\"1761\":1,\"1764\":1,\"1765\":1,\"1766\":1,\"1823\":1,\"1923\":1,\"1936\":7,\"1937\":1,\"1938\":1,\"1941\":1,\"1942\":1,\"1943\":1,\"2000\":1,\"2100\":1,\"2113\":7,\"2114\":1,\"2115\":1,\"2118\":1,\"2119\":1,\"2120\":1,\"2177\":1,\"2201\":7,\"2202\":1,\"2203\":1,\"2206\":1,\"2207\":1,\"2208\":1,\"2290\":1,\"2305\":1,\"2328\":7,\"2329\":1,\"2330\":1,\"2333\":1,\"2334\":1,\"2335\":1,\"2396\":1,\"2420\":7,\"2421\":1,\"2422\":1,\"2425\":1,\"2426\":1,\"2427\":1,\"2509\":1,\"2524\":1,\"2547\":7,\"2548\":1,\"2549\":1,\"2552\":1,\"2553\":1,\"2554\":1,\"2615\":1,\"2639\":7,\"2640\":1,\"2641\":1,\"2644\":1,\"2645\":1,\"2646\":1,\"2728\":1,\"2743\":1,\"2766\":7,\"2767\":1,\"2768\":1,\"2771\":1,\"2772\":1,\"2773\":1,\"2834\":1}}],[\"rollout\",{\"1\":{\"77\":1}}],[\"rolf\",{\"1\":{\"1\":3}}],[\"robust\",{\"1\":{\"10\":1}}],[\"refine\",{\"1\":{\"415\":2,\"626\":2,\"672\":2,\"718\":2,\"764\":2}}],[\"reference\",{\"1\":{\"155\":10,\"415\":1,\"442\":2,\"547\":2,\"577\":2,\"607\":2,\"626\":1,\"653\":2,\"672\":1,\"699\":2,\"718\":1,\"745\":2,\"764\":1,\"791\":2}}],[\"referenceextractorimpl\",{\"1\":{\"144\":1}}],[\"referenceextractor\",{\"1\":{\"144\":1}}],[\"references\",{\"0\":{\"144\":1},\"1\":{\"91\":2,\"155\":1}}],[\"refer\",{\"1\":{\"91\":1,\"435\":1,\"461\":1,\"484\":1,\"510\":1,\"540\":1,\"570\":1,\"600\":1,\"646\":1,\"692\":1,\"738\":1,\"784\":1}}],[\"regardless\",{\"1\":{\"357\":2,\"358\":1,\"383\":2,\"384\":1}}],[\"registrations\",{\"1\":{\"142\":1}}],[\"registry\",{\"0\":{\"133\":1,\"157\":1},\"1\":{\"394\":1}}],[\"registered\",{\"1\":{\"410\":1,\"621\":1,\"667\":1,\"713\":1,\"759\":1}}],[\"register\",{\"1\":{\"122\":1,\"143\":1,\"145\":1,\"146\":1,\"331\":1}}],[\"reqiures\",{\"1\":{\"215\":1,\"225\":1,\"872\":1,\"882\":1,\"1054\":1,\"1064\":1,\"1205\":1,\"1215\":1,\"1377\":1,\"1387\":1,\"1554\":1,\"1564\":1,\"1731\":1,\"1741\":1,\"1908\":1,\"1918\":1,\"2085\":1,\"2095\":1,\"2275\":1,\"2285\":1,\"2494\":1,\"2504\":1,\"2713\":1,\"2723\":1}}],[\"req\",{\"1\":{\"166\":2}}],[\"require\",{\"1\":{\"307\":1,\"310\":1,\"348\":1,\"899\":1,\"921\":1,\"966\":1,\"1013\":1,\"1073\":1,\"1127\":1,\"1224\":1,\"1266\":1,\"1312\":1,\"1400\":1,\"1442\":1,\"1489\":1,\"1577\":1,\"1619\":1,\"1666\":1,\"1754\":1,\"1796\":1,\"1843\":1,\"1931\":1,\"1973\":1,\"2020\":1,\"2108\":1,\"2150\":1,\"2197\":1,\"2302\":1,\"2324\":1,\"2369\":1,\"2416\":1,\"2521\":1,\"2543\":1,\"2588\":1,\"2635\":1,\"2740\":1,\"2762\":1,\"2807\":1,\"2854\":1}}],[\"required\",{\"1\":{\"170\":1,\"171\":1,\"172\":1,\"173\":1,\"174\":1,\"175\":1,\"176\":1,\"177\":1,\"178\":1,\"179\":1,\"180\":1,\"181\":1,\"182\":1,\"183\":1,\"184\":1,\"185\":1,\"186\":1,\"187\":1,\"188\":1,\"189\":1,\"190\":1,\"191\":1,\"192\":1,\"193\":1,\"194\":1,\"195\":1,\"196\":1,\"197\":1,\"198\":1,\"199\":1,\"200\":1,\"201\":1,\"202\":1,\"203\":1,\"204\":1,\"205\":1,\"206\":1,\"207\":1,\"208\":1,\"209\":1,\"210\":1,\"211\":1,\"212\":1,\"213\":1,\"214\":1,\"215\":1,\"216\":1,\"217\":1,\"218\":1,\"219\":1,\"220\":1,\"221\":1,\"222\":1,\"223\":1,\"224\":1,\"225\":1,\"226\":1,\"227\":1,\"228\":1,\"229\":1,\"230\":1,\"231\":1,\"232\":1,\"233\":1,\"234\":1,\"237\":1,\"238\":1,\"239\":1,\"240\":1,\"241\":1,\"242\":1,\"243\":1,\"244\":1,\"245\":1,\"246\":1,\"247\":1,\"248\":1,\"249\":1,\"250\":1,\"251\":1,\"252\":1,\"253\":1,\"254\":1,\"255\":1,\"256\":1,\"257\":1,\"258\":1,\"259\":1,\"260\":1,\"261\":1,\"262\":1,\"265\":1,\"266\":1,\"267\":1,\"268\":1,\"269\":1,\"270\":1,\"271\":1,\"272\":1,\"273\":1,\"274\":1,\"275\":1,\"282\":1,\"286\":1,\"293\":1,\"297\":1,\"328\":1,\"396\":1,\"411\":1,\"429\":1,\"439\":1,\"442\":1,\"465\":1,\"488\":1,\"514\":1,\"544\":1,\"547\":1,\"574\":1,\"577\":1,\"604\":1,\"607\":1,\"622\":1,\"650\":1,\"653\":1,\"668\":1,\"696\":1,\"699\":1,\"714\":1,\"742\":1,\"745\":1,\"760\":1,\"778\":1,\"788\":1,\"791\":1,\"808\":1,\"809\":1,\"810\":1,\"811\":1,\"812\":1,\"813\":1,\"814\":1,\"815\":1,\"816\":1,\"817\":1,\"818\":1,\"819\":1,\"820\":1,\"821\":1,\"822\":1,\"823\":1,\"824\":1,\"825\":1,\"826\":1,\"827\":1,\"828\":1,\"829\":1,\"830\":1,\"831\":1,\"832\":1,\"833\":1,\"834\":1,\"835\":1,\"836\":1,\"837\":1,\"838\":1,\"839\":1,\"840\":1,\"841\":1,\"842\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"850\":1,\"851\":1,\"852\":1,\"853\":1,\"854\":1,\"855\":1,\"856\":1,\"857\":1,\"858\":1,\"859\":1,\"860\":1,\"861\":1,\"862\":1,\"863\":1,\"864\":1,\"865\":1,\"866\":1,\"867\":1,\"868\":1,\"869\":1,\"870\":1,\"871\":1,\"872\":1,\"873\":1,\"874\":1,\"875\":1,\"876\":1,\"877\":1,\"878\":1,\"879\":1,\"880\":1,\"881\":1,\"882\":1,\"883\":1,\"884\":1,\"885\":1,\"886\":1,\"887\":1,\"888\":1,\"889\":1,\"890\":1,\"891\":1,\"892\":1,\"893\":1,\"894\":1,\"895\":1,\"896\":1,\"897\":1,\"898\":1,\"899\":1,\"900\":1,\"909\":1,\"910\":1,\"911\":1,\"912\":1,\"913\":1,\"914\":1,\"915\":1,\"916\":1,\"917\":1,\"918\":1,\"919\":1,\"920\":1,\"921\":1,\"935\":1,\"936\":1,\"937\":1,\"938\":1,\"939\":1,\"940\":1,\"941\":1,\"942\":1,\"943\":1,\"944\":1,\"945\":1,\"946\":1,\"947\":1,\"948\":1,\"949\":1,\"950\":1,\"951\":1,\"952\":1,\"953\":1,\"954\":1,\"955\":1,\"956\":1,\"957\":1,\"958\":1,\"959\":1,\"960\":1,\"961\":1,\"962\":1,\"963\":1,\"964\":1,\"965\":1,\"966\":1,\"967\":1,\"968\":1,\"969\":1,\"970\":1,\"971\":1,\"972\":1,\"973\":1,\"974\":1,\"975\":1,\"976\":1,\"977\":1,\"978\":1,\"979\":1,\"980\":1,\"981\":1,\"982\":1,\"983\":1,\"984\":1,\"985\":1,\"986\":1,\"987\":1,\"988\":1,\"989\":1,\"990\":1,\"991\":1,\"1001\":1,\"1002\":1,\"1003\":1,\"1004\":1,\"1005\":1,\"1006\":1,\"1007\":1,\"1008\":1,\"1009\":1,\"1010\":1,\"1011\":1,\"1012\":1,\"1013\":1,\"1017\":1,\"1018\":1,\"1019\":1,\"1020\":1,\"1021\":1,\"1022\":1,\"1023\":1,\"1024\":1,\"1025\":1,\"1026\":1,\"1027\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1031\":1,\"1032\":1,\"1033\":1,\"1034\":1,\"1035\":1,\"1036\":1,\"1037\":1,\"1038\":1,\"1039\":1,\"1040\":1,\"1041\":1,\"1042\":1,\"1043\":1,\"1044\":1,\"1045\":1,\"1046\":1,\"1047\":1,\"1048\":1,\"1049\":1,\"1050\":1,\"1051\":1,\"1052\":1,\"1053\":1,\"1054\":1,\"1055\":1,\"1056\":1,\"1057\":1,\"1058\":1,\"1059\":1,\"1060\":1,\"1061\":1,\"1062\":1,\"1063\":1,\"1064\":1,\"1065\":1,\"1066\":1,\"1067\":1,\"1068\":1,\"1069\":1,\"1070\":1,\"1071\":1,\"1072\":1,\"1073\":1,\"1074\":1,\"1076\":1,\"1077\":1,\"1078\":1,\"1079\":1,\"1080\":1,\"1081\":1,\"1082\":1,\"1083\":1,\"1084\":1,\"1085\":1,\"1086\":1,\"1087\":1,\"1088\":1,\"1089\":1,\"1090\":1,\"1091\":1,\"1092\":1,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":1,\"1097\":1,\"1098\":1,\"1099\":1,\"1101\":1,\"1102\":1,\"1103\":1,\"1104\":1,\"1105\":1,\"1106\":1,\"1107\":1,\"1108\":1,\"1109\":1,\"1110\":1,\"1111\":1,\"1112\":1,\"1113\":1,\"1114\":1,\"1115\":1,\"1116\":1,\"1117\":1,\"1118\":1,\"1119\":1,\"1120\":1,\"1121\":1,\"1122\":1,\"1123\":1,\"1124\":1,\"1125\":1,\"1126\":1,\"1127\":1,\"1128\":1,\"1130\":1,\"1131\":1,\"1132\":1,\"1133\":1,\"1134\":1,\"1135\":1,\"1136\":1,\"1137\":1,\"1138\":1,\"1139\":1,\"1140\":1,\"1144\":1,\"1145\":1,\"1146\":1,\"1147\":1,\"1148\":1,\"1149\":1,\"1150\":1,\"1151\":1,\"1152\":1,\"1153\":1,\"1154\":1,\"1155\":1,\"1156\":1,\"1157\":1,\"1158\":1,\"1159\":1,\"1160\":1,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":1,\"1165\":1,\"1166\":1,\"1167\":1,\"1168\":1,\"1169\":1,\"1170\":1,\"1171\":1,\"1172\":1,\"1173\":1,\"1174\":1,\"1175\":1,\"1176\":1,\"1177\":1,\"1178\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1182\":1,\"1183\":1,\"1184\":1,\"1185\":1,\"1186\":1,\"1187\":1,\"1188\":1,\"1189\":1,\"1190\":1,\"1191\":1,\"1192\":1,\"1193\":1,\"1194\":1,\"1195\":1,\"1196\":1,\"1197\":1,\"1198\":1,\"1199\":1,\"1200\":1,\"1201\":1,\"1202\":1,\"1203\":1,\"1204\":1,\"1205\":1,\"1206\":1,\"1207\":1,\"1208\":1,\"1209\":1,\"1210\":1,\"1211\":1,\"1212\":1,\"1213\":1,\"1214\":1,\"1215\":1,\"1216\":1,\"1217\":1,\"1218\":1,\"1219\":1,\"1220\":1,\"1221\":1,\"1222\":1,\"1223\":1,\"1224\":1,\"1225\":1,\"1239\":1,\"1240\":1,\"1241\":1,\"1242\":1,\"1243\":1,\"1244\":1,\"1245\":1,\"1246\":1,\"1247\":1,\"1248\":1,\"1249\":1,\"1250\":1,\"1251\":1,\"1252\":1,\"1253\":1,\"1254\":1,\"1255\":1,\"1256\":1,\"1257\":1,\"1258\":1,\"1259\":1,\"1260\":1,\"1261\":1,\"1262\":1,\"1263\":1,\"1264\":1,\"1265\":1,\"1266\":1,\"1267\":1,\"1268\":1,\"1269\":1,\"1270\":1,\"1271\":1,\"1272\":1,\"1273\":1,\"1274\":1,\"1275\":1,\"1276\":1,\"1277\":1,\"1278\":1,\"1279\":1,\"1280\":1,\"1281\":1,\"1282\":1,\"1283\":1,\"1284\":1,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":1,\"1289\":1,\"1290\":1,\"1291\":1,\"1301\":1,\"1302\":1,\"1303\":1,\"1304\":1,\"1305\":1,\"1306\":1,\"1307\":1,\"1308\":1,\"1309\":1,\"1310\":1,\"1311\":1,\"1312\":1,\"1316\":1,\"1317\":1,\"1318\":1,\"1319\":1,\"1320\":1,\"1321\":1,\"1322\":1,\"1323\":1,\"1324\":1,\"1325\":1,\"1326\":1,\"1327\":1,\"1328\":1,\"1329\":1,\"1330\":1,\"1331\":1,\"1332\":1,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":1,\"1337\":1,\"1338\":1,\"1339\":1,\"1340\":1,\"1341\":1,\"1342\":1,\"1343\":1,\"1344\":1,\"1345\":1,\"1346\":1,\"1347\":1,\"1348\":1,\"1349\":1,\"1350\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1355\":1,\"1356\":1,\"1357\":1,\"1358\":1,\"1359\":1,\"1360\":1,\"1361\":1,\"1362\":1,\"1363\":1,\"1364\":1,\"1365\":1,\"1366\":1,\"1367\":1,\"1368\":1,\"1369\":1,\"1370\":1,\"1371\":1,\"1372\":1,\"1373\":1,\"1374\":1,\"1375\":1,\"1376\":1,\"1377\":1,\"1378\":1,\"1379\":1,\"1380\":1,\"1381\":1,\"1382\":1,\"1383\":1,\"1384\":1,\"1385\":1,\"1386\":1,\"1387\":1,\"1388\":1,\"1389\":1,\"1390\":1,\"1391\":1,\"1392\":1,\"1393\":1,\"1394\":1,\"1395\":1,\"1396\":1,\"1397\":1,\"1398\":1,\"1399\":1,\"1400\":1,\"1401\":1,\"1415\":1,\"1416\":1,\"1417\":1,\"1418\":1,\"1419\":1,\"1420\":1,\"1421\":1,\"1422\":1,\"1423\":1,\"1424\":1,\"1425\":1,\"1426\":1,\"1427\":1,\"1428\":1,\"1429\":1,\"1430\":1,\"1431\":1,\"1432\":1,\"1433\":1,\"1434\":1,\"1435\":1,\"1436\":1,\"1437\":1,\"1438\":1,\"1439\":1,\"1440\":1,\"1441\":1,\"1442\":1,\"1443\":1,\"1444\":1,\"1445\":1,\"1446\":1,\"1447\":1,\"1448\":1,\"1449\":1,\"1450\":1,\"1451\":1,\"1452\":1,\"1453\":1,\"1454\":1,\"1455\":1,\"1456\":1,\"1457\":1,\"1458\":1,\"1459\":1,\"1460\":1,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":1,\"1465\":1,\"1466\":1,\"1467\":1,\"1477\":1,\"1478\":1,\"1479\":1,\"1480\":1,\"1481\":1,\"1482\":1,\"1483\":1,\"1484\":1,\"1485\":1,\"1486\":1,\"1487\":1,\"1488\":1,\"1489\":1,\"1493\":1,\"1494\":1,\"1495\":1,\"1496\":1,\"1497\":1,\"1498\":1,\"1499\":1,\"1500\":1,\"1501\":1,\"1502\":1,\"1503\":1,\"1504\":1,\"1505\":1,\"1506\":1,\"1507\":1,\"1508\":1,\"1509\":1,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":1,\"1514\":1,\"1515\":1,\"1516\":1,\"1517\":1,\"1518\":1,\"1519\":1,\"1520\":1,\"1521\":1,\"1522\":1,\"1523\":1,\"1524\":1,\"1525\":1,\"1526\":1,\"1527\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1532\":1,\"1533\":1,\"1534\":1,\"1535\":1,\"1536\":1,\"1537\":1,\"1538\":1,\"1539\":1,\"1540\":1,\"1541\":1,\"1542\":1,\"1543\":1,\"1544\":1,\"1545\":1,\"1546\":1,\"1547\":1,\"1548\":1,\"1549\":1,\"1550\":1,\"1551\":1,\"1552\":1,\"1553\":1,\"1554\":1,\"1555\":1,\"1556\":1,\"1557\":1,\"1558\":1,\"1559\":1,\"1560\":1,\"1561\":1,\"1562\":1,\"1563\":1,\"1564\":1,\"1565\":1,\"1566\":1,\"1567\":1,\"1568\":1,\"1569\":1,\"1570\":1,\"1571\":1,\"1572\":1,\"1573\":1,\"1574\":1,\"1575\":1,\"1576\":1,\"1577\":1,\"1578\":1,\"1592\":1,\"1593\":1,\"1594\":1,\"1595\":1,\"1596\":1,\"1597\":1,\"1598\":1,\"1599\":1,\"1600\":1,\"1601\":1,\"1602\":1,\"1603\":1,\"1604\":1,\"1605\":1,\"1606\":1,\"1607\":1,\"1608\":1,\"1609\":1,\"1610\":1,\"1611\":1,\"1612\":1,\"1613\":1,\"1614\":1,\"1615\":1,\"1616\":1,\"1617\":1,\"1618\":1,\"1619\":1,\"1620\":1,\"1621\":1,\"1622\":1,\"1623\":1,\"1624\":1,\"1625\":1,\"1626\":1,\"1627\":1,\"1628\":1,\"1629\":1,\"1630\":1,\"1631\":1,\"1632\":1,\"1633\":1,\"1634\":1,\"1635\":1,\"1636\":1,\"1637\":1,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":1,\"1642\":1,\"1643\":1,\"1644\":1,\"1654\":1,\"1655\":1,\"1656\":1,\"1657\":1,\"1658\":1,\"1659\":1,\"1660\":1,\"1661\":1,\"1662\":1,\"1663\":1,\"1664\":1,\"1665\":1,\"1666\":1,\"1670\":1,\"1671\":1,\"1672\":1,\"1673\":1,\"1674\":1,\"1675\":1,\"1676\":1,\"1677\":1,\"1678\":1,\"1679\":1,\"1680\":1,\"1681\":1,\"1682\":1,\"1683\":1,\"1684\":1,\"1685\":1,\"1686\":1,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":1,\"1691\":1,\"1692\":1,\"1693\":1,\"1694\":1,\"1695\":1,\"1696\":1,\"1697\":1,\"1698\":1,\"1699\":1,\"1700\":1,\"1701\":1,\"1702\":1,\"1703\":1,\"1704\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1709\":1,\"1710\":1,\"1711\":1,\"1712\":1,\"1713\":1,\"1714\":1,\"1715\":1,\"1716\":1,\"1717\":1,\"1718\":1,\"1719\":1,\"1720\":1,\"1721\":1,\"1722\":1,\"1723\":1,\"1724\":1,\"1725\":1,\"1726\":1,\"1727\":1,\"1728\":1,\"1729\":1,\"1730\":1,\"1731\":1,\"1732\":1,\"1733\":1,\"1734\":1,\"1735\":1,\"1736\":1,\"1737\":1,\"1738\":1,\"1739\":1,\"1740\":1,\"1741\":1,\"1742\":1,\"1743\":1,\"1744\":1,\"1745\":1,\"1746\":1,\"1747\":1,\"1748\":1,\"1749\":1,\"1750\":1,\"1751\":1,\"1752\":1,\"1753\":1,\"1754\":1,\"1755\":1,\"1769\":1,\"1770\":1,\"1771\":1,\"1772\":1,\"1773\":1,\"1774\":1,\"1775\":1,\"1776\":1,\"1777\":1,\"1778\":1,\"1779\":1,\"1780\":1,\"1781\":1,\"1782\":1,\"1783\":1,\"1784\":1,\"1785\":1,\"1786\":1,\"1787\":1,\"1788\":1,\"1789\":1,\"1790\":1,\"1791\":1,\"1792\":1,\"1793\":1,\"1794\":1,\"1795\":1,\"1796\":1,\"1797\":1,\"1798\":1,\"1799\":1,\"1800\":1,\"1801\":1,\"1802\":1,\"1803\":1,\"1804\":1,\"1805\":1,\"1806\":1,\"1807\":1,\"1808\":1,\"1809\":1,\"1810\":1,\"1811\":1,\"1812\":1,\"1813\":1,\"1814\":1,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":1,\"1819\":1,\"1820\":1,\"1821\":1,\"1831\":1,\"1832\":1,\"1833\":1,\"1834\":1,\"1835\":1,\"1836\":1,\"1837\":1,\"1838\":1,\"1839\":1,\"1840\":1,\"1841\":1,\"1842\":1,\"1843\":1,\"1847\":1,\"1848\":1,\"1849\":1,\"1850\":1,\"1851\":1,\"1852\":1,\"1853\":1,\"1854\":1,\"1855\":1,\"1856\":1,\"1857\":1,\"1858\":1,\"1859\":1,\"1860\":1,\"1861\":1,\"1862\":1,\"1863\":1,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":1,\"1868\":1,\"1869\":1,\"1870\":1,\"1871\":1,\"1872\":1,\"1873\":1,\"1874\":1,\"1875\":1,\"1876\":1,\"1877\":1,\"1878\":1,\"1879\":1,\"1880\":1,\"1881\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1886\":1,\"1887\":1,\"1888\":1,\"1889\":1,\"1890\":1,\"1891\":1,\"1892\":1,\"1893\":1,\"1894\":1,\"1895\":1,\"1896\":1,\"1897\":1,\"1898\":1,\"1899\":1,\"1900\":1,\"1901\":1,\"1902\":1,\"1903\":1,\"1904\":1,\"1905\":1,\"1906\":1,\"1907\":1,\"1908\":1,\"1909\":1,\"1910\":1,\"1911\":1,\"1912\":1,\"1913\":1,\"1914\":1,\"1915\":1,\"1916\":1,\"1917\":1,\"1918\":1,\"1919\":1,\"1920\":1,\"1921\":1,\"1922\":1,\"1923\":1,\"1924\":1,\"1925\":1,\"1926\":1,\"1927\":1,\"1928\":1,\"1929\":1,\"1930\":1,\"1931\":1,\"1932\":1,\"1946\":1,\"1947\":1,\"1948\":1,\"1949\":1,\"1950\":1,\"1951\":1,\"1952\":1,\"1953\":1,\"1954\":1,\"1955\":1,\"1956\":1,\"1957\":1,\"1958\":1,\"1959\":1,\"1960\":1,\"1961\":1,\"1962\":1,\"1963\":1,\"1964\":1,\"1965\":1,\"1966\":1,\"1967\":1,\"1968\":1,\"1969\":1,\"1970\":1,\"1971\":1,\"1972\":1,\"1973\":1,\"1974\":1,\"1975\":1,\"1976\":1,\"1977\":1,\"1978\":1,\"1979\":1,\"1980\":1,\"1981\":1,\"1982\":1,\"1983\":1,\"1984\":1,\"1985\":1,\"1986\":1,\"1987\":1,\"1988\":1,\"1989\":1,\"1990\":1,\"1991\":1,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":1,\"1996\":1,\"1997\":1,\"1998\":1,\"2008\":1,\"2009\":1,\"2010\":1,\"2011\":1,\"2012\":1,\"2013\":1,\"2014\":1,\"2015\":1,\"2016\":1,\"2017\":1,\"2018\":1,\"2019\":1,\"2020\":1,\"2024\":1,\"2025\":1,\"2026\":1,\"2027\":1,\"2028\":1,\"2029\":1,\"2030\":1,\"2031\":1,\"2032\":1,\"2033\":1,\"2034\":1,\"2035\":1,\"2036\":1,\"2037\":1,\"2038\":1,\"2039\":1,\"2040\":1,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":1,\"2045\":1,\"2046\":1,\"2047\":1,\"2048\":1,\"2049\":1,\"2050\":1,\"2051\":1,\"2052\":1,\"2053\":1,\"2054\":1,\"2055\":1,\"2056\":1,\"2057\":1,\"2058\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2063\":1,\"2064\":1,\"2065\":1,\"2066\":1,\"2067\":1,\"2068\":1,\"2069\":1,\"2070\":1,\"2071\":1,\"2072\":1,\"2073\":1,\"2074\":1,\"2075\":1,\"2076\":1,\"2077\":1,\"2078\":1,\"2079\":1,\"2080\":1,\"2081\":1,\"2082\":1,\"2083\":1,\"2084\":1,\"2085\":1,\"2086\":1,\"2087\":1,\"2088\":1,\"2089\":1,\"2090\":1,\"2091\":1,\"2092\":1,\"2093\":1,\"2094\":1,\"2095\":1,\"2096\":1,\"2097\":1,\"2098\":1,\"2099\":1,\"2100\":1,\"2101\":1,\"2102\":1,\"2103\":1,\"2104\":1,\"2105\":1,\"2106\":1,\"2107\":1,\"2108\":1,\"2109\":1,\"2123\":1,\"2124\":1,\"2125\":1,\"2126\":1,\"2127\":1,\"2128\":1,\"2129\":1,\"2130\":1,\"2131\":1,\"2132\":1,\"2133\":1,\"2134\":1,\"2135\":1,\"2136\":1,\"2137\":1,\"2138\":1,\"2139\":1,\"2140\":1,\"2141\":1,\"2142\":1,\"2143\":1,\"2144\":1,\"2145\":1,\"2146\":1,\"2147\":1,\"2148\":1,\"2149\":1,\"2150\":1,\"2151\":1,\"2152\":1,\"2153\":1,\"2154\":1,\"2155\":1,\"2156\":1,\"2157\":1,\"2158\":1,\"2159\":1,\"2160\":1,\"2161\":1,\"2162\":1,\"2163\":1,\"2164\":1,\"2165\":1,\"2166\":1,\"2167\":1,\"2168\":1,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":1,\"2173\":1,\"2174\":1,\"2175\":1,\"2185\":1,\"2186\":1,\"2187\":1,\"2188\":1,\"2189\":1,\"2190\":1,\"2191\":1,\"2192\":1,\"2193\":1,\"2194\":1,\"2195\":1,\"2196\":1,\"2197\":1,\"2211\":1,\"2212\":1,\"2213\":1,\"2214\":1,\"2215\":1,\"2216\":1,\"2217\":1,\"2218\":1,\"2219\":1,\"2220\":1,\"2221\":1,\"2222\":1,\"2223\":1,\"2224\":1,\"2225\":1,\"2226\":1,\"2227\":1,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":1,\"2232\":1,\"2233\":1,\"2234\":1,\"2235\":1,\"2236\":1,\"2237\":1,\"2238\":1,\"2239\":1,\"2240\":1,\"2241\":1,\"2242\":1,\"2243\":1,\"2244\":1,\"2245\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2253\":1,\"2254\":1,\"2255\":1,\"2256\":1,\"2257\":1,\"2258\":1,\"2259\":1,\"2260\":1,\"2261\":1,\"2262\":1,\"2263\":1,\"2264\":1,\"2265\":1,\"2266\":1,\"2267\":1,\"2268\":1,\"2269\":1,\"2270\":1,\"2271\":1,\"2272\":1,\"2273\":1,\"2274\":1,\"2275\":1,\"2276\":1,\"2277\":1,\"2278\":1,\"2279\":1,\"2280\":1,\"2281\":1,\"2282\":1,\"2283\":1,\"2284\":1,\"2285\":1,\"2286\":1,\"2287\":1,\"2288\":1,\"2289\":1,\"2290\":1,\"2291\":1,\"2292\":1,\"2293\":1,\"2294\":1,\"2295\":1,\"2296\":1,\"2297\":1,\"2298\":1,\"2299\":1,\"2300\":1,\"2301\":1,\"2302\":1,\"2303\":1,\"2312\":1,\"2313\":1,\"2314\":1,\"2315\":1,\"2316\":1,\"2317\":1,\"2318\":1,\"2319\":1,\"2320\":1,\"2321\":1,\"2322\":1,\"2323\":1,\"2324\":1,\"2338\":1,\"2339\":1,\"2340\":1,\"2341\":1,\"2342\":1,\"2343\":1,\"2344\":1,\"2345\":1,\"2346\":1,\"2347\":1,\"2348\":1,\"2349\":1,\"2350\":1,\"2351\":1,\"2352\":1,\"2353\":1,\"2354\":1,\"2355\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2359\":1,\"2360\":1,\"2361\":1,\"2362\":1,\"2363\":1,\"2364\":1,\"2365\":1,\"2366\":1,\"2367\":1,\"2368\":1,\"2369\":1,\"2370\":1,\"2371\":1,\"2372\":1,\"2373\":1,\"2374\":1,\"2375\":1,\"2376\":1,\"2377\":1,\"2378\":1,\"2379\":1,\"2380\":1,\"2381\":1,\"2382\":1,\"2383\":1,\"2384\":1,\"2385\":1,\"2386\":1,\"2387\":1,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":1,\"2392\":1,\"2393\":1,\"2394\":1,\"2404\":1,\"2405\":1,\"2406\":1,\"2407\":1,\"2408\":1,\"2409\":1,\"2410\":1,\"2411\":1,\"2412\":1,\"2413\":1,\"2414\":1,\"2415\":1,\"2416\":1,\"2430\":1,\"2431\":1,\"2432\":1,\"2433\":1,\"2434\":1,\"2435\":1,\"2436\":1,\"2437\":1,\"2438\":1,\"2439\":1,\"2440\":1,\"2441\":1,\"2442\":1,\"2443\":1,\"2444\":1,\"2445\":1,\"2446\":1,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":1,\"2451\":1,\"2452\":1,\"2453\":1,\"2454\":1,\"2455\":1,\"2456\":1,\"2457\":1,\"2458\":1,\"2459\":1,\"2460\":1,\"2461\":1,\"2462\":1,\"2463\":1,\"2464\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2472\":1,\"2473\":1,\"2474\":1,\"2475\":1,\"2476\":1,\"2477\":1,\"2478\":1,\"2479\":1,\"2480\":1,\"2481\":1,\"2482\":1,\"2483\":1,\"2484\":1,\"2485\":1,\"2486\":1,\"2487\":1,\"2488\":1,\"2489\":1,\"2490\":1,\"2491\":1,\"2492\":1,\"2493\":1,\"2494\":1,\"2495\":1,\"2496\":1,\"2497\":1,\"2498\":1,\"2499\":1,\"2500\":1,\"2501\":1,\"2502\":1,\"2503\":1,\"2504\":1,\"2505\":1,\"2506\":1,\"2507\":1,\"2508\":1,\"2509\":1,\"2510\":1,\"2511\":1,\"2512\":1,\"2513\":1,\"2514\":1,\"2515\":1,\"2516\":1,\"2517\":1,\"2518\":1,\"2519\":1,\"2520\":1,\"2521\":1,\"2522\":1,\"2531\":1,\"2532\":1,\"2533\":1,\"2534\":1,\"2535\":1,\"2536\":1,\"2537\":1,\"2538\":1,\"2539\":1,\"2540\":1,\"2541\":1,\"2542\":1,\"2543\":1,\"2557\":1,\"2558\":1,\"2559\":1,\"2560\":1,\"2561\":1,\"2562\":1,\"2563\":1,\"2564\":1,\"2565\":1,\"2566\":1,\"2567\":1,\"2568\":1,\"2569\":1,\"2570\":1,\"2571\":1,\"2572\":1,\"2573\":1,\"2574\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2578\":1,\"2579\":1,\"2580\":1,\"2581\":1,\"2582\":1,\"2583\":1,\"2584\":1,\"2585\":1,\"2586\":1,\"2587\":1,\"2588\":1,\"2589\":1,\"2590\":1,\"2591\":1,\"2592\":1,\"2593\":1,\"2594\":1,\"2595\":1,\"2596\":1,\"2597\":1,\"2598\":1,\"2599\":1,\"2600\":1,\"2601\":1,\"2602\":1,\"2603\":1,\"2604\":1,\"2605\":1,\"2606\":1,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":1,\"2611\":1,\"2612\":1,\"2613\":1,\"2623\":1,\"2624\":1,\"2625\":1,\"2626\":1,\"2627\":1,\"2628\":1,\"2629\":1,\"2630\":1,\"2631\":1,\"2632\":1,\"2633\":1,\"2634\":1,\"2635\":1,\"2649\":1,\"2650\":1,\"2651\":1,\"2652\":1,\"2653\":1,\"2654\":1,\"2655\":1,\"2656\":1,\"2657\":1,\"2658\":1,\"2659\":1,\"2660\":1,\"2661\":1,\"2662\":1,\"2663\":1,\"2664\":1,\"2665\":1,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":1,\"2670\":1,\"2671\":1,\"2672\":1,\"2673\":1,\"2674\":1,\"2675\":1,\"2676\":1,\"2677\":1,\"2678\":1,\"2679\":1,\"2680\":1,\"2681\":1,\"2682\":1,\"2683\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2691\":1,\"2692\":1,\"2693\":1,\"2694\":1,\"2695\":1,\"2696\":1,\"2697\":1,\"2698\":1,\"2699\":1,\"2700\":1,\"2701\":1,\"2702\":1,\"2703\":1,\"2704\":1,\"2705\":1,\"2706\":1,\"2707\":1,\"2708\":1,\"2709\":1,\"2710\":1,\"2711\":1,\"2712\":1,\"2713\":1,\"2714\":1,\"2715\":1,\"2716\":1,\"2717\":1,\"2718\":1,\"2719\":1,\"2720\":1,\"2721\":1,\"2722\":1,\"2723\":1,\"2724\":1,\"2725\":1,\"2726\":1,\"2727\":1,\"2728\":1,\"2729\":1,\"2730\":1,\"2731\":1,\"2732\":1,\"2733\":1,\"2734\":1,\"2735\":1,\"2736\":1,\"2737\":1,\"2738\":1,\"2739\":1,\"2740\":1,\"2741\":1,\"2750\":1,\"2751\":1,\"2752\":1,\"2753\":1,\"2754\":1,\"2755\":1,\"2756\":1,\"2757\":1,\"2758\":1,\"2759\":1,\"2760\":1,\"2761\":1,\"2762\":1,\"2776\":1,\"2777\":1,\"2778\":1,\"2779\":1,\"2780\":1,\"2781\":1,\"2782\":1,\"2783\":1,\"2784\":1,\"2785\":1,\"2786\":1,\"2787\":1,\"2788\":1,\"2789\":1,\"2790\":1,\"2791\":1,\"2792\":1,\"2793\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2797\":1,\"2798\":1,\"2799\":1,\"2800\":1,\"2801\":1,\"2802\":1,\"2803\":1,\"2804\":1,\"2805\":1,\"2806\":1,\"2807\":1,\"2808\":1,\"2809\":1,\"2810\":1,\"2811\":1,\"2812\":1,\"2813\":1,\"2814\":1,\"2815\":1,\"2816\":1,\"2817\":1,\"2818\":1,\"2819\":1,\"2820\":1,\"2821\":1,\"2822\":1,\"2823\":1,\"2824\":1,\"2825\":1,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":1,\"2830\":1,\"2831\":1,\"2832\":1,\"2842\":1,\"2843\":1,\"2844\":1,\"2845\":1,\"2846\":1,\"2847\":1,\"2848\":1,\"2849\":1,\"2850\":1,\"2851\":1,\"2852\":1,\"2853\":1,\"2854\":1}}],[\"requires\",{\"1\":{\"113\":1,\"208\":1,\"209\":1,\"213\":1,\"214\":1,\"218\":1,\"219\":1,\"224\":1,\"811\":1,\"812\":1,\"814\":1,\"865\":1,\"866\":1,\"870\":1,\"871\":1,\"875\":1,\"876\":1,\"881\":1,\"898\":1,\"900\":1,\"902\":1,\"965\":1,\"967\":1,\"971\":1,\"972\":1,\"974\":1,\"993\":1,\"1047\":1,\"1048\":1,\"1052\":1,\"1053\":1,\"1057\":1,\"1058\":1,\"1063\":1,\"1072\":1,\"1074\":1,\"1079\":1,\"1080\":1,\"1082\":1,\"1126\":1,\"1128\":1,\"1147\":1,\"1148\":1,\"1150\":1,\"1198\":1,\"1199\":1,\"1203\":1,\"1204\":1,\"1208\":1,\"1209\":1,\"1214\":1,\"1223\":1,\"1225\":1,\"1265\":1,\"1267\":1,\"1271\":1,\"1272\":1,\"1274\":1,\"1293\":1,\"1319\":1,\"1320\":1,\"1322\":1,\"1370\":1,\"1371\":1,\"1375\":1,\"1376\":1,\"1380\":1,\"1381\":1,\"1386\":1,\"1399\":1,\"1401\":1,\"1441\":1,\"1443\":1,\"1447\":1,\"1448\":1,\"1450\":1,\"1469\":1,\"1496\":1,\"1497\":1,\"1499\":1,\"1547\":1,\"1548\":1,\"1552\":1,\"1553\":1,\"1557\":1,\"1558\":1,\"1563\":1,\"1576\":1,\"1578\":1,\"1618\":1,\"1620\":1,\"1624\":1,\"1625\":1,\"1627\":1,\"1646\":1,\"1673\":1,\"1674\":1,\"1676\":1,\"1724\":1,\"1725\":1,\"1729\":1,\"1730\":1,\"1734\":1,\"1735\":1,\"1740\":1,\"1753\":1,\"1755\":1,\"1795\":1,\"1797\":1,\"1801\":1,\"1802\":1,\"1804\":1,\"1823\":1,\"1850\":1,\"1851\":1,\"1853\":1,\"1901\":1,\"1902\":1,\"1906\":1,\"1907\":1,\"1911\":1,\"1912\":1,\"1917\":1,\"1930\":1,\"1932\":1,\"1972\":1,\"1974\":1,\"1978\":1,\"1979\":1,\"1981\":1,\"2000\":1,\"2027\":1,\"2028\":1,\"2030\":1,\"2078\":1,\"2079\":1,\"2083\":1,\"2084\":1,\"2088\":1,\"2089\":1,\"2094\":1,\"2107\":1,\"2109\":1,\"2149\":1,\"2151\":1,\"2155\":1,\"2156\":1,\"2158\":1,\"2177\":1,\"2214\":1,\"2215\":1,\"2217\":1,\"2268\":1,\"2269\":1,\"2273\":1,\"2274\":1,\"2278\":1,\"2279\":1,\"2284\":1,\"2301\":1,\"2303\":1,\"2305\":1,\"2368\":1,\"2370\":1,\"2374\":1,\"2375\":1,\"2377\":1,\"2396\":1,\"2433\":1,\"2434\":1,\"2436\":1,\"2487\":1,\"2488\":1,\"2492\":1,\"2493\":1,\"2497\":1,\"2498\":1,\"2503\":1,\"2520\":1,\"2522\":1,\"2524\":1,\"2587\":1,\"2589\":1,\"2593\":1,\"2594\":1,\"2596\":1,\"2615\":1,\"2652\":1,\"2653\":1,\"2655\":1,\"2706\":1,\"2707\":1,\"2711\":1,\"2712\":1,\"2716\":1,\"2717\":1,\"2722\":1,\"2739\":1,\"2741\":1,\"2743\":1,\"2806\":1,\"2808\":1,\"2812\":1,\"2813\":1,\"2815\":1,\"2834\":1}}],[\"requirements\",{\"1\":{\"78\":1,\"90\":1,\"399\":1,\"406\":1,\"424\":1,\"529\":1,\"559\":1,\"589\":1,\"617\":1,\"635\":1,\"663\":1,\"681\":1,\"709\":1,\"727\":1,\"755\":1,\"773\":1}}],[\"requester\",{\"0\":{\"357\":1,\"383\":1},\"1\":{\"344\":1,\"357\":1,\"359\":1,\"360\":1,\"383\":1,\"385\":1,\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"requested\",{\"1\":{\"86\":2,\"93\":1,\"359\":1,\"385\":1,\"438\":1,\"464\":1,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1}}],[\"requests\",{\"0\":{\"107\":1,\"162\":1},\"1\":{\"86\":2,\"124\":1,\"152\":1,\"186\":1,\"188\":1,\"191\":1,\"192\":1,\"194\":1,\"195\":1,\"197\":1,\"200\":1,\"240\":1,\"242\":1,\"246\":1,\"403\":1,\"410\":1,\"411\":5,\"415\":2,\"614\":1,\"621\":1,\"622\":5,\"626\":2,\"660\":1,\"667\":1,\"668\":5,\"672\":2,\"706\":1,\"713\":1,\"714\":5,\"718\":2,\"752\":1,\"759\":1,\"760\":5,\"764\":2,\"849\":1,\"855\":1,\"858\":1,\"941\":1,\"955\":1,\"1036\":1,\"1039\":1,\"1107\":1,\"1187\":1,\"1190\":1,\"1245\":1,\"1360\":1,\"1363\":1,\"1421\":1,\"1537\":1,\"1540\":1,\"1598\":1,\"1714\":1,\"1717\":1,\"1775\":1,\"1891\":1,\"1894\":1,\"1952\":1,\"2068\":1,\"2071\":1,\"2129\":1,\"2252\":1,\"2258\":1,\"2261\":1,\"2344\":1,\"2358\":1,\"2471\":1,\"2477\":1,\"2480\":1,\"2563\":1,\"2577\":1,\"2690\":1,\"2696\":1,\"2699\":1,\"2782\":1,\"2796\":1}}],[\"requesting\",{\"1\":{\"85\":1,\"103\":3,\"257\":1,\"329\":1,\"843\":1,\"953\":1,\"2246\":1,\"2356\":1,\"2465\":1,\"2575\":1,\"2684\":1,\"2794\":1}}],[\"request\",{\"0\":{\"2\":1,\"83\":1,\"272\":1,\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1,\"917\":1,\"1009\":1,\"1137\":1,\"1308\":1,\"1485\":1,\"1662\":1,\"1839\":1,\"2016\":1,\"2193\":1,\"2320\":1,\"2412\":1,\"2539\":1,\"2631\":1,\"2758\":1,\"2850\":1},\"1\":{\"37\":1,\"67\":1,\"71\":1,\"137\":1,\"166\":2,\"272\":1,\"286\":1,\"329\":1,\"330\":2,\"353\":2,\"410\":3,\"413\":2,\"415\":1,\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"621\":3,\"624\":2,\"626\":1,\"651\":1,\"667\":3,\"670\":2,\"672\":1,\"697\":1,\"713\":3,\"716\":2,\"718\":1,\"743\":1,\"759\":3,\"762\":2,\"764\":1,\"789\":1,\"813\":1,\"917\":1,\"973\":1,\"1009\":1,\"1081\":1,\"1137\":1,\"1149\":1,\"1273\":1,\"1308\":1,\"1321\":1,\"1449\":1,\"1485\":1,\"1498\":1,\"1626\":1,\"1662\":1,\"1675\":1,\"1803\":1,\"1839\":1,\"1852\":1,\"1980\":1,\"2016\":1,\"2029\":1,\"2157\":1,\"2193\":1,\"2216\":1,\"2320\":1,\"2376\":1,\"2412\":1,\"2435\":1,\"2539\":1,\"2595\":1,\"2631\":1,\"2654\":1,\"2758\":1,\"2814\":1,\"2850\":1}}],[\"reviewing\",{\"1\":{\"415\":2,\"626\":2,\"672\":2,\"718\":2,\"764\":2}}],[\"review\",{\"1\":{\"410\":1,\"411\":2,\"412\":2,\"415\":1,\"621\":1,\"622\":2,\"623\":2,\"626\":1,\"667\":1,\"668\":2,\"669\":2,\"672\":1,\"713\":1,\"714\":2,\"715\":2,\"718\":1,\"759\":1,\"760\":2,\"761\":2,\"764\":1}}],[\"rev\",{\"1\":{\"143\":3}}],[\"reverse\",{\"0\":{\"88\":1,\"96\":1,\"166\":1,\"264\":1,\"906\":1,\"998\":1,\"1129\":1,\"1298\":1,\"1474\":1,\"1651\":1,\"1828\":1,\"2005\":1,\"2182\":1,\"2309\":1,\"2401\":1,\"2528\":1,\"2620\":1,\"2747\":1,\"2839\":1},\"1\":{\"95\":3,\"96\":2,\"165\":3,\"166\":2,\"265\":1,\"267\":1,\"268\":1,\"269\":1,\"270\":1,\"285\":1,\"296\":1,\"327\":1,\"421\":2,\"438\":1,\"464\":1,\"474\":1,\"487\":1,\"500\":1,\"513\":1,\"526\":1,\"543\":1,\"556\":1,\"573\":1,\"586\":1,\"603\":1,\"632\":1,\"649\":1,\"678\":2,\"695\":1,\"724\":2,\"741\":1,\"770\":2,\"787\":1,\"810\":1,\"902\":2,\"909\":1,\"911\":1,\"912\":1,\"913\":1,\"914\":1,\"915\":1,\"970\":1,\"993\":2,\"1001\":1,\"1003\":1,\"1004\":1,\"1005\":1,\"1006\":1,\"1007\":1,\"1015\":1,\"1078\":1,\"1130\":1,\"1132\":1,\"1133\":1,\"1134\":1,\"1135\":1,\"1146\":1,\"1270\":1,\"1293\":2,\"1301\":1,\"1303\":1,\"1304\":1,\"1305\":1,\"1306\":1,\"1318\":1,\"1446\":1,\"1469\":2,\"1477\":1,\"1479\":1,\"1480\":1,\"1481\":1,\"1482\":1,\"1483\":1,\"1495\":1,\"1623\":1,\"1646\":2,\"1654\":1,\"1656\":1,\"1657\":1,\"1658\":1,\"1659\":1,\"1660\":1,\"1672\":1,\"1800\":1,\"1823\":2,\"1831\":1,\"1833\":1,\"1834\":1,\"1835\":1,\"1836\":1,\"1837\":1,\"1849\":1,\"1977\":1,\"2000\":2,\"2008\":1,\"2010\":1,\"2011\":1,\"2012\":1,\"2013\":1,\"2014\":1,\"2026\":1,\"2154\":1,\"2177\":2,\"2185\":1,\"2187\":1,\"2188\":1,\"2189\":1,\"2190\":1,\"2191\":1,\"2213\":1,\"2305\":2,\"2312\":1,\"2314\":1,\"2315\":1,\"2316\":1,\"2317\":1,\"2318\":1,\"2373\":1,\"2396\":2,\"2404\":1,\"2406\":1,\"2407\":1,\"2408\":1,\"2409\":1,\"2410\":1,\"2432\":1,\"2524\":2,\"2531\":1,\"2533\":1,\"2534\":1,\"2535\":1,\"2536\":1,\"2537\":1,\"2592\":1,\"2615\":2,\"2623\":1,\"2625\":1,\"2626\":1,\"2627\":1,\"2628\":1,\"2629\":1,\"2651\":1,\"2743\":2,\"2750\":1,\"2752\":1,\"2753\":1,\"2754\":1,\"2755\":1,\"2756\":1,\"2811\":1,\"2834\":2,\"2842\":1,\"2844\":1,\"2845\":1,\"2846\":1,\"2847\":1,\"2848\":1}}],[\"retire\",{\"1\":{\"233\":1,\"891\":1,\"1070\":1,\"1221\":1,\"1396\":1,\"1573\":1,\"1750\":1,\"1927\":1,\"2104\":1,\"2294\":1,\"2513\":1,\"2732\":1}}],[\"retired\",{\"0\":{\"233\":1,\"891\":1,\"1070\":1,\"1221\":1,\"1396\":1,\"1573\":1,\"1750\":1,\"1927\":1,\"2104\":1,\"2294\":1,\"2513\":1,\"2732\":1},\"1\":{\"233\":2,\"891\":2,\"1070\":2,\"1221\":2,\"1396\":2,\"1573\":2,\"1750\":2,\"1927\":2,\"2104\":2,\"2294\":2,\"2513\":2,\"2732\":2}}],[\"retries\",{\"1\":{\"205\":2,\"206\":1,\"230\":2,\"231\":1,\"323\":1,\"519\":1,\"520\":1,\"862\":2,\"863\":1,\"888\":2,\"889\":1,\"1044\":2,\"1045\":1,\"1067\":2,\"1068\":1,\"1195\":2,\"1196\":1,\"1218\":2,\"1219\":1,\"1367\":2,\"1368\":1,\"1393\":2,\"1394\":1,\"1544\":2,\"1545\":1,\"1570\":2,\"1571\":1,\"1721\":2,\"1722\":1,\"1747\":2,\"1748\":1,\"1898\":2,\"1899\":1,\"1924\":2,\"1925\":1,\"2075\":2,\"2076\":1,\"2101\":2,\"2102\":1,\"2265\":2,\"2266\":1,\"2291\":2,\"2292\":1,\"2484\":2,\"2485\":1,\"2510\":2,\"2511\":1,\"2703\":2,\"2704\":1,\"2729\":2,\"2730\":1}}],[\"retry\",{\"0\":{\"205\":1,\"206\":1,\"230\":1,\"231\":1,\"862\":1,\"863\":1,\"888\":1,\"889\":1,\"1044\":1,\"1045\":1,\"1067\":1,\"1068\":1,\"1195\":1,\"1196\":1,\"1218\":1,\"1219\":1,\"1367\":1,\"1368\":1,\"1393\":1,\"1394\":1,\"1544\":1,\"1545\":1,\"1570\":1,\"1571\":1,\"1721\":1,\"1722\":1,\"1747\":1,\"1748\":1,\"1898\":1,\"1899\":1,\"1924\":1,\"1925\":1,\"2075\":1,\"2076\":1,\"2101\":1,\"2102\":1,\"2265\":1,\"2266\":1,\"2291\":1,\"2292\":1,\"2484\":1,\"2485\":1,\"2510\":1,\"2511\":1,\"2703\":1,\"2704\":1,\"2729\":1,\"2730\":1},\"1\":{\"205\":1,\"206\":1,\"230\":1,\"231\":1,\"862\":1,\"863\":1,\"888\":1,\"889\":1,\"1044\":1,\"1045\":1,\"1067\":1,\"1068\":1,\"1195\":1,\"1196\":1,\"1218\":1,\"1219\":1,\"1367\":1,\"1368\":1,\"1393\":1,\"1394\":1,\"1544\":1,\"1545\":1,\"1570\":1,\"1571\":1,\"1721\":1,\"1722\":1,\"1747\":1,\"1748\":1,\"1898\":1,\"1899\":1,\"1924\":1,\"1925\":1,\"2075\":1,\"2076\":1,\"2101\":1,\"2102\":1,\"2265\":1,\"2266\":1,\"2291\":1,\"2292\":1,\"2484\":1,\"2485\":1,\"2510\":1,\"2511\":1,\"2703\":1,\"2704\":1,\"2729\":1,\"2730\":1}}],[\"retrospective\",{\"1\":{\"113\":1}}],[\"returned\",{\"1\":{\"260\":1,\"334\":1,\"344\":1,\"363\":1,\"389\":1,\"960\":1,\"1122\":1,\"1261\":1,\"1437\":1,\"1614\":1,\"1791\":1,\"1968\":1,\"2145\":1,\"2363\":1,\"2582\":1,\"2801\":1}}],[\"returns\",{\"1\":{\"150\":1}}],[\"return\",{\"1\":{\"150\":1,\"155\":1,\"321\":1,\"375\":1,\"379\":2}}],[\"returning\",{\"1\":{\"148\":1,\"149\":1}}],[\"reto\",{\"1\":{\"79\":1}}],[\"redirect\",{\"1\":{\"110\":1,\"118\":1}}],[\"reminder\",{\"1\":{\"429\":1,\"778\":1}}],[\"remarks\",{\"1\":{\"314\":2}}],[\"removing\",{\"1\":{\"348\":1,\"520\":2}}],[\"remove\",{\"1\":{\"137\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"300\":2,\"303\":2,\"438\":1,\"439\":1,\"464\":2,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"519\":2,\"520\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"removed\",{\"1\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"300\":1,\"303\":1,\"306\":1}}],[\"remote\",{\"0\":{\"195\":2,\"196\":1,\"197\":1,\"198\":1,\"199\":1,\"200\":1,\"856\":1,\"857\":1,\"858\":1,\"1037\":1,\"1038\":1,\"1039\":1,\"1188\":1,\"1189\":1,\"1190\":1,\"1361\":1,\"1362\":1,\"1363\":1,\"1538\":1,\"1539\":1,\"1540\":1,\"1715\":1,\"1716\":1,\"1717\":1,\"1892\":1,\"1893\":1,\"1894\":1,\"2069\":1,\"2070\":1,\"2071\":1,\"2259\":1,\"2260\":1,\"2261\":1,\"2478\":1,\"2479\":1,\"2480\":1,\"2697\":1,\"2698\":1,\"2699\":1},\"1\":{\"0\":1,\"32\":1,\"109\":1,\"164\":1,\"183\":1,\"195\":2,\"196\":1,\"197\":1,\"198\":2,\"199\":2,\"200\":2,\"201\":1,\"237\":1,\"243\":1,\"244\":1,\"245\":1,\"246\":1,\"317\":1,\"336\":1,\"337\":1,\"338\":2,\"352\":1,\"357\":6,\"359\":2,\"383\":6,\"385\":1,\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1,\"824\":1,\"850\":1,\"856\":2,\"857\":2,\"858\":2,\"859\":1,\"935\":1,\"938\":1,\"939\":1,\"940\":1,\"941\":1,\"984\":1,\"1031\":1,\"1037\":2,\"1038\":2,\"1039\":2,\"1040\":1,\"1092\":1,\"1101\":1,\"1104\":1,\"1105\":1,\"1106\":1,\"1107\":1,\"1160\":1,\"1182\":1,\"1188\":2,\"1189\":2,\"1190\":2,\"1191\":1,\"1239\":1,\"1242\":1,\"1243\":1,\"1244\":1,\"1245\":1,\"1284\":1,\"1332\":1,\"1355\":1,\"1361\":2,\"1362\":2,\"1363\":2,\"1364\":1,\"1415\":1,\"1418\":1,\"1419\":1,\"1420\":1,\"1421\":1,\"1460\":1,\"1509\":1,\"1532\":1,\"1538\":2,\"1539\":2,\"1540\":2,\"1541\":1,\"1592\":1,\"1595\":1,\"1596\":1,\"1597\":1,\"1598\":1,\"1637\":1,\"1686\":1,\"1709\":1,\"1715\":2,\"1716\":2,\"1717\":2,\"1718\":1,\"1769\":1,\"1772\":1,\"1773\":1,\"1774\":1,\"1775\":1,\"1814\":1,\"1863\":1,\"1886\":1,\"1892\":2,\"1893\":2,\"1894\":2,\"1895\":1,\"1946\":1,\"1949\":1,\"1950\":1,\"1951\":1,\"1952\":1,\"1991\":1,\"2040\":1,\"2063\":1,\"2069\":2,\"2070\":2,\"2071\":2,\"2072\":1,\"2123\":1,\"2126\":1,\"2127\":1,\"2128\":1,\"2129\":1,\"2168\":1,\"2227\":1,\"2253\":1,\"2259\":2,\"2260\":2,\"2261\":2,\"2262\":1,\"2338\":1,\"2341\":1,\"2342\":1,\"2343\":1,\"2344\":1,\"2387\":1,\"2446\":1,\"2472\":1,\"2478\":2,\"2479\":2,\"2480\":2,\"2481\":1,\"2557\":1,\"2560\":1,\"2561\":1,\"2562\":1,\"2563\":1,\"2606\":1,\"2665\":1,\"2691\":1,\"2697\":2,\"2698\":2,\"2699\":2,\"2700\":1,\"2776\":1,\"2779\":1,\"2780\":1,\"2781\":1,\"2782\":1,\"2825\":1}}],[\"remediations\",{\"1\":{\"38\":1}}],[\"recreating\",{\"1\":{\"298\":1,\"301\":1,\"304\":1,\"307\":1,\"310\":1,\"348\":1,\"443\":1,\"492\":1,\"518\":1,\"548\":1,\"578\":1,\"608\":1,\"654\":1,\"700\":1,\"746\":1,\"792\":1}}],[\"recipient\",{\"0\":{\"358\":1,\"384\":1},\"1\":{\"222\":2,\"223\":2,\"331\":1,\"344\":1,\"358\":1,\"359\":1,\"360\":1,\"384\":1,\"385\":1,\"879\":2,\"880\":2,\"1061\":2,\"1062\":2,\"1212\":2,\"1213\":2,\"1384\":2,\"1385\":2,\"1561\":2,\"1562\":2,\"1738\":2,\"1739\":2,\"1915\":2,\"1916\":2,\"2092\":2,\"2093\":2,\"2282\":2,\"2283\":2,\"2501\":2,\"2502\":2,\"2720\":2,\"2721\":2}}],[\"received\",{\"1\":{\"258\":1,\"282\":1,\"293\":1,\"377\":1,\"957\":1,\"1120\":1,\"1258\":1,\"1434\":1,\"1611\":1,\"1788\":1,\"1965\":1,\"2142\":1,\"2360\":1,\"2579\":1,\"2798\":1}}],[\"receive\",{\"1\":{\"90\":1,\"102\":2,\"103\":1,\"124\":1,\"202\":1,\"207\":1,\"352\":1,\"355\":1,\"381\":1,\"860\":1,\"864\":1,\"1041\":1,\"1046\":1,\"1192\":1,\"1197\":1,\"1365\":1,\"1369\":1,\"1542\":1,\"1546\":1,\"1719\":1,\"1723\":1,\"1896\":1,\"1900\":1,\"2073\":1,\"2077\":1,\"2263\":1,\"2267\":1,\"2482\":1,\"2486\":1,\"2701\":1,\"2705\":1}}],[\"receipt\",{\"1\":{\"38\":1}}],[\"recommand\",{\"1\":{\"442\":1,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"791\":1}}],[\"recommendation\",{\"1\":{\"170\":1,\"171\":1,\"173\":1,\"175\":1,\"176\":1,\"178\":1,\"180\":1,\"181\":1,\"182\":1,\"183\":1,\"184\":1,\"185\":1,\"186\":1,\"189\":1,\"190\":1,\"192\":1,\"195\":1,\"198\":1,\"199\":1,\"201\":1,\"204\":1,\"208\":1,\"209\":1,\"210\":1,\"215\":1,\"220\":1,\"221\":1,\"224\":1,\"225\":1,\"227\":1,\"228\":1,\"229\":1,\"232\":1,\"233\":1,\"234\":1,\"237\":1,\"238\":1,\"239\":1,\"240\":1,\"243\":1,\"244\":1,\"245\":1,\"247\":1,\"249\":1,\"251\":1,\"253\":1,\"254\":1,\"258\":1,\"259\":1,\"261\":1,\"262\":1,\"271\":1,\"272\":1,\"273\":1,\"274\":1,\"275\":1,\"811\":1,\"812\":1,\"814\":1,\"817\":1,\"818\":1,\"819\":1,\"822\":1,\"824\":1,\"825\":1,\"826\":1,\"827\":1,\"828\":1,\"829\":1,\"832\":1,\"834\":1,\"836\":1,\"838\":1,\"839\":1,\"841\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"850\":1,\"851\":1,\"852\":1,\"853\":1,\"854\":1,\"856\":1,\"857\":1,\"859\":1,\"865\":1,\"866\":1,\"867\":1,\"872\":1,\"877\":1,\"878\":1,\"881\":1,\"882\":1,\"887\":1,\"890\":1,\"891\":1,\"895\":1,\"898\":1,\"900\":1,\"916\":1,\"917\":1,\"918\":1,\"919\":1,\"920\":1,\"921\":1,\"935\":1,\"936\":1,\"937\":1,\"938\":1,\"939\":1,\"940\":1,\"942\":1,\"944\":1,\"946\":1,\"948\":1,\"950\":1,\"951\":1,\"953\":1,\"954\":1,\"955\":1,\"957\":1,\"958\":1,\"959\":1,\"962\":1,\"965\":1,\"967\":1,\"971\":1,\"972\":1,\"974\":1,\"977\":1,\"978\":1,\"979\":1,\"982\":1,\"984\":1,\"985\":1,\"986\":1,\"987\":1,\"988\":1,\"989\":1,\"1008\":1,\"1009\":1,\"1010\":1,\"1011\":1,\"1012\":1,\"1013\":1,\"1017\":1,\"1019\":1,\"1021\":1,\"1023\":1,\"1024\":1,\"1026\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1031\":1,\"1032\":1,\"1033\":1,\"1034\":1,\"1035\":1,\"1037\":1,\"1038\":1,\"1040\":1,\"1043\":1,\"1047\":1,\"1048\":1,\"1049\":1,\"1054\":1,\"1059\":1,\"1060\":1,\"1063\":1,\"1064\":1,\"1066\":1,\"1069\":1,\"1070\":1,\"1072\":1,\"1074\":1,\"1079\":1,\"1080\":1,\"1082\":1,\"1085\":1,\"1086\":1,\"1087\":1,\"1090\":1,\"1092\":1,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":1,\"1097\":1,\"1101\":1,\"1102\":1,\"1103\":1,\"1104\":1,\"1105\":1,\"1106\":1,\"1108\":1,\"1110\":1,\"1112\":1,\"1114\":1,\"1116\":1,\"1117\":1,\"1120\":1,\"1121\":1,\"1124\":1,\"1126\":1,\"1128\":1,\"1136\":1,\"1137\":1,\"1138\":1,\"1139\":1,\"1140\":1,\"1147\":1,\"1148\":1,\"1150\":1,\"1153\":1,\"1154\":1,\"1155\":1,\"1158\":1,\"1160\":1,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":1,\"1165\":1,\"1168\":1,\"1170\":1,\"1172\":1,\"1174\":1,\"1175\":1,\"1177\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1182\":1,\"1183\":1,\"1184\":1,\"1185\":1,\"1186\":1,\"1188\":1,\"1189\":1,\"1191\":1,\"1194\":1,\"1198\":1,\"1199\":1,\"1200\":1,\"1205\":1,\"1210\":1,\"1211\":1,\"1214\":1,\"1215\":1,\"1217\":1,\"1220\":1,\"1221\":1,\"1223\":1,\"1225\":1,\"1239\":1,\"1240\":1,\"1241\":1,\"1242\":1,\"1243\":1,\"1244\":1,\"1246\":1,\"1248\":1,\"1250\":1,\"1252\":1,\"1254\":1,\"1255\":1,\"1258\":1,\"1259\":1,\"1260\":1,\"1262\":1,\"1263\":1,\"1265\":1,\"1267\":1,\"1271\":1,\"1272\":1,\"1274\":1,\"1277\":1,\"1278\":1,\"1279\":1,\"1282\":1,\"1284\":1,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":1,\"1289\":1,\"1307\":1,\"1308\":1,\"1309\":1,\"1310\":1,\"1311\":1,\"1312\":1,\"1319\":1,\"1320\":1,\"1322\":1,\"1325\":1,\"1326\":1,\"1327\":1,\"1330\":1,\"1332\":1,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":1,\"1337\":1,\"1340\":1,\"1342\":1,\"1344\":1,\"1346\":1,\"1347\":1,\"1349\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1355\":1,\"1356\":1,\"1357\":1,\"1358\":1,\"1359\":1,\"1361\":1,\"1362\":1,\"1364\":1,\"1370\":1,\"1371\":1,\"1372\":1,\"1377\":1,\"1382\":1,\"1383\":1,\"1386\":1,\"1387\":1,\"1392\":1,\"1395\":1,\"1396\":1,\"1399\":1,\"1401\":1,\"1415\":1,\"1416\":1,\"1417\":1,\"1418\":1,\"1419\":1,\"1420\":1,\"1422\":1,\"1424\":1,\"1426\":1,\"1428\":1,\"1430\":1,\"1431\":1,\"1434\":1,\"1435\":1,\"1436\":1,\"1439\":1,\"1441\":1,\"1443\":1,\"1447\":1,\"1448\":1,\"1450\":1,\"1453\":1,\"1454\":1,\"1455\":1,\"1458\":1,\"1460\":1,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":1,\"1465\":1,\"1484\":1,\"1485\":1,\"1486\":1,\"1487\":1,\"1488\":1,\"1489\":1,\"1496\":1,\"1497\":1,\"1499\":1,\"1502\":1,\"1503\":1,\"1504\":1,\"1507\":1,\"1509\":1,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":1,\"1514\":1,\"1517\":1,\"1519\":1,\"1521\":1,\"1523\":1,\"1524\":1,\"1526\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1532\":1,\"1533\":1,\"1534\":1,\"1535\":1,\"1536\":1,\"1538\":1,\"1539\":1,\"1541\":1,\"1547\":1,\"1548\":1,\"1549\":1,\"1554\":1,\"1559\":1,\"1560\":1,\"1563\":1,\"1564\":1,\"1569\":1,\"1572\":1,\"1573\":1,\"1576\":1,\"1578\":1,\"1592\":1,\"1593\":1,\"1594\":1,\"1595\":1,\"1596\":1,\"1597\":1,\"1599\":1,\"1601\":1,\"1603\":1,\"1605\":1,\"1607\":1,\"1608\":1,\"1611\":1,\"1612\":1,\"1613\":1,\"1616\":1,\"1618\":1,\"1620\":1,\"1624\":1,\"1625\":1,\"1627\":1,\"1630\":1,\"1631\":1,\"1632\":1,\"1635\":1,\"1637\":1,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":1,\"1642\":1,\"1661\":1,\"1662\":1,\"1663\":1,\"1664\":1,\"1665\":1,\"1666\":1,\"1673\":1,\"1674\":1,\"1676\":1,\"1679\":1,\"1680\":1,\"1681\":1,\"1684\":1,\"1686\":1,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":1,\"1691\":1,\"1694\":1,\"1696\":1,\"1698\":1,\"1700\":1,\"1701\":1,\"1703\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1709\":1,\"1710\":1,\"1711\":1,\"1712\":1,\"1713\":1,\"1715\":1,\"1716\":1,\"1718\":1,\"1724\":1,\"1725\":1,\"1726\":1,\"1731\":1,\"1736\":1,\"1737\":1,\"1740\":1,\"1741\":1,\"1746\":1,\"1749\":1,\"1750\":1,\"1753\":1,\"1755\":1,\"1769\":1,\"1770\":1,\"1771\":1,\"1772\":1,\"1773\":1,\"1774\":1,\"1776\":1,\"1778\":1,\"1780\":1,\"1782\":1,\"1784\":1,\"1785\":1,\"1788\":1,\"1789\":1,\"1790\":1,\"1793\":1,\"1795\":1,\"1797\":1,\"1801\":1,\"1802\":1,\"1804\":1,\"1807\":1,\"1808\":1,\"1809\":1,\"1812\":1,\"1814\":1,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":1,\"1819\":1,\"1838\":1,\"1839\":1,\"1840\":1,\"1841\":1,\"1842\":1,\"1843\":1,\"1850\":1,\"1851\":1,\"1853\":1,\"1856\":1,\"1857\":1,\"1858\":1,\"1861\":1,\"1863\":1,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":1,\"1868\":1,\"1871\":1,\"1873\":1,\"1875\":1,\"1877\":1,\"1878\":1,\"1880\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1886\":1,\"1887\":1,\"1888\":1,\"1889\":1,\"1890\":1,\"1892\":1,\"1893\":1,\"1895\":1,\"1901\":1,\"1902\":1,\"1903\":1,\"1908\":1,\"1913\":1,\"1914\":1,\"1917\":1,\"1918\":1,\"1923\":1,\"1926\":1,\"1927\":1,\"1930\":1,\"1932\":1,\"1946\":1,\"1947\":1,\"1948\":1,\"1949\":1,\"1950\":1,\"1951\":1,\"1953\":1,\"1955\":1,\"1957\":1,\"1959\":1,\"1961\":1,\"1962\":1,\"1965\":1,\"1966\":1,\"1967\":1,\"1970\":1,\"1972\":1,\"1974\":1,\"1978\":1,\"1979\":1,\"1981\":1,\"1984\":1,\"1985\":1,\"1986\":1,\"1989\":1,\"1991\":1,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":1,\"1996\":1,\"2015\":1,\"2016\":1,\"2017\":1,\"2018\":1,\"2019\":1,\"2020\":1,\"2027\":1,\"2028\":1,\"2030\":1,\"2033\":1,\"2034\":1,\"2035\":1,\"2038\":1,\"2040\":1,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":1,\"2045\":1,\"2048\":1,\"2050\":1,\"2052\":1,\"2054\":1,\"2055\":1,\"2057\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2063\":1,\"2064\":1,\"2065\":1,\"2066\":1,\"2067\":1,\"2069\":1,\"2070\":1,\"2072\":1,\"2078\":1,\"2079\":1,\"2080\":1,\"2085\":1,\"2090\":1,\"2091\":1,\"2094\":1,\"2095\":1,\"2100\":1,\"2103\":1,\"2104\":1,\"2107\":1,\"2109\":1,\"2123\":1,\"2124\":1,\"2125\":1,\"2126\":1,\"2127\":1,\"2128\":1,\"2130\":1,\"2132\":1,\"2134\":1,\"2136\":1,\"2138\":1,\"2139\":1,\"2142\":1,\"2143\":1,\"2144\":1,\"2147\":1,\"2149\":1,\"2151\":1,\"2155\":1,\"2156\":1,\"2158\":1,\"2161\":1,\"2162\":1,\"2163\":1,\"2166\":1,\"2168\":1,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":1,\"2173\":1,\"2192\":1,\"2193\":1,\"2194\":1,\"2195\":1,\"2196\":1,\"2197\":1,\"2214\":1,\"2215\":1,\"2217\":1,\"2220\":1,\"2221\":1,\"2222\":1,\"2225\":1,\"2227\":1,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":1,\"2232\":1,\"2235\":1,\"2237\":1,\"2239\":1,\"2241\":1,\"2242\":1,\"2244\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2253\":1,\"2254\":1,\"2255\":1,\"2256\":1,\"2257\":1,\"2259\":1,\"2260\":1,\"2262\":1,\"2268\":1,\"2269\":1,\"2270\":1,\"2275\":1,\"2280\":1,\"2281\":1,\"2284\":1,\"2285\":1,\"2290\":1,\"2293\":1,\"2294\":1,\"2298\":1,\"2301\":1,\"2303\":1,\"2319\":1,\"2320\":1,\"2321\":1,\"2322\":1,\"2323\":1,\"2324\":1,\"2338\":1,\"2339\":1,\"2340\":1,\"2341\":1,\"2342\":1,\"2343\":1,\"2345\":1,\"2347\":1,\"2349\":1,\"2351\":1,\"2353\":1,\"2354\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2360\":1,\"2361\":1,\"2362\":1,\"2365\":1,\"2368\":1,\"2370\":1,\"2374\":1,\"2375\":1,\"2377\":1,\"2380\":1,\"2381\":1,\"2382\":1,\"2385\":1,\"2387\":1,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":1,\"2392\":1,\"2411\":1,\"2412\":1,\"2413\":1,\"2414\":1,\"2415\":1,\"2416\":1,\"2433\":1,\"2434\":1,\"2436\":1,\"2439\":1,\"2440\":1,\"2441\":1,\"2444\":1,\"2446\":1,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":1,\"2451\":1,\"2454\":1,\"2456\":1,\"2458\":1,\"2460\":1,\"2461\":1,\"2463\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2472\":1,\"2473\":1,\"2474\":1,\"2475\":1,\"2476\":1,\"2478\":1,\"2479\":1,\"2481\":1,\"2487\":1,\"2488\":1,\"2489\":1,\"2494\":1,\"2499\":1,\"2500\":1,\"2503\":1,\"2504\":1,\"2509\":1,\"2512\":1,\"2513\":1,\"2517\":1,\"2520\":1,\"2522\":1,\"2538\":1,\"2539\":1,\"2540\":1,\"2541\":1,\"2542\":1,\"2543\":1,\"2557\":1,\"2558\":1,\"2559\":1,\"2560\":1,\"2561\":1,\"2562\":1,\"2564\":1,\"2566\":1,\"2568\":1,\"2570\":1,\"2572\":1,\"2573\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2579\":1,\"2580\":1,\"2581\":1,\"2584\":1,\"2587\":1,\"2589\":1,\"2593\":1,\"2594\":1,\"2596\":1,\"2599\":1,\"2600\":1,\"2601\":1,\"2604\":1,\"2606\":1,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":1,\"2611\":1,\"2630\":1,\"2631\":1,\"2632\":1,\"2633\":1,\"2634\":1,\"2635\":1,\"2652\":1,\"2653\":1,\"2655\":1,\"2658\":1,\"2659\":1,\"2660\":1,\"2663\":1,\"2665\":1,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":1,\"2670\":1,\"2673\":1,\"2675\":1,\"2677\":1,\"2679\":1,\"2680\":1,\"2682\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2691\":1,\"2692\":1,\"2693\":1,\"2694\":1,\"2695\":1,\"2697\":1,\"2698\":1,\"2700\":1,\"2706\":1,\"2707\":1,\"2708\":1,\"2713\":1,\"2718\":1,\"2719\":1,\"2722\":1,\"2723\":1,\"2728\":1,\"2731\":1,\"2732\":1,\"2736\":1,\"2739\":1,\"2741\":1,\"2757\":1,\"2758\":1,\"2759\":1,\"2760\":1,\"2761\":1,\"2762\":1,\"2776\":1,\"2777\":1,\"2778\":1,\"2779\":1,\"2780\":1,\"2781\":1,\"2783\":1,\"2785\":1,\"2787\":1,\"2789\":1,\"2791\":1,\"2792\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2798\":1,\"2799\":1,\"2800\":1,\"2803\":1,\"2806\":1,\"2808\":1,\"2812\":1,\"2813\":1,\"2815\":1,\"2818\":1,\"2819\":1,\"2820\":1,\"2823\":1,\"2825\":1,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":1,\"2830\":1,\"2849\":1,\"2850\":1,\"2851\":1,\"2852\":1,\"2853\":1,\"2854\":1}}],[\"recommend\",{\"1\":{\"89\":1,\"299\":1,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"397\":1,\"398\":1,\"415\":1,\"418\":2,\"419\":1,\"444\":1,\"445\":1,\"448\":2,\"449\":1,\"471\":2,\"472\":1,\"493\":1,\"494\":1,\"497\":2,\"498\":1,\"519\":1,\"520\":1,\"523\":2,\"524\":1,\"549\":1,\"550\":1,\"553\":2,\"554\":1,\"579\":1,\"580\":1,\"583\":2,\"584\":1,\"609\":1,\"610\":1,\"626\":1,\"629\":2,\"630\":1,\"655\":1,\"656\":1,\"672\":1,\"675\":2,\"676\":1,\"701\":1,\"702\":1,\"718\":1,\"721\":2,\"722\":1,\"747\":1,\"748\":1,\"764\":1,\"767\":2,\"768\":1,\"793\":1,\"794\":1}}],[\"recommended\",{\"1\":{\"33\":1,\"96\":1,\"166\":1,\"285\":3,\"286\":3,\"296\":3,\"297\":3,\"438\":3,\"439\":3,\"464\":3,\"465\":3,\"487\":3,\"488\":3,\"513\":3,\"514\":3,\"543\":3,\"544\":3,\"573\":3,\"574\":3,\"603\":3,\"604\":3,\"649\":3,\"650\":3,\"695\":3,\"696\":3,\"741\":3,\"742\":3,\"787\":3,\"788\":3}}],[\"recognizing\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"recognize\",{\"1\":{\"38\":1}}],[\"recognition\",{\"1\":{\"38\":1,\"401\":1,\"612\":1,\"658\":1,\"704\":1,\"750\":1}}],[\"recording\",{\"1\":{\"314\":1}}],[\"recorded\",{\"0\":{\"27\":1,\"118\":1}}],[\"record\",{\"1\":{\"0\":1,\"26\":1,\"29\":1,\"32\":1,\"95\":2,\"113\":1,\"165\":2,\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"reply\",{\"1\":{\"217\":2,\"269\":1,\"270\":1,\"379\":1,\"874\":2,\"913\":1,\"914\":1,\"1005\":1,\"1006\":1,\"1056\":2,\"1134\":1,\"1135\":1,\"1207\":2,\"1305\":1,\"1306\":1,\"1379\":2,\"1481\":1,\"1482\":1,\"1556\":2,\"1658\":1,\"1659\":1,\"1733\":2,\"1835\":1,\"1836\":1,\"1910\":2,\"2012\":1,\"2013\":1,\"2087\":2,\"2189\":1,\"2190\":1,\"2277\":2,\"2316\":1,\"2317\":1,\"2408\":1,\"2409\":1,\"2496\":2,\"2535\":1,\"2536\":1,\"2627\":1,\"2628\":1,\"2715\":2,\"2754\":1,\"2755\":1,\"2846\":1,\"2847\":1}}],[\"replytoaddresses\",{\"0\":{\"217\":1,\"874\":1,\"1056\":1,\"1207\":1,\"1379\":1,\"1556\":1,\"1733\":1,\"1910\":1,\"2087\":1,\"2277\":1,\"2496\":1,\"2715\":1},\"1\":{\"217\":1,\"874\":1,\"1056\":1,\"1207\":1,\"1379\":1,\"1556\":1,\"1733\":1,\"1910\":1,\"2087\":1,\"2277\":1,\"2496\":1,\"2715\":1}}],[\"replies\",{\"1\":{\"191\":1,\"200\":1,\"246\":1,\"855\":1,\"858\":1,\"941\":1,\"1036\":1,\"1039\":1,\"1107\":1,\"1187\":1,\"1190\":1,\"1245\":1,\"1360\":1,\"1363\":1,\"1421\":1,\"1537\":1,\"1540\":1,\"1598\":1,\"1714\":1,\"1717\":1,\"1775\":1,\"1891\":1,\"1894\":1,\"1952\":1,\"2068\":1,\"2071\":1,\"2129\":1,\"2258\":1,\"2261\":1,\"2344\":1,\"2477\":1,\"2480\":1,\"2563\":1,\"2696\":1,\"2699\":1,\"2782\":1}}],[\"replacing\",{\"1\":{\"150\":1,\"298\":2,\"301\":1,\"304\":1,\"520\":2}}],[\"replaced\",{\"1\":{\"150\":1,\"344\":1}}],[\"replace\",{\"1\":{\"138\":1,\"158\":1,\"159\":1,\"285\":3,\"286\":3,\"296\":3,\"297\":3,\"299\":2,\"300\":11,\"302\":1,\"303\":11,\"305\":1,\"306\":2,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"360\":1,\"394\":1,\"438\":3,\"439\":3,\"442\":1,\"444\":1,\"445\":1,\"464\":3,\"465\":3,\"487\":3,\"488\":3,\"493\":1,\"494\":1,\"513\":3,\"514\":3,\"519\":1,\"520\":1,\"543\":3,\"544\":3,\"547\":1,\"549\":1,\"550\":1,\"573\":3,\"574\":3,\"577\":1,\"579\":1,\"580\":1,\"603\":3,\"604\":3,\"607\":1,\"609\":1,\"610\":1,\"649\":3,\"650\":3,\"653\":1,\"655\":1,\"656\":1,\"695\":3,\"696\":3,\"699\":1,\"701\":1,\"702\":1,\"741\":3,\"742\":3,\"745\":1,\"747\":1,\"748\":1,\"787\":3,\"788\":3,\"791\":1,\"793\":1,\"794\":1}}],[\"reproduction\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"reproduce\",{\"1\":{\"37\":1,\"38\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"represented\",{\"1\":{\"352\":1}}],[\"representation\",{\"1\":{\"100\":1}}],[\"repo\",{\"1\":{\"95\":1,\"165\":1}}],[\"repository>\",{\"1\":{\"158\":1}}],[\"repository\",{\"1\":{\"37\":1,\"87\":1,\"95\":2,\"123\":1,\"124\":1,\"126\":1,\"130\":1,\"131\":1,\"148\":1,\"165\":2,\"228\":2,\"314\":1,\"410\":1,\"413\":2,\"621\":1,\"624\":2,\"667\":1,\"670\":2,\"713\":1,\"716\":2,\"759\":1,\"762\":2}}],[\"repositories>\",{\"1\":{\"158\":1}}],[\"repositories\",{\"1\":{\"0\":1,\"32\":1,\"412\":2,\"623\":2,\"669\":2,\"715\":2,\"761\":2}}],[\"reported\",{\"1\":{\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"651\":1,\"697\":1,\"743\":1,\"789\":1}}],[\"reports\",{\"1\":{\"415\":2,\"626\":2,\"672\":2,\"718\":2,\"764\":2}}],[\"reporting\",{\"1\":{\"35\":1,\"36\":1,\"39\":1,\"124\":1,\"393\":1}}],[\"report\",{\"0\":{\"37\":1},\"1\":{\"14\":1,\"20\":1,\"38\":1,\"39\":1,\"71\":1,\"415\":4,\"427\":1,\"533\":2,\"563\":2,\"593\":2,\"626\":4,\"639\":2,\"672\":4,\"685\":2,\"718\":4,\"731\":2,\"764\":4,\"776\":1}}],[\"relevant\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"releases\",{\"0\":{\"167\":1},\"1\":{\"279\":1,\"286\":7,\"290\":1,\"297\":2,\"392\":1,\"415\":3,\"429\":1,\"532\":2,\"533\":2,\"534\":1,\"562\":2,\"563\":2,\"564\":1,\"592\":2,\"593\":3,\"594\":1,\"626\":3,\"638\":2,\"639\":3,\"640\":1,\"672\":3,\"684\":2,\"685\":3,\"686\":1,\"718\":3,\"730\":2,\"731\":4,\"732\":1,\"764\":3,\"778\":1}}],[\"releases>\",{\"1\":{\"158\":1}}],[\"released\",{\"1\":{\"137\":1,\"138\":1,\"427\":2,\"520\":1,\"776\":2}}],[\"release\",{\"0\":{\"136\":1,\"137\":1,\"138\":1,\"344\":1},\"1\":{\"20\":2,\"38\":1,\"42\":2,\"43\":1,\"44\":2,\"46\":2,\"47\":1,\"48\":2,\"49\":1,\"50\":2,\"51\":1,\"52\":2,\"53\":1,\"54\":2,\"55\":1,\"56\":2,\"57\":1,\"58\":2,\"59\":1,\"60\":2,\"61\":1,\"62\":2,\"63\":1,\"137\":7,\"138\":6,\"153\":3,\"154\":2,\"279\":2,\"286\":1,\"290\":2,\"297\":1,\"300\":12,\"303\":12,\"306\":3,\"309\":1,\"312\":1,\"344\":1,\"404\":1,\"405\":1,\"409\":1,\"412\":1,\"433\":2,\"442\":1,\"459\":2,\"468\":1,\"482\":2,\"491\":1,\"508\":2,\"517\":1,\"538\":2,\"547\":1,\"568\":2,\"577\":1,\"598\":2,\"607\":1,\"615\":1,\"616\":1,\"620\":1,\"623\":1,\"644\":2,\"653\":1,\"661\":1,\"662\":1,\"666\":1,\"669\":1,\"690\":2,\"699\":1,\"707\":1,\"708\":1,\"712\":1,\"715\":1,\"736\":2,\"745\":1,\"753\":1,\"754\":1,\"758\":1,\"761\":1,\"782\":2,\"791\":1}}],[\"relies\",{\"1\":{\"409\":1,\"620\":1,\"666\":1,\"712\":1,\"758\":1}}],[\"reliably\",{\"1\":{\"94\":1}}],[\"reliability\",{\"1\":{\"5\":1,\"11\":1}}],[\"relying\",{\"1\":{\"123\":1}}],[\"relationship\",{\"1\":{\"367\":1,\"379\":1}}],[\"relationships\",{\"1\":{\"94\":1,\"379\":1}}],[\"related\",{\"1\":{\"37\":1,\"77\":1}}],[\"reader\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"ready\",{\"1\":{\"410\":1,\"621\":1,\"667\":1,\"713\":1,\"759\":1}}],[\"readable\",{\"1\":{\"286\":1,\"297\":1,\"429\":1,\"778\":1}}],[\"reading\",{\"1\":{\"190\":1,\"199\":1,\"244\":1,\"260\":1,\"344\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1,\"854\":1,\"857\":1,\"939\":1,\"960\":1,\"1035\":1,\"1038\":1,\"1105\":1,\"1122\":1,\"1186\":1,\"1189\":1,\"1243\":1,\"1261\":1,\"1359\":1,\"1362\":1,\"1419\":1,\"1437\":1,\"1536\":1,\"1539\":1,\"1596\":1,\"1614\":1,\"1713\":1,\"1716\":1,\"1773\":1,\"1791\":1,\"1890\":1,\"1893\":1,\"1950\":1,\"1968\":1,\"2067\":1,\"2070\":1,\"2127\":1,\"2145\":1,\"2257\":1,\"2260\":1,\"2342\":1,\"2363\":1,\"2476\":1,\"2479\":1,\"2561\":1,\"2582\":1,\"2695\":1,\"2698\":1,\"2780\":1,\"2801\":1}}],[\"read\",{\"0\":{\"190\":1,\"199\":1,\"244\":1,\"854\":1,\"857\":1,\"939\":1,\"1035\":1,\"1038\":1,\"1105\":1,\"1186\":1,\"1189\":1,\"1243\":1,\"1359\":1,\"1362\":1,\"1419\":1,\"1536\":1,\"1539\":1,\"1596\":1,\"1713\":1,\"1716\":1,\"1773\":1,\"1890\":1,\"1893\":1,\"1950\":1,\"2067\":1,\"2070\":1,\"2127\":1,\"2257\":1,\"2260\":1,\"2342\":1,\"2476\":1,\"2479\":1,\"2561\":1,\"2695\":1,\"2698\":1,\"2780\":1},\"1\":{\"82\":1,\"86\":2,\"92\":1,\"141\":1,\"158\":1,\"190\":1,\"199\":1,\"203\":1,\"227\":1,\"228\":1,\"244\":1,\"256\":1,\"323\":9,\"344\":7,\"345\":1,\"369\":2,\"394\":2,\"422\":1,\"424\":2,\"438\":2,\"452\":1,\"454\":2,\"464\":2,\"475\":1,\"477\":2,\"487\":2,\"501\":1,\"503\":2,\"513\":2,\"527\":1,\"529\":2,\"543\":2,\"557\":1,\"559\":2,\"573\":2,\"587\":1,\"589\":2,\"603\":2,\"633\":1,\"635\":2,\"649\":2,\"679\":1,\"681\":2,\"695\":2,\"725\":1,\"727\":2,\"741\":2,\"771\":1,\"773\":2,\"787\":2,\"798\":2,\"854\":1,\"857\":1,\"861\":1,\"925\":4,\"931\":1,\"933\":5,\"939\":1,\"956\":1,\"1035\":1,\"1038\":1,\"1042\":1,\"1105\":1,\"1119\":1,\"1186\":1,\"1189\":1,\"1193\":1,\"1229\":4,\"1235\":1,\"1237\":5,\"1243\":1,\"1257\":1,\"1359\":1,\"1362\":1,\"1366\":1,\"1405\":4,\"1411\":1,\"1413\":5,\"1419\":1,\"1433\":1,\"1536\":1,\"1539\":1,\"1543\":1,\"1582\":4,\"1588\":1,\"1590\":5,\"1596\":1,\"1610\":1,\"1713\":1,\"1716\":1,\"1720\":1,\"1759\":4,\"1765\":1,\"1767\":5,\"1773\":1,\"1787\":1,\"1890\":1,\"1893\":1,\"1897\":1,\"1936\":4,\"1942\":1,\"1944\":5,\"1950\":1,\"1964\":1,\"2067\":1,\"2070\":1,\"2074\":1,\"2113\":4,\"2119\":1,\"2121\":5,\"2127\":1,\"2141\":1,\"2201\":2,\"2257\":1,\"2260\":1,\"2264\":1,\"2328\":4,\"2334\":1,\"2336\":5,\"2342\":1,\"2359\":1,\"2420\":2,\"2476\":1,\"2479\":1,\"2483\":1,\"2547\":4,\"2553\":1,\"2555\":5,\"2561\":1,\"2578\":1,\"2639\":2,\"2695\":1,\"2698\":1,\"2702\":1,\"2766\":4,\"2772\":1,\"2774\":5,\"2780\":1,\"2797\":1}}],[\"reasons\",{\"1\":{\"87\":1}}],[\"reason\",{\"1\":{\"37\":1}}],[\"reach\",{\"1\":{\"12\":1,\"186\":1,\"187\":1,\"188\":1,\"192\":1,\"193\":1,\"194\":1,\"195\":1,\"196\":1,\"197\":1,\"240\":1,\"241\":1,\"242\":1,\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"realms\",{\"1\":{\"823\":1,\"905\":1,\"983\":1,\"997\":1,\"1091\":1,\"1159\":1,\"1283\":1,\"1297\":1,\"1331\":1,\"1459\":1,\"1473\":1,\"1508\":1,\"1636\":1,\"1650\":1,\"1685\":1,\"1813\":1,\"1827\":1,\"1862\":1,\"1990\":1,\"2004\":1,\"2039\":1,\"2167\":1,\"2181\":1,\"2226\":1,\"2308\":1,\"2386\":1,\"2400\":1,\"2445\":1,\"2527\":1,\"2605\":1,\"2619\":1,\"2664\":1,\"2746\":1,\"2824\":1,\"2838\":1}}],[\"realm\",{\"0\":{\"823\":1,\"983\":1,\"1091\":1,\"1159\":1,\"1283\":1,\"1331\":1,\"1459\":1,\"1508\":1,\"1636\":1,\"1685\":1,\"1813\":1,\"1862\":1,\"1990\":1,\"2039\":1,\"2167\":1,\"2226\":1,\"2386\":1,\"2445\":1,\"2605\":1,\"2664\":1,\"2824\":1},\"1\":{\"811\":1,\"814\":1,\"823\":3,\"903\":1,\"905\":1,\"971\":1,\"974\":1,\"983\":3,\"994\":1,\"995\":1,\"997\":1,\"1079\":1,\"1082\":1,\"1091\":3,\"1147\":1,\"1150\":1,\"1159\":3,\"1271\":1,\"1274\":1,\"1283\":3,\"1294\":1,\"1295\":1,\"1297\":1,\"1319\":1,\"1322\":1,\"1331\":3,\"1447\":1,\"1450\":1,\"1459\":3,\"1470\":1,\"1471\":1,\"1473\":1,\"1496\":1,\"1499\":1,\"1508\":3,\"1624\":1,\"1627\":1,\"1636\":3,\"1647\":1,\"1648\":1,\"1650\":1,\"1673\":1,\"1676\":1,\"1685\":3,\"1801\":1,\"1804\":1,\"1813\":3,\"1824\":1,\"1825\":1,\"1827\":1,\"1850\":1,\"1853\":1,\"1862\":3,\"1978\":1,\"1981\":1,\"1990\":3,\"2001\":1,\"2002\":1,\"2004\":1,\"2027\":1,\"2030\":1,\"2039\":3,\"2155\":1,\"2158\":1,\"2167\":3,\"2178\":1,\"2179\":1,\"2181\":1,\"2214\":1,\"2217\":1,\"2226\":3,\"2306\":1,\"2308\":1,\"2374\":1,\"2377\":1,\"2386\":3,\"2397\":1,\"2398\":1,\"2400\":1,\"2433\":1,\"2436\":1,\"2445\":3,\"2525\":1,\"2527\":1,\"2593\":1,\"2596\":1,\"2605\":3,\"2616\":1,\"2617\":1,\"2619\":1,\"2652\":1,\"2655\":1,\"2664\":3,\"2744\":1,\"2746\":1,\"2812\":1,\"2815\":1,\"2824\":3,\"2835\":1,\"2836\":1,\"2838\":1}}],[\"realistic\",{\"1\":{\"99\":1}}],[\"real\",{\"1\":{\"5\":1,\"11\":1,\"113\":3,\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1}}],[\"re\",{\"1\":{\"12\":3,\"413\":3,\"414\":1,\"415\":1,\"624\":3,\"625\":1,\"626\":1,\"670\":3,\"671\":1,\"672\":1,\"716\":3,\"717\":1,\"718\":1,\"762\":3,\"763\":1,\"764\":1}}],[\"result\",{\"1\":{\"377\":1}}],[\"resultset\",{\"1\":{\"149\":1}}],[\"results\",{\"1\":{\"124\":1,\"352\":1,\"353\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"resulting\",{\"1\":{\"77\":1,\"116\":1}}],[\"restrict\",{\"1\":{\"344\":1}}],[\"restriction\",{\"1\":{\"344\":1}}],[\"restricted\",{\"1\":{\"10\":1}}],[\"restart\",{\"1\":{\"299\":2,\"300\":2,\"302\":2,\"303\":2,\"305\":2,\"306\":2,\"308\":2,\"309\":1,\"311\":2,\"312\":1,\"323\":8,\"444\":2,\"445\":1,\"493\":2,\"494\":1,\"519\":2,\"520\":1,\"549\":2,\"550\":1,\"579\":2,\"580\":1,\"609\":2,\"610\":1,\"655\":2,\"656\":1,\"701\":2,\"702\":1,\"747\":2,\"748\":1,\"793\":2,\"794\":1}}],[\"restful\",{\"1\":{\"91\":1}}],[\"rest\",{\"1\":{\"90\":1,\"130\":1,\"131\":1,\"142\":1,\"144\":2,\"149\":1,\"285\":1,\"296\":1,\"519\":1,\"925\":1,\"931\":1,\"993\":2,\"1229\":1,\"1235\":1,\"1293\":2,\"1405\":1,\"1411\":1,\"1469\":2,\"1582\":1,\"1588\":1,\"1646\":2,\"1759\":1,\"1765\":1,\"1823\":2,\"1936\":1,\"1942\":1,\"2000\":2,\"2113\":1,\"2119\":1,\"2177\":2,\"2328\":1,\"2334\":1,\"2396\":2,\"2547\":1,\"2553\":1,\"2615\":2,\"2766\":1,\"2772\":1,\"2834\":2}}],[\"response\",{\"0\":{\"202\":1,\"860\":1,\"1041\":1,\"1192\":1,\"1365\":1,\"1542\":1,\"1719\":1,\"1896\":1,\"2073\":1,\"2263\":1,\"2482\":1,\"2701\":1},\"1\":{\"103\":1,\"202\":2,\"257\":2,\"377\":2,\"389\":1,\"860\":2,\"1041\":2,\"1192\":2,\"1365\":2,\"1542\":2,\"1719\":2,\"1896\":2,\"2073\":2,\"2263\":2,\"2482\":2,\"2701\":2}}],[\"responsibly\",{\"1\":{\"39\":1}}],[\"responsible\",{\"0\":{\"36\":1},\"1\":{\"35\":1,\"36\":1,\"84\":1,\"424\":1,\"454\":1,\"477\":1,\"503\":1,\"529\":1,\"559\":1,\"589\":1,\"635\":1,\"681\":1,\"727\":1,\"773\":1}}],[\"respectively\",{\"1\":{\"344\":1,\"350\":1}}],[\"respective\",{\"1\":{\"77\":1,\"435\":1,\"461\":1,\"484\":1,\"510\":1,\"530\":1,\"540\":1,\"570\":1,\"600\":1,\"646\":1,\"692\":1,\"738\":1,\"784\":1}}],[\"resource\",{\"0\":{\"144\":1,\"895\":1,\"962\":1,\"1124\":1,\"1263\":1,\"1439\":1,\"1616\":1,\"1793\":1,\"1970\":1,\"2147\":1,\"2298\":1,\"2365\":1,\"2517\":1,\"2584\":1,\"2736\":1,\"2803\":1},\"1\":{\"85\":2,\"91\":1,\"95\":2,\"140\":1,\"141\":2,\"142\":1,\"143\":6,\"145\":2,\"146\":6,\"147\":2,\"156\":1,\"165\":2,\"190\":1,\"199\":1,\"244\":1,\"286\":1,\"297\":1,\"300\":1,\"303\":1,\"306\":1,\"309\":1,\"312\":1,\"327\":1,\"329\":2,\"330\":1,\"334\":7,\"341\":1,\"343\":2,\"344\":2,\"348\":2,\"352\":2,\"360\":1,\"363\":7,\"373\":2,\"377\":2,\"389\":8,\"439\":1,\"465\":1,\"488\":1,\"514\":1,\"544\":1,\"574\":1,\"604\":1,\"650\":1,\"696\":1,\"742\":1,\"788\":1,\"854\":1,\"857\":1,\"895\":2,\"932\":1,\"939\":1,\"962\":2,\"1035\":1,\"1038\":1,\"1105\":1,\"1124\":2,\"1186\":1,\"1189\":1,\"1236\":1,\"1243\":1,\"1263\":2,\"1359\":1,\"1362\":1,\"1412\":1,\"1419\":1,\"1439\":2,\"1536\":1,\"1539\":1,\"1589\":1,\"1596\":1,\"1616\":2,\"1713\":1,\"1716\":1,\"1766\":1,\"1773\":1,\"1793\":2,\"1890\":1,\"1893\":1,\"1943\":1,\"1950\":1,\"1970\":2,\"2067\":1,\"2070\":1,\"2120\":1,\"2127\":1,\"2147\":2,\"2257\":1,\"2260\":1,\"2298\":2,\"2335\":1,\"2342\":1,\"2365\":2,\"2476\":1,\"2479\":1,\"2517\":2,\"2554\":1,\"2561\":1,\"2584\":2,\"2695\":1,\"2698\":1,\"2736\":2,\"2773\":1,\"2780\":1,\"2803\":2}}],[\"resources\",{\"0\":{\"140\":1,\"329\":1,\"352\":1},\"1\":{\"5\":1,\"22\":1,\"81\":2,\"85\":1,\"86\":4,\"91\":5,\"93\":2,\"95\":8,\"98\":1,\"105\":2,\"123\":1,\"134\":1,\"137\":1,\"138\":1,\"141\":4,\"143\":1,\"148\":1,\"149\":1,\"155\":3,\"156\":1,\"165\":8,\"202\":1,\"203\":1,\"207\":1,\"256\":1,\"260\":1,\"281\":1,\"285\":5,\"286\":5,\"292\":1,\"296\":5,\"297\":5,\"299\":8,\"300\":1,\"303\":1,\"306\":1,\"327\":5,\"328\":2,\"329\":2,\"330\":3,\"334\":1,\"343\":3,\"344\":7,\"345\":1,\"348\":1,\"353\":1,\"354\":1,\"360\":1,\"363\":2,\"373\":1,\"380\":1,\"386\":1,\"389\":2,\"439\":1,\"465\":1,\"488\":1,\"514\":1,\"544\":1,\"574\":1,\"604\":1,\"650\":1,\"696\":1,\"742\":1,\"788\":1,\"860\":1,\"861\":1,\"864\":1,\"932\":1,\"956\":1,\"960\":1,\"1041\":1,\"1042\":1,\"1046\":1,\"1119\":1,\"1122\":1,\"1192\":1,\"1193\":1,\"1197\":1,\"1236\":1,\"1257\":1,\"1261\":1,\"1365\":1,\"1366\":1,\"1369\":1,\"1412\":1,\"1433\":1,\"1437\":1,\"1542\":1,\"1543\":1,\"1546\":1,\"1589\":1,\"1610\":1,\"1614\":1,\"1719\":1,\"1720\":1,\"1723\":1,\"1766\":1,\"1787\":1,\"1791\":1,\"1896\":1,\"1897\":1,\"1900\":1,\"1943\":1,\"1964\":1,\"1968\":1,\"2073\":1,\"2074\":1,\"2077\":1,\"2120\":1,\"2141\":1,\"2145\":1,\"2263\":1,\"2264\":1,\"2267\":1,\"2335\":1,\"2359\":1,\"2363\":1,\"2482\":1,\"2483\":1,\"2486\":1,\"2554\":1,\"2578\":1,\"2582\":1,\"2701\":1,\"2702\":1,\"2705\":1,\"2773\":1,\"2797\":1,\"2801\":1}}],[\"resolution\",{\"1\":{\"38\":1}}],[\"resolves\",{\"1\":{\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"438\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1}}],[\"resolved\",{\"1\":{\"38\":1}}],[\"resolve\",{\"0\":{\"144\":1},\"1\":{\"38\":2,\"204\":1,\"259\":1,\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"651\":1,\"697\":1,\"743\":1,\"789\":1,\"958\":1,\"1043\":1,\"1121\":1,\"1194\":1,\"1259\":1,\"1435\":1,\"1612\":1,\"1789\":1,\"1966\":1,\"2143\":1,\"2361\":1,\"2580\":1,\"2799\":1}}],[\"researcher\",{\"1\":{\"94\":1,\"122\":1}}],[\"researchers\",{\"1\":{\"36\":1,\"123\":2}}],[\"researchstudy\",{\"1\":{\"93\":1}}],[\"research\",{\"1\":{\"0\":2,\"5\":2,\"6\":2,\"9\":1,\"11\":1,\"12\":3,\"26\":2,\"29\":1,\"32\":1,\"73\":4,\"77\":1,\"78\":2,\"81\":1,\"87\":3,\"94\":8,\"98\":1,\"112\":4,\"113\":4,\"116\":1,\"122\":2,\"123\":4,\"125\":3,\"126\":1}}],[\"r4\",{\"1\":{\"0\":1,\"5\":1,\"6\":1,\"9\":1,\"32\":1,\"84\":1,\"98\":1,\"123\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2328\":1,\"2547\":1,\"2766\":1}}],[\"07\",{\"1\":{\"427\":1,\"776\":1}}],[\"01zz1802a\",{\"1\":{\"78\":1}}],[\"01zz1802e\",{\"1\":{\"78\":1}}],[\"01zz2307c\",{\"1\":{\"77\":1}}],[\"01zz2307b\",{\"1\":{\"77\":1}}],[\"01zz2307a\",{\"1\":{\"77\":1}}],[\"06\",{\"1\":{\"14\":1}}],[\"00474993fa261b0225f93c5a66aa6fcc\",{\"1\":{\"798\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"00\",{\"1\":{\"14\":6,\"41\":2}}],[\"0\",{\"0\":{\"30\":1,\"31\":1,\"44\":2,\"46\":1,\"48\":1,\"50\":1,\"56\":1,\"58\":1,\"169\":1,\"236\":1,\"264\":1,\"298\":4,\"301\":4,\"304\":3,\"307\":1,\"310\":1,\"419\":1,\"442\":1,\"449\":1,\"456\":2,\"468\":1,\"472\":1,\"479\":1,\"491\":1,\"498\":1,\"505\":1,\"517\":1,\"518\":1,\"524\":1,\"535\":1,\"547\":1,\"548\":1,\"554\":1,\"577\":1,\"578\":1,\"584\":1,\"607\":1,\"630\":1,\"641\":1,\"653\":1,\"676\":1,\"687\":1,\"699\":1,\"700\":1,\"722\":1,\"745\":1,\"746\":1,\"768\":1,\"791\":1},\"1\":{\"0\":1,\"5\":1,\"6\":1,\"20\":13,\"21\":1,\"30\":1,\"32\":1,\"42\":3,\"44\":7,\"46\":4,\"48\":4,\"50\":4,\"52\":4,\"54\":4,\"56\":4,\"58\":5,\"60\":4,\"62\":3,\"84\":1,\"94\":1,\"95\":3,\"98\":1,\"112\":1,\"113\":1,\"123\":1,\"134\":1,\"135\":1,\"141\":2,\"150\":2,\"153\":2,\"155\":13,\"158\":6,\"159\":2,\"165\":3,\"166\":2,\"216\":1,\"276\":1,\"285\":8,\"286\":28,\"287\":1,\"296\":8,\"297\":13,\"298\":10,\"299\":40,\"300\":100,\"301\":16,\"302\":16,\"303\":88,\"304\":5,\"305\":12,\"306\":26,\"307\":5,\"308\":11,\"309\":13,\"310\":7,\"311\":12,\"312\":14,\"323\":35,\"343\":2,\"353\":4,\"394\":6,\"396\":6,\"417\":1,\"419\":2,\"421\":1,\"427\":28,\"429\":8,\"430\":1,\"433\":2,\"442\":8,\"443\":5,\"447\":1,\"449\":2,\"451\":3,\"456\":2,\"459\":2,\"464\":4,\"465\":4,\"468\":4,\"470\":1,\"472\":2,\"474\":2,\"479\":2,\"482\":2,\"487\":2,\"488\":2,\"491\":4,\"492\":5,\"493\":8,\"494\":9,\"496\":1,\"498\":2,\"500\":2,\"505\":2,\"508\":2,\"513\":2,\"514\":2,\"517\":4,\"518\":4,\"519\":6,\"520\":20,\"522\":1,\"524\":2,\"526\":2,\"535\":1,\"538\":2,\"543\":2,\"544\":2,\"547\":8,\"548\":9,\"549\":6,\"550\":8,\"552\":1,\"554\":2,\"556\":1,\"565\":1,\"568\":2,\"577\":8,\"578\":6,\"579\":2,\"580\":1,\"582\":1,\"584\":2,\"586\":1,\"595\":1,\"598\":2,\"607\":8,\"608\":5,\"628\":1,\"630\":2,\"632\":2,\"641\":1,\"644\":2,\"649\":2,\"650\":2,\"653\":8,\"654\":6,\"655\":4,\"656\":7,\"674\":1,\"676\":2,\"678\":2,\"687\":1,\"690\":2,\"695\":2,\"696\":2,\"699\":8,\"700\":7,\"701\":6,\"702\":8,\"720\":1,\"722\":2,\"724\":1,\"733\":1,\"736\":2,\"745\":8,\"746\":6,\"747\":2,\"748\":1,\"766\":1,\"768\":2,\"770\":1,\"776\":28,\"778\":8,\"779\":1,\"782\":2,\"791\":8,\"792\":5,\"798\":1,\"802\":1,\"806\":2,\"808\":6,\"830\":2,\"873\":1,\"887\":1,\"892\":1,\"902\":1,\"925\":1,\"929\":1,\"933\":2,\"968\":6,\"990\":2,\"993\":1,\"1055\":1,\"1076\":6,\"1098\":2,\"1144\":6,\"1166\":2,\"1206\":1,\"1229\":1,\"1233\":1,\"1237\":2,\"1268\":6,\"1290\":2,\"1293\":1,\"1297\":1,\"1316\":6,\"1338\":2,\"1378\":1,\"1392\":1,\"1397\":1,\"1405\":1,\"1409\":1,\"1413\":2,\"1444\":6,\"1466\":2,\"1469\":1,\"1473\":1,\"1493\":6,\"1515\":2,\"1555\":1,\"1569\":1,\"1574\":1,\"1582\":1,\"1586\":1,\"1590\":2,\"1621\":6,\"1643\":2,\"1646\":1,\"1650\":1,\"1670\":6,\"1692\":2,\"1732\":1,\"1746\":1,\"1751\":1,\"1759\":1,\"1763\":1,\"1767\":2,\"1798\":6,\"1820\":2,\"1823\":1,\"1847\":6,\"1869\":2,\"1909\":1,\"1923\":1,\"1928\":1,\"1936\":1,\"1940\":1,\"1944\":2,\"1975\":6,\"1997\":2,\"2000\":1,\"2024\":6,\"2046\":2,\"2086\":1,\"2100\":1,\"2105\":1,\"2113\":1,\"2117\":1,\"2121\":2,\"2152\":6,\"2174\":2,\"2177\":1,\"2181\":1,\"2201\":1,\"2205\":1,\"2209\":2,\"2211\":6,\"2233\":2,\"2276\":1,\"2290\":1,\"2295\":1,\"2305\":1,\"2308\":1,\"2328\":1,\"2332\":1,\"2336\":2,\"2371\":6,\"2393\":2,\"2396\":1,\"2400\":1,\"2420\":1,\"2424\":1,\"2428\":2,\"2430\":6,\"2452\":2,\"2495\":1,\"2509\":1,\"2514\":1,\"2524\":1,\"2547\":1,\"2551\":1,\"2555\":2,\"2590\":6,\"2612\":2,\"2615\":1,\"2639\":1,\"2643\":1,\"2647\":2,\"2649\":6,\"2671\":2,\"2714\":1,\"2728\":1,\"2733\":1,\"2743\":1,\"2766\":1,\"2770\":1,\"2774\":2,\"2809\":6,\"2831\":2,\"2834\":1}}],[\"23\",{\"1\":{\"323\":1}}],[\"2202\",{\"1\":{\"286\":3,\"297\":3,\"439\":3,\"465\":3,\"488\":3,\"514\":3,\"544\":3,\"574\":3,\"604\":3,\"650\":3,\"696\":3,\"742\":3,\"788\":3}}],[\"2101\",{\"1\":{\"285\":3,\"296\":3,\"438\":3,\"464\":3,\"487\":3,\"513\":3,\"543\":3,\"573\":3,\"603\":3,\"649\":3,\"695\":3,\"741\":3,\"787\":3}}],[\"2147483647\",{\"1\":{\"155\":1}}],[\"2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c\",{\"1\":{\"806\":1,\"933\":1,\"1237\":1,\"1413\":1,\"1590\":1,\"1767\":1,\"1944\":1,\"2121\":1,\"2209\":1,\"2336\":1,\"2428\":1,\"2555\":1,\"2647\":1,\"2774\":1}}],[\"24\",{\"1\":{\"101\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"201\",{\"1\":{\"334\":1}}],[\"2018\",{\"0\":{\"78\":1}}],[\"20\",{\"1\":{\"260\":1,\"278\":2,\"289\":2,\"323\":9,\"432\":2,\"458\":2,\"481\":2,\"507\":2,\"537\":2,\"567\":2,\"597\":2,\"643\":2,\"689\":2,\"735\":2,\"781\":2,\"960\":1,\"1122\":1,\"1261\":1,\"1437\":1,\"1614\":1,\"1791\":1,\"1968\":1,\"2145\":1,\"2363\":1,\"2582\":1,\"2801\":1}}],[\"2000\",{\"1\":{\"189\":1,\"243\":1,\"853\":1,\"938\":1,\"1034\":1,\"1104\":1,\"1185\":1,\"1242\":1,\"1358\":1,\"1418\":1,\"1535\":1,\"1595\":1,\"1712\":1,\"1772\":1,\"1889\":1,\"1949\":1,\"2066\":1,\"2126\":1,\"2256\":1,\"2341\":1,\"2475\":1,\"2560\":1,\"2694\":1,\"2779\":1}}],[\"2001\",{\"1\":{\"158\":1,\"394\":1}}],[\"2026\",{\"0\":{\"77\":1}}],[\"2020\",{\"0\":{\"29\":1},\"1\":{\"125\":1}}],[\"2024\",{\"1\":{\"26\":1,\"427\":1,\"776\":1}}],[\"2022\",{\"0\":{\"28\":1,\"78\":1},\"1\":{\"26\":2,\"125\":1,\"314\":1}}],[\"2021\",{\"1\":{\"26\":4}}],[\"2023\",{\"0\":{\"77\":1,\"111\":1},\"1\":{\"1\":1,\"26\":2}}],[\"2bjson\",{\"1\":{\"202\":1,\"207\":1,\"860\":1,\"864\":1,\"1041\":1,\"1046\":1,\"1192\":1,\"1197\":1,\"1365\":1,\"1369\":1,\"1542\":1,\"1546\":1,\"1719\":1,\"1723\":1,\"1896\":1,\"1900\":1,\"2073\":1,\"2077\":1,\"2263\":1,\"2267\":1,\"2482\":1,\"2486\":1,\"2701\":1,\"2705\":1}}],[\"2b\",{\"1\":{\"77\":1}}],[\"28\",{\"1\":{\"26\":1,\"265\":1,\"323\":3,\"909\":1,\"1001\":1,\"1130\":1,\"1301\":1,\"1477\":1,\"1654\":1,\"1831\":1,\"2008\":1,\"2185\":1,\"2312\":1,\"2404\":1,\"2531\":1,\"2623\":1,\"2750\":1,\"2842\":1}}],[\"283\",{\"1\":{\"26\":1}}],[\"25\",{\"1\":{\"122\":1,\"427\":1,\"776\":1}}],[\"256\",{\"1\":{\"26\":1}}],[\"252\",{\"1\":{\"26\":1}}],[\"29\",{\"1\":{\"300\":2}}],[\"296\",{\"1\":{\"26\":1}}],[\"294\",{\"1\":{\"26\":1}}],[\"278\",{\"1\":{\"26\":3}}],[\"27\",{\"1\":{\"21\":1,\"299\":1,\"302\":1,\"305\":1,\"308\":1,\"311\":1}}],[\"2\",{\"0\":{\"42\":1,\"48\":1,\"54\":1,\"62\":1,\"310\":1,\"318\":1,\"339\":1,\"340\":1,\"430\":1,\"505\":1,\"548\":1,\"595\":1,\"654\":1,\"779\":1},\"1\":{\"0\":1,\"5\":1,\"6\":1,\"32\":1,\"42\":1,\"48\":1,\"54\":1,\"56\":1,\"62\":1,\"84\":1,\"94\":2,\"95\":1,\"98\":1,\"112\":1,\"113\":1,\"123\":1,\"155\":2,\"156\":5,\"165\":1,\"279\":1,\"290\":1,\"300\":2,\"303\":2,\"306\":2,\"307\":1,\"308\":4,\"309\":7,\"310\":2,\"311\":3,\"312\":2,\"334\":1,\"339\":1,\"347\":1,\"348\":1,\"352\":1,\"421\":1,\"424\":1,\"438\":2,\"439\":2,\"443\":3,\"444\":4,\"445\":7,\"454\":1,\"477\":1,\"500\":1,\"503\":1,\"513\":2,\"514\":2,\"518\":1,\"519\":4,\"520\":8,\"529\":1,\"548\":3,\"549\":2,\"550\":1,\"559\":1,\"578\":2,\"589\":1,\"603\":2,\"604\":2,\"608\":3,\"609\":4,\"610\":7,\"635\":1,\"654\":3,\"655\":2,\"656\":1,\"681\":1,\"700\":2,\"727\":1,\"746\":2,\"770\":1,\"773\":1,\"787\":2,\"788\":2,\"792\":3,\"793\":4,\"794\":7,\"798\":1,\"801\":1,\"802\":1,\"806\":2,\"833\":2,\"902\":1,\"905\":1,\"925\":1,\"928\":1,\"929\":1,\"933\":2,\"943\":2,\"993\":1,\"997\":1,\"1018\":2,\"1109\":2,\"1169\":2,\"1229\":1,\"1232\":1,\"1233\":1,\"1237\":2,\"1247\":2,\"1293\":1,\"1341\":2,\"1405\":1,\"1408\":1,\"1409\":1,\"1413\":2,\"1423\":2,\"1469\":1,\"1473\":1,\"1518\":2,\"1582\":1,\"1585\":1,\"1586\":1,\"1590\":2,\"1600\":2,\"1646\":1,\"1695\":2,\"1759\":1,\"1762\":1,\"1763\":1,\"1767\":2,\"1777\":2,\"1823\":1,\"1872\":2,\"1936\":1,\"1939\":1,\"1940\":1,\"1944\":2,\"1954\":2,\"2000\":1,\"2004\":1,\"2049\":2,\"2113\":1,\"2116\":1,\"2117\":1,\"2121\":2,\"2131\":2,\"2177\":1,\"2201\":1,\"2204\":1,\"2205\":1,\"2209\":2,\"2236\":2,\"2305\":1,\"2328\":1,\"2331\":1,\"2332\":1,\"2336\":2,\"2346\":2,\"2396\":1,\"2420\":1,\"2423\":1,\"2424\":1,\"2428\":2,\"2455\":2,\"2524\":1,\"2547\":1,\"2550\":1,\"2551\":1,\"2555\":2,\"2565\":2,\"2615\":1,\"2639\":1,\"2642\":1,\"2643\":1,\"2647\":2,\"2674\":2,\"2743\":1,\"2746\":1,\"2766\":1,\"2769\":1,\"2770\":1,\"2774\":2,\"2784\":2,\"2834\":1,\"2838\":1}}],[\"bb22\",{\"1\":{\"285\":2,\"296\":2}}],[\"bmbf\",{\"1\":{\"77\":1,\"112\":1}}],[\"breakpoint\",{\"1\":{\"338\":1}}],[\"breaks\",{\"1\":{\"155\":1,\"156\":1}}],[\"browsing\",{\"1\":{\"300\":1,\"303\":1,\"306\":1,\"309\":1,\"312\":1,\"445\":1,\"494\":1,\"520\":1,\"550\":1,\"580\":1,\"610\":1,\"656\":1,\"702\":1,\"748\":1,\"794\":1}}],[\"browsers\",{\"1\":{\"130\":1,\"131\":1,\"334\":1,\"423\":1,\"558\":1,\"588\":1,\"634\":1,\"680\":1,\"726\":1,\"772\":1}}],[\"browser\",{\"1\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"95\":1,\"115\":1,\"165\":1,\"334\":1,\"396\":1,\"425\":1,\"453\":1,\"476\":1,\"502\":1,\"519\":1,\"528\":1,\"560\":1,\"590\":1,\"636\":1,\"682\":1,\"728\":1,\"774\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2328\":1,\"2547\":1,\"2766\":1}}],[\"braces\",{\"1\":{\"155\":1,\"156\":1,\"368\":1}}],[\"brace\",{\"1\":{\"155\":27,\"156\":3}}],[\"brackets\",{\"1\":{\"155\":2}}],[\"bracket\",{\"1\":{\"155\":18}}],[\"branches\",{\"1\":{\"404\":2,\"405\":1,\"615\":2,\"616\":1,\"661\":2,\"662\":1,\"707\":2,\"708\":1,\"753\":2,\"754\":1}}],[\"branch\",{\"0\":{\"154\":1,\"405\":1,\"616\":1,\"662\":1,\"708\":1,\"754\":1},\"1\":{\"70\":1,\"137\":7,\"138\":3,\"153\":3,\"314\":1,\"410\":1,\"621\":1,\"667\":1,\"713\":1,\"759\":1}}],[\"branching\",{\"0\":{\"404\":1,\"615\":1,\"661\":1,\"707\":1,\"753\":1},\"1\":{\"70\":1,\"404\":1,\"615\":1,\"661\":1,\"707\":1,\"753\":1}}],[\"bridge\",{\"1\":{\"92\":1,\"323\":3}}],[\"booleanvalue\",{\"1\":{\"369\":1}}],[\"boolean\",{\"1\":{\"369\":3,\"370\":1}}],[\"boarding\",{\"0\":{\"282\":1,\"293\":1,\"441\":1,\"467\":1,\"490\":1,\"516\":1,\"546\":1,\"576\":1,\"606\":1,\"652\":1,\"698\":1,\"744\":1,\"790\":1},\"1\":{\"282\":2,\"293\":2,\"441\":1,\"467\":1,\"490\":1,\"516\":1,\"546\":1,\"576\":1,\"606\":1,\"652\":1,\"698\":1,\"744\":1,\"790\":1}}],[\"body\",{\"1\":{\"155\":15}}],[\"boxes\",{\"1\":{\"99\":1}}],[\"box\",{\"1\":{\"91\":1}}],[\"both\",{\"1\":{\"37\":1,\"90\":1,\"105\":1,\"279\":1,\"290\":1,\"329\":1,\"340\":1,\"379\":1,\"386\":1,\"433\":1,\"440\":1,\"459\":1,\"466\":1,\"482\":1,\"489\":1,\"508\":1,\"515\":1,\"538\":1,\"545\":1,\"568\":1,\"575\":1,\"598\":1,\"605\":1,\"644\":1,\"651\":1,\"690\":1,\"697\":1,\"736\":1,\"743\":1,\"782\":1,\"789\":1}}],[\"boundaries\",{\"1\":{\"0\":1,\"6\":1,\"94\":1,\"123\":1,\"155\":2,\"395\":1}}],[\"bpm\",{\"1\":{\"353\":1}}],[\"bpmn\",{\"0\":{\"92\":1,\"93\":1,\"99\":1,\"150\":1,\"314\":1,\"353\":1,\"398\":1},\"1\":{\"0\":2,\"5\":1,\"6\":1,\"32\":2,\"84\":1,\"86\":1,\"89\":2,\"92\":2,\"93\":5,\"94\":1,\"95\":2,\"98\":1,\"99\":3,\"112\":1,\"113\":1,\"123\":1,\"165\":2,\"180\":1,\"181\":1,\"182\":2,\"315\":1,\"316\":1,\"319\":1,\"325\":1,\"327\":2,\"328\":4,\"330\":2,\"331\":1,\"343\":4,\"350\":1,\"352\":4,\"353\":2,\"360\":3,\"367\":2,\"368\":3,\"377\":1,\"386\":3,\"390\":1,\"398\":1,\"845\":1,\"846\":1,\"847\":2,\"848\":2,\"1028\":1,\"1029\":1,\"1030\":2,\"1179\":1,\"1180\":1,\"1181\":2,\"1351\":1,\"1352\":1,\"1353\":2,\"1354\":2,\"1528\":1,\"1529\":1,\"1530\":2,\"1531\":2,\"1705\":1,\"1706\":1,\"1707\":2,\"1708\":2,\"1882\":1,\"1883\":1,\"1884\":2,\"1885\":2,\"2059\":1,\"2060\":1,\"2061\":2,\"2062\":2,\"2248\":1,\"2249\":1,\"2250\":2,\"2251\":2,\"2467\":1,\"2468\":1,\"2469\":2,\"2470\":2,\"2686\":1,\"2687\":1,\"2688\":2,\"2689\":2}}],[\"bpe`\",{\"1\":{\"306\":1}}],[\"bpejettyserverhttps\",{\"1\":{\"130\":1}}],[\"bpe\",{\"0\":{\"86\":1,\"169\":1,\"170\":1,\"171\":2,\"172\":1,\"173\":1,\"174\":1,\"175\":2,\"176\":1,\"177\":1,\"178\":2,\"179\":1,\"180\":1,\"181\":1,\"182\":1,\"183\":1,\"184\":1,\"185\":2,\"186\":2,\"187\":1,\"188\":1,\"189\":1,\"190\":1,\"191\":1,\"192\":2,\"193\":1,\"194\":1,\"195\":2,\"196\":1,\"197\":1,\"198\":1,\"199\":1,\"200\":1,\"201\":1,\"202\":1,\"203\":1,\"204\":1,\"205\":1,\"206\":1,\"207\":1,\"208\":1,\"209\":1,\"210\":2,\"211\":1,\"212\":1,\"213\":1,\"214\":1,\"215\":2,\"216\":1,\"217\":1,\"218\":1,\"219\":1,\"220\":1,\"221\":2,\"222\":1,\"223\":1,\"224\":1,\"225\":1,\"226\":1,\"227\":1,\"228\":1,\"229\":1,\"230\":1,\"231\":1,\"232\":1,\"233\":1,\"234\":1,\"286\":1,\"297\":1,\"300\":1,\"303\":1,\"306\":1,\"309\":1,\"312\":1,\"439\":1,\"445\":1,\"465\":1,\"488\":1,\"494\":1,\"514\":1,\"520\":1,\"544\":1,\"550\":1,\"574\":1,\"580\":1,\"604\":1,\"610\":1,\"650\":1,\"656\":1,\"696\":1,\"702\":1,\"742\":1,\"748\":1,\"788\":1,\"794\":1,\"795\":1,\"832\":1,\"833\":1,\"834\":2,\"835\":1,\"836\":1,\"837\":1,\"838\":2,\"839\":1,\"840\":1,\"841\":2,\"842\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"850\":1,\"851\":1,\"852\":2,\"853\":1,\"854\":1,\"855\":1,\"856\":1,\"857\":1,\"858\":1,\"859\":1,\"860\":1,\"861\":1,\"862\":1,\"863\":1,\"864\":1,\"865\":1,\"866\":1,\"867\":2,\"868\":1,\"869\":1,\"870\":1,\"871\":1,\"872\":2,\"873\":1,\"874\":1,\"875\":1,\"876\":1,\"877\":1,\"878\":2,\"879\":1,\"880\":1,\"881\":1,\"882\":1,\"883\":1,\"884\":1,\"885\":1,\"886\":1,\"887\":1,\"888\":1,\"889\":1,\"890\":1,\"891\":1,\"892\":1,\"893\":1,\"894\":1,\"895\":1,\"896\":1,\"906\":1,\"1016\":1,\"1017\":1,\"1018\":1,\"1019\":2,\"1020\":1,\"1021\":1,\"1022\":1,\"1023\":2,\"1024\":1,\"1025\":1,\"1026\":2,\"1027\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1031\":1,\"1032\":1,\"1033\":2,\"1034\":1,\"1035\":1,\"1036\":1,\"1037\":1,\"1038\":1,\"1039\":1,\"1040\":1,\"1041\":1,\"1042\":1,\"1043\":1,\"1044\":1,\"1045\":1,\"1046\":1,\"1047\":1,\"1048\":1,\"1049\":2,\"1050\":1,\"1051\":1,\"1052\":1,\"1053\":1,\"1054\":2,\"1055\":1,\"1056\":1,\"1057\":1,\"1058\":1,\"1059\":1,\"1060\":2,\"1061\":1,\"1062\":1,\"1063\":1,\"1064\":1,\"1065\":1,\"1066\":1,\"1067\":1,\"1068\":1,\"1069\":1,\"1070\":1,\"1141\":1,\"1168\":1,\"1169\":1,\"1170\":2,\"1171\":1,\"1172\":1,\"1173\":1,\"1174\":2,\"1175\":1,\"1176\":1,\"1177\":2,\"1178\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1182\":1,\"1183\":1,\"1184\":2,\"1185\":1,\"1186\":1,\"1187\":1,\"1188\":1,\"1189\":1,\"1190\":1,\"1191\":1,\"1192\":1,\"1193\":1,\"1194\":1,\"1195\":1,\"1196\":1,\"1197\":1,\"1198\":1,\"1199\":1,\"1200\":2,\"1201\":1,\"1202\":1,\"1203\":1,\"1204\":1,\"1205\":2,\"1206\":1,\"1207\":1,\"1208\":1,\"1209\":1,\"1210\":1,\"1211\":2,\"1212\":1,\"1213\":1,\"1214\":1,\"1215\":1,\"1216\":1,\"1217\":1,\"1218\":1,\"1219\":1,\"1220\":1,\"1221\":1,\"1313\":1,\"1340\":1,\"1341\":1,\"1342\":2,\"1343\":1,\"1344\":1,\"1345\":1,\"1346\":2,\"1347\":1,\"1348\":1,\"1349\":2,\"1350\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1355\":1,\"1356\":1,\"1357\":2,\"1358\":1,\"1359\":1,\"1360\":1,\"1361\":1,\"1362\":1,\"1363\":1,\"1364\":1,\"1365\":1,\"1366\":1,\"1367\":1,\"1368\":1,\"1369\":1,\"1370\":1,\"1371\":1,\"1372\":2,\"1373\":1,\"1374\":1,\"1375\":1,\"1376\":1,\"1377\":2,\"1378\":1,\"1379\":1,\"1380\":1,\"1381\":1,\"1382\":1,\"1383\":2,\"1384\":1,\"1385\":1,\"1386\":1,\"1387\":1,\"1388\":1,\"1389\":1,\"1390\":1,\"1391\":1,\"1392\":1,\"1393\":1,\"1394\":1,\"1395\":1,\"1396\":1,\"1397\":1,\"1490\":1,\"1517\":1,\"1518\":1,\"1519\":2,\"1520\":1,\"1521\":1,\"1522\":1,\"1523\":2,\"1524\":1,\"1525\":1,\"1526\":2,\"1527\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1532\":1,\"1533\":1,\"1534\":2,\"1535\":1,\"1536\":1,\"1537\":1,\"1538\":1,\"1539\":1,\"1540\":1,\"1541\":1,\"1542\":1,\"1543\":1,\"1544\":1,\"1545\":1,\"1546\":1,\"1547\":1,\"1548\":1,\"1549\":2,\"1550\":1,\"1551\":1,\"1552\":1,\"1553\":1,\"1554\":2,\"1555\":1,\"1556\":1,\"1557\":1,\"1558\":1,\"1559\":1,\"1560\":2,\"1561\":1,\"1562\":1,\"1563\":1,\"1564\":1,\"1565\":1,\"1566\":1,\"1567\":1,\"1568\":1,\"1569\":1,\"1570\":1,\"1571\":1,\"1572\":1,\"1573\":1,\"1574\":1,\"1667\":1,\"1694\":1,\"1695\":1,\"1696\":2,\"1697\":1,\"1698\":1,\"1699\":1,\"1700\":2,\"1701\":1,\"1702\":1,\"1703\":2,\"1704\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1709\":1,\"1710\":1,\"1711\":2,\"1712\":1,\"1713\":1,\"1714\":1,\"1715\":1,\"1716\":1,\"1717\":1,\"1718\":1,\"1719\":1,\"1720\":1,\"1721\":1,\"1722\":1,\"1723\":1,\"1724\":1,\"1725\":1,\"1726\":2,\"1727\":1,\"1728\":1,\"1729\":1,\"1730\":1,\"1731\":2,\"1732\":1,\"1733\":1,\"1734\":1,\"1735\":1,\"1736\":1,\"1737\":2,\"1738\":1,\"1739\":1,\"1740\":1,\"1741\":1,\"1742\":1,\"1743\":1,\"1744\":1,\"1745\":1,\"1746\":1,\"1747\":1,\"1748\":1,\"1749\":1,\"1750\":1,\"1751\":1,\"1844\":1,\"1871\":1,\"1872\":1,\"1873\":2,\"1874\":1,\"1875\":1,\"1876\":1,\"1877\":2,\"1878\":1,\"1879\":1,\"1880\":2,\"1881\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1886\":1,\"1887\":1,\"1888\":2,\"1889\":1,\"1890\":1,\"1891\":1,\"1892\":1,\"1893\":1,\"1894\":1,\"1895\":1,\"1896\":1,\"1897\":1,\"1898\":1,\"1899\":1,\"1900\":1,\"1901\":1,\"1902\":1,\"1903\":2,\"1904\":1,\"1905\":1,\"1906\":1,\"1907\":1,\"1908\":2,\"1909\":1,\"1910\":1,\"1911\":1,\"1912\":1,\"1913\":1,\"1914\":2,\"1915\":1,\"1916\":1,\"1917\":1,\"1918\":1,\"1919\":1,\"1920\":1,\"1921\":1,\"1922\":1,\"1923\":1,\"1924\":1,\"1925\":1,\"1926\":1,\"1927\":1,\"1928\":1,\"2021\":1,\"2048\":1,\"2049\":1,\"2050\":2,\"2051\":1,\"2052\":1,\"2053\":1,\"2054\":2,\"2055\":1,\"2056\":1,\"2057\":2,\"2058\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2063\":1,\"2064\":1,\"2065\":2,\"2066\":1,\"2067\":1,\"2068\":1,\"2069\":1,\"2070\":1,\"2071\":1,\"2072\":1,\"2073\":1,\"2074\":1,\"2075\":1,\"2076\":1,\"2077\":1,\"2078\":1,\"2079\":1,\"2080\":2,\"2081\":1,\"2082\":1,\"2083\":1,\"2084\":1,\"2085\":2,\"2086\":1,\"2087\":1,\"2088\":1,\"2089\":1,\"2090\":1,\"2091\":2,\"2092\":1,\"2093\":1,\"2094\":1,\"2095\":1,\"2096\":1,\"2097\":1,\"2098\":1,\"2099\":1,\"2100\":1,\"2101\":1,\"2102\":1,\"2103\":1,\"2104\":1,\"2105\":1,\"2198\":1,\"2235\":1,\"2236\":1,\"2237\":2,\"2238\":1,\"2239\":1,\"2240\":1,\"2241\":2,\"2242\":1,\"2243\":1,\"2244\":2,\"2245\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2253\":1,\"2254\":1,\"2255\":2,\"2256\":1,\"2257\":1,\"2258\":1,\"2259\":1,\"2260\":1,\"2261\":1,\"2262\":1,\"2263\":1,\"2264\":1,\"2265\":1,\"2266\":1,\"2267\":1,\"2268\":1,\"2269\":1,\"2270\":2,\"2271\":1,\"2272\":1,\"2273\":1,\"2274\":1,\"2275\":2,\"2276\":1,\"2277\":1,\"2278\":1,\"2279\":1,\"2280\":1,\"2281\":2,\"2282\":1,\"2283\":1,\"2284\":1,\"2285\":1,\"2286\":1,\"2287\":1,\"2288\":1,\"2289\":1,\"2290\":1,\"2291\":1,\"2292\":1,\"2293\":1,\"2294\":1,\"2295\":1,\"2296\":1,\"2297\":1,\"2298\":1,\"2299\":1,\"2309\":1,\"2417\":1,\"2454\":1,\"2455\":1,\"2456\":2,\"2457\":1,\"2458\":1,\"2459\":1,\"2460\":2,\"2461\":1,\"2462\":1,\"2463\":2,\"2464\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2472\":1,\"2473\":1,\"2474\":2,\"2475\":1,\"2476\":1,\"2477\":1,\"2478\":1,\"2479\":1,\"2480\":1,\"2481\":1,\"2482\":1,\"2483\":1,\"2484\":1,\"2485\":1,\"2486\":1,\"2487\":1,\"2488\":1,\"2489\":2,\"2490\":1,\"2491\":1,\"2492\":1,\"2493\":1,\"2494\":2,\"2495\":1,\"2496\":1,\"2497\":1,\"2498\":1,\"2499\":1,\"2500\":2,\"2501\":1,\"2502\":1,\"2503\":1,\"2504\":1,\"2505\":1,\"2506\":1,\"2507\":1,\"2508\":1,\"2509\":1,\"2510\":1,\"2511\":1,\"2512\":1,\"2513\":1,\"2514\":1,\"2515\":1,\"2516\":1,\"2517\":1,\"2518\":1,\"2528\":1,\"2636\":1,\"2673\":1,\"2674\":1,\"2675\":2,\"2676\":1,\"2677\":1,\"2678\":1,\"2679\":2,\"2680\":1,\"2681\":1,\"2682\":2,\"2683\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2691\":1,\"2692\":1,\"2693\":2,\"2694\":1,\"2695\":1,\"2696\":1,\"2697\":1,\"2698\":1,\"2699\":1,\"2700\":1,\"2701\":1,\"2702\":1,\"2703\":1,\"2704\":1,\"2705\":1,\"2706\":1,\"2707\":1,\"2708\":2,\"2709\":1,\"2710\":1,\"2711\":1,\"2712\":1,\"2713\":2,\"2714\":1,\"2715\":1,\"2716\":1,\"2717\":1,\"2718\":1,\"2719\":2,\"2720\":1,\"2721\":1,\"2722\":1,\"2723\":1,\"2724\":1,\"2725\":1,\"2726\":1,\"2727\":1,\"2728\":1,\"2729\":1,\"2730\":1,\"2731\":1,\"2732\":1,\"2733\":1,\"2734\":1,\"2735\":1,\"2736\":1,\"2737\":1,\"2747\":1},\"1\":{\"32\":1,\"84\":2,\"86\":7,\"92\":1,\"95\":5,\"98\":1,\"105\":1,\"109\":2,\"130\":7,\"131\":4,\"135\":2,\"148\":3,\"149\":3,\"150\":3,\"159\":2,\"164\":1,\"165\":5,\"170\":1,\"171\":3,\"172\":2,\"173\":3,\"174\":2,\"175\":3,\"176\":3,\"177\":3,\"178\":3,\"179\":3,\"180\":1,\"181\":1,\"182\":1,\"183\":1,\"184\":3,\"185\":2,\"186\":3,\"187\":2,\"188\":2,\"189\":1,\"190\":1,\"191\":1,\"192\":3,\"193\":2,\"194\":2,\"195\":2,\"196\":2,\"197\":2,\"198\":1,\"199\":1,\"200\":1,\"201\":1,\"202\":1,\"203\":1,\"204\":1,\"205\":1,\"206\":1,\"207\":1,\"208\":2,\"209\":4,\"210\":2,\"211\":1,\"212\":1,\"213\":1,\"214\":4,\"215\":3,\"216\":1,\"217\":1,\"218\":1,\"219\":2,\"220\":1,\"221\":2,\"222\":1,\"223\":1,\"224\":2,\"225\":2,\"226\":1,\"227\":1,\"228\":1,\"229\":2,\"230\":1,\"231\":1,\"232\":3,\"233\":2,\"234\":1,\"261\":1,\"262\":1,\"278\":1,\"280\":1,\"281\":4,\"284\":1,\"286\":39,\"289\":1,\"291\":1,\"292\":4,\"295\":1,\"297\":38,\"300\":57,\"303\":46,\"306\":22,\"309\":13,\"312\":13,\"323\":120,\"327\":1,\"328\":8,\"329\":1,\"334\":8,\"337\":4,\"338\":2,\"344\":1,\"345\":1,\"348\":5,\"352\":2,\"353\":1,\"358\":2,\"363\":11,\"373\":6,\"379\":1,\"384\":2,\"389\":15,\"421\":2,\"423\":1,\"427\":1,\"429\":6,\"432\":1,\"434\":1,\"435\":4,\"437\":1,\"439\":24,\"440\":5,\"442\":5,\"445\":11,\"453\":1,\"458\":1,\"460\":1,\"461\":4,\"463\":1,\"465\":25,\"466\":5,\"468\":3,\"474\":1,\"476\":1,\"481\":1,\"483\":1,\"484\":4,\"486\":1,\"488\":25,\"489\":5,\"491\":3,\"494\":11,\"500\":1,\"502\":1,\"507\":1,\"509\":1,\"510\":4,\"512\":1,\"514\":25,\"515\":5,\"517\":3,\"520\":12,\"526\":1,\"528\":1,\"537\":1,\"539\":1,\"540\":4,\"542\":1,\"544\":25,\"545\":5,\"547\":5,\"550\":11,\"556\":1,\"558\":1,\"567\":1,\"569\":1,\"570\":4,\"572\":1,\"574\":24,\"575\":5,\"577\":5,\"580\":11,\"586\":1,\"588\":1,\"597\":1,\"599\":1,\"600\":4,\"602\":1,\"604\":24,\"605\":5,\"607\":5,\"610\":11,\"632\":1,\"634\":1,\"643\":1,\"645\":1,\"646\":4,\"648\":1,\"650\":24,\"651\":5,\"653\":5,\"656\":11,\"678\":2,\"680\":1,\"689\":1,\"691\":1,\"692\":4,\"694\":1,\"696\":24,\"697\":5,\"699\":5,\"702\":11,\"724\":2,\"726\":1,\"735\":1,\"737\":1,\"738\":4,\"740\":1,\"742\":24,\"743\":5,\"745\":5,\"748\":11,\"770\":2,\"772\":1,\"776\":1,\"778\":6,\"781\":1,\"783\":1,\"784\":4,\"786\":1,\"788\":24,\"789\":5,\"791\":5,\"794\":11,\"798\":5,\"805\":1,\"806\":3,\"829\":2,\"832\":1,\"833\":1,\"834\":3,\"835\":2,\"836\":3,\"837\":2,\"838\":3,\"839\":3,\"840\":3,\"841\":3,\"842\":3,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"850\":1,\"851\":3,\"852\":2,\"853\":1,\"854\":1,\"855\":1,\"856\":1,\"857\":1,\"858\":1,\"859\":1,\"860\":1,\"861\":1,\"862\":1,\"863\":1,\"864\":1,\"865\":2,\"866\":4,\"867\":2,\"868\":1,\"869\":1,\"870\":1,\"871\":4,\"872\":3,\"873\":1,\"874\":1,\"875\":1,\"876\":2,\"877\":1,\"878\":2,\"879\":1,\"880\":1,\"881\":2,\"882\":2,\"883\":1,\"884\":1,\"885\":1,\"886\":1,\"887\":2,\"888\":1,\"889\":1,\"890\":3,\"891\":2,\"892\":1,\"893\":3,\"894\":1,\"895\":1,\"896\":1,\"899\":1,\"902\":4,\"903\":2,\"904\":1,\"905\":2,\"909\":1,\"910\":1,\"915\":1,\"966\":1,\"989\":2,\"1015\":1,\"1017\":1,\"1018\":1,\"1019\":3,\"1020\":2,\"1021\":3,\"1022\":2,\"1023\":3,\"1024\":3,\"1025\":3,\"1026\":3,\"1027\":3,\"1028\":1,\"1029\":1,\"1030\":1,\"1031\":1,\"1032\":3,\"1033\":2,\"1034\":1,\"1035\":1,\"1036\":1,\"1037\":1,\"1038\":1,\"1039\":1,\"1040\":1,\"1041\":1,\"1042\":1,\"1043\":1,\"1044\":1,\"1045\":1,\"1046\":1,\"1047\":2,\"1048\":4,\"1049\":2,\"1050\":1,\"1051\":1,\"1052\":1,\"1053\":4,\"1054\":3,\"1055\":1,\"1056\":1,\"1057\":1,\"1058\":2,\"1059\":1,\"1060\":2,\"1061\":1,\"1062\":1,\"1063\":2,\"1064\":2,\"1065\":1,\"1066\":2,\"1067\":1,\"1068\":1,\"1069\":3,\"1070\":2,\"1073\":1,\"1097\":2,\"1127\":1,\"1165\":2,\"1168\":1,\"1169\":1,\"1170\":3,\"1171\":2,\"1172\":3,\"1173\":2,\"1174\":3,\"1175\":3,\"1176\":3,\"1177\":3,\"1178\":3,\"1179\":1,\"1180\":1,\"1181\":1,\"1182\":1,\"1183\":3,\"1184\":2,\"1185\":1,\"1186\":1,\"1187\":1,\"1188\":1,\"1189\":1,\"1190\":1,\"1191\":1,\"1192\":1,\"1193\":1,\"1194\":1,\"1195\":1,\"1196\":1,\"1197\":1,\"1198\":2,\"1199\":4,\"1200\":2,\"1201\":1,\"1202\":1,\"1203\":1,\"1204\":4,\"1205\":3,\"1206\":1,\"1207\":1,\"1208\":1,\"1209\":2,\"1210\":1,\"1211\":2,\"1212\":1,\"1213\":1,\"1214\":2,\"1215\":2,\"1216\":1,\"1217\":2,\"1218\":1,\"1219\":1,\"1220\":3,\"1221\":2,\"1224\":1,\"1266\":1,\"1289\":2,\"1337\":2,\"1340\":1,\"1341\":1,\"1342\":3,\"1343\":2,\"1344\":3,\"1345\":2,\"1346\":3,\"1347\":3,\"1348\":3,\"1349\":3,\"1350\":3,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1355\":1,\"1356\":3,\"1357\":2,\"1358\":1,\"1359\":1,\"1360\":1,\"1361\":1,\"1362\":1,\"1363\":1,\"1364\":1,\"1365\":1,\"1366\":1,\"1367\":1,\"1368\":1,\"1369\":1,\"1370\":2,\"1371\":4,\"1372\":2,\"1373\":1,\"1374\":1,\"1375\":1,\"1376\":4,\"1377\":3,\"1378\":1,\"1379\":1,\"1380\":1,\"1381\":2,\"1382\":1,\"1383\":2,\"1384\":1,\"1385\":1,\"1386\":2,\"1387\":2,\"1388\":1,\"1389\":1,\"1390\":1,\"1391\":1,\"1392\":2,\"1393\":1,\"1394\":1,\"1395\":3,\"1396\":2,\"1397\":1,\"1400\":1,\"1442\":1,\"1465\":2,\"1514\":2,\"1517\":1,\"1518\":1,\"1519\":3,\"1520\":2,\"1521\":3,\"1522\":2,\"1523\":3,\"1524\":3,\"1525\":3,\"1526\":3,\"1527\":3,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1532\":1,\"1533\":3,\"1534\":2,\"1535\":1,\"1536\":1,\"1537\":1,\"1538\":1,\"1539\":1,\"1540\":1,\"1541\":1,\"1542\":1,\"1543\":1,\"1544\":1,\"1545\":1,\"1546\":1,\"1547\":2,\"1548\":4,\"1549\":2,\"1550\":1,\"1551\":1,\"1552\":1,\"1553\":4,\"1554\":3,\"1555\":1,\"1556\":1,\"1557\":1,\"1558\":2,\"1559\":1,\"1560\":2,\"1561\":1,\"1562\":1,\"1563\":2,\"1564\":2,\"1565\":1,\"1566\":1,\"1567\":1,\"1568\":1,\"1569\":2,\"1570\":1,\"1571\":1,\"1572\":3,\"1573\":2,\"1574\":1,\"1577\":1,\"1619\":1,\"1642\":2,\"1691\":2,\"1694\":1,\"1695\":1,\"1696\":3,\"1697\":2,\"1698\":3,\"1699\":2,\"1700\":3,\"1701\":3,\"1702\":3,\"1703\":3,\"1704\":3,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1709\":1,\"1710\":3,\"1711\":2,\"1712\":1,\"1713\":1,\"1714\":1,\"1715\":1,\"1716\":1,\"1717\":1,\"1718\":1,\"1719\":1,\"1720\":1,\"1721\":1,\"1722\":1,\"1723\":1,\"1724\":2,\"1725\":4,\"1726\":2,\"1727\":1,\"1728\":1,\"1729\":1,\"1730\":4,\"1731\":3,\"1732\":1,\"1733\":1,\"1734\":1,\"1735\":2,\"1736\":1,\"1737\":2,\"1738\":1,\"1739\":1,\"1740\":2,\"1741\":2,\"1742\":1,\"1743\":1,\"1744\":1,\"1745\":1,\"1746\":2,\"1747\":1,\"1748\":1,\"1749\":3,\"1750\":2,\"1751\":1,\"1754\":1,\"1796\":1,\"1819\":2,\"1868\":2,\"1871\":1,\"1872\":1,\"1873\":3,\"1874\":2,\"1875\":3,\"1876\":2,\"1877\":3,\"1878\":3,\"1879\":3,\"1880\":3,\"1881\":3,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1886\":1,\"1887\":3,\"1888\":2,\"1889\":1,\"1890\":1,\"1891\":1,\"1892\":1,\"1893\":1,\"1894\":1,\"1895\":1,\"1896\":1,\"1897\":1,\"1898\":1,\"1899\":1,\"1900\":1,\"1901\":2,\"1902\":4,\"1903\":2,\"1904\":1,\"1905\":1,\"1906\":1,\"1907\":4,\"1908\":3,\"1909\":1,\"1910\":1,\"1911\":1,\"1912\":2,\"1913\":1,\"1914\":2,\"1915\":1,\"1916\":1,\"1917\":2,\"1918\":2,\"1919\":1,\"1920\":1,\"1921\":1,\"1922\":1,\"1923\":2,\"1924\":1,\"1925\":1,\"1926\":3,\"1927\":2,\"1928\":1,\"1931\":1,\"1973\":1,\"1996\":2,\"2045\":2,\"2048\":1,\"2049\":1,\"2050\":3,\"2051\":2,\"2052\":3,\"2053\":2,\"2054\":3,\"2055\":3,\"2056\":3,\"2057\":3,\"2058\":3,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2063\":1,\"2064\":3,\"2065\":2,\"2066\":1,\"2067\":1,\"2068\":1,\"2069\":1,\"2070\":1,\"2071\":1,\"2072\":1,\"2073\":1,\"2074\":1,\"2075\":1,\"2076\":1,\"2077\":1,\"2078\":2,\"2079\":4,\"2080\":2,\"2081\":1,\"2082\":1,\"2083\":1,\"2084\":4,\"2085\":3,\"2086\":1,\"2087\":1,\"2088\":1,\"2089\":2,\"2090\":1,\"2091\":2,\"2092\":1,\"2093\":1,\"2094\":2,\"2095\":2,\"2096\":1,\"2097\":1,\"2098\":1,\"2099\":1,\"2100\":2,\"2101\":1,\"2102\":1,\"2103\":3,\"2104\":2,\"2105\":1,\"2108\":1,\"2150\":1,\"2173\":2,\"2201\":5,\"2208\":1,\"2209\":3,\"2232\":2,\"2235\":1,\"2236\":1,\"2237\":3,\"2238\":2,\"2239\":3,\"2240\":2,\"2241\":3,\"2242\":3,\"2243\":3,\"2244\":3,\"2245\":3,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2253\":1,\"2254\":3,\"2255\":2,\"2256\":1,\"2257\":1,\"2258\":1,\"2259\":1,\"2260\":1,\"2261\":1,\"2262\":1,\"2263\":1,\"2264\":1,\"2265\":1,\"2266\":1,\"2267\":1,\"2268\":2,\"2269\":4,\"2270\":2,\"2271\":1,\"2272\":1,\"2273\":1,\"2274\":4,\"2275\":3,\"2276\":1,\"2277\":1,\"2278\":1,\"2279\":2,\"2280\":1,\"2281\":2,\"2282\":1,\"2283\":1,\"2284\":2,\"2285\":2,\"2286\":1,\"2287\":1,\"2288\":1,\"2289\":1,\"2290\":2,\"2291\":1,\"2292\":1,\"2293\":3,\"2294\":2,\"2295\":1,\"2296\":3,\"2297\":1,\"2298\":1,\"2299\":1,\"2302\":1,\"2305\":4,\"2306\":2,\"2307\":1,\"2308\":2,\"2312\":1,\"2313\":1,\"2318\":1,\"2369\":1,\"2392\":2,\"2420\":5,\"2427\":1,\"2428\":3,\"2451\":2,\"2454\":1,\"2455\":1,\"2456\":3,\"2457\":2,\"2458\":3,\"2459\":2,\"2460\":3,\"2461\":3,\"2462\":3,\"2463\":3,\"2464\":3,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2472\":1,\"2473\":3,\"2474\":2,\"2475\":1,\"2476\":1,\"2477\":1,\"2478\":1,\"2479\":1,\"2480\":1,\"2481\":1,\"2482\":1,\"2483\":1,\"2484\":1,\"2485\":1,\"2486\":1,\"2487\":2,\"2488\":4,\"2489\":2,\"2490\":1,\"2491\":1,\"2492\":1,\"2493\":4,\"2494\":3,\"2495\":1,\"2496\":1,\"2497\":1,\"2498\":2,\"2499\":1,\"2500\":2,\"2501\":1,\"2502\":1,\"2503\":2,\"2504\":2,\"2505\":1,\"2506\":1,\"2507\":1,\"2508\":1,\"2509\":2,\"2510\":1,\"2511\":1,\"2512\":3,\"2513\":2,\"2514\":1,\"2515\":3,\"2516\":1,\"2517\":1,\"2518\":1,\"2521\":1,\"2524\":4,\"2525\":2,\"2526\":1,\"2527\":2,\"2531\":1,\"2532\":1,\"2537\":1,\"2588\":1,\"2611\":2,\"2639\":5,\"2646\":1,\"2647\":3,\"2670\":2,\"2673\":1,\"2674\":1,\"2675\":3,\"2676\":2,\"2677\":3,\"2678\":2,\"2679\":3,\"2680\":3,\"2681\":3,\"2682\":3,\"2683\":3,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2691\":1,\"2692\":3,\"2693\":2,\"2694\":1,\"2695\":1,\"2696\":1,\"2697\":1,\"2698\":1,\"2699\":1,\"2700\":1,\"2701\":1,\"2702\":1,\"2703\":1,\"2704\":1,\"2705\":1,\"2706\":2,\"2707\":4,\"2708\":2,\"2709\":1,\"2710\":1,\"2711\":1,\"2712\":4,\"2713\":3,\"2714\":1,\"2715\":1,\"2716\":1,\"2717\":2,\"2718\":1,\"2719\":2,\"2720\":1,\"2721\":1,\"2722\":2,\"2723\":2,\"2724\":1,\"2725\":1,\"2726\":1,\"2727\":1,\"2728\":2,\"2729\":1,\"2730\":1,\"2731\":3,\"2732\":2,\"2733\":1,\"2734\":3,\"2735\":1,\"2736\":1,\"2737\":1,\"2740\":1,\"2743\":4,\"2744\":2,\"2745\":1,\"2746\":2,\"2750\":1,\"2751\":1,\"2756\":1,\"2807\":1,\"2830\":2}}],[\"black\",{\"1\":{\"352\":1}}],[\"blank\",{\"1\":{\"155\":15,\"156\":3}}],[\"blaze\",{\"1\":{\"14\":2,\"17\":1,\"21\":1}}],[\"block\",{\"1\":{\"155\":13,\"217\":1,\"222\":1,\"223\":1,\"229\":1,\"233\":1,\"257\":1,\"261\":1,\"262\":1,\"798\":2,\"874\":1,\"879\":1,\"880\":1,\"887\":1,\"891\":1,\"897\":1,\"925\":2,\"964\":1,\"1056\":1,\"1061\":1,\"1062\":1,\"1066\":1,\"1070\":1,\"1071\":1,\"1125\":1,\"1207\":1,\"1212\":1,\"1213\":1,\"1217\":1,\"1221\":1,\"1222\":1,\"1229\":2,\"1262\":1,\"1264\":1,\"1379\":1,\"1384\":1,\"1385\":1,\"1392\":1,\"1396\":1,\"1398\":1,\"1405\":2,\"1440\":1,\"1556\":1,\"1561\":1,\"1562\":1,\"1569\":1,\"1573\":1,\"1575\":1,\"1582\":2,\"1617\":1,\"1733\":1,\"1738\":1,\"1739\":1,\"1746\":1,\"1750\":1,\"1752\":1,\"1759\":2,\"1794\":1,\"1910\":1,\"1915\":1,\"1916\":1,\"1923\":1,\"1927\":1,\"1929\":1,\"1936\":2,\"1971\":1,\"2087\":1,\"2092\":1,\"2093\":1,\"2100\":1,\"2104\":1,\"2106\":1,\"2113\":2,\"2148\":1,\"2201\":2,\"2277\":1,\"2282\":1,\"2283\":1,\"2290\":1,\"2294\":1,\"2300\":1,\"2328\":2,\"2367\":1,\"2420\":2,\"2496\":1,\"2501\":1,\"2502\":1,\"2509\":1,\"2513\":1,\"2519\":1,\"2547\":2,\"2586\":1,\"2639\":2,\"2715\":1,\"2720\":1,\"2721\":1,\"2728\":1,\"2732\":1,\"2738\":1,\"2766\":2,\"2805\":1}}],[\"bloom\",{\"1\":{\"95\":1,\"165\":1}}],[\"blob\",{\"1\":{\"22\":1}}],[\"blue\",{\"1\":{\"84\":1,\"425\":1,\"530\":1,\"560\":1,\"590\":1,\"636\":1,\"682\":1,\"728\":1,\"774\":1}}],[\"b\",{\"1\":{\"17\":2,\"26\":1,\"99\":1,\"280\":1,\"284\":1,\"285\":5,\"286\":1,\"291\":1,\"295\":1,\"296\":5,\"297\":1,\"434\":1,\"437\":1,\"438\":2,\"439\":1,\"460\":1,\"463\":1,\"464\":2,\"465\":1,\"483\":1,\"486\":1,\"487\":2,\"488\":1,\"509\":1,\"512\":1,\"513\":2,\"514\":1,\"539\":1,\"542\":1,\"543\":2,\"544\":1,\"569\":1,\"572\":1,\"573\":2,\"574\":1,\"599\":1,\"602\":1,\"603\":2,\"604\":1,\"645\":1,\"648\":1,\"649\":2,\"650\":1,\"691\":1,\"694\":1,\"695\":2,\"696\":1,\"737\":1,\"740\":1,\"741\":2,\"742\":1,\"783\":1,\"786\":1,\"787\":2,\"788\":1}}],[\"busy\",{\"1\":{\"886\":1,\"1391\":1,\"1568\":1,\"1745\":1,\"1922\":1,\"2099\":1,\"2289\":1,\"2508\":1,\"2727\":1}}],[\"business\",{\"0\":{\"86\":1,\"109\":1,\"164\":1,\"379\":1},\"1\":{\"0\":1,\"8\":1,\"26\":1,\"32\":1,\"84\":3,\"92\":3,\"93\":2,\"95\":3,\"106\":1,\"109\":1,\"113\":1,\"148\":1,\"149\":1,\"161\":1,\"164\":1,\"165\":3,\"328\":1,\"329\":1,\"343\":1,\"352\":1,\"379\":2,\"427\":1,\"776\":1}}],[\"built\",{\"1\":{\"423\":2,\"453\":2,\"476\":2,\"502\":2,\"528\":2,\"558\":2,\"588\":2,\"634\":2,\"680\":2,\"726\":2,\"772\":2}}],[\"buildable\",{\"1\":{\"406\":1,\"617\":1,\"663\":1,\"709\":1,\"755\":1}}],[\"buildinforeaderimpl\",{\"1\":{\"300\":2,\"303\":2,\"306\":2,\"309\":2,\"312\":2,\"445\":2,\"494\":2,\"520\":2,\"550\":2,\"580\":2,\"610\":2,\"656\":2,\"702\":2,\"748\":2,\"794\":2}}],[\"building\",{\"1\":{\"114\":1,\"409\":1,\"620\":1,\"666\":1,\"712\":1,\"758\":1}}],[\"build\",{\"0\":{\"127\":1,\"128\":1,\"129\":1,\"333\":1,\"347\":1,\"362\":1,\"372\":1,\"388\":1},\"1\":{\"130\":2,\"131\":5,\"137\":4,\"138\":3,\"276\":1,\"287\":1,\"314\":1,\"327\":1,\"333\":2,\"334\":2,\"342\":2,\"347\":2,\"348\":1,\"362\":2,\"363\":2,\"372\":2,\"373\":1,\"388\":2,\"389\":2,\"393\":1,\"401\":1,\"409\":1,\"413\":1,\"612\":1,\"620\":1,\"624\":1,\"658\":1,\"666\":1,\"670\":1,\"704\":1,\"712\":1,\"716\":1,\"750\":1,\"758\":1,\"762\":1}}],[\"but\",{\"1\":{\"93\":1,\"233\":1,\"285\":1,\"286\":2,\"296\":1,\"297\":2,\"337\":1,\"344\":1,\"352\":1,\"379\":1,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1,\"891\":1,\"902\":1,\"993\":1,\"1070\":1,\"1221\":1,\"1293\":1,\"1396\":1,\"1469\":1,\"1573\":1,\"1646\":1,\"1750\":1,\"1823\":1,\"1927\":1,\"2000\":1,\"2104\":1,\"2177\":1,\"2294\":1,\"2305\":1,\"2396\":1,\"2513\":1,\"2524\":1,\"2615\":1,\"2732\":1,\"2743\":1,\"2834\":1}}],[\"bugs\",{\"1\":{\"415\":2,\"626\":2,\"672\":2,\"718\":2,\"764\":2}}],[\"bug\",{\"1\":{\"71\":1,\"415\":6,\"626\":6,\"672\":6,\"718\":6,\"764\":6}}],[\"bundle\",{\"0\":{\"258\":1,\"957\":1,\"1120\":1,\"1258\":1,\"1434\":1,\"1611\":1,\"1788\":1,\"1965\":1,\"2142\":1,\"2360\":1,\"2579\":1,\"2798\":1},\"1\":{\"22\":2,\"93\":1,\"236\":1,\"258\":3,\"299\":8,\"323\":6,\"334\":1,\"363\":1,\"389\":1,\"957\":3,\"1120\":3,\"1258\":3,\"1434\":3,\"1611\":3,\"1788\":3,\"1965\":3,\"2142\":3,\"2360\":3,\"2579\":3,\"2798\":3}}],[\"bundles\",{\"1\":{\"17\":2,\"286\":1,\"297\":1,\"423\":1,\"453\":1,\"476\":1,\"502\":1,\"528\":1,\"558\":1,\"588\":1,\"634\":1,\"680\":1,\"726\":1,\"772\":1}}],[\"big\",{\"1\":{\"414\":1,\"625\":1,\"671\":1,\"717\":1,\"763\":1}}],[\"bidirectional\",{\"1\":{\"379\":1}}],[\"bin\",{\"1\":{\"279\":2,\"290\":2}}],[\"bind\",{\"1\":{\"166\":1,\"300\":8,\"303\":2,\"323\":21}}],[\"binaryauthorizationrule\",{\"1\":{\"145\":1}}],[\"binary\",{\"1\":{\"93\":1,\"105\":1,\"155\":4,\"156\":2}}],[\"bilateral\",{\"1\":{\"98\":1}}],[\"birth\",{\"1\":{\"95\":1,\"165\":1}}],[\"bit\",{\"1\":{\"95\":1,\"165\":1,\"286\":1,\"297\":1}}],[\"bio\",{\"1\":{\"113\":1,\"116\":1}}],[\"biobanking\",{\"1\":{\"75\":1}}],[\"biomedical\",{\"1\":{\"0\":1,\"5\":1,\"6\":1,\"12\":1,\"26\":1,\"32\":1,\"74\":1,\"112\":1}}],[\"bialke\",{\"1\":{\"26\":2}}],[\"bietet\",{\"1\":{\"14\":1,\"16\":1}}],[\"bis\",{\"1\":{\"14\":2}}],[\"balance\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"bar\",{\"1\":{\"203\":1,\"256\":1,\"285\":4,\"286\":2,\"296\":5,\"297\":2,\"438\":4,\"439\":2,\"464\":4,\"465\":2,\"487\":4,\"488\":2,\"513\":4,\"514\":2,\"543\":4,\"544\":2,\"573\":4,\"574\":2,\"603\":4,\"604\":2,\"649\":4,\"650\":2,\"695\":4,\"696\":2,\"741\":4,\"742\":2,\"787\":4,\"788\":2,\"861\":1,\"893\":1,\"897\":1,\"956\":1,\"964\":1,\"1042\":1,\"1071\":1,\"1119\":1,\"1125\":1,\"1193\":1,\"1222\":1,\"1257\":1,\"1264\":1,\"1366\":1,\"1398\":1,\"1433\":1,\"1440\":1,\"1543\":1,\"1575\":1,\"1610\":1,\"1617\":1,\"1720\":1,\"1752\":1,\"1787\":1,\"1794\":1,\"1897\":1,\"1929\":1,\"1964\":1,\"1971\":1,\"2074\":1,\"2106\":1,\"2141\":1,\"2148\":1,\"2264\":1,\"2296\":1,\"2300\":1,\"2359\":1,\"2367\":1,\"2483\":1,\"2515\":1,\"2519\":1,\"2578\":1,\"2586\":1,\"2702\":1,\"2734\":1,\"2738\":1,\"2797\":1,\"2805\":1}}],[\"bat\",{\"1\":{\"131\":1}}],[\"base<\",{\"1\":{\"159\":1}}],[\"base\",{\"0\":{\"203\":1,\"256\":1,\"327\":1,\"823\":1,\"861\":1,\"893\":1,\"956\":1,\"983\":1,\"1042\":1,\"1091\":1,\"1119\":1,\"1159\":1,\"1193\":1,\"1257\":1,\"1283\":1,\"1331\":1,\"1366\":1,\"1433\":1,\"1459\":1,\"1508\":1,\"1543\":1,\"1610\":1,\"1636\":1,\"1685\":1,\"1720\":1,\"1787\":1,\"1813\":1,\"1862\":1,\"1897\":1,\"1964\":1,\"1990\":1,\"2039\":1,\"2074\":1,\"2141\":1,\"2167\":1,\"2226\":1,\"2264\":1,\"2296\":1,\"2359\":1,\"2386\":1,\"2445\":1,\"2483\":1,\"2515\":1,\"2578\":1,\"2605\":1,\"2664\":1,\"2702\":1,\"2734\":1,\"2797\":1,\"2824\":1},\"1\":{\"135\":1,\"159\":1,\"203\":2,\"256\":2,\"285\":2,\"286\":1,\"296\":2,\"297\":1,\"300\":3,\"303\":2,\"306\":1,\"323\":6,\"325\":1,\"328\":2,\"343\":3,\"438\":2,\"439\":1,\"464\":2,\"465\":1,\"487\":2,\"488\":1,\"513\":2,\"514\":1,\"543\":2,\"544\":1,\"573\":2,\"574\":1,\"603\":2,\"604\":1,\"649\":2,\"650\":1,\"695\":2,\"696\":1,\"741\":2,\"742\":1,\"787\":2,\"788\":1,\"811\":1,\"814\":1,\"823\":2,\"861\":2,\"893\":2,\"903\":2,\"905\":1,\"956\":2,\"971\":1,\"974\":1,\"983\":2,\"994\":2,\"995\":1,\"997\":1,\"1042\":2,\"1079\":1,\"1082\":1,\"1091\":2,\"1119\":2,\"1147\":1,\"1150\":1,\"1159\":2,\"1193\":2,\"1257\":2,\"1271\":1,\"1274\":1,\"1283\":2,\"1294\":2,\"1295\":1,\"1297\":1,\"1319\":1,\"1322\":1,\"1331\":2,\"1366\":2,\"1433\":2,\"1447\":1,\"1450\":1,\"1459\":2,\"1470\":2,\"1471\":1,\"1473\":1,\"1496\":1,\"1499\":1,\"1508\":2,\"1543\":2,\"1610\":2,\"1624\":1,\"1627\":1,\"1636\":2,\"1647\":2,\"1648\":1,\"1650\":1,\"1673\":1,\"1676\":1,\"1685\":2,\"1720\":2,\"1787\":2,\"1801\":1,\"1804\":1,\"1813\":2,\"1824\":2,\"1825\":1,\"1827\":1,\"1850\":1,\"1853\":1,\"1862\":2,\"1897\":2,\"1964\":2,\"1978\":1,\"1981\":1,\"1990\":2,\"2001\":2,\"2002\":1,\"2004\":1,\"2027\":1,\"2030\":1,\"2039\":2,\"2074\":2,\"2141\":2,\"2155\":1,\"2158\":1,\"2167\":2,\"2178\":2,\"2179\":1,\"2181\":1,\"2214\":1,\"2217\":1,\"2226\":2,\"2264\":2,\"2296\":2,\"2306\":2,\"2308\":1,\"2359\":2,\"2374\":1,\"2377\":1,\"2386\":2,\"2397\":2,\"2398\":1,\"2400\":1,\"2433\":1,\"2436\":1,\"2445\":2,\"2483\":2,\"2515\":2,\"2525\":2,\"2527\":1,\"2578\":2,\"2593\":1,\"2596\":1,\"2605\":2,\"2616\":2,\"2617\":1,\"2619\":1,\"2652\":1,\"2655\":1,\"2664\":2,\"2702\":2,\"2734\":2,\"2744\":2,\"2746\":1,\"2797\":2,\"2812\":1,\"2815\":1,\"2824\":2,\"2835\":2,\"2836\":1,\"2838\":1}}],[\"based\",{\"0\":{\"321\":1,\"374\":1,\"375\":1},\"1\":{\"0\":1,\"26\":1,\"32\":1,\"84\":1,\"91\":1,\"95\":2,\"113\":1,\"123\":1,\"126\":1,\"143\":1,\"148\":1,\"165\":2,\"320\":1,\"328\":1,\"342\":1,\"360\":1,\"365\":1,\"370\":2,\"373\":1,\"377\":1,\"386\":4,\"389\":1,\"395\":1,\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"basically\",{\"1\":{\"92\":1,\"98\":1}}],[\"basic\",{\"1\":{\"89\":1,\"90\":1,\"109\":1,\"122\":1,\"149\":1,\"164\":1,\"391\":1}}],[\"basics\",{\"0\":{\"89\":1,\"105\":1},\"1\":{\"85\":1}}],[\"basis\",{\"1\":{\"78\":1}}],[\"bahls\",{\"1\":{\"26\":1}}],[\"backup\",{\"1\":{\"299\":3,\"300\":3,\"302\":3,\"303\":3,\"305\":3,\"306\":3,\"308\":3,\"309\":3,\"311\":3,\"312\":3,\"442\":1,\"444\":3,\"445\":3,\"468\":1,\"491\":1,\"493\":3,\"494\":3,\"517\":1,\"519\":3,\"520\":3,\"547\":1,\"549\":3,\"550\":3,\"577\":1,\"579\":3,\"580\":3,\"607\":1,\"609\":3,\"610\":3,\"653\":1,\"655\":3,\"656\":3,\"699\":1,\"701\":3,\"702\":3,\"745\":1,\"747\":3,\"748\":3,\"791\":1,\"793\":3,\"794\":3}}],[\"backend\",{\"1\":{\"166\":2,\"323\":18}}],[\"background\",{\"1\":{\"98\":1}}],[\"back\",{\"0\":{\"812\":1,\"813\":1,\"972\":1,\"973\":1,\"1080\":1,\"1081\":1,\"1148\":1,\"1149\":1,\"1272\":1,\"1273\":1,\"1320\":1,\"1321\":1,\"1448\":1,\"1449\":1,\"1497\":1,\"1498\":1,\"1625\":1,\"1626\":1,\"1674\":1,\"1675\":1,\"1802\":1,\"1803\":1,\"1851\":1,\"1852\":1,\"1979\":1,\"1980\":1,\"2028\":1,\"2029\":1,\"2156\":1,\"2157\":1,\"2215\":1,\"2216\":1,\"2375\":1,\"2376\":1,\"2434\":1,\"2435\":1,\"2594\":1,\"2595\":1,\"2653\":1,\"2654\":1,\"2813\":1,\"2814\":1},\"1\":{\"13\":1,\"124\":1,\"153\":2,\"352\":1,\"375\":1,\"812\":3,\"813\":3,\"902\":1,\"903\":4,\"905\":1,\"972\":3,\"973\":3,\"993\":1,\"994\":4,\"997\":1,\"1080\":3,\"1081\":3,\"1148\":3,\"1149\":3,\"1272\":3,\"1273\":3,\"1293\":1,\"1294\":4,\"1297\":1,\"1320\":3,\"1321\":3,\"1448\":3,\"1449\":3,\"1469\":1,\"1470\":4,\"1473\":1,\"1497\":3,\"1498\":3,\"1625\":3,\"1626\":3,\"1646\":1,\"1647\":4,\"1650\":1,\"1674\":3,\"1675\":3,\"1802\":3,\"1803\":3,\"1823\":1,\"1824\":4,\"1827\":1,\"1851\":3,\"1852\":3,\"1979\":3,\"1980\":3,\"2000\":1,\"2001\":4,\"2004\":1,\"2028\":3,\"2029\":3,\"2156\":3,\"2157\":3,\"2177\":1,\"2178\":4,\"2181\":1,\"2215\":3,\"2216\":3,\"2305\":1,\"2306\":4,\"2308\":1,\"2375\":3,\"2376\":3,\"2396\":1,\"2397\":4,\"2400\":1,\"2434\":3,\"2435\":3,\"2524\":1,\"2525\":4,\"2527\":1,\"2594\":3,\"2595\":3,\"2615\":1,\"2616\":4,\"2619\":1,\"2653\":3,\"2654\":3,\"2743\":1,\"2744\":4,\"2746\":1,\"2813\":3,\"2814\":3,\"2834\":1,\"2835\":4,\"2838\":1}}],[\"bearer\",{\"0\":{\"814\":1,\"974\":1,\"995\":1,\"1082\":1,\"1150\":1,\"1274\":1,\"1295\":1,\"1322\":1,\"1450\":1,\"1471\":1,\"1499\":1,\"1627\":1,\"1648\":1,\"1676\":1,\"1804\":1,\"1825\":1,\"1853\":1,\"1981\":1,\"2002\":1,\"2030\":1,\"2158\":1,\"2179\":1,\"2217\":1,\"2377\":1,\"2398\":1,\"2436\":1,\"2596\":1,\"2617\":1,\"2655\":1,\"2815\":1,\"2836\":1},\"1\":{\"814\":2,\"905\":1,\"974\":2,\"993\":1,\"995\":2,\"997\":1,\"1082\":2,\"1150\":2,\"1274\":2,\"1293\":1,\"1295\":2,\"1297\":1,\"1322\":2,\"1450\":2,\"1469\":1,\"1471\":2,\"1473\":1,\"1499\":2,\"1627\":2,\"1646\":1,\"1648\":2,\"1650\":1,\"1676\":2,\"1804\":2,\"1823\":1,\"1825\":2,\"1827\":1,\"1853\":2,\"1981\":2,\"2000\":1,\"2002\":2,\"2004\":1,\"2030\":2,\"2158\":2,\"2177\":1,\"2179\":2,\"2181\":1,\"2217\":2,\"2308\":1,\"2377\":2,\"2396\":1,\"2398\":2,\"2400\":1,\"2436\":2,\"2527\":1,\"2596\":2,\"2615\":1,\"2617\":2,\"2619\":1,\"2655\":2,\"2746\":1,\"2815\":2,\"2834\":1,\"2836\":2,\"2838\":1}}],[\"beans\",{\"1\":{\"328\":2,\"386\":1}}],[\"bean\",{\"1\":{\"143\":3,\"145\":2,\"146\":2,\"150\":1,\"328\":1,\"331\":1}}],[\"beantragen\",{\"1\":{\"16\":1}}],[\"benefit\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"benefits\",{\"0\":{\"7\":1,\"401\":1,\"612\":1,\"658\":1,\"704\":1,\"750\":1},\"1\":{\"93\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"berlin\",{\"1\":{\"323\":8}}],[\"bereits\",{\"1\":{\"15\":1}}],[\"beginning\",{\"1\":{\"155\":1,\"455\":1,\"478\":1,\"504\":1,\"530\":1}}],[\"begrüßung\",{\"1\":{\"14\":1}}],[\"behind\",{\"1\":{\"135\":1}}],[\"become\",{\"1\":{\"113\":1}}],[\"because\",{\"1\":{\"92\":1,\"93\":1,\"377\":2}}],[\"being\",{\"1\":{\"95\":1,\"105\":1,\"165\":1,\"218\":1,\"219\":1,\"377\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1,\"875\":1,\"876\":1,\"1057\":1,\"1058\":1,\"1208\":1,\"1209\":1,\"1380\":1,\"1381\":1,\"1557\":1,\"1558\":1,\"1734\":1,\"1735\":1,\"1911\":1,\"1912\":1,\"2088\":1,\"2089\":1,\"2278\":1,\"2279\":1,\"2497\":1,\"2498\":1,\"2716\":1,\"2717\":1}}],[\"beizutreten\",{\"1\":{\"41\":1}}],[\"before\",{\"1\":{\"86\":1,\"89\":1,\"132\":1,\"152\":1,\"155\":108,\"156\":2,\"299\":1,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"403\":1,\"411\":1,\"412\":1,\"415\":1,\"442\":1,\"444\":1,\"445\":1,\"493\":1,\"494\":1,\"519\":1,\"520\":1,\"547\":1,\"549\":1,\"550\":1,\"577\":1,\"579\":1,\"580\":1,\"607\":1,\"609\":1,\"610\":1,\"614\":1,\"622\":1,\"623\":1,\"626\":1,\"653\":1,\"655\":1,\"656\":1,\"660\":1,\"668\":1,\"669\":1,\"672\":1,\"699\":1,\"701\":1,\"702\":1,\"706\":1,\"714\":1,\"715\":1,\"718\":1,\"745\":1,\"747\":1,\"748\":1,\"752\":1,\"760\":1,\"761\":1,\"764\":1,\"791\":1,\"793\":1,\"794\":1}}],[\"befinden\",{\"1\":{\"16\":1}}],[\"been\",{\"1\":{\"84\":1,\"85\":1,\"94\":1,\"123\":1,\"410\":1,\"621\":1,\"667\":1,\"713\":1,\"759\":1}}],[\"better\",{\"1\":{\"77\":1,\"125\":1,\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"between\",{\"1\":{\"32\":1,\"73\":1,\"90\":2,\"91\":1,\"92\":2,\"93\":2,\"94\":3,\"100\":1,\"105\":1,\"155\":11,\"206\":1,\"231\":1,\"243\":1,\"273\":1,\"319\":1,\"321\":1,\"350\":3,\"352\":2,\"375\":1,\"379\":2,\"411\":1,\"442\":1,\"547\":1,\"577\":1,\"607\":1,\"622\":1,\"653\":1,\"668\":1,\"699\":1,\"714\":1,\"745\":1,\"760\":1,\"791\":1,\"863\":1,\"889\":1,\"918\":1,\"938\":1,\"1010\":1,\"1045\":1,\"1068\":1,\"1104\":1,\"1138\":1,\"1196\":1,\"1219\":1,\"1242\":1,\"1309\":1,\"1368\":1,\"1394\":1,\"1418\":1,\"1486\":1,\"1545\":1,\"1571\":1,\"1595\":1,\"1663\":1,\"1722\":1,\"1748\":1,\"1772\":1,\"1840\":1,\"1899\":1,\"1925\":1,\"1949\":1,\"2017\":1,\"2076\":1,\"2102\":1,\"2126\":1,\"2194\":1,\"2266\":1,\"2292\":1,\"2321\":1,\"2341\":1,\"2413\":1,\"2485\":1,\"2511\":1,\"2540\":1,\"2560\":1,\"2632\":1,\"2704\":1,\"2730\":1,\"2759\":1,\"2779\":1,\"2851\":1}}],[\"belonging\",{\"1\":{\"344\":1,\"404\":1,\"615\":1,\"661\":1,\"707\":1,\"753\":1}}],[\"belongs\",{\"1\":{\"74\":1,\"438\":2,\"464\":2,\"487\":2,\"513\":2,\"543\":2,\"573\":2,\"603\":2,\"649\":2,\"695\":2,\"741\":2,\"787\":2}}],[\"below\",{\"1\":{\"96\":1,\"166\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"427\":1,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"531\":1,\"543\":1,\"544\":1,\"561\":1,\"573\":1,\"574\":1,\"591\":1,\"603\":1,\"604\":1,\"637\":1,\"649\":1,\"650\":1,\"683\":1,\"695\":1,\"696\":1,\"729\":1,\"741\":1,\"742\":1,\"776\":1,\"787\":1,\"788\":1,\"798\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"believe\",{\"1\":{\"37\":1,\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"beliebiger\",{\"1\":{\"17\":1}}],[\"bedarf\",{\"1\":{\"15\":1}}],[\"besides\",{\"1\":{\"261\":1,\"262\":1}}],[\"best\",{\"1\":{\"35\":1}}],[\"bestandteil\",{\"1\":{\"15\":1}}],[\"besuchen\",{\"1\":{\"14\":1}}],[\"be\",{\"1\":{\"8\":1,\"9\":2,\"37\":1,\"78\":1,\"81\":1,\"84\":2,\"86\":3,\"87\":2,\"90\":2,\"91\":6,\"92\":2,\"93\":1,\"94\":2,\"95\":2,\"96\":2,\"99\":1,\"100\":1,\"105\":1,\"106\":1,\"112\":1,\"113\":3,\"116\":2,\"122\":1,\"126\":2,\"134\":3,\"135\":2,\"143\":2,\"148\":3,\"149\":3,\"150\":7,\"152\":1,\"153\":2,\"165\":2,\"166\":2,\"180\":1,\"181\":1,\"182\":2,\"205\":1,\"208\":1,\"209\":1,\"213\":1,\"214\":1,\"218\":1,\"219\":1,\"220\":1,\"224\":1,\"229\":2,\"230\":1,\"233\":1,\"257\":1,\"261\":1,\"262\":1,\"267\":1,\"268\":1,\"272\":1,\"273\":1,\"279\":1,\"281\":2,\"284\":2,\"286\":1,\"290\":1,\"292\":2,\"295\":2,\"297\":1,\"299\":1,\"314\":1,\"315\":1,\"320\":2,\"328\":4,\"330\":1,\"334\":4,\"337\":3,\"341\":1,\"342\":2,\"343\":3,\"344\":3,\"345\":1,\"348\":1,\"350\":1,\"352\":4,\"353\":2,\"354\":2,\"355\":1,\"356\":1,\"357\":2,\"358\":1,\"359\":1,\"360\":2,\"363\":1,\"365\":2,\"367\":4,\"368\":1,\"370\":1,\"373\":1,\"377\":1,\"378\":1,\"379\":2,\"380\":2,\"381\":1,\"382\":1,\"383\":2,\"384\":1,\"385\":1,\"386\":1,\"389\":1,\"390\":1,\"391\":1,\"393\":1,\"395\":2,\"396\":1,\"397\":2,\"398\":1,\"403\":1,\"411\":2,\"415\":2,\"423\":3,\"428\":1,\"430\":1,\"435\":2,\"437\":2,\"442\":2,\"453\":3,\"456\":1,\"461\":2,\"463\":2,\"464\":2,\"468\":2,\"476\":3,\"479\":1,\"484\":2,\"486\":2,\"491\":2,\"502\":3,\"505\":1,\"510\":2,\"512\":2,\"517\":2,\"528\":3,\"535\":1,\"540\":2,\"542\":2,\"547\":2,\"558\":3,\"565\":1,\"570\":2,\"572\":2,\"577\":2,\"588\":3,\"595\":1,\"600\":2,\"602\":2,\"607\":2,\"614\":1,\"622\":2,\"626\":2,\"634\":3,\"641\":1,\"646\":2,\"648\":2,\"653\":2,\"660\":1,\"668\":2,\"672\":2,\"680\":3,\"687\":1,\"692\":2,\"694\":2,\"699\":2,\"706\":1,\"714\":2,\"718\":2,\"726\":3,\"733\":1,\"738\":2,\"740\":2,\"745\":2,\"752\":1,\"760\":2,\"764\":2,\"772\":3,\"777\":1,\"779\":1,\"784\":2,\"786\":2,\"791\":2,\"798\":7,\"799\":2,\"801\":3,\"802\":1,\"803\":1,\"811\":1,\"812\":2,\"814\":1,\"815\":1,\"816\":1,\"843\":2,\"844\":2,\"845\":1,\"846\":1,\"847\":2,\"848\":2,\"849\":2,\"862\":1,\"865\":1,\"866\":1,\"870\":1,\"871\":1,\"875\":1,\"876\":1,\"877\":1,\"881\":1,\"887\":2,\"888\":1,\"891\":1,\"902\":3,\"903\":2,\"904\":2,\"911\":1,\"912\":1,\"917\":1,\"918\":1,\"925\":7,\"926\":2,\"928\":3,\"929\":1,\"930\":1,\"932\":1,\"953\":2,\"954\":2,\"955\":2,\"959\":1,\"971\":1,\"972\":2,\"974\":1,\"975\":1,\"976\":1,\"993\":3,\"994\":2,\"996\":2,\"1003\":1,\"1004\":1,\"1009\":1,\"1010\":1,\"1028\":1,\"1029\":1,\"1030\":2,\"1044\":1,\"1047\":1,\"1048\":1,\"1052\":1,\"1053\":1,\"1057\":1,\"1058\":1,\"1059\":1,\"1063\":1,\"1066\":2,\"1067\":1,\"1070\":1,\"1079\":1,\"1080\":2,\"1082\":1,\"1083\":1,\"1084\":1,\"1132\":1,\"1133\":1,\"1137\":1,\"1138\":1,\"1147\":1,\"1148\":2,\"1150\":1,\"1151\":1,\"1152\":1,\"1179\":1,\"1180\":1,\"1181\":2,\"1195\":1,\"1198\":1,\"1199\":1,\"1203\":1,\"1204\":1,\"1208\":1,\"1209\":1,\"1210\":1,\"1214\":1,\"1217\":2,\"1218\":1,\"1221\":1,\"1229\":6,\"1230\":2,\"1232\":3,\"1233\":1,\"1234\":1,\"1236\":1,\"1260\":1,\"1262\":1,\"1271\":1,\"1272\":2,\"1274\":1,\"1275\":1,\"1276\":1,\"1293\":3,\"1294\":2,\"1296\":2,\"1303\":1,\"1304\":1,\"1308\":1,\"1309\":1,\"1319\":1,\"1320\":2,\"1322\":1,\"1323\":1,\"1324\":1,\"1351\":1,\"1352\":1,\"1353\":2,\"1354\":2,\"1367\":1,\"1370\":1,\"1371\":1,\"1375\":1,\"1376\":1,\"1380\":1,\"1381\":1,\"1382\":1,\"1386\":1,\"1392\":2,\"1393\":1,\"1396\":1,\"1405\":6,\"1406\":2,\"1408\":3,\"1409\":1,\"1410\":1,\"1412\":1,\"1436\":1,\"1447\":1,\"1448\":2,\"1450\":1,\"1451\":1,\"1452\":1,\"1469\":3,\"1470\":2,\"1472\":2,\"1479\":1,\"1480\":1,\"1485\":1,\"1486\":1,\"1496\":1,\"1497\":2,\"1499\":1,\"1500\":1,\"1501\":1,\"1528\":1,\"1529\":1,\"1530\":2,\"1531\":2,\"1544\":1,\"1547\":1,\"1548\":1,\"1552\":1,\"1553\":1,\"1557\":1,\"1558\":1,\"1559\":1,\"1563\":1,\"1569\":2,\"1570\":1,\"1573\":1,\"1582\":6,\"1583\":2,\"1585\":3,\"1586\":1,\"1587\":1,\"1589\":1,\"1613\":1,\"1624\":1,\"1625\":2,\"1627\":1,\"1628\":1,\"1629\":1,\"1646\":3,\"1647\":2,\"1649\":2,\"1656\":1,\"1657\":1,\"1662\":1,\"1663\":1,\"1673\":1,\"1674\":2,\"1676\":1,\"1677\":1,\"1678\":1,\"1705\":1,\"1706\":1,\"1707\":2,\"1708\":2,\"1721\":1,\"1724\":1,\"1725\":1,\"1729\":1,\"1730\":1,\"1734\":1,\"1735\":1,\"1736\":1,\"1740\":1,\"1746\":2,\"1747\":1,\"1750\":1,\"1759\":6,\"1760\":2,\"1762\":3,\"1763\":1,\"1764\":1,\"1766\":1,\"1790\":1,\"1801\":1,\"1802\":2,\"1804\":1,\"1805\":1,\"1806\":1,\"1823\":3,\"1824\":2,\"1826\":2,\"1833\":1,\"1834\":1,\"1839\":1,\"1840\":1,\"1850\":1,\"1851\":2,\"1853\":1,\"1854\":1,\"1855\":1,\"1882\":1,\"1883\":1,\"1884\":2,\"1885\":2,\"1898\":1,\"1901\":1,\"1902\":1,\"1906\":1,\"1907\":1,\"1911\":1,\"1912\":1,\"1913\":1,\"1917\":1,\"1923\":2,\"1924\":1,\"1927\":1,\"1936\":6,\"1937\":2,\"1939\":3,\"1940\":1,\"1941\":1,\"1943\":1,\"1967\":1,\"1978\":1,\"1979\":2,\"1981\":1,\"1982\":1,\"1983\":1,\"2000\":3,\"2001\":2,\"2003\":2,\"2010\":1,\"2011\":1,\"2016\":1,\"2017\":1,\"2027\":1,\"2028\":2,\"2030\":1,\"2031\":1,\"2032\":1,\"2059\":1,\"2060\":1,\"2061\":2,\"2062\":2,\"2075\":1,\"2078\":1,\"2079\":1,\"2083\":1,\"2084\":1,\"2088\":1,\"2089\":1,\"2090\":1,\"2094\":1,\"2100\":2,\"2101\":1,\"2104\":1,\"2113\":6,\"2114\":2,\"2116\":3,\"2117\":1,\"2118\":1,\"2120\":1,\"2144\":1,\"2155\":1,\"2156\":2,\"2158\":1,\"2159\":1,\"2160\":1,\"2177\":3,\"2178\":2,\"2180\":2,\"2187\":1,\"2188\":1,\"2193\":1,\"2194\":1,\"2201\":7,\"2202\":2,\"2204\":3,\"2205\":1,\"2206\":1,\"2214\":1,\"2215\":2,\"2217\":1,\"2218\":1,\"2219\":1,\"2246\":2,\"2247\":2,\"2248\":1,\"2249\":1,\"2250\":2,\"2251\":2,\"2252\":2,\"2265\":1,\"2268\":1,\"2269\":1,\"2273\":1,\"2274\":1,\"2278\":1,\"2279\":1,\"2280\":1,\"2284\":1,\"2290\":2,\"2291\":1,\"2294\":1,\"2305\":3,\"2306\":2,\"2307\":2,\"2314\":1,\"2315\":1,\"2320\":1,\"2321\":1,\"2328\":7,\"2329\":2,\"2331\":3,\"2332\":1,\"2333\":1,\"2335\":1,\"2356\":2,\"2357\":2,\"2358\":2,\"2362\":1,\"2374\":1,\"2375\":2,\"2377\":1,\"2378\":1,\"2379\":1,\"2396\":3,\"2397\":2,\"2399\":2,\"2406\":1,\"2407\":1,\"2412\":1,\"2413\":1,\"2420\":7,\"2421\":2,\"2423\":3,\"2424\":1,\"2425\":1,\"2433\":1,\"2434\":2,\"2436\":1,\"2437\":1,\"2438\":1,\"2465\":2,\"2466\":2,\"2467\":1,\"2468\":1,\"2469\":2,\"2470\":2,\"2471\":2,\"2484\":1,\"2487\":1,\"2488\":1,\"2492\":1,\"2493\":1,\"2497\":1,\"2498\":1,\"2499\":1,\"2503\":1,\"2509\":2,\"2510\":1,\"2513\":1,\"2524\":3,\"2525\":2,\"2526\":2,\"2533\":1,\"2534\":1,\"2539\":1,\"2540\":1,\"2547\":7,\"2548\":2,\"2550\":3,\"2551\":1,\"2552\":1,\"2554\":1,\"2575\":2,\"2576\":2,\"2577\":2,\"2581\":1,\"2593\":1,\"2594\":2,\"2596\":1,\"2597\":1,\"2598\":1,\"2615\":3,\"2616\":2,\"2618\":2,\"2625\":1,\"2626\":1,\"2631\":1,\"2632\":1,\"2639\":7,\"2640\":2,\"2642\":3,\"2643\":1,\"2644\":1,\"2652\":1,\"2653\":2,\"2655\":1,\"2656\":1,\"2657\":1,\"2684\":2,\"2685\":2,\"2686\":1,\"2687\":1,\"2688\":2,\"2689\":2,\"2690\":2,\"2703\":1,\"2706\":1,\"2707\":1,\"2711\":1,\"2712\":1,\"2716\":1,\"2717\":1,\"2718\":1,\"2722\":1,\"2728\":2,\"2729\":1,\"2732\":1,\"2743\":3,\"2744\":2,\"2745\":2,\"2752\":1,\"2753\":1,\"2758\":1,\"2759\":1,\"2766\":7,\"2767\":2,\"2769\":3,\"2770\":1,\"2771\":1,\"2773\":1,\"2794\":2,\"2795\":2,\"2796\":2,\"2800\":1,\"2812\":1,\"2813\":2,\"2815\":1,\"2816\":1,\"2817\":1,\"2834\":3,\"2835\":2,\"2837\":2,\"2844\":1,\"2845\":1,\"2850\":1,\"2851\":1}}],[\"by=\",{\"1\":{\"279\":1,\"290\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"by\",{\"0\":{\"104\":1,\"150\":1},\"1\":{\"0\":2,\"1\":1,\"5\":1,\"6\":1,\"8\":1,\"32\":1,\"33\":2,\"84\":1,\"86\":1,\"91\":1,\"92\":1,\"93\":1,\"94\":2,\"95\":4,\"96\":1,\"105\":1,\"106\":2,\"112\":2,\"113\":2,\"122\":1,\"123\":1,\"143\":1,\"145\":1,\"146\":1,\"148\":2,\"149\":2,\"159\":1,\"161\":2,\"165\":4,\"166\":1,\"171\":1,\"204\":1,\"247\":1,\"259\":1,\"260\":1,\"281\":1,\"285\":2,\"286\":2,\"292\":1,\"296\":2,\"297\":2,\"300\":1,\"303\":1,\"306\":1,\"309\":1,\"312\":1,\"314\":1,\"328\":2,\"329\":1,\"330\":1,\"334\":4,\"337\":1,\"340\":1,\"341\":1,\"342\":1,\"343\":2,\"344\":4,\"345\":3,\"348\":3,\"350\":1,\"352\":4,\"359\":1,\"363\":4,\"365\":1,\"373\":3,\"379\":1,\"385\":1,\"386\":1,\"389\":4,\"401\":1,\"415\":2,\"423\":1,\"429\":2,\"434\":1,\"435\":2,\"438\":2,\"439\":1,\"440\":3,\"442\":1,\"445\":1,\"453\":1,\"460\":1,\"461\":2,\"464\":2,\"465\":1,\"466\":3,\"468\":1,\"476\":1,\"483\":1,\"484\":2,\"487\":2,\"488\":1,\"489\":3,\"491\":1,\"494\":1,\"502\":1,\"509\":1,\"510\":2,\"513\":2,\"514\":1,\"515\":3,\"517\":1,\"520\":3,\"528\":1,\"539\":1,\"540\":2,\"543\":2,\"544\":1,\"545\":3,\"547\":1,\"550\":1,\"558\":1,\"569\":1,\"570\":2,\"573\":2,\"574\":1,\"575\":3,\"577\":1,\"580\":1,\"588\":1,\"599\":1,\"600\":2,\"603\":2,\"604\":1,\"605\":3,\"607\":1,\"610\":1,\"612\":1,\"626\":2,\"634\":1,\"645\":1,\"646\":2,\"649\":2,\"650\":1,\"651\":3,\"653\":1,\"656\":1,\"658\":1,\"672\":2,\"680\":1,\"691\":1,\"692\":2,\"695\":2,\"696\":1,\"697\":3,\"699\":1,\"702\":1,\"704\":1,\"718\":2,\"726\":1,\"737\":1,\"738\":2,\"741\":2,\"742\":1,\"743\":3,\"745\":1,\"748\":1,\"750\":1,\"764\":2,\"772\":1,\"778\":2,\"783\":1,\"784\":2,\"787\":2,\"788\":1,\"789\":3,\"791\":1,\"794\":1,\"806\":1,\"813\":1,\"834\":1,\"902\":2,\"903\":1,\"933\":1,\"944\":1,\"958\":1,\"960\":1,\"973\":1,\"993\":2,\"994\":1,\"1019\":1,\"1043\":1,\"1081\":1,\"1110\":1,\"1121\":1,\"1122\":1,\"1149\":1,\"1170\":1,\"1194\":1,\"1237\":1,\"1248\":1,\"1259\":1,\"1261\":1,\"1273\":1,\"1293\":2,\"1294\":1,\"1321\":1,\"1342\":1,\"1413\":1,\"1424\":1,\"1435\":1,\"1437\":1,\"1449\":1,\"1469\":2,\"1470\":1,\"1498\":1,\"1519\":1,\"1590\":1,\"1601\":1,\"1612\":1,\"1614\":1,\"1626\":1,\"1646\":2,\"1647\":1,\"1675\":1,\"1696\":1,\"1767\":1,\"1778\":1,\"1789\":1,\"1791\":1,\"1803\":1,\"1823\":2,\"1824\":1,\"1852\":1,\"1873\":1,\"1944\":1,\"1955\":1,\"1966\":1,\"1968\":1,\"1980\":1,\"2000\":2,\"2001\":1,\"2029\":1,\"2050\":1,\"2121\":1,\"2132\":1,\"2143\":1,\"2145\":1,\"2157\":1,\"2177\":2,\"2178\":1,\"2209\":1,\"2216\":1,\"2237\":1,\"2305\":2,\"2306\":1,\"2336\":1,\"2347\":1,\"2361\":1,\"2363\":1,\"2376\":1,\"2396\":2,\"2397\":1,\"2428\":1,\"2435\":1,\"2456\":1,\"2524\":2,\"2525\":1,\"2555\":1,\"2566\":1,\"2580\":1,\"2582\":1,\"2595\":1,\"2615\":2,\"2616\":1,\"2647\":1,\"2654\":1,\"2675\":1,\"2743\":2,\"2744\":1,\"2774\":1,\"2785\":1,\"2799\":1,\"2801\":1,\"2814\":1,\"2834\":2,\"2835\":1}}],[\"tz\",{\"1\":{\"323\":8}}],[\"typo\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"typically\",{\"1\":{\"266\":1,\"352\":1,\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1,\"910\":1,\"1002\":1,\"1131\":1,\"1302\":1,\"1478\":1,\"1655\":1,\"1832\":1,\"2009\":1,\"2186\":1,\"2313\":1,\"2405\":1,\"2532\":1,\"2624\":1,\"2751\":1,\"2843\":1}}],[\"type=websocket\",{\"1\":{\"202\":1,\"207\":1,\"860\":1,\"864\":1,\"1041\":1,\"1046\":1,\"1192\":1,\"1197\":1,\"1365\":1,\"1369\":1,\"1542\":1,\"1546\":1,\"1719\":1,\"1723\":1,\"1896\":1,\"1900\":1,\"2073\":1,\"2077\":1,\"2263\":1,\"2267\":1,\"2482\":1,\"2486\":1,\"2701\":1,\"2705\":1}}],[\"type\",{\"1\":{\"143\":2,\"148\":1,\"149\":1,\"150\":1,\"155\":45,\"166\":1,\"300\":6,\"323\":22,\"345\":1}}],[\"types\",{\"1\":{\"9\":1,\"329\":1,\"803\":1,\"930\":1,\"1234\":1,\"1410\":1,\"1587\":1,\"1764\":1,\"1941\":1,\"2118\":1,\"2206\":1,\"2333\":1,\"2425\":1,\"2552\":1,\"2644\":1,\"2771\":1}}],[\"tit\",{\"1\":{\"232\":1,\"890\":1,\"1069\":1,\"1220\":1,\"1395\":1,\"1572\":1,\"1749\":1,\"1926\":1,\"2103\":1,\"2293\":1,\"2512\":1,\"2731\":1}}],[\"timeout\",{\"0\":{\"189\":1,\"190\":1,\"198\":1,\"199\":1,\"243\":1,\"244\":1,\"267\":1,\"268\":1,\"269\":1,\"270\":1,\"853\":1,\"854\":1,\"856\":1,\"857\":1,\"911\":1,\"912\":1,\"913\":1,\"914\":1,\"938\":1,\"939\":1,\"1003\":1,\"1004\":1,\"1005\":1,\"1006\":1,\"1034\":1,\"1035\":1,\"1037\":1,\"1038\":1,\"1104\":1,\"1105\":1,\"1132\":1,\"1133\":1,\"1134\":1,\"1135\":1,\"1185\":1,\"1186\":1,\"1188\":1,\"1189\":1,\"1242\":1,\"1243\":1,\"1303\":1,\"1304\":1,\"1305\":1,\"1306\":1,\"1358\":1,\"1359\":1,\"1361\":1,\"1362\":1,\"1418\":1,\"1419\":1,\"1479\":1,\"1480\":1,\"1481\":1,\"1482\":1,\"1535\":1,\"1536\":1,\"1538\":1,\"1539\":1,\"1595\":1,\"1596\":1,\"1656\":1,\"1657\":1,\"1658\":1,\"1659\":1,\"1712\":1,\"1713\":1,\"1715\":1,\"1716\":1,\"1772\":1,\"1773\":1,\"1833\":1,\"1834\":1,\"1835\":1,\"1836\":1,\"1889\":1,\"1890\":1,\"1892\":1,\"1893\":1,\"1949\":1,\"1950\":1,\"2010\":1,\"2011\":1,\"2012\":1,\"2013\":1,\"2066\":1,\"2067\":1,\"2069\":1,\"2070\":1,\"2126\":1,\"2127\":1,\"2187\":1,\"2188\":1,\"2189\":1,\"2190\":1,\"2256\":1,\"2257\":1,\"2259\":1,\"2260\":1,\"2314\":1,\"2315\":1,\"2316\":1,\"2317\":1,\"2341\":1,\"2342\":1,\"2406\":1,\"2407\":1,\"2408\":1,\"2409\":1,\"2475\":1,\"2476\":1,\"2478\":1,\"2479\":1,\"2533\":1,\"2534\":1,\"2535\":1,\"2536\":1,\"2560\":1,\"2561\":1,\"2625\":1,\"2626\":1,\"2627\":1,\"2628\":1,\"2694\":1,\"2695\":1,\"2697\":1,\"2698\":1,\"2752\":1,\"2753\":1,\"2754\":1,\"2755\":1,\"2779\":1,\"2780\":1,\"2844\":1,\"2845\":1,\"2846\":1,\"2847\":1},\"1\":{\"166\":3,\"189\":3,\"190\":3,\"198\":3,\"199\":3,\"243\":3,\"244\":3,\"267\":1,\"268\":1,\"269\":1,\"270\":1,\"323\":1,\"519\":1,\"520\":1,\"820\":1,\"821\":1,\"853\":3,\"854\":3,\"856\":3,\"857\":3,\"911\":1,\"912\":1,\"913\":1,\"914\":1,\"938\":3,\"939\":3,\"980\":1,\"981\":1,\"1003\":1,\"1004\":1,\"1005\":1,\"1006\":1,\"1034\":3,\"1035\":3,\"1037\":3,\"1038\":3,\"1088\":1,\"1089\":1,\"1104\":3,\"1105\":3,\"1132\":1,\"1133\":1,\"1134\":1,\"1135\":1,\"1156\":1,\"1157\":1,\"1185\":3,\"1186\":3,\"1188\":3,\"1189\":3,\"1242\":3,\"1243\":3,\"1280\":1,\"1281\":1,\"1303\":1,\"1304\":1,\"1305\":1,\"1306\":1,\"1328\":1,\"1329\":1,\"1358\":3,\"1359\":3,\"1361\":3,\"1362\":3,\"1418\":3,\"1419\":3,\"1456\":1,\"1457\":1,\"1479\":1,\"1480\":1,\"1481\":1,\"1482\":1,\"1505\":1,\"1506\":1,\"1535\":3,\"1536\":3,\"1538\":3,\"1539\":3,\"1595\":3,\"1596\":3,\"1633\":1,\"1634\":1,\"1656\":1,\"1657\":1,\"1658\":1,\"1659\":1,\"1682\":1,\"1683\":1,\"1712\":3,\"1713\":3,\"1715\":3,\"1716\":3,\"1772\":3,\"1773\":3,\"1810\":1,\"1811\":1,\"1833\":1,\"1834\":1,\"1835\":1,\"1836\":1,\"1859\":1,\"1860\":1,\"1889\":3,\"1890\":3,\"1892\":3,\"1893\":3,\"1949\":3,\"1950\":3,\"1987\":1,\"1988\":1,\"2010\":1,\"2011\":1,\"2012\":1,\"2013\":1,\"2036\":1,\"2037\":1,\"2066\":3,\"2067\":3,\"2069\":3,\"2070\":3,\"2126\":3,\"2127\":3,\"2164\":1,\"2165\":1,\"2187\":1,\"2188\":1,\"2189\":1,\"2190\":1,\"2223\":1,\"2224\":1,\"2256\":3,\"2257\":3,\"2259\":3,\"2260\":3,\"2314\":1,\"2315\":1,\"2316\":1,\"2317\":1,\"2341\":3,\"2342\":3,\"2383\":1,\"2384\":1,\"2406\":1,\"2407\":1,\"2408\":1,\"2409\":1,\"2442\":1,\"2443\":1,\"2475\":3,\"2476\":3,\"2478\":3,\"2479\":3,\"2533\":1,\"2534\":1,\"2535\":1,\"2536\":1,\"2560\":3,\"2561\":3,\"2602\":1,\"2603\":1,\"2625\":1,\"2626\":1,\"2627\":1,\"2628\":1,\"2661\":1,\"2662\":1,\"2694\":3,\"2695\":3,\"2697\":3,\"2698\":3,\"2752\":1,\"2753\":1,\"2754\":1,\"2755\":1,\"2779\":3,\"2780\":3,\"2821\":1,\"2822\":1,\"2844\":1,\"2845\":1,\"2846\":1,\"2847\":1}}],[\"timer\",{\"0\":{\"378\":1},\"1\":{\"101\":2,\"377\":1,\"378\":2,\"386\":1}}],[\"time\",{\"1\":{\"93\":1,\"267\":1,\"268\":1,\"269\":1,\"270\":1,\"352\":1,\"442\":1,\"468\":1,\"491\":1,\"517\":1,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"791\":1,\"833\":1,\"911\":1,\"912\":1,\"913\":1,\"914\":1,\"943\":1,\"1003\":1,\"1004\":1,\"1005\":1,\"1006\":1,\"1018\":1,\"1109\":1,\"1132\":1,\"1133\":1,\"1134\":1,\"1135\":1,\"1169\":1,\"1247\":1,\"1303\":1,\"1304\":1,\"1305\":1,\"1306\":1,\"1341\":1,\"1423\":1,\"1479\":1,\"1480\":1,\"1481\":1,\"1482\":1,\"1518\":1,\"1600\":1,\"1656\":1,\"1657\":1,\"1658\":1,\"1659\":1,\"1695\":1,\"1777\":1,\"1833\":1,\"1834\":1,\"1835\":1,\"1836\":1,\"1872\":1,\"1954\":1,\"2010\":1,\"2011\":1,\"2012\":1,\"2013\":1,\"2049\":1,\"2131\":1,\"2187\":1,\"2188\":1,\"2189\":1,\"2190\":1,\"2236\":1,\"2314\":1,\"2315\":1,\"2316\":1,\"2317\":1,\"2346\":1,\"2406\":1,\"2407\":1,\"2408\":1,\"2409\":1,\"2455\":1,\"2533\":1,\"2534\":1,\"2535\":1,\"2536\":1,\"2565\":1,\"2625\":1,\"2626\":1,\"2627\":1,\"2628\":1,\"2674\":1,\"2752\":1,\"2753\":1,\"2754\":1,\"2755\":1,\"2784\":1,\"2844\":1,\"2845\":1,\"2846\":1,\"2847\":1}}],[\"timely\",{\"1\":{\"38\":1,\"90\":1}}],[\"txt\",{\"1\":{\"133\":2}}],[\"ttp\",{\"0\":{\"133\":1},\"1\":{\"137\":1,\"138\":1,\"286\":1,\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"tcs\",{\"1\":{\"106\":1,\"108\":1,\"109\":1,\"161\":1,\"163\":1,\"164\":1,\"280\":1,\"291\":1,\"434\":2,\"460\":2,\"483\":2,\"509\":2,\"539\":2,\"569\":2,\"599\":2,\"645\":2,\"691\":2,\"737\":2,\"783\":2}}],[\"tcp\",{\"1\":{\"96\":1,\"166\":5}}],[\"tmf\",{\"1\":{\"106\":1,\"108\":1,\"109\":1,\"161\":1,\"163\":1,\"164\":1,\"280\":1,\"291\":1,\"314\":1,\"434\":1,\"460\":1,\"483\":1,\"509\":1,\"539\":1,\"569\":1,\"599\":1,\"645\":1,\"691\":1,\"737\":1,\"783\":1}}],[\"tm6c\",{\"1\":{\"14\":1}}],[\"tlsv13\",{\"1\":{\"286\":1,\"297\":1,\"439\":1,\"465\":1,\"488\":1,\"514\":1,\"544\":1,\"574\":1,\"604\":1,\"650\":1,\"696\":1,\"742\":1,\"788\":1}}],[\"tls\",{\"1\":{\"96\":1,\"105\":1,\"166\":1,\"208\":1,\"209\":1,\"215\":1,\"224\":1,\"225\":1,\"226\":1,\"272\":1,\"281\":2,\"286\":1,\"292\":2,\"297\":1,\"434\":4,\"435\":2,\"439\":1,\"460\":4,\"461\":2,\"465\":1,\"483\":4,\"484\":2,\"488\":1,\"509\":4,\"510\":2,\"514\":1,\"539\":4,\"540\":2,\"544\":1,\"569\":4,\"570\":2,\"574\":1,\"599\":4,\"600\":2,\"604\":1,\"645\":4,\"646\":2,\"650\":1,\"691\":4,\"692\":2,\"696\":1,\"737\":4,\"738\":2,\"742\":1,\"783\":4,\"784\":2,\"788\":1,\"825\":1,\"826\":1,\"827\":1,\"828\":1,\"865\":1,\"866\":1,\"872\":1,\"881\":1,\"882\":1,\"883\":1,\"917\":1,\"985\":1,\"986\":1,\"987\":1,\"988\":1,\"1009\":1,\"1047\":1,\"1048\":1,\"1054\":1,\"1063\":1,\"1064\":1,\"1065\":1,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":1,\"1137\":1,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":1,\"1198\":1,\"1199\":1,\"1205\":1,\"1214\":1,\"1215\":1,\"1216\":1,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":1,\"1308\":1,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":1,\"1370\":1,\"1371\":1,\"1377\":1,\"1386\":1,\"1387\":1,\"1388\":1,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":1,\"1485\":1,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":1,\"1547\":1,\"1548\":1,\"1554\":1,\"1563\":1,\"1564\":1,\"1565\":1,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":1,\"1662\":1,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":1,\"1724\":1,\"1725\":1,\"1731\":1,\"1740\":1,\"1741\":1,\"1742\":1,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":1,\"1839\":1,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":1,\"1901\":1,\"1902\":1,\"1908\":1,\"1917\":1,\"1918\":1,\"1919\":1,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":1,\"2016\":1,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":1,\"2078\":1,\"2079\":1,\"2085\":1,\"2094\":1,\"2095\":1,\"2096\":1,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":1,\"2193\":1,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":1,\"2268\":1,\"2269\":1,\"2275\":1,\"2284\":1,\"2285\":1,\"2286\":1,\"2320\":1,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":1,\"2412\":1,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":1,\"2487\":1,\"2488\":1,\"2494\":1,\"2503\":1,\"2504\":1,\"2505\":1,\"2539\":1,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":1,\"2631\":1,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":1,\"2706\":1,\"2707\":1,\"2713\":1,\"2722\":1,\"2723\":1,\"2724\":1,\"2758\":1,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":1,\"2850\":1}}],[\"two\",{\"1\":{\"93\":2,\"95\":1,\"99\":1,\"150\":1,\"165\":1,\"206\":1,\"231\":1,\"280\":1,\"285\":1,\"291\":1,\"296\":1,\"318\":1,\"340\":1,\"341\":1,\"350\":1,\"352\":2,\"363\":1,\"370\":1,\"377\":1,\"379\":1,\"386\":2,\"389\":1,\"404\":1,\"434\":1,\"438\":1,\"460\":1,\"464\":1,\"483\":1,\"487\":1,\"509\":1,\"513\":1,\"539\":1,\"543\":1,\"569\":1,\"573\":1,\"599\":1,\"603\":1,\"615\":1,\"645\":1,\"649\":1,\"661\":1,\"691\":1,\"695\":1,\"707\":1,\"737\":1,\"741\":1,\"753\":1,\"783\":1,\"787\":1,\"803\":1,\"806\":1,\"863\":1,\"889\":1,\"930\":1,\"933\":2,\"1045\":1,\"1068\":1,\"1196\":1,\"1219\":1,\"1237\":2,\"1368\":1,\"1394\":1,\"1413\":2,\"1545\":1,\"1571\":1,\"1590\":2,\"1722\":1,\"1748\":1,\"1767\":2,\"1899\":1,\"1925\":1,\"1944\":2,\"2076\":1,\"2102\":1,\"2121\":2,\"2206\":1,\"2209\":1,\"2266\":1,\"2292\":1,\"2333\":1,\"2336\":2,\"2425\":1,\"2428\":1,\"2485\":1,\"2511\":1,\"2552\":1,\"2555\":2,\"2644\":1,\"2647\":1,\"2704\":1,\"2730\":1,\"2771\":1,\"2774\":2}}],[\"trying\",{\"1\":{\"340\":1}}],[\"try\",{\"1\":{\"155\":9}}],[\"true\",{\"1\":{\"155\":28,\"156\":18,\"180\":1,\"181\":1,\"182\":1,\"191\":1,\"200\":1,\"218\":1,\"219\":1,\"226\":1,\"246\":1,\"323\":9,\"345\":1,\"352\":1,\"811\":1,\"812\":2,\"814\":1,\"832\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"855\":1,\"858\":1,\"875\":1,\"876\":1,\"883\":1,\"895\":1,\"903\":2,\"905\":3,\"941\":1,\"942\":1,\"953\":1,\"954\":1,\"955\":1,\"962\":1,\"971\":1,\"972\":2,\"974\":1,\"994\":2,\"995\":1,\"997\":3,\"1017\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1036\":1,\"1039\":1,\"1057\":1,\"1058\":1,\"1065\":1,\"1079\":1,\"1080\":2,\"1082\":1,\"1107\":1,\"1108\":1,\"1124\":1,\"1147\":1,\"1148\":2,\"1150\":1,\"1168\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1187\":1,\"1190\":1,\"1208\":1,\"1209\":1,\"1216\":1,\"1245\":1,\"1246\":1,\"1263\":1,\"1271\":1,\"1272\":2,\"1274\":1,\"1294\":2,\"1295\":1,\"1297\":3,\"1319\":1,\"1320\":2,\"1322\":1,\"1340\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1360\":1,\"1363\":1,\"1380\":1,\"1381\":1,\"1388\":1,\"1421\":1,\"1422\":1,\"1439\":1,\"1447\":1,\"1448\":2,\"1450\":1,\"1470\":2,\"1471\":1,\"1473\":3,\"1496\":1,\"1497\":2,\"1499\":1,\"1517\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1537\":1,\"1540\":1,\"1557\":1,\"1558\":1,\"1565\":1,\"1598\":1,\"1599\":1,\"1616\":1,\"1624\":1,\"1625\":2,\"1627\":1,\"1647\":2,\"1648\":1,\"1650\":3,\"1673\":1,\"1674\":2,\"1676\":1,\"1694\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1714\":1,\"1717\":1,\"1734\":1,\"1735\":1,\"1742\":1,\"1775\":1,\"1776\":1,\"1793\":1,\"1801\":1,\"1802\":2,\"1804\":1,\"1824\":2,\"1825\":1,\"1827\":3,\"1850\":1,\"1851\":2,\"1853\":1,\"1871\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1891\":1,\"1894\":1,\"1911\":1,\"1912\":1,\"1919\":1,\"1952\":1,\"1953\":1,\"1970\":1,\"1978\":1,\"1979\":2,\"1981\":1,\"2001\":2,\"2002\":1,\"2004\":3,\"2027\":1,\"2028\":2,\"2030\":1,\"2048\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2068\":1,\"2071\":1,\"2088\":1,\"2089\":1,\"2096\":1,\"2129\":1,\"2130\":1,\"2147\":1,\"2155\":1,\"2156\":2,\"2158\":1,\"2178\":2,\"2179\":1,\"2181\":3,\"2214\":1,\"2215\":2,\"2217\":1,\"2235\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2258\":1,\"2261\":1,\"2278\":1,\"2279\":1,\"2286\":1,\"2298\":1,\"2306\":2,\"2308\":3,\"2344\":1,\"2345\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2365\":1,\"2374\":1,\"2375\":2,\"2377\":1,\"2397\":2,\"2398\":1,\"2400\":3,\"2433\":1,\"2434\":2,\"2436\":1,\"2454\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2477\":1,\"2480\":1,\"2497\":1,\"2498\":1,\"2505\":1,\"2517\":1,\"2525\":2,\"2527\":3,\"2563\":1,\"2564\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2584\":1,\"2593\":1,\"2594\":2,\"2596\":1,\"2616\":2,\"2617\":1,\"2619\":3,\"2652\":1,\"2653\":2,\"2655\":1,\"2673\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2696\":1,\"2699\":1,\"2716\":1,\"2717\":1,\"2724\":1,\"2736\":1,\"2744\":2,\"2746\":3,\"2782\":1,\"2783\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2803\":1,\"2812\":1,\"2813\":2,\"2815\":1,\"2835\":2,\"2836\":1,\"2838\":3}}],[\"trust\",{\"0\":{\"201\":1,\"224\":1,\"245\":1,\"822\":1,\"824\":1,\"859\":1,\"881\":1,\"940\":1,\"982\":1,\"984\":1,\"1040\":1,\"1063\":1,\"1090\":1,\"1092\":1,\"1106\":1,\"1158\":1,\"1160\":1,\"1191\":1,\"1214\":1,\"1244\":1,\"1282\":1,\"1284\":1,\"1330\":1,\"1332\":1,\"1364\":1,\"1386\":1,\"1420\":1,\"1458\":1,\"1460\":1,\"1507\":1,\"1509\":1,\"1541\":1,\"1563\":1,\"1597\":1,\"1635\":1,\"1637\":1,\"1684\":1,\"1686\":1,\"1718\":1,\"1740\":1,\"1774\":1,\"1812\":1,\"1814\":1,\"1861\":1,\"1863\":1,\"1895\":1,\"1917\":1,\"1951\":1,\"1989\":1,\"1991\":1,\"2038\":1,\"2040\":1,\"2072\":1,\"2094\":1,\"2128\":1,\"2166\":1,\"2168\":1,\"2225\":1,\"2227\":1,\"2262\":1,\"2284\":1,\"2343\":1,\"2385\":1,\"2387\":1,\"2444\":1,\"2446\":1,\"2481\":1,\"2503\":1,\"2562\":1,\"2604\":1,\"2606\":1,\"2663\":1,\"2665\":1,\"2700\":1,\"2722\":1,\"2781\":1,\"2823\":1,\"2825\":1},\"1\":{\"81\":1,\"90\":1,\"106\":1,\"108\":1,\"109\":1,\"161\":1,\"163\":1,\"164\":1,\"201\":2,\"224\":2,\"245\":2,\"280\":1,\"291\":1,\"323\":20,\"411\":1,\"434\":1,\"442\":1,\"460\":1,\"483\":1,\"509\":1,\"539\":1,\"547\":1,\"569\":1,\"577\":1,\"599\":1,\"607\":1,\"622\":1,\"645\":1,\"653\":1,\"668\":1,\"691\":1,\"699\":1,\"714\":1,\"737\":1,\"745\":1,\"760\":1,\"783\":1,\"791\":1,\"822\":2,\"824\":2,\"859\":2,\"881\":2,\"904\":1,\"905\":1,\"940\":2,\"982\":2,\"984\":2,\"996\":1,\"997\":1,\"1040\":2,\"1063\":2,\"1090\":2,\"1092\":2,\"1106\":2,\"1158\":2,\"1160\":2,\"1191\":2,\"1214\":2,\"1244\":2,\"1282\":2,\"1284\":2,\"1296\":1,\"1297\":1,\"1330\":2,\"1332\":2,\"1364\":2,\"1386\":2,\"1420\":2,\"1458\":2,\"1460\":2,\"1472\":1,\"1473\":1,\"1507\":2,\"1509\":2,\"1541\":2,\"1563\":2,\"1597\":2,\"1635\":2,\"1637\":2,\"1649\":1,\"1650\":1,\"1684\":2,\"1686\":2,\"1718\":2,\"1740\":2,\"1774\":2,\"1812\":2,\"1814\":2,\"1826\":1,\"1827\":1,\"1861\":2,\"1863\":2,\"1895\":2,\"1917\":2,\"1951\":2,\"1989\":2,\"1991\":2,\"2003\":1,\"2004\":1,\"2038\":2,\"2040\":2,\"2072\":2,\"2094\":2,\"2128\":2,\"2166\":2,\"2168\":2,\"2180\":1,\"2181\":1,\"2225\":2,\"2227\":2,\"2262\":2,\"2284\":2,\"2307\":1,\"2308\":1,\"2343\":2,\"2385\":2,\"2387\":2,\"2399\":1,\"2400\":1,\"2444\":2,\"2446\":2,\"2481\":2,\"2503\":2,\"2526\":1,\"2527\":1,\"2562\":2,\"2604\":2,\"2606\":2,\"2618\":1,\"2619\":1,\"2663\":2,\"2665\":2,\"2700\":2,\"2722\":2,\"2745\":1,\"2746\":1,\"2781\":2,\"2823\":2,\"2825\":2,\"2837\":1,\"2838\":1}}],[\"trusted\",{\"1\":{\"78\":1,\"201\":1,\"224\":1,\"245\":1,\"323\":3,\"334\":1,\"411\":2,\"622\":2,\"668\":2,\"714\":2,\"760\":2,\"822\":1,\"824\":1,\"859\":1,\"881\":1,\"904\":2,\"940\":1,\"982\":1,\"984\":1,\"996\":2,\"1040\":1,\"1063\":1,\"1090\":1,\"1092\":1,\"1106\":1,\"1158\":1,\"1160\":1,\"1191\":1,\"1214\":1,\"1244\":1,\"1282\":1,\"1284\":1,\"1296\":2,\"1330\":1,\"1332\":1,\"1364\":1,\"1386\":1,\"1420\":1,\"1458\":1,\"1460\":1,\"1472\":2,\"1507\":1,\"1509\":1,\"1541\":1,\"1563\":1,\"1597\":1,\"1635\":1,\"1637\":1,\"1649\":2,\"1684\":1,\"1686\":1,\"1718\":1,\"1740\":1,\"1774\":1,\"1812\":1,\"1814\":1,\"1826\":2,\"1861\":1,\"1863\":1,\"1895\":1,\"1917\":1,\"1951\":1,\"1989\":1,\"1991\":1,\"2003\":2,\"2038\":1,\"2040\":1,\"2072\":1,\"2094\":1,\"2128\":1,\"2166\":1,\"2168\":1,\"2180\":2,\"2225\":1,\"2227\":1,\"2262\":1,\"2284\":1,\"2307\":2,\"2343\":1,\"2385\":1,\"2387\":1,\"2399\":2,\"2444\":1,\"2446\":1,\"2481\":1,\"2503\":1,\"2526\":2,\"2562\":1,\"2604\":1,\"2606\":1,\"2618\":2,\"2663\":1,\"2665\":1,\"2700\":1,\"2722\":1,\"2745\":2,\"2781\":1,\"2823\":1,\"2825\":1,\"2837\":2}}],[\"troubles\",{\"1\":{\"132\":1}}],[\"troubleshooting\",{\"0\":{\"132\":1}}],[\"trivy\",{\"1\":{\"137\":1,\"138\":1}}],[\"triangle\",{\"1\":{\"124\":2}}],[\"triggered\",{\"1\":{\"360\":1}}],[\"triggering\",{\"1\":{\"350\":1}}],[\"triggers\",{\"1\":{\"141\":2}}],[\"trigger\",{\"1\":{\"95\":1,\"141\":1,\"165\":1,\"319\":1,\"350\":1,\"386\":1,\"389\":1}}],[\"track\",{\"1\":{\"411\":1,\"413\":1,\"622\":1,\"624\":1,\"668\":1,\"670\":1,\"714\":1,\"716\":1,\"760\":1,\"762\":1}}],[\"traffic\",{\"1\":{\"96\":1,\"166\":1}}],[\"transport\",{\"1\":{\"105\":1,\"279\":1,\"290\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"transmit\",{\"1\":{\"90\":1,\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1}}],[\"transit\",{\"1\":{\"77\":2}}],[\"transformation\",{\"1\":{\"74\":1}}],[\"transferred\",{\"1\":{\"87\":2,\"423\":1,\"453\":1,\"476\":1,\"502\":1,\"528\":1,\"558\":1,\"588\":1,\"634\":1,\"680\":1,\"726\":1,\"772\":1}}],[\"transfers\",{\"1\":{\"87\":1}}],[\"transfer\",{\"0\":{\"126\":1},\"1\":{\"1\":1,\"14\":1,\"20\":1,\"26\":1,\"87\":1,\"124\":1,\"126\":2,\"281\":4,\"282\":2,\"292\":4,\"293\":2,\"300\":4,\"303\":4,\"427\":1,\"593\":2,\"639\":2,\"685\":2,\"731\":2,\"776\":1}}],[\"tutorialexamplestarter\",{\"1\":{\"334\":3,\"338\":1,\"345\":1,\"348\":2,\"363\":1,\"373\":1,\"389\":1}}],[\"tutorialconfig\",{\"1\":{\"328\":1,\"331\":1,\"342\":1,\"345\":2,\"360\":1}}],[\"tutorialprocessplugindefinition\",{\"1\":{\"328\":3,\"345\":1,\"360\":1,\"386\":1}}],[\"tutorials\",{\"0\":{\"117\":1}}],[\"tutorial\",{\"0\":{\"313\":1,\"327\":1},\"1\":{\"28\":1,\"112\":4,\"113\":3,\"114\":1,\"115\":1,\"314\":2,\"315\":1,\"316\":1,\"323\":1,\"325\":2,\"327\":4,\"328\":1,\"329\":1,\"333\":1,\"334\":6,\"337\":1,\"338\":2,\"342\":1,\"344\":1,\"345\":3,\"347\":1,\"348\":3,\"362\":1,\"363\":6,\"370\":1,\"372\":1,\"373\":4,\"388\":1,\"389\":10,\"390\":1}}],[\"tar\",{\"1\":{\"285\":9,\"286\":9,\"296\":9,\"297\":9,\"299\":17,\"438\":4,\"439\":4,\"464\":4,\"465\":4,\"487\":4,\"488\":4,\"513\":4,\"514\":4,\"543\":4,\"544\":4,\"573\":4,\"574\":4,\"603\":4,\"604\":4,\"649\":4,\"650\":4,\"695\":4,\"696\":4,\"741\":4,\"742\":4,\"787\":4,\"788\":4}}],[\"targets\",{\"1\":{\"343\":1}}],[\"target\",{\"0\":{\"114\":1},\"1\":{\"114\":1,\"265\":1,\"281\":1,\"292\":1,\"300\":6,\"323\":22,\"329\":1,\"342\":1,\"360\":1,\"435\":1,\"461\":1,\"484\":1,\"510\":1,\"540\":1,\"570\":1,\"600\":1,\"646\":1,\"692\":1,\"738\":1,\"784\":1,\"909\":1,\"1001\":1,\"1130\":1,\"1301\":1,\"1477\":1,\"1654\":1,\"1831\":1,\"2008\":1,\"2185\":1,\"2312\":1,\"2404\":1,\"2531\":1,\"2623\":1,\"2750\":1,\"2842\":1}}],[\"table\",{\"1\":{\"156\":1}}],[\"tab\",{\"1\":{\"155\":1,\"156\":1}}],[\"tabulation\",{\"1\":{\"155\":2}}],[\"tabs\",{\"1\":{\"155\":1}}],[\"tag>\",{\"1\":{\"344\":1}}],[\"tags\",{\"1\":{\"155\":5,\"156\":1}}],[\"tag\",{\"1\":{\"137\":3,\"138\":3,\"155\":2,\"286\":7,\"297\":2,\"344\":5}}],[\"tasked\",{\"1\":{\"114\":1}}],[\"tasks\",{\"0\":{\"331\":1,\"338\":1,\"345\":1,\"360\":1,\"370\":1,\"386\":1},\"1\":{\"95\":1,\"105\":1,\"165\":1}}],[\"taskresource\",{\"1\":{\"93\":2}}],[\"taskresources\",{\"1\":{\"93\":1}}],[\"task\",{\"0\":{\"150\":1,\"205\":1,\"206\":1,\"207\":1,\"329\":1,\"343\":1,\"352\":1,\"353\":1,\"356\":1,\"382\":1,\"862\":1,\"863\":1,\"864\":1,\"1044\":1,\"1045\":1,\"1046\":1,\"1195\":1,\"1196\":1,\"1197\":1,\"1367\":1,\"1368\":1,\"1369\":1,\"1544\":1,\"1545\":1,\"1546\":1,\"1721\":1,\"1722\":1,\"1723\":1,\"1898\":1,\"1899\":1,\"1900\":1,\"2075\":1,\"2076\":1,\"2077\":1,\"2265\":1,\"2266\":1,\"2267\":1,\"2484\":1,\"2485\":1,\"2486\":1,\"2703\":1,\"2704\":1,\"2705\":1},\"1\":{\"85\":3,\"86\":2,\"93\":1,\"95\":3,\"150\":7,\"165\":3,\"205\":1,\"206\":1,\"207\":2,\"286\":1,\"297\":1,\"300\":1,\"303\":1,\"306\":1,\"309\":1,\"312\":1,\"328\":1,\"329\":4,\"330\":1,\"331\":2,\"334\":7,\"341\":1,\"343\":6,\"344\":7,\"345\":2,\"348\":3,\"350\":1,\"352\":3,\"353\":1,\"355\":1,\"356\":1,\"359\":1,\"360\":2,\"363\":7,\"370\":1,\"373\":2,\"377\":3,\"379\":2,\"381\":1,\"382\":1,\"385\":1,\"386\":4,\"389\":9,\"439\":1,\"465\":1,\"488\":1,\"514\":1,\"544\":1,\"574\":1,\"604\":1,\"650\":1,\"696\":1,\"742\":1,\"788\":1,\"862\":1,\"863\":1,\"864\":2,\"892\":1,\"1044\":1,\"1045\":1,\"1046\":2,\"1195\":1,\"1196\":1,\"1197\":2,\"1367\":1,\"1368\":1,\"1369\":2,\"1397\":1,\"1544\":1,\"1545\":1,\"1546\":2,\"1574\":1,\"1721\":1,\"1722\":1,\"1723\":2,\"1751\":1,\"1898\":1,\"1899\":1,\"1900\":2,\"1928\":1,\"2075\":1,\"2076\":1,\"2077\":2,\"2105\":1,\"2265\":1,\"2266\":1,\"2267\":2,\"2295\":1,\"2484\":1,\"2485\":1,\"2486\":2,\"2514\":1,\"2703\":1,\"2704\":1,\"2705\":2,\"2733\":1}}],[\"talks\",{\"0\":{\"25\":1,\"27\":1,\"118\":1}}],[\"taken\",{\"1\":{\"148\":1,\"149\":1}}],[\"takes\",{\"1\":{\"135\":1}}],[\"take\",{\"0\":{\"2\":1,\"83\":1},\"1\":{\"33\":1,\"35\":1,\"67\":1,\"158\":1,\"159\":1,\"318\":1,\"325\":1,\"330\":1,\"337\":1,\"340\":1,\"344\":1,\"418\":1,\"419\":1,\"448\":1,\"449\":1,\"471\":1,\"472\":1,\"497\":1,\"498\":1,\"523\":1,\"524\":1,\"553\":1,\"554\":1,\"583\":1,\"584\":1,\"629\":1,\"630\":1,\"675\":1,\"676\":1,\"721\":1,\"722\":1,\"767\":1,\"768\":1}}],[\"template\",{\"1\":{\"415\":2,\"626\":2,\"672\":2,\"718\":2,\"764\":2}}],[\"temporarily\",{\"1\":{\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1,\"832\":1,\"942\":1,\"1017\":1,\"1108\":1,\"1168\":1,\"1246\":1,\"1340\":1,\"1422\":1,\"1517\":1,\"1599\":1,\"1694\":1,\"1776\":1,\"1871\":1,\"1953\":1,\"2048\":1,\"2130\":1,\"2235\":1,\"2345\":1,\"2454\":1,\"2564\":1,\"2673\":1,\"2783\":1}}],[\"tell\",{\"1\":{\"334\":1}}],[\"tee\",{\"1\":{\"279\":1,\"290\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"ternary\",{\"1\":{\"156\":1}}],[\"terminating\",{\"1\":{\"825\":1,\"826\":1,\"827\":1,\"828\":1,\"985\":1,\"986\":1,\"987\":1,\"988\":1,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":1,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":1,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":1,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":1,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":1,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":1,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":1,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":1,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":1,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":1,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":1,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":1,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":1,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":1,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":1,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":1,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":1,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":1,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":1}}],[\"terminate\",{\"1\":{\"95\":1,\"96\":1,\"165\":1,\"166\":1}}],[\"terminology\",{\"1\":{\"90\":1,\"91\":1,\"281\":1,\"292\":1,\"435\":1,\"461\":1,\"484\":1,\"510\":1,\"540\":1,\"570\":1,\"600\":1,\"646\":1,\"692\":1,\"738\":1,\"784\":1}}],[\"termins\",{\"1\":{\"16\":1}}],[\"termin\",{\"1\":{\"15\":1}}],[\"techniques\",{\"1\":{\"90\":1}}],[\"technical\",{\"0\":{\"124\":1},\"1\":{\"78\":2,\"94\":1,\"112\":1,\"113\":1,\"126\":1,\"377\":1}}],[\"technische\",{\"1\":{\"14\":1,\"41\":1}}],[\"technologies\",{\"1\":{\"73\":1}}],[\"technol\",{\"1\":{\"26\":9}}],[\"testca\",{\"1\":{\"130\":1,\"131\":1,\"334\":1}}],[\"tests\",{\"0\":{\"333\":1,\"334\":1,\"347\":1,\"348\":1,\"362\":1,\"363\":1,\"372\":1,\"373\":1,\"388\":1,\"389\":1},\"1\":{\"101\":1,\"137\":1,\"138\":1,\"147\":2,\"327\":1,\"400\":1,\"611\":1,\"657\":1,\"703\":1,\"749\":1}}],[\"testsystem\",{\"1\":{\"17\":1}}],[\"testing\",{\"0\":{\"130\":1,\"131\":1,\"133\":1},\"1\":{\"37\":1,\"100\":1,\"316\":1,\"325\":1,\"415\":3,\"626\":3,\"672\":3,\"718\":3,\"764\":3,\"825\":2,\"826\":2,\"827\":2,\"828\":2,\"829\":1,\"985\":2,\"986\":2,\"987\":2,\"988\":2,\"989\":1,\"1093\":2,\"1094\":2,\"1095\":2,\"1096\":2,\"1097\":1,\"1161\":2,\"1162\":2,\"1163\":2,\"1164\":2,\"1165\":1,\"1285\":2,\"1286\":2,\"1287\":2,\"1288\":2,\"1289\":1,\"1333\":2,\"1334\":2,\"1335\":2,\"1336\":2,\"1337\":1,\"1461\":2,\"1462\":2,\"1463\":2,\"1464\":2,\"1465\":1,\"1510\":2,\"1511\":2,\"1512\":2,\"1513\":2,\"1514\":1,\"1638\":2,\"1639\":2,\"1640\":2,\"1641\":2,\"1642\":1,\"1687\":2,\"1688\":2,\"1689\":2,\"1690\":2,\"1691\":1,\"1815\":2,\"1816\":2,\"1817\":2,\"1818\":2,\"1819\":1,\"1864\":2,\"1865\":2,\"1866\":2,\"1867\":2,\"1868\":1,\"1992\":2,\"1993\":2,\"1994\":2,\"1995\":2,\"1996\":1,\"2041\":2,\"2042\":2,\"2043\":2,\"2044\":2,\"2045\":1,\"2169\":2,\"2170\":2,\"2171\":2,\"2172\":2,\"2173\":1,\"2228\":2,\"2229\":2,\"2230\":2,\"2231\":2,\"2232\":1,\"2388\":2,\"2389\":2,\"2390\":2,\"2391\":2,\"2392\":1,\"2447\":2,\"2448\":2,\"2449\":2,\"2450\":2,\"2451\":1,\"2607\":2,\"2608\":2,\"2609\":2,\"2610\":2,\"2611\":1,\"2666\":2,\"2667\":2,\"2668\":2,\"2669\":2,\"2670\":1,\"2826\":2,\"2827\":2,\"2828\":2,\"2829\":2,\"2830\":1}}],[\"testinfrastruktur\",{\"1\":{\"14\":1}}],[\"testdaten\",{\"1\":{\"17\":1}}],[\"test\",{\"0\":{\"127\":1,\"128\":1,\"135\":1,\"147\":1,\"327\":1,\"396\":1},\"1\":{\"14\":1,\"16\":7,\"20\":1,\"22\":1,\"98\":1,\"103\":1,\"113\":1,\"130\":8,\"131\":12,\"133\":2,\"134\":4,\"135\":4,\"137\":1,\"138\":1,\"147\":2,\"219\":1,\"285\":4,\"286\":5,\"296\":4,\"297\":5,\"299\":9,\"300\":3,\"302\":1,\"303\":3,\"305\":1,\"306\":3,\"308\":1,\"309\":2,\"311\":1,\"312\":2,\"323\":7,\"327\":4,\"333\":1,\"334\":12,\"337\":1,\"338\":4,\"345\":1,\"347\":1,\"348\":6,\"350\":5,\"360\":3,\"362\":1,\"363\":18,\"372\":1,\"373\":10,\"375\":4,\"388\":1,\"389\":25,\"395\":2,\"399\":1,\"408\":2,\"424\":1,\"425\":2,\"427\":1,\"442\":1,\"445\":1,\"453\":1,\"454\":1,\"476\":1,\"477\":1,\"494\":1,\"502\":1,\"503\":1,\"519\":1,\"520\":2,\"529\":1,\"530\":2,\"547\":1,\"550\":1,\"559\":1,\"560\":2,\"577\":1,\"580\":1,\"589\":1,\"590\":2,\"607\":1,\"610\":1,\"619\":2,\"635\":1,\"636\":2,\"653\":1,\"656\":1,\"665\":2,\"681\":1,\"682\":2,\"699\":1,\"702\":1,\"711\":2,\"727\":1,\"728\":2,\"745\":1,\"748\":1,\"757\":2,\"773\":1,\"774\":2,\"776\":1,\"791\":1,\"794\":1,\"806\":2,\"823\":1,\"876\":1,\"896\":2,\"897\":1,\"905\":1,\"933\":2,\"963\":2,\"964\":1,\"983\":1,\"997\":1,\"1058\":1,\"1071\":1,\"1091\":1,\"1125\":1,\"1159\":1,\"1209\":1,\"1222\":1,\"1237\":2,\"1264\":1,\"1283\":1,\"1297\":1,\"1331\":1,\"1381\":1,\"1398\":1,\"1413\":2,\"1440\":1,\"1459\":1,\"1473\":1,\"1508\":1,\"1558\":1,\"1575\":1,\"1590\":2,\"1617\":1,\"1636\":1,\"1650\":1,\"1685\":1,\"1735\":1,\"1752\":1,\"1767\":2,\"1794\":1,\"1813\":1,\"1827\":1,\"1862\":1,\"1912\":1,\"1929\":1,\"1944\":2,\"1971\":1,\"1990\":1,\"2004\":1,\"2039\":1,\"2089\":1,\"2106\":1,\"2121\":2,\"2148\":1,\"2167\":1,\"2181\":1,\"2209\":2,\"2226\":1,\"2279\":1,\"2299\":2,\"2300\":1,\"2308\":1,\"2336\":2,\"2366\":2,\"2367\":1,\"2386\":1,\"2400\":1,\"2428\":2,\"2445\":1,\"2498\":1,\"2518\":2,\"2519\":1,\"2527\":1,\"2555\":2,\"2585\":2,\"2586\":1,\"2605\":1,\"2619\":1,\"2647\":2,\"2664\":1,\"2717\":1,\"2737\":2,\"2738\":1,\"2746\":1,\"2774\":2,\"2804\":2,\"2805\":1,\"2824\":1,\"2838\":1}}],[\"testen\",{\"1\":{\"14\":1,\"15\":1}}],[\"team\",{\"0\":{\"79\":1},\"1\":{\"12\":1,\"35\":1,\"38\":1,\"79\":1,\"109\":1,\"164\":1,\"411\":1,\"413\":1,\"622\":1,\"624\":1,\"668\":1,\"670\":1,\"714\":1,\"716\":1,\"760\":1,\"762\":1}}],[\"t\",{\"1\":{\"12\":1,\"26\":5,\"93\":1,\"141\":1,\"173\":1,\"232\":1,\"249\":1,\"258\":1,\"413\":1,\"440\":1,\"464\":1,\"466\":1,\"489\":1,\"515\":1,\"519\":1,\"545\":1,\"575\":1,\"605\":1,\"624\":1,\"651\":1,\"670\":1,\"697\":1,\"716\":1,\"743\":1,\"762\":1,\"789\":1,\"836\":1,\"890\":1,\"946\":1,\"957\":1,\"1021\":1,\"1069\":1,\"1112\":1,\"1120\":1,\"1172\":1,\"1220\":1,\"1250\":1,\"1258\":1,\"1344\":1,\"1395\":1,\"1426\":1,\"1434\":1,\"1521\":1,\"1572\":1,\"1603\":1,\"1611\":1,\"1698\":1,\"1749\":1,\"1780\":1,\"1788\":1,\"1875\":1,\"1926\":1,\"1957\":1,\"1965\":1,\"2052\":1,\"2103\":1,\"2134\":1,\"2142\":1,\"2239\":1,\"2293\":1,\"2349\":1,\"2360\":1,\"2458\":1,\"2512\":1,\"2568\":1,\"2579\":1,\"2677\":1,\"2731\":1,\"2787\":1,\"2798\":1}}],[\"thoroughly\",{\"1\":{\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1}}],[\"thorough\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"those\",{\"1\":{\"112\":1,\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"thumprint\",{\"1\":{\"798\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"thumbprint\",{\"0\":{\"800\":1,\"927\":1,\"959\":1,\"1231\":1,\"1260\":1,\"1407\":1,\"1436\":1,\"1584\":1,\"1613\":1,\"1761\":1,\"1790\":1,\"1938\":1,\"1967\":1,\"2115\":1,\"2144\":1,\"2203\":1,\"2330\":1,\"2362\":1,\"2422\":1,\"2549\":1,\"2581\":1,\"2641\":1,\"2768\":1,\"2800\":1},\"1\":{\"261\":2,\"262\":2,\"285\":4,\"296\":4,\"438\":1,\"464\":4,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1,\"798\":1,\"799\":1,\"800\":1,\"806\":1,\"925\":2,\"926\":1,\"927\":1,\"933\":1,\"959\":3,\"1229\":2,\"1230\":1,\"1231\":1,\"1237\":1,\"1260\":3,\"1405\":2,\"1406\":1,\"1407\":1,\"1413\":1,\"1436\":3,\"1582\":2,\"1583\":1,\"1584\":1,\"1590\":1,\"1613\":3,\"1759\":2,\"1760\":1,\"1761\":1,\"1767\":1,\"1790\":3,\"1936\":2,\"1937\":1,\"1938\":1,\"1944\":1,\"1967\":3,\"2113\":2,\"2114\":1,\"2115\":1,\"2121\":1,\"2144\":3,\"2201\":1,\"2202\":1,\"2203\":1,\"2209\":1,\"2328\":2,\"2329\":1,\"2330\":1,\"2336\":1,\"2362\":3,\"2420\":1,\"2421\":1,\"2422\":1,\"2428\":1,\"2547\":2,\"2548\":1,\"2549\":1,\"2555\":1,\"2581\":3,\"2639\":1,\"2640\":1,\"2641\":1,\"2647\":1,\"2766\":2,\"2767\":1,\"2768\":1,\"2774\":1,\"2800\":3}}],[\"thumbprints\",{\"0\":{\"261\":1,\"262\":1},\"1\":{\"261\":2,\"262\":2,\"285\":6,\"296\":6,\"323\":12,\"464\":1,\"798\":2,\"800\":2,\"925\":2,\"927\":2,\"1229\":2,\"1231\":2,\"1405\":2,\"1407\":2,\"1582\":2,\"1584\":2,\"1759\":2,\"1761\":2,\"1936\":2,\"1938\":2,\"2113\":2,\"2115\":2,\"2201\":2,\"2203\":2,\"2328\":2,\"2330\":2,\"2420\":2,\"2422\":2,\"2547\":2,\"2549\":2,\"2639\":2,\"2641\":2,\"2766\":2,\"2768\":2}}],[\"thus\",{\"1\":{\"94\":1}}],[\"think\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"thirdly\",{\"1\":{\"81\":1}}],[\"third\",{\"1\":{\"78\":1,\"130\":1,\"131\":1,\"319\":1,\"350\":1,\"375\":1,\"389\":1,\"806\":1,\"933\":1,\"1237\":1,\"1413\":1,\"1590\":1,\"1767\":1,\"1944\":1,\"2121\":1,\"2209\":1,\"2336\":1,\"2428\":1,\"2555\":1,\"2647\":1,\"2774\":1}}],[\"this\",{\"1\":{\"0\":1,\"8\":1,\"9\":1,\"13\":1,\"32\":1,\"35\":1,\"36\":1,\"37\":1,\"39\":2,\"40\":1,\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"85\":1,\"86\":2,\"87\":1,\"90\":1,\"91\":2,\"92\":2,\"93\":1,\"96\":1,\"98\":2,\"99\":1,\"101\":1,\"102\":1,\"103\":1,\"105\":1,\"112\":3,\"113\":2,\"114\":1,\"123\":3,\"124\":2,\"131\":1,\"140\":1,\"150\":3,\"158\":2,\"159\":2,\"166\":1,\"180\":1,\"181\":1,\"182\":1,\"243\":1,\"256\":1,\"276\":2,\"282\":1,\"284\":2,\"285\":2,\"287\":2,\"293\":1,\"295\":2,\"296\":2,\"314\":2,\"315\":1,\"316\":1,\"320\":1,\"325\":2,\"327\":1,\"328\":4,\"329\":3,\"336\":1,\"337\":2,\"340\":1,\"343\":1,\"344\":4,\"352\":2,\"353\":1,\"355\":1,\"356\":1,\"365\":1,\"375\":1,\"377\":2,\"379\":2,\"381\":1,\"382\":1,\"390\":1,\"394\":1,\"395\":1,\"396\":1,\"404\":1,\"406\":1,\"407\":1,\"408\":1,\"409\":2,\"411\":4,\"413\":1,\"415\":2,\"423\":1,\"437\":2,\"442\":1,\"452\":1,\"453\":1,\"456\":1,\"463\":2,\"475\":1,\"476\":1,\"479\":1,\"486\":2,\"501\":1,\"502\":1,\"505\":1,\"512\":2,\"528\":1,\"542\":2,\"547\":1,\"558\":1,\"572\":2,\"577\":1,\"588\":1,\"602\":2,\"607\":1,\"615\":1,\"617\":1,\"618\":1,\"619\":1,\"620\":2,\"622\":4,\"624\":1,\"626\":2,\"634\":1,\"648\":2,\"653\":1,\"661\":1,\"663\":1,\"664\":1,\"665\":1,\"666\":2,\"668\":4,\"670\":1,\"672\":2,\"680\":1,\"694\":2,\"699\":1,\"707\":1,\"709\":1,\"710\":1,\"711\":1,\"712\":2,\"714\":4,\"716\":1,\"718\":2,\"726\":1,\"740\":2,\"745\":1,\"753\":1,\"755\":1,\"756\":1,\"757\":1,\"758\":2,\"760\":4,\"762\":1,\"764\":2,\"772\":1,\"786\":2,\"791\":1,\"798\":1,\"800\":1,\"806\":2,\"832\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"904\":1,\"925\":1,\"927\":1,\"933\":2,\"938\":1,\"942\":1,\"953\":1,\"954\":1,\"955\":1,\"956\":1,\"996\":1,\"1017\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1104\":1,\"1108\":1,\"1119\":1,\"1168\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1229\":1,\"1231\":1,\"1237\":2,\"1242\":1,\"1246\":1,\"1257\":1,\"1296\":1,\"1340\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1405\":1,\"1407\":1,\"1413\":2,\"1418\":1,\"1422\":1,\"1433\":1,\"1472\":1,\"1517\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1582\":1,\"1584\":1,\"1590\":2,\"1595\":1,\"1599\":1,\"1610\":1,\"1649\":1,\"1694\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1759\":1,\"1761\":1,\"1767\":2,\"1772\":1,\"1776\":1,\"1787\":1,\"1826\":1,\"1871\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1936\":1,\"1938\":1,\"1944\":2,\"1949\":1,\"1953\":1,\"1964\":1,\"2003\":1,\"2048\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2113\":1,\"2115\":1,\"2121\":2,\"2126\":1,\"2130\":1,\"2141\":1,\"2180\":1,\"2201\":1,\"2203\":1,\"2209\":2,\"2235\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2307\":1,\"2328\":1,\"2330\":1,\"2336\":2,\"2341\":1,\"2345\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2359\":1,\"2399\":1,\"2420\":1,\"2422\":1,\"2428\":2,\"2454\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2526\":1,\"2547\":1,\"2549\":1,\"2555\":2,\"2560\":1,\"2564\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2578\":1,\"2618\":1,\"2639\":1,\"2641\":1,\"2647\":2,\"2673\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2745\":1,\"2766\":1,\"2768\":1,\"2774\":2,\"2779\":1,\"2783\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2797\":1,\"2837\":1}}],[\"threads\",{\"0\":{\"892\":1,\"1397\":1,\"1574\":1,\"1751\":1,\"1928\":1,\"2105\":1,\"2295\":1,\"2514\":1,\"2733\":1},\"1\":{\"885\":1,\"886\":1,\"892\":2,\"1390\":1,\"1391\":1,\"1397\":2,\"1567\":1,\"1568\":1,\"1574\":2,\"1744\":1,\"1745\":1,\"1751\":2,\"1921\":1,\"1922\":1,\"1928\":2,\"2098\":1,\"2099\":1,\"2105\":2,\"2288\":1,\"2289\":1,\"2295\":2,\"2507\":1,\"2508\":1,\"2514\":2,\"2726\":1,\"2727\":1,\"2733\":2}}],[\"three\",{\"1\":{\"78\":1,\"84\":1,\"135\":1,\"321\":1,\"327\":3,\"343\":2,\"375\":1,\"386\":1,\"389\":1,\"798\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"thrilled\",{\"1\":{\"414\":1,\"625\":1,\"671\":1,\"717\":1,\"763\":1}}],[\"thru\",{\"1\":{\"338\":1}}],[\"throw\",{\"1\":{\"155\":1,\"386\":2}}],[\"throws\",{\"1\":{\"155\":6,\"156\":2}}],[\"through\",{\"1\":{\"5\":1,\"12\":1,\"78\":1,\"140\":1,\"186\":1,\"187\":1,\"188\":1,\"192\":1,\"193\":1,\"194\":1,\"195\":1,\"196\":1,\"197\":1,\"240\":1,\"241\":1,\"242\":1,\"344\":2}}],[\"thank\",{\"1\":{\"79\":1,\"415\":1,\"425\":1,\"441\":1,\"455\":1,\"467\":1,\"478\":1,\"490\":1,\"504\":1,\"516\":1,\"530\":1,\"546\":1,\"560\":1,\"576\":1,\"590\":1,\"606\":1,\"626\":1,\"636\":1,\"652\":1,\"672\":1,\"682\":1,\"698\":1,\"718\":1,\"728\":1,\"744\":1,\"764\":1,\"774\":1,\"790\":1}}],[\"than\",{\"1\":{\"37\":1,\"285\":1,\"296\":1,\"368\":1,\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"that\",{\"1\":{\"8\":1,\"10\":1,\"33\":1,\"35\":1,\"71\":1,\"77\":1,\"81\":3,\"85\":3,\"87\":1,\"90\":1,\"91\":1,\"92\":2,\"93\":2,\"94\":1,\"98\":2,\"100\":1,\"102\":1,\"105\":2,\"113\":1,\"116\":1,\"148\":1,\"149\":1,\"150\":2,\"158\":1,\"170\":1,\"204\":1,\"227\":1,\"228\":1,\"229\":2,\"233\":2,\"234\":1,\"259\":1,\"261\":1,\"262\":1,\"285\":3,\"286\":5,\"296\":3,\"297\":5,\"314\":1,\"318\":1,\"328\":1,\"331\":1,\"333\":1,\"334\":8,\"340\":1,\"343\":2,\"345\":1,\"347\":1,\"348\":5,\"359\":1,\"362\":1,\"363\":5,\"368\":1,\"372\":1,\"373\":1,\"377\":1,\"385\":1,\"388\":1,\"389\":7,\"394\":1,\"396\":1,\"404\":2,\"410\":1,\"413\":2,\"414\":1,\"423\":1,\"435\":1,\"438\":3,\"439\":4,\"442\":1,\"453\":1,\"461\":1,\"464\":3,\"465\":5,\"476\":1,\"484\":1,\"487\":3,\"488\":5,\"502\":1,\"510\":1,\"513\":3,\"514\":5,\"528\":1,\"540\":1,\"543\":3,\"544\":5,\"547\":1,\"558\":1,\"570\":1,\"573\":3,\"574\":4,\"577\":1,\"588\":1,\"600\":1,\"603\":3,\"604\":4,\"607\":1,\"615\":2,\"621\":1,\"624\":2,\"625\":1,\"634\":1,\"646\":1,\"649\":3,\"650\":4,\"653\":1,\"661\":2,\"667\":1,\"670\":2,\"671\":1,\"680\":1,\"692\":1,\"695\":3,\"696\":4,\"699\":1,\"707\":2,\"713\":1,\"716\":2,\"717\":1,\"726\":1,\"738\":1,\"741\":3,\"742\":4,\"745\":1,\"753\":2,\"759\":1,\"762\":2,\"763\":1,\"772\":1,\"784\":1,\"787\":3,\"788\":4,\"791\":1,\"806\":1,\"887\":2,\"891\":2,\"899\":1,\"915\":1,\"932\":1,\"933\":1,\"958\":1,\"966\":1,\"1007\":1,\"1043\":1,\"1066\":2,\"1070\":2,\"1073\":1,\"1121\":1,\"1127\":1,\"1194\":1,\"1217\":2,\"1221\":2,\"1224\":1,\"1236\":1,\"1237\":1,\"1259\":1,\"1266\":1,\"1392\":2,\"1396\":2,\"1400\":1,\"1412\":1,\"1413\":1,\"1435\":1,\"1442\":1,\"1483\":1,\"1569\":2,\"1573\":2,\"1577\":1,\"1589\":1,\"1590\":1,\"1612\":1,\"1619\":1,\"1660\":1,\"1746\":2,\"1750\":2,\"1754\":1,\"1766\":1,\"1767\":1,\"1789\":1,\"1796\":1,\"1837\":1,\"1923\":2,\"1927\":2,\"1931\":1,\"1943\":1,\"1944\":1,\"1966\":1,\"1973\":1,\"2014\":1,\"2100\":2,\"2104\":2,\"2108\":1,\"2120\":1,\"2121\":1,\"2143\":1,\"2150\":1,\"2191\":1,\"2209\":1,\"2290\":2,\"2294\":2,\"2302\":1,\"2318\":1,\"2335\":1,\"2336\":1,\"2361\":1,\"2369\":1,\"2410\":1,\"2428\":1,\"2509\":2,\"2513\":2,\"2521\":1,\"2537\":1,\"2554\":1,\"2555\":1,\"2580\":1,\"2588\":1,\"2629\":1,\"2647\":1,\"2728\":2,\"2732\":2,\"2740\":1,\"2756\":1,\"2773\":1,\"2774\":1,\"2799\":1,\"2807\":1,\"2848\":1}}],[\"they\",{\"1\":{\"91\":1,\"342\":1,\"343\":1,\"344\":1,\"353\":1,\"410\":1,\"411\":2,\"434\":1,\"460\":1,\"483\":1,\"509\":1,\"539\":1,\"569\":1,\"599\":1,\"621\":1,\"622\":2,\"645\":1,\"667\":1,\"668\":2,\"691\":1,\"713\":1,\"714\":2,\"737\":1,\"759\":1,\"760\":2,\"783\":1}}],[\"then\",{\"1\":{\"87\":1,\"150\":1,\"153\":1,\"155\":2,\"176\":1,\"254\":1,\"301\":1,\"350\":1,\"363\":1,\"377\":1,\"425\":1,\"434\":1,\"441\":1,\"455\":2,\"460\":1,\"467\":1,\"478\":2,\"483\":1,\"490\":1,\"504\":2,\"509\":1,\"516\":1,\"530\":2,\"539\":1,\"546\":1,\"560\":1,\"569\":1,\"576\":1,\"590\":1,\"599\":1,\"606\":1,\"636\":1,\"645\":1,\"652\":1,\"682\":1,\"691\":1,\"698\":1,\"728\":1,\"737\":1,\"744\":1,\"774\":1,\"783\":1,\"790\":1,\"839\":1,\"951\":1,\"1024\":1,\"1117\":1,\"1175\":1,\"1255\":1,\"1347\":1,\"1431\":1,\"1524\":1,\"1608\":1,\"1701\":1,\"1785\":1,\"1878\":1,\"1962\":1,\"2055\":1,\"2139\":1,\"2242\":1,\"2354\":1,\"2461\":1,\"2573\":1,\"2680\":1,\"2792\":1}}],[\"their\",{\"1\":{\"81\":2,\"94\":1,\"116\":1,\"337\":1,\"343\":1,\"357\":2,\"358\":1,\"383\":2,\"384\":1,\"400\":1,\"411\":3,\"611\":1,\"622\":3,\"657\":1,\"668\":3,\"703\":1,\"714\":3,\"749\":1,\"760\":3}}],[\"theme\",{\"0\":{\"896\":1,\"963\":1,\"2299\":1,\"2366\":1,\"2518\":1,\"2585\":1,\"2737\":1,\"2804\":1},\"1\":{\"896\":2,\"963\":2,\"2299\":2,\"2366\":2,\"2518\":2,\"2585\":2,\"2737\":2,\"2804\":2}}],[\"them\",{\"1\":{\"81\":1,\"93\":1,\"116\":1,\"134\":1,\"340\":1,\"363\":1,\"373\":1,\"389\":1,\"412\":1,\"415\":1,\"440\":1,\"442\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"547\":1,\"575\":1,\"577\":1,\"605\":1,\"607\":1,\"623\":1,\"626\":1,\"651\":1,\"653\":1,\"669\":1,\"672\":1,\"697\":1,\"699\":1,\"715\":1,\"718\":1,\"743\":1,\"745\":1,\"761\":1,\"764\":1,\"789\":1,\"791\":1}}],[\"thereby\",{\"1\":{\"367\":1}}],[\"therefore\",{\"1\":{\"90\":2,\"342\":1,\"344\":1,\"363\":1,\"373\":1,\"389\":1,\"404\":1,\"615\":1,\"661\":1,\"707\":1,\"753\":1}}],[\"there\",{\"1\":{\"33\":1,\"93\":3,\"105\":1,\"123\":1,\"413\":2,\"414\":1,\"440\":1,\"442\":2,\"466\":1,\"468\":1,\"489\":1,\"491\":1,\"515\":1,\"517\":1,\"545\":1,\"547\":2,\"575\":1,\"577\":2,\"605\":1,\"607\":2,\"624\":2,\"625\":1,\"651\":1,\"653\":2,\"670\":2,\"671\":1,\"697\":1,\"699\":2,\"716\":2,\"717\":1,\"743\":1,\"745\":2,\"762\":2,\"763\":1,\"789\":1,\"791\":2,\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"these\",{\"1\":{\"10\":1,\"81\":1,\"86\":1,\"89\":1,\"90\":1,\"91\":1,\"92\":1,\"93\":2,\"99\":1,\"124\":1,\"182\":1,\"330\":1,\"343\":1,\"411\":1,\"492\":1,\"518\":1,\"548\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1,\"847\":1,\"848\":1,\"1030\":1,\"1181\":1,\"1353\":1,\"1354\":1,\"1530\":1,\"1531\":1,\"1707\":1,\"1708\":1,\"1884\":1,\"1885\":1,\"2061\":1,\"2062\":1,\"2250\":1,\"2251\":1,\"2469\":1,\"2470\":1,\"2688\":1,\"2689\":1}}],[\"the\",{\"0\":{\"12\":1,\"78\":2,\"123\":1,\"126\":1,\"134\":1,\"157\":1,\"354\":1,\"380\":1,\"406\":1,\"617\":1,\"663\":1,\"709\":1,\"755\":1},\"1\":{\"0\":9,\"1\":4,\"6\":4,\"9\":1,\"10\":2,\"12\":4,\"13\":1,\"26\":4,\"28\":1,\"29\":1,\"30\":2,\"32\":5,\"33\":17,\"35\":1,\"36\":2,\"37\":11,\"38\":4,\"40\":3,\"42\":3,\"43\":1,\"44\":3,\"45\":1,\"46\":3,\"47\":1,\"48\":3,\"49\":1,\"50\":3,\"51\":1,\"52\":3,\"53\":1,\"54\":3,\"55\":1,\"56\":3,\"57\":1,\"58\":3,\"59\":1,\"60\":3,\"61\":1,\"62\":3,\"63\":1,\"70\":4,\"71\":2,\"72\":1,\"73\":3,\"74\":5,\"75\":3,\"77\":28,\"78\":11,\"79\":1,\"81\":7,\"82\":1,\"84\":11,\"85\":5,\"86\":17,\"87\":12,\"88\":1,\"89\":6,\"90\":15,\"91\":6,\"92\":5,\"93\":21,\"94\":17,\"95\":21,\"96\":1,\"98\":9,\"99\":4,\"100\":4,\"101\":5,\"102\":2,\"103\":4,\"105\":11,\"106\":5,\"108\":5,\"109\":7,\"112\":10,\"113\":18,\"114\":1,\"115\":2,\"116\":9,\"122\":6,\"123\":5,\"124\":5,\"125\":8,\"126\":8,\"130\":10,\"131\":15,\"132\":4,\"134\":10,\"135\":11,\"137\":1,\"138\":1,\"140\":2,\"143\":11,\"144\":3,\"145\":2,\"148\":25,\"149\":22,\"150\":9,\"152\":3,\"153\":2,\"158\":5,\"159\":5,\"161\":5,\"163\":5,\"164\":6,\"165\":21,\"166\":1,\"170\":2,\"171\":3,\"172\":3,\"173\":7,\"174\":4,\"175\":3,\"176\":3,\"177\":4,\"178\":3,\"179\":3,\"182\":1,\"184\":1,\"185\":1,\"186\":2,\"187\":2,\"188\":2,\"189\":2,\"190\":2,\"191\":1,\"192\":2,\"193\":2,\"194\":2,\"195\":3,\"196\":2,\"197\":3,\"198\":1,\"199\":1,\"202\":1,\"203\":2,\"204\":5,\"205\":1,\"206\":1,\"207\":1,\"208\":1,\"209\":1,\"210\":1,\"214\":4,\"215\":1,\"219\":1,\"221\":1,\"224\":2,\"225\":1,\"227\":2,\"228\":2,\"229\":2,\"230\":1,\"231\":1,\"232\":4,\"233\":1,\"234\":2,\"236\":1,\"238\":1,\"239\":1,\"240\":3,\"241\":2,\"242\":3,\"243\":1,\"244\":1,\"247\":3,\"248\":3,\"249\":7,\"250\":4,\"251\":3,\"252\":4,\"253\":3,\"254\":3,\"255\":3,\"256\":1,\"257\":3,\"258\":6,\"259\":5,\"260\":2,\"261\":2,\"262\":2,\"265\":2,\"267\":1,\"268\":1,\"269\":1,\"270\":1,\"271\":1,\"272\":3,\"273\":5,\"274\":1,\"275\":1,\"279\":1,\"280\":1,\"281\":11,\"282\":4,\"284\":3,\"285\":41,\"286\":48,\"290\":1,\"291\":1,\"292\":11,\"293\":4,\"295\":3,\"296\":41,\"297\":47,\"298\":5,\"299\":9,\"300\":38,\"301\":7,\"302\":4,\"303\":38,\"304\":5,\"305\":4,\"306\":25,\"307\":7,\"308\":4,\"309\":14,\"310\":7,\"311\":4,\"312\":14,\"314\":6,\"315\":3,\"316\":3,\"317\":3,\"318\":1,\"319\":2,\"320\":2,\"321\":2,\"325\":5,\"327\":10,\"328\":27,\"329\":5,\"330\":7,\"331\":12,\"333\":2,\"334\":60,\"336\":2,\"337\":11,\"338\":9,\"340\":2,\"341\":2,\"342\":23,\"343\":9,\"344\":17,\"345\":27,\"347\":2,\"348\":36,\"350\":7,\"352\":10,\"353\":9,\"354\":6,\"355\":1,\"356\":1,\"357\":7,\"358\":8,\"359\":3,\"360\":34,\"362\":2,\"363\":55,\"365\":2,\"367\":3,\"368\":6,\"369\":5,\"370\":9,\"372\":2,\"373\":29,\"375\":1,\"377\":12,\"378\":4,\"379\":10,\"380\":6,\"381\":1,\"382\":1,\"383\":7,\"384\":8,\"385\":3,\"386\":30,\"388\":2,\"389\":75,\"390\":2,\"391\":1,\"392\":3,\"393\":2,\"394\":5,\"395\":3,\"396\":4,\"397\":3,\"398\":2,\"399\":2,\"400\":3,\"401\":2,\"403\":6,\"404\":3,\"405\":1,\"406\":1,\"409\":4,\"410\":3,\"411\":7,\"412\":3,\"413\":1,\"414\":1,\"415\":9,\"418\":10,\"419\":8,\"422\":1,\"423\":8,\"424\":3,\"425\":7,\"426\":1,\"427\":5,\"429\":5,\"430\":4,\"433\":3,\"434\":2,\"435\":8,\"437\":3,\"438\":49,\"439\":34,\"440\":7,\"441\":1,\"442\":24,\"443\":3,\"444\":5,\"445\":12,\"448\":9,\"449\":8,\"452\":3,\"453\":9,\"454\":1,\"455\":5,\"456\":7,\"459\":3,\"460\":2,\"461\":8,\"463\":3,\"464\":51,\"465\":36,\"466\":7,\"467\":1,\"468\":7,\"471\":9,\"472\":8,\"475\":3,\"476\":9,\"477\":1,\"478\":5,\"479\":7,\"482\":3,\"483\":2,\"484\":8,\"486\":3,\"487\":49,\"488\":37,\"489\":7,\"490\":1,\"491\":7,\"492\":3,\"493\":5,\"494\":12,\"497\":9,\"498\":8,\"501\":3,\"502\":9,\"503\":1,\"504\":5,\"505\":7,\"508\":3,\"509\":2,\"510\":8,\"512\":3,\"513\":49,\"514\":37,\"515\":7,\"516\":1,\"517\":7,\"518\":3,\"519\":11,\"520\":23,\"523\":9,\"524\":8,\"527\":1,\"528\":8,\"529\":3,\"530\":10,\"535\":4,\"538\":3,\"539\":2,\"540\":8,\"542\":3,\"543\":49,\"544\":37,\"545\":7,\"546\":1,\"547\":24,\"548\":3,\"549\":5,\"550\":12,\"553\":9,\"554\":8,\"557\":1,\"558\":8,\"559\":3,\"560\":7,\"565\":4,\"568\":3,\"569\":2,\"570\":8,\"572\":3,\"573\":49,\"574\":34,\"575\":7,\"576\":1,\"577\":24,\"578\":3,\"579\":5,\"580\":12,\"583\":9,\"584\":8,\"587\":1,\"588\":8,\"589\":3,\"590\":7,\"595\":4,\"598\":3,\"599\":2,\"600\":8,\"602\":3,\"603\":49,\"604\":34,\"605\":7,\"606\":1,\"607\":24,\"608\":3,\"609\":5,\"610\":12,\"611\":3,\"612\":2,\"614\":6,\"615\":3,\"616\":1,\"617\":1,\"620\":4,\"621\":3,\"622\":7,\"623\":3,\"624\":1,\"625\":1,\"626\":9,\"629\":10,\"630\":8,\"633\":1,\"634\":8,\"635\":3,\"636\":7,\"641\":4,\"644\":3,\"645\":2,\"646\":8,\"648\":3,\"649\":49,\"650\":34,\"651\":7,\"652\":1,\"653\":24,\"654\":3,\"655\":5,\"656\":12,\"657\":3,\"658\":2,\"660\":6,\"661\":3,\"662\":1,\"663\":1,\"666\":4,\"667\":3,\"668\":7,\"669\":3,\"670\":1,\"671\":1,\"672\":9,\"675\":10,\"676\":8,\"679\":1,\"680\":8,\"681\":3,\"682\":7,\"687\":4,\"690\":3,\"691\":2,\"692\":8,\"694\":3,\"695\":49,\"696\":34,\"697\":7,\"698\":1,\"699\":24,\"700\":3,\"701\":5,\"702\":12,\"703\":3,\"704\":2,\"706\":6,\"707\":3,\"708\":1,\"709\":1,\"712\":4,\"713\":3,\"714\":7,\"715\":3,\"716\":1,\"717\":1,\"718\":9,\"721\":10,\"722\":8,\"725\":1,\"726\":8,\"727\":3,\"728\":7,\"733\":4,\"736\":3,\"737\":2,\"738\":8,\"740\":3,\"741\":49,\"742\":34,\"743\":7,\"744\":1,\"745\":24,\"746\":3,\"747\":5,\"748\":12,\"749\":3,\"750\":2,\"752\":6,\"753\":3,\"754\":1,\"755\":1,\"758\":4,\"759\":3,\"760\":7,\"761\":3,\"762\":1,\"763\":1,\"764\":9,\"767\":10,\"768\":8,\"771\":1,\"772\":8,\"773\":3,\"774\":7,\"775\":1,\"776\":5,\"778\":5,\"779\":4,\"782\":3,\"783\":2,\"784\":8,\"786\":3,\"787\":49,\"788\":34,\"789\":7,\"790\":1,\"791\":24,\"792\":3,\"793\":5,\"794\":12,\"798\":15,\"799\":1,\"800\":4,\"801\":7,\"802\":1,\"804\":2,\"805\":1,\"806\":3,\"813\":1,\"817\":1,\"818\":2,\"819\":2,\"822\":1,\"832\":1,\"834\":3,\"835\":3,\"836\":6,\"837\":4,\"838\":2,\"839\":2,\"840\":4,\"841\":2,\"842\":2,\"843\":2,\"844\":1,\"847\":1,\"848\":1,\"849\":1,\"851\":1,\"852\":1,\"853\":1,\"854\":1,\"855\":1,\"860\":1,\"861\":1,\"862\":1,\"863\":1,\"864\":1,\"865\":1,\"866\":1,\"867\":1,\"871\":4,\"872\":1,\"876\":1,\"878\":1,\"881\":2,\"882\":1,\"885\":1,\"886\":1,\"887\":2,\"888\":1,\"889\":1,\"890\":4,\"891\":1,\"893\":2,\"896\":1,\"902\":5,\"903\":4,\"904\":4,\"909\":2,\"911\":1,\"912\":1,\"913\":1,\"914\":1,\"915\":1,\"916\":1,\"917\":3,\"918\":5,\"919\":1,\"920\":1,\"921\":1,\"925\":19,\"926\":1,\"927\":4,\"928\":7,\"929\":1,\"931\":2,\"932\":9,\"933\":3,\"936\":1,\"937\":1,\"942\":1,\"944\":3,\"945\":3,\"946\":6,\"947\":4,\"948\":2,\"949\":4,\"950\":2,\"951\":2,\"952\":2,\"953\":2,\"954\":1,\"955\":1,\"957\":5,\"958\":4,\"959\":3,\"960\":1,\"963\":1,\"973\":1,\"977\":1,\"978\":2,\"979\":2,\"982\":1,\"993\":6,\"994\":4,\"995\":2,\"996\":4,\"1001\":2,\"1003\":1,\"1004\":1,\"1005\":1,\"1006\":1,\"1007\":1,\"1008\":1,\"1009\":3,\"1010\":5,\"1011\":1,\"1012\":1,\"1013\":1,\"1017\":1,\"1019\":3,\"1020\":3,\"1021\":7,\"1022\":4,\"1023\":3,\"1024\":3,\"1025\":4,\"1026\":3,\"1027\":3,\"1030\":1,\"1032\":1,\"1033\":1,\"1034\":2,\"1035\":2,\"1036\":1,\"1037\":1,\"1038\":1,\"1041\":1,\"1042\":2,\"1043\":5,\"1044\":1,\"1045\":1,\"1046\":1,\"1047\":1,\"1048\":1,\"1049\":1,\"1053\":4,\"1054\":1,\"1058\":1,\"1060\":1,\"1063\":2,\"1064\":1,\"1066\":2,\"1067\":1,\"1068\":1,\"1069\":4,\"1070\":1,\"1081\":1,\"1085\":1,\"1086\":2,\"1087\":2,\"1090\":1,\"1102\":1,\"1103\":1,\"1104\":1,\"1105\":1,\"1108\":1,\"1110\":3,\"1111\":3,\"1112\":7,\"1113\":4,\"1114\":3,\"1115\":4,\"1116\":3,\"1117\":3,\"1118\":3,\"1119\":1,\"1120\":6,\"1121\":5,\"1122\":2,\"1130\":2,\"1132\":1,\"1133\":1,\"1134\":1,\"1135\":1,\"1136\":1,\"1137\":3,\"1138\":5,\"1139\":1,\"1140\":1,\"1149\":1,\"1153\":1,\"1154\":2,\"1155\":2,\"1158\":1,\"1168\":1,\"1170\":3,\"1171\":3,\"1172\":7,\"1173\":4,\"1174\":3,\"1175\":3,\"1176\":4,\"1177\":3,\"1178\":3,\"1181\":1,\"1183\":1,\"1184\":1,\"1185\":2,\"1186\":2,\"1187\":1,\"1188\":1,\"1189\":1,\"1192\":1,\"1193\":2,\"1194\":5,\"1195\":1,\"1196\":1,\"1197\":1,\"1198\":1,\"1199\":1,\"1200\":1,\"1204\":4,\"1205\":1,\"1209\":1,\"1211\":1,\"1214\":2,\"1215\":1,\"1217\":2,\"1218\":1,\"1219\":1,\"1220\":4,\"1221\":1,\"1229\":17,\"1230\":1,\"1231\":4,\"1232\":7,\"1233\":1,\"1235\":2,\"1236\":9,\"1237\":3,\"1240\":1,\"1241\":1,\"1242\":1,\"1243\":1,\"1246\":1,\"1248\":3,\"1249\":3,\"1250\":7,\"1251\":4,\"1252\":3,\"1253\":4,\"1254\":3,\"1255\":3,\"1256\":3,\"1257\":1,\"1258\":6,\"1259\":5,\"1260\":3,\"1261\":2,\"1273\":1,\"1277\":1,\"1278\":2,\"1279\":2,\"1282\":1,\"1293\":6,\"1294\":4,\"1295\":2,\"1296\":4,\"1301\":2,\"1303\":1,\"1304\":1,\"1305\":1,\"1306\":1,\"1307\":1,\"1308\":3,\"1309\":5,\"1310\":1,\"1311\":1,\"1312\":1,\"1321\":1,\"1325\":1,\"1326\":2,\"1327\":2,\"1330\":1,\"1340\":1,\"1342\":3,\"1343\":3,\"1344\":7,\"1345\":4,\"1346\":3,\"1347\":3,\"1348\":4,\"1349\":3,\"1350\":3,\"1353\":1,\"1354\":1,\"1356\":1,\"1357\":1,\"1358\":2,\"1359\":2,\"1360\":1,\"1361\":1,\"1362\":1,\"1365\":1,\"1366\":2,\"1367\":1,\"1368\":1,\"1369\":1,\"1370\":1,\"1371\":1,\"1372\":1,\"1376\":4,\"1377\":1,\"1381\":1,\"1383\":1,\"1386\":2,\"1387\":1,\"1390\":1,\"1391\":1,\"1392\":2,\"1393\":1,\"1394\":1,\"1395\":4,\"1396\":1,\"1405\":17,\"1406\":1,\"1407\":4,\"1408\":7,\"1409\":1,\"1411\":2,\"1412\":9,\"1413\":3,\"1416\":1,\"1417\":1,\"1418\":1,\"1419\":1,\"1422\":1,\"1424\":3,\"1425\":3,\"1426\":7,\"1427\":4,\"1428\":3,\"1429\":4,\"1430\":3,\"1431\":3,\"1432\":3,\"1433\":1,\"1434\":6,\"1435\":5,\"1436\":3,\"1437\":2,\"1449\":1,\"1453\":1,\"1454\":2,\"1455\":2,\"1458\":1,\"1469\":6,\"1470\":4,\"1471\":2,\"1472\":4,\"1477\":2,\"1479\":1,\"1480\":1,\"1481\":1,\"1482\":1,\"1483\":1,\"1484\":1,\"1485\":3,\"1486\":5,\"1487\":1,\"1488\":1,\"1489\":1,\"1498\":1,\"1502\":1,\"1503\":2,\"1504\":2,\"1507\":1,\"1517\":1,\"1519\":3,\"1520\":3,\"1521\":7,\"1522\":4,\"1523\":3,\"1524\":3,\"1525\":4,\"1526\":3,\"1527\":3,\"1530\":1,\"1531\":1,\"1533\":1,\"1534\":1,\"1535\":2,\"1536\":2,\"1537\":1,\"1538\":1,\"1539\":1,\"1542\":1,\"1543\":2,\"1544\":1,\"1545\":1,\"1546\":1,\"1547\":1,\"1548\":1,\"1549\":1,\"1553\":4,\"1554\":1,\"1558\":1,\"1560\":1,\"1563\":2,\"1564\":1,\"1567\":1,\"1568\":1,\"1569\":2,\"1570\":1,\"1571\":1,\"1572\":4,\"1573\":1,\"1582\":17,\"1583\":1,\"1584\":4,\"1585\":7,\"1586\":1,\"1588\":2,\"1589\":9,\"1590\":3,\"1593\":1,\"1594\":1,\"1595\":1,\"1596\":1,\"1599\":1,\"1601\":3,\"1602\":3,\"1603\":7,\"1604\":4,\"1605\":3,\"1606\":4,\"1607\":3,\"1608\":3,\"1609\":3,\"1610\":1,\"1611\":6,\"1612\":5,\"1613\":3,\"1614\":2,\"1626\":1,\"1630\":1,\"1631\":2,\"1632\":2,\"1635\":1,\"1646\":6,\"1647\":4,\"1648\":2,\"1649\":4,\"1654\":2,\"1656\":1,\"1657\":1,\"1658\":1,\"1659\":1,\"1660\":1,\"1661\":1,\"1662\":3,\"1663\":5,\"1664\":1,\"1665\":1,\"1666\":1,\"1675\":1,\"1679\":1,\"1680\":2,\"1681\":2,\"1684\":1,\"1694\":1,\"1696\":3,\"1697\":3,\"1698\":7,\"1699\":4,\"1700\":3,\"1701\":3,\"1702\":4,\"1703\":3,\"1704\":3,\"1707\":1,\"1708\":1,\"1710\":1,\"1711\":1,\"1712\":2,\"1713\":2,\"1714\":1,\"1715\":1,\"1716\":1,\"1719\":1,\"1720\":2,\"1721\":1,\"1722\":1,\"1723\":1,\"1724\":1,\"1725\":1,\"1726\":1,\"1730\":4,\"1731\":1,\"1735\":1,\"1737\":1,\"1740\":2,\"1741\":1,\"1744\":1,\"1745\":1,\"1746\":2,\"1747\":1,\"1748\":1,\"1749\":4,\"1750\":1,\"1759\":17,\"1760\":1,\"1761\":4,\"1762\":7,\"1763\":1,\"1765\":2,\"1766\":9,\"1767\":3,\"1770\":1,\"1771\":1,\"1772\":1,\"1773\":1,\"1776\":1,\"1778\":3,\"1779\":3,\"1780\":7,\"1781\":4,\"1782\":3,\"1783\":4,\"1784\":3,\"1785\":3,\"1786\":3,\"1787\":1,\"1788\":6,\"1789\":5,\"1790\":3,\"1791\":2,\"1803\":1,\"1807\":1,\"1808\":2,\"1809\":2,\"1812\":1,\"1823\":6,\"1824\":4,\"1825\":2,\"1826\":4,\"1831\":2,\"1833\":1,\"1834\":1,\"1835\":1,\"1836\":1,\"1837\":1,\"1838\":1,\"1839\":3,\"1840\":5,\"1841\":1,\"1842\":1,\"1843\":1,\"1852\":1,\"1856\":1,\"1857\":2,\"1858\":2,\"1861\":1,\"1871\":1,\"1873\":3,\"1874\":3,\"1875\":7,\"1876\":4,\"1877\":3,\"1878\":3,\"1879\":4,\"1880\":3,\"1881\":3,\"1884\":1,\"1885\":1,\"1887\":1,\"1888\":1,\"1889\":2,\"1890\":2,\"1891\":1,\"1892\":1,\"1893\":1,\"1896\":1,\"1897\":2,\"1898\":1,\"1899\":1,\"1900\":1,\"1901\":1,\"1902\":1,\"1903\":1,\"1907\":4,\"1908\":1,\"1912\":1,\"1914\":1,\"1917\":2,\"1918\":1,\"1921\":1,\"1922\":1,\"1923\":2,\"1924\":1,\"1925\":1,\"1926\":4,\"1927\":1,\"1936\":17,\"1937\":1,\"1938\":4,\"1939\":7,\"1940\":1,\"1942\":2,\"1943\":9,\"1944\":3,\"1947\":1,\"1948\":1,\"1949\":1,\"1950\":1,\"1953\":1,\"1955\":3,\"1956\":3,\"1957\":7,\"1958\":4,\"1959\":3,\"1960\":4,\"1961\":3,\"1962\":3,\"1963\":3,\"1964\":1,\"1965\":6,\"1966\":5,\"1967\":3,\"1968\":2,\"1980\":1,\"1984\":1,\"1985\":2,\"1986\":2,\"1989\":1,\"2000\":6,\"2001\":4,\"2002\":2,\"2003\":4,\"2008\":2,\"2010\":1,\"2011\":1,\"2012\":1,\"2013\":1,\"2014\":1,\"2015\":1,\"2016\":3,\"2017\":5,\"2018\":1,\"2019\":1,\"2020\":1,\"2029\":1,\"2033\":1,\"2034\":2,\"2035\":2,\"2038\":1,\"2048\":1,\"2050\":3,\"2051\":3,\"2052\":7,\"2053\":4,\"2054\":3,\"2055\":3,\"2056\":4,\"2057\":3,\"2058\":3,\"2061\":1,\"2062\":1,\"2064\":1,\"2065\":1,\"2066\":2,\"2067\":2,\"2068\":1,\"2069\":1,\"2070\":1,\"2073\":1,\"2074\":2,\"2075\":1,\"2076\":1,\"2077\":1,\"2078\":1,\"2079\":1,\"2080\":1,\"2084\":4,\"2085\":1,\"2089\":1,\"2091\":1,\"2094\":2,\"2095\":1,\"2098\":1,\"2099\":1,\"2100\":2,\"2101\":1,\"2102\":1,\"2103\":4,\"2104\":1,\"2113\":17,\"2114\":1,\"2115\":4,\"2116\":7,\"2117\":1,\"2119\":2,\"2120\":9,\"2121\":3,\"2124\":1,\"2125\":1,\"2126\":1,\"2127\":1,\"2130\":1,\"2132\":3,\"2133\":3,\"2134\":7,\"2135\":4,\"2136\":3,\"2137\":4,\"2138\":3,\"2139\":3,\"2140\":3,\"2141\":1,\"2142\":6,\"2143\":5,\"2144\":3,\"2145\":2,\"2157\":1,\"2161\":1,\"2162\":2,\"2163\":2,\"2166\":1,\"2177\":6,\"2178\":4,\"2179\":2,\"2180\":4,\"2185\":2,\"2187\":1,\"2188\":1,\"2189\":1,\"2190\":1,\"2191\":1,\"2192\":1,\"2193\":3,\"2194\":5,\"2195\":1,\"2196\":1,\"2197\":1,\"2201\":15,\"2202\":1,\"2203\":4,\"2204\":7,\"2205\":1,\"2207\":2,\"2208\":1,\"2209\":3,\"2216\":1,\"2220\":1,\"2221\":2,\"2222\":2,\"2225\":1,\"2235\":1,\"2237\":3,\"2238\":3,\"2239\":6,\"2240\":4,\"2241\":2,\"2242\":2,\"2243\":4,\"2244\":2,\"2245\":2,\"2246\":2,\"2247\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2254\":1,\"2255\":1,\"2256\":1,\"2257\":1,\"2258\":1,\"2263\":1,\"2264\":1,\"2265\":1,\"2266\":1,\"2267\":1,\"2268\":1,\"2269\":1,\"2270\":1,\"2274\":4,\"2275\":1,\"2279\":1,\"2281\":1,\"2284\":2,\"2285\":1,\"2288\":1,\"2289\":1,\"2290\":2,\"2291\":1,\"2292\":1,\"2293\":4,\"2294\":1,\"2296\":2,\"2299\":1,\"2305\":5,\"2306\":4,\"2307\":4,\"2312\":2,\"2314\":1,\"2315\":1,\"2316\":1,\"2317\":1,\"2318\":1,\"2319\":1,\"2320\":3,\"2321\":5,\"2322\":1,\"2323\":1,\"2324\":1,\"2328\":19,\"2329\":1,\"2330\":4,\"2331\":7,\"2332\":1,\"2334\":2,\"2335\":9,\"2336\":3,\"2339\":1,\"2340\":1,\"2345\":1,\"2347\":3,\"2348\":3,\"2349\":6,\"2350\":4,\"2351\":2,\"2352\":4,\"2353\":2,\"2354\":2,\"2355\":2,\"2356\":2,\"2357\":1,\"2358\":1,\"2360\":5,\"2361\":4,\"2362\":3,\"2363\":1,\"2366\":1,\"2376\":1,\"2380\":1,\"2381\":2,\"2382\":2,\"2385\":1,\"2396\":6,\"2397\":4,\"2398\":2,\"2399\":4,\"2404\":2,\"2406\":1,\"2407\":1,\"2408\":1,\"2409\":1,\"2410\":1,\"2411\":1,\"2412\":3,\"2413\":5,\"2414\":1,\"2415\":1,\"2416\":1,\"2420\":15,\"2421\":1,\"2422\":4,\"2423\":7,\"2424\":1,\"2426\":2,\"2427\":1,\"2428\":3,\"2435\":1,\"2439\":1,\"2440\":2,\"2441\":2,\"2444\":1,\"2454\":1,\"2456\":3,\"2457\":3,\"2458\":6,\"2459\":4,\"2460\":2,\"2461\":2,\"2462\":4,\"2463\":2,\"2464\":2,\"2465\":2,\"2466\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2473\":1,\"2474\":1,\"2475\":1,\"2476\":1,\"2477\":1,\"2482\":1,\"2483\":1,\"2484\":1,\"2485\":1,\"2486\":1,\"2487\":1,\"2488\":1,\"2489\":1,\"2493\":4,\"2494\":1,\"2498\":1,\"2500\":1,\"2503\":2,\"2504\":1,\"2507\":1,\"2508\":1,\"2509\":2,\"2510\":1,\"2511\":1,\"2512\":4,\"2513\":1,\"2515\":2,\"2518\":1,\"2524\":5,\"2525\":4,\"2526\":4,\"2531\":2,\"2533\":1,\"2534\":1,\"2535\":1,\"2536\":1,\"2537\":1,\"2538\":1,\"2539\":3,\"2540\":5,\"2541\":1,\"2542\":1,\"2543\":1,\"2547\":19,\"2548\":1,\"2549\":4,\"2550\":7,\"2551\":1,\"2553\":2,\"2554\":9,\"2555\":3,\"2558\":1,\"2559\":1,\"2564\":1,\"2566\":3,\"2567\":3,\"2568\":6,\"2569\":4,\"2570\":2,\"2571\":4,\"2572\":2,\"2573\":2,\"2574\":2,\"2575\":2,\"2576\":1,\"2577\":1,\"2579\":5,\"2580\":4,\"2581\":3,\"2582\":1,\"2585\":1,\"2595\":1,\"2599\":1,\"2600\":2,\"2601\":2,\"2604\":1,\"2615\":6,\"2616\":4,\"2617\":2,\"2618\":4,\"2623\":2,\"2625\":1,\"2626\":1,\"2627\":1,\"2628\":1,\"2629\":1,\"2630\":1,\"2631\":3,\"2632\":5,\"2633\":1,\"2634\":1,\"2635\":1,\"2639\":15,\"2640\":1,\"2641\":4,\"2642\":7,\"2643\":1,\"2645\":2,\"2646\":1,\"2647\":3,\"2654\":1,\"2658\":1,\"2659\":2,\"2660\":2,\"2663\":1,\"2673\":1,\"2675\":3,\"2676\":3,\"2677\":6,\"2678\":4,\"2679\":2,\"2680\":2,\"2681\":4,\"2682\":2,\"2683\":2,\"2684\":2,\"2685\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2692\":1,\"2693\":1,\"2694\":1,\"2695\":1,\"2696\":1,\"2701\":1,\"2702\":1,\"2703\":1,\"2704\":1,\"2705\":1,\"2706\":1,\"2707\":1,\"2708\":1,\"2712\":4,\"2713\":1,\"2717\":1,\"2719\":1,\"2722\":2,\"2723\":1,\"2726\":1,\"2727\":1,\"2728\":2,\"2729\":1,\"2730\":1,\"2731\":4,\"2732\":1,\"2734\":2,\"2737\":1,\"2743\":5,\"2744\":4,\"2745\":4,\"2750\":2,\"2752\":1,\"2753\":1,\"2754\":1,\"2755\":1,\"2756\":1,\"2757\":1,\"2758\":3,\"2759\":5,\"2760\":1,\"2761\":1,\"2762\":1,\"2766\":19,\"2767\":1,\"2768\":4,\"2769\":7,\"2770\":1,\"2772\":2,\"2773\":9,\"2774\":3,\"2777\":1,\"2778\":1,\"2783\":1,\"2785\":3,\"2786\":3,\"2787\":6,\"2788\":4,\"2789\":2,\"2790\":4,\"2791\":2,\"2792\":2,\"2793\":2,\"2794\":2,\"2795\":1,\"2796\":1,\"2798\":5,\"2799\":4,\"2800\":3,\"2801\":1,\"2804\":1,\"2814\":1,\"2818\":1,\"2819\":2,\"2820\":2,\"2823\":1,\"2834\":6,\"2835\":4,\"2836\":2,\"2837\":4,\"2842\":2,\"2844\":1,\"2845\":1,\"2846\":1,\"2847\":1,\"2848\":1,\"2849\":1,\"2850\":3,\"2851\":5,\"2852\":1,\"2853\":1,\"2854\":1}}],[\"too\",{\"1\":{\"442\":1,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"791\":1}}],[\"tools\",{\"1\":{\"33\":1,\"40\":1,\"130\":4,\"131\":4,\"134\":2,\"135\":2,\"342\":1,\"530\":1}}],[\"tool\",{\"0\":{\"135\":1},\"1\":{\"16\":1,\"135\":1,\"409\":1,\"423\":1,\"425\":2,\"453\":2,\"455\":1,\"476\":2,\"478\":1,\"502\":2,\"504\":1,\"528\":1,\"530\":3,\"558\":1,\"560\":2,\"588\":1,\"590\":2,\"620\":1,\"634\":1,\"636\":2,\"666\":1,\"680\":1,\"682\":2,\"712\":1,\"726\":1,\"728\":2,\"758\":1,\"772\":1,\"774\":2}}],[\"todo\",{\"1\":{\"285\":7,\"286\":2,\"296\":8,\"297\":2,\"300\":8,\"303\":2,\"438\":3,\"439\":1,\"464\":5,\"465\":2,\"487\":3,\"488\":2,\"513\":3,\"514\":2,\"519\":1,\"543\":3,\"544\":2,\"573\":3,\"574\":1,\"603\":3,\"604\":1,\"649\":3,\"650\":1,\"695\":3,\"696\":1,\"741\":3,\"742\":1,\"787\":3,\"788\":1}}],[\"today\",{\"1\":{\"12\":1}}],[\"toaddressescc\",{\"0\":{\"223\":1,\"880\":1,\"1062\":1,\"1213\":1,\"1385\":1,\"1562\":1,\"1739\":1,\"1916\":1,\"2093\":1,\"2283\":1,\"2502\":1,\"2721\":1},\"1\":{\"223\":1,\"880\":1,\"1062\":1,\"1213\":1,\"1385\":1,\"1562\":1,\"1739\":1,\"1916\":1,\"2093\":1,\"2283\":1,\"2502\":1,\"2721\":1}}],[\"toaddresses\",{\"0\":{\"222\":1,\"879\":1,\"1061\":1,\"1212\":1,\"1384\":1,\"1561\":1,\"1738\":1,\"1915\":1,\"2092\":1,\"2282\":1,\"2501\":1,\"2720\":1},\"1\":{\"222\":1,\"879\":1,\"1061\":1,\"1212\":1,\"1384\":1,\"1561\":1,\"1738\":1,\"1915\":1,\"2092\":1,\"2282\":1,\"2501\":1,\"2720\":1}}],[\"tokens\",{\"1\":{\"801\":1,\"802\":1,\"806\":2,\"903\":1,\"928\":1,\"929\":1,\"933\":2,\"994\":1,\"1232\":1,\"1233\":1,\"1237\":2,\"1294\":1,\"1408\":1,\"1409\":1,\"1413\":2,\"1470\":1,\"1585\":1,\"1586\":1,\"1590\":2,\"1647\":1,\"1762\":1,\"1763\":1,\"1767\":2,\"1824\":1,\"1939\":1,\"1940\":1,\"1944\":2,\"2001\":1,\"2116\":1,\"2117\":1,\"2121\":2,\"2178\":1,\"2204\":1,\"2205\":1,\"2209\":2,\"2306\":1,\"2331\":1,\"2332\":1,\"2336\":2,\"2397\":1,\"2423\":1,\"2424\":1,\"2428\":2,\"2525\":1,\"2550\":1,\"2551\":1,\"2555\":2,\"2616\":1,\"2642\":1,\"2643\":1,\"2647\":2,\"2744\":1,\"2769\":1,\"2770\":1,\"2774\":2,\"2835\":1}}],[\"token\",{\"0\":{\"802\":2,\"814\":1,\"929\":2,\"974\":1,\"995\":1,\"1082\":1,\"1150\":1,\"1233\":2,\"1274\":1,\"1295\":1,\"1322\":1,\"1409\":2,\"1450\":1,\"1471\":1,\"1499\":1,\"1586\":2,\"1627\":1,\"1648\":1,\"1676\":1,\"1763\":2,\"1804\":1,\"1825\":1,\"1853\":1,\"1940\":2,\"1981\":1,\"2002\":1,\"2030\":1,\"2117\":2,\"2158\":1,\"2179\":1,\"2205\":2,\"2217\":1,\"2332\":2,\"2377\":1,\"2398\":1,\"2424\":2,\"2436\":1,\"2551\":2,\"2596\":1,\"2617\":1,\"2643\":2,\"2655\":1,\"2770\":2,\"2815\":1,\"2836\":1},\"1\":{\"158\":4,\"394\":4,\"799\":2,\"801\":1,\"802\":2,\"806\":2,\"814\":2,\"905\":1,\"926\":2,\"928\":1,\"929\":2,\"933\":2,\"974\":2,\"993\":1,\"995\":2,\"997\":1,\"1082\":2,\"1150\":2,\"1230\":2,\"1232\":1,\"1233\":2,\"1237\":2,\"1274\":2,\"1293\":1,\"1295\":2,\"1297\":1,\"1322\":2,\"1406\":2,\"1408\":1,\"1409\":2,\"1413\":2,\"1450\":2,\"1469\":1,\"1471\":2,\"1473\":1,\"1499\":2,\"1583\":2,\"1585\":1,\"1586\":2,\"1590\":2,\"1627\":2,\"1646\":1,\"1648\":2,\"1650\":1,\"1676\":2,\"1760\":2,\"1762\":1,\"1763\":2,\"1767\":2,\"1804\":2,\"1823\":1,\"1825\":2,\"1827\":1,\"1853\":2,\"1937\":2,\"1939\":1,\"1940\":2,\"1944\":2,\"1981\":2,\"2000\":1,\"2002\":2,\"2004\":1,\"2030\":2,\"2114\":2,\"2116\":1,\"2117\":2,\"2121\":2,\"2158\":2,\"2177\":1,\"2179\":2,\"2181\":1,\"2202\":2,\"2204\":1,\"2205\":2,\"2209\":2,\"2217\":2,\"2308\":1,\"2329\":2,\"2331\":1,\"2332\":2,\"2336\":2,\"2377\":2,\"2396\":1,\"2398\":2,\"2400\":1,\"2421\":2,\"2423\":1,\"2424\":2,\"2428\":2,\"2436\":2,\"2527\":1,\"2548\":2,\"2550\":1,\"2551\":2,\"2555\":2,\"2596\":2,\"2615\":1,\"2617\":2,\"2619\":1,\"2640\":2,\"2642\":1,\"2643\":2,\"2647\":2,\"2655\":2,\"2746\":1,\"2767\":2,\"2769\":1,\"2770\":2,\"2774\":2,\"2815\":2,\"2834\":1,\"2836\":2,\"2838\":1}}],[\"together\",{\"1\":{\"77\":1,\"78\":1,\"87\":1,\"90\":1,\"98\":1,\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"topics\",{\"1\":{\"77\":1}}],[\"topic\",{\"0\":{\"113\":1},\"1\":{\"37\":1,\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"towards\",{\"1\":{\"12\":1}}],[\"to\",{\"0\":{\"13\":1,\"35\":1,\"37\":1,\"69\":1,\"158\":1,\"298\":1,\"301\":1,\"304\":1},\"1\":{\"0\":7,\"1\":1,\"5\":3,\"6\":3,\"9\":4,\"10\":1,\"12\":6,\"13\":1,\"28\":1,\"30\":1,\"32\":4,\"33\":6,\"35\":1,\"36\":3,\"37\":4,\"38\":3,\"39\":2,\"42\":1,\"43\":3,\"44\":1,\"45\":3,\"46\":1,\"47\":3,\"48\":1,\"49\":3,\"50\":1,\"51\":3,\"52\":1,\"53\":3,\"54\":1,\"55\":3,\"56\":1,\"57\":3,\"58\":1,\"59\":3,\"60\":1,\"61\":3,\"62\":1,\"63\":3,\"67\":1,\"68\":1,\"71\":3,\"74\":1,\"77\":3,\"78\":2,\"81\":7,\"82\":1,\"84\":1,\"85\":1,\"86\":6,\"87\":4,\"89\":1,\"90\":3,\"91\":2,\"92\":1,\"93\":11,\"94\":9,\"95\":11,\"96\":1,\"98\":6,\"99\":1,\"101\":1,\"102\":3,\"103\":3,\"106\":2,\"108\":2,\"109\":2,\"110\":1,\"112\":2,\"113\":6,\"116\":3,\"118\":1,\"122\":2,\"123\":8,\"124\":4,\"125\":2,\"126\":2,\"130\":3,\"131\":5,\"134\":5,\"135\":3,\"137\":1,\"138\":1,\"140\":2,\"141\":3,\"142\":2,\"143\":11,\"144\":2,\"145\":2,\"146\":6,\"147\":2,\"148\":7,\"149\":7,\"150\":5,\"152\":3,\"153\":1,\"155\":10,\"156\":3,\"158\":3,\"159\":2,\"161\":2,\"163\":1,\"164\":2,\"165\":11,\"166\":1,\"169\":1,\"170\":5,\"171\":3,\"172\":2,\"173\":1,\"174\":1,\"175\":2,\"176\":1,\"177\":1,\"178\":2,\"179\":1,\"180\":2,\"181\":2,\"182\":2,\"183\":2,\"184\":2,\"185\":2,\"186\":1,\"191\":3,\"192\":1,\"195\":1,\"200\":3,\"201\":3,\"202\":1,\"203\":1,\"206\":1,\"207\":1,\"208\":3,\"209\":3,\"210\":2,\"213\":3,\"214\":2,\"215\":1,\"217\":2,\"218\":3,\"219\":3,\"220\":3,\"221\":2,\"224\":3,\"226\":2,\"227\":4,\"228\":4,\"231\":1,\"232\":1,\"234\":4,\"236\":1,\"237\":2,\"238\":2,\"239\":2,\"240\":1,\"245\":3,\"246\":3,\"247\":3,\"248\":2,\"249\":1,\"250\":1,\"251\":2,\"252\":1,\"253\":2,\"254\":1,\"255\":1,\"256\":1,\"257\":1,\"261\":1,\"262\":1,\"267\":2,\"268\":2,\"269\":1,\"270\":1,\"271\":2,\"272\":3,\"273\":1,\"274\":1,\"275\":1,\"281\":4,\"282\":3,\"285\":9,\"286\":16,\"292\":4,\"293\":3,\"296\":9,\"297\":15,\"298\":2,\"299\":1,\"300\":4,\"301\":3,\"302\":1,\"303\":4,\"304\":1,\"305\":1,\"306\":4,\"307\":2,\"308\":1,\"309\":2,\"310\":3,\"311\":1,\"312\":2,\"314\":2,\"315\":2,\"316\":1,\"317\":2,\"318\":3,\"321\":1,\"325\":1,\"327\":3,\"328\":9,\"329\":2,\"330\":6,\"331\":3,\"334\":21,\"336\":2,\"337\":4,\"338\":2,\"340\":4,\"341\":1,\"342\":4,\"343\":4,\"344\":7,\"345\":9,\"348\":10,\"350\":3,\"352\":7,\"353\":6,\"354\":3,\"357\":4,\"358\":2,\"360\":5,\"363\":15,\"367\":2,\"369\":1,\"370\":3,\"373\":8,\"375\":4,\"377\":4,\"379\":6,\"380\":3,\"383\":4,\"384\":2,\"386\":10,\"389\":19,\"390\":2,\"391\":2,\"393\":1,\"394\":3,\"395\":3,\"398\":1,\"399\":1,\"400\":1,\"403\":3,\"404\":2,\"405\":1,\"406\":1,\"408\":2,\"409\":1,\"410\":2,\"411\":3,\"412\":4,\"413\":9,\"414\":2,\"415\":16,\"418\":4,\"419\":3,\"423\":6,\"424\":1,\"425\":5,\"426\":1,\"427\":1,\"429\":1,\"430\":1,\"435\":5,\"438\":15,\"439\":9,\"440\":3,\"441\":3,\"442\":10,\"443\":4,\"444\":1,\"445\":2,\"448\":3,\"449\":3,\"453\":8,\"454\":1,\"455\":4,\"456\":1,\"461\":5,\"464\":17,\"465\":9,\"466\":3,\"467\":3,\"468\":6,\"471\":3,\"472\":3,\"476\":8,\"477\":1,\"478\":4,\"479\":1,\"484\":5,\"487\":15,\"488\":9,\"489\":3,\"490\":3,\"491\":6,\"492\":2,\"493\":1,\"494\":2,\"497\":3,\"498\":3,\"502\":8,\"503\":1,\"504\":4,\"505\":1,\"510\":5,\"513\":15,\"514\":9,\"515\":3,\"516\":3,\"517\":6,\"518\":2,\"519\":3,\"520\":4,\"523\":3,\"524\":3,\"528\":8,\"529\":1,\"530\":6,\"535\":1,\"540\":5,\"543\":15,\"544\":9,\"545\":3,\"546\":3,\"547\":10,\"548\":5,\"549\":1,\"550\":2,\"553\":3,\"554\":3,\"558\":6,\"559\":1,\"560\":5,\"565\":1,\"570\":5,\"573\":15,\"574\":9,\"575\":3,\"576\":3,\"577\":10,\"578\":4,\"579\":1,\"580\":2,\"583\":3,\"584\":3,\"588\":6,\"589\":1,\"590\":5,\"595\":1,\"600\":5,\"603\":15,\"604\":9,\"605\":3,\"606\":3,\"607\":10,\"608\":4,\"609\":1,\"610\":2,\"611\":1,\"614\":3,\"615\":2,\"616\":1,\"617\":1,\"619\":2,\"620\":1,\"621\":2,\"622\":3,\"623\":4,\"624\":9,\"625\":2,\"626\":16,\"629\":4,\"630\":3,\"634\":6,\"635\":1,\"636\":5,\"641\":1,\"646\":5,\"649\":15,\"650\":9,\"651\":3,\"652\":3,\"653\":10,\"654\":4,\"655\":1,\"656\":2,\"657\":1,\"660\":3,\"661\":2,\"662\":1,\"663\":1,\"665\":2,\"666\":1,\"667\":2,\"668\":3,\"669\":4,\"670\":9,\"671\":2,\"672\":16,\"675\":4,\"676\":3,\"680\":6,\"681\":1,\"682\":5,\"687\":1,\"692\":5,\"695\":15,\"696\":9,\"697\":3,\"698\":3,\"699\":10,\"700\":4,\"701\":1,\"702\":2,\"703\":1,\"706\":3,\"707\":2,\"708\":1,\"709\":1,\"711\":2,\"712\":1,\"713\":2,\"714\":3,\"715\":4,\"716\":9,\"717\":2,\"718\":16,\"721\":4,\"722\":3,\"726\":6,\"727\":1,\"728\":5,\"733\":1,\"738\":5,\"741\":15,\"742\":9,\"743\":3,\"744\":3,\"745\":10,\"746\":4,\"747\":1,\"748\":2,\"749\":1,\"752\":3,\"753\":2,\"754\":1,\"755\":1,\"757\":2,\"758\":1,\"759\":2,\"760\":3,\"761\":4,\"762\":9,\"763\":2,\"764\":16,\"767\":4,\"768\":3,\"772\":6,\"773\":1,\"774\":5,\"775\":1,\"776\":1,\"778\":1,\"779\":1,\"784\":5,\"787\":15,\"788\":9,\"789\":3,\"790\":3,\"791\":10,\"792\":4,\"793\":1,\"794\":2,\"798\":4,\"799\":1,\"800\":2,\"802\":1,\"803\":1,\"804\":1,\"806\":1,\"811\":3,\"812\":5,\"813\":1,\"814\":3,\"817\":2,\"818\":2,\"819\":2,\"822\":3,\"824\":2,\"832\":4,\"834\":3,\"835\":2,\"836\":1,\"837\":1,\"838\":2,\"839\":1,\"840\":1,\"841\":2,\"842\":1,\"843\":2,\"844\":2,\"845\":2,\"846\":2,\"847\":2,\"848\":2,\"849\":2,\"850\":2,\"851\":2,\"852\":2,\"855\":3,\"858\":3,\"859\":3,\"860\":1,\"861\":1,\"863\":1,\"864\":1,\"865\":3,\"866\":3,\"867\":2,\"870\":3,\"871\":2,\"872\":1,\"874\":2,\"875\":3,\"876\":3,\"877\":3,\"878\":2,\"881\":3,\"883\":2,\"886\":1,\"889\":1,\"890\":1,\"892\":1,\"895\":3,\"896\":2,\"898\":1,\"899\":1,\"902\":4,\"903\":3,\"904\":2,\"911\":2,\"912\":2,\"913\":1,\"914\":1,\"915\":2,\"916\":2,\"917\":3,\"918\":1,\"919\":1,\"920\":1,\"921\":1,\"925\":4,\"926\":1,\"927\":2,\"929\":1,\"930\":1,\"931\":1,\"932\":3,\"933\":1,\"935\":2,\"936\":2,\"937\":2,\"940\":3,\"941\":3,\"942\":4,\"944\":3,\"945\":2,\"946\":1,\"947\":1,\"948\":2,\"949\":1,\"950\":2,\"951\":1,\"952\":1,\"953\":2,\"954\":2,\"955\":2,\"956\":1,\"962\":3,\"963\":2,\"965\":1,\"966\":1,\"971\":3,\"972\":5,\"973\":1,\"974\":3,\"977\":2,\"978\":2,\"979\":2,\"982\":3,\"984\":2,\"993\":4,\"994\":3,\"995\":2,\"996\":2,\"1003\":2,\"1004\":2,\"1005\":1,\"1006\":1,\"1007\":2,\"1008\":2,\"1009\":3,\"1010\":1,\"1011\":1,\"1012\":1,\"1013\":1,\"1017\":4,\"1019\":3,\"1020\":2,\"1021\":1,\"1022\":1,\"1023\":2,\"1024\":1,\"1025\":1,\"1026\":2,\"1027\":1,\"1028\":2,\"1029\":2,\"1030\":2,\"1031\":2,\"1032\":2,\"1033\":2,\"1036\":3,\"1039\":3,\"1040\":3,\"1041\":1,\"1042\":1,\"1045\":1,\"1046\":1,\"1047\":3,\"1048\":3,\"1049\":2,\"1052\":3,\"1053\":2,\"1054\":1,\"1056\":2,\"1057\":3,\"1058\":3,\"1059\":3,\"1060\":2,\"1063\":3,\"1065\":2,\"1068\":1,\"1069\":1,\"1072\":1,\"1073\":1,\"1079\":3,\"1080\":5,\"1081\":1,\"1082\":3,\"1085\":2,\"1086\":2,\"1087\":2,\"1090\":3,\"1092\":2,\"1101\":2,\"1102\":2,\"1103\":2,\"1106\":3,\"1107\":3,\"1108\":4,\"1110\":3,\"1111\":2,\"1112\":1,\"1113\":1,\"1114\":2,\"1115\":1,\"1116\":2,\"1117\":1,\"1118\":1,\"1119\":1,\"1124\":3,\"1126\":1,\"1127\":1,\"1132\":2,\"1133\":2,\"1134\":1,\"1135\":1,\"1136\":2,\"1137\":3,\"1138\":1,\"1139\":1,\"1140\":1,\"1147\":3,\"1148\":5,\"1149\":1,\"1150\":3,\"1153\":2,\"1154\":2,\"1155\":2,\"1158\":3,\"1160\":2,\"1168\":4,\"1170\":3,\"1171\":2,\"1172\":1,\"1173\":1,\"1174\":2,\"1175\":1,\"1176\":1,\"1177\":2,\"1178\":1,\"1179\":2,\"1180\":2,\"1181\":2,\"1182\":2,\"1183\":2,\"1184\":2,\"1187\":3,\"1190\":3,\"1191\":3,\"1192\":1,\"1193\":1,\"1196\":1,\"1197\":1,\"1198\":3,\"1199\":3,\"1200\":2,\"1203\":3,\"1204\":2,\"1205\":1,\"1207\":2,\"1208\":3,\"1209\":3,\"1210\":3,\"1211\":2,\"1214\":3,\"1216\":2,\"1219\":1,\"1220\":1,\"1223\":1,\"1224\":1,\"1229\":4,\"1230\":1,\"1231\":2,\"1233\":1,\"1234\":2,\"1235\":1,\"1236\":3,\"1237\":1,\"1239\":2,\"1240\":2,\"1241\":2,\"1244\":3,\"1245\":3,\"1246\":4,\"1248\":3,\"1249\":2,\"1250\":1,\"1251\":1,\"1252\":2,\"1253\":1,\"1254\":2,\"1255\":1,\"1256\":1,\"1257\":1,\"1263\":3,\"1265\":1,\"1266\":1,\"1271\":3,\"1272\":5,\"1273\":1,\"1274\":3,\"1277\":2,\"1278\":2,\"1279\":2,\"1282\":3,\"1284\":2,\"1293\":4,\"1294\":3,\"1295\":2,\"1296\":2,\"1303\":2,\"1304\":2,\"1305\":1,\"1306\":1,\"1307\":2,\"1308\":3,\"1309\":1,\"1310\":1,\"1311\":1,\"1312\":1,\"1319\":3,\"1320\":5,\"1321\":1,\"1322\":3,\"1325\":2,\"1326\":2,\"1327\":2,\"1330\":3,\"1332\":2,\"1340\":4,\"1342\":3,\"1343\":2,\"1344\":1,\"1345\":1,\"1346\":2,\"1347\":1,\"1348\":1,\"1349\":2,\"1350\":1,\"1351\":2,\"1352\":2,\"1353\":2,\"1354\":2,\"1355\":2,\"1356\":2,\"1357\":2,\"1360\":3,\"1363\":3,\"1364\":3,\"1365\":1,\"1366\":1,\"1368\":1,\"1369\":1,\"1370\":3,\"1371\":3,\"1372\":2,\"1375\":3,\"1376\":2,\"1377\":1,\"1379\":2,\"1380\":3,\"1381\":3,\"1382\":3,\"1383\":2,\"1386\":3,\"1388\":2,\"1391\":1,\"1394\":1,\"1395\":1,\"1397\":1,\"1399\":1,\"1400\":1,\"1405\":4,\"1406\":1,\"1407\":2,\"1409\":1,\"1410\":2,\"1411\":1,\"1412\":3,\"1413\":1,\"1415\":2,\"1416\":2,\"1417\":2,\"1420\":3,\"1421\":3,\"1422\":4,\"1424\":3,\"1425\":2,\"1426\":1,\"1427\":1,\"1428\":2,\"1429\":1,\"1430\":2,\"1431\":1,\"1432\":1,\"1433\":1,\"1439\":3,\"1441\":1,\"1442\":1,\"1447\":3,\"1448\":5,\"1449\":1,\"1450\":3,\"1453\":2,\"1454\":2,\"1455\":2,\"1458\":3,\"1460\":2,\"1469\":4,\"1470\":3,\"1471\":2,\"1472\":2,\"1479\":2,\"1480\":2,\"1481\":1,\"1482\":1,\"1483\":2,\"1484\":2,\"1485\":3,\"1486\":1,\"1487\":1,\"1488\":1,\"1489\":1,\"1496\":3,\"1497\":5,\"1498\":1,\"1499\":3,\"1502\":2,\"1503\":2,\"1504\":2,\"1507\":3,\"1509\":2,\"1517\":4,\"1519\":3,\"1520\":2,\"1521\":1,\"1522\":1,\"1523\":2,\"1524\":1,\"1525\":1,\"1526\":2,\"1527\":1,\"1528\":2,\"1529\":2,\"1530\":2,\"1531\":2,\"1532\":2,\"1533\":2,\"1534\":2,\"1537\":3,\"1540\":3,\"1541\":3,\"1542\":1,\"1543\":1,\"1545\":1,\"1546\":1,\"1547\":3,\"1548\":3,\"1549\":2,\"1552\":3,\"1553\":2,\"1554\":1,\"1556\":2,\"1557\":3,\"1558\":3,\"1559\":3,\"1560\":2,\"1563\":3,\"1565\":2,\"1568\":1,\"1571\":1,\"1572\":1,\"1574\":1,\"1576\":1,\"1577\":1,\"1582\":4,\"1583\":1,\"1584\":2,\"1586\":1,\"1587\":2,\"1588\":1,\"1589\":3,\"1590\":1,\"1592\":2,\"1593\":2,\"1594\":2,\"1597\":3,\"1598\":3,\"1599\":4,\"1601\":3,\"1602\":2,\"1603\":1,\"1604\":1,\"1605\":2,\"1606\":1,\"1607\":2,\"1608\":1,\"1609\":1,\"1610\":1,\"1616\":3,\"1618\":1,\"1619\":1,\"1624\":3,\"1625\":5,\"1626\":1,\"1627\":3,\"1630\":2,\"1631\":2,\"1632\":2,\"1635\":3,\"1637\":2,\"1646\":4,\"1647\":3,\"1648\":2,\"1649\":2,\"1656\":2,\"1657\":2,\"1658\":1,\"1659\":1,\"1660\":2,\"1661\":2,\"1662\":3,\"1663\":1,\"1664\":1,\"1665\":1,\"1666\":1,\"1673\":3,\"1674\":5,\"1675\":1,\"1676\":3,\"1679\":2,\"1680\":2,\"1681\":2,\"1684\":3,\"1686\":2,\"1694\":4,\"1696\":3,\"1697\":2,\"1698\":1,\"1699\":1,\"1700\":2,\"1701\":1,\"1702\":1,\"1703\":2,\"1704\":1,\"1705\":2,\"1706\":2,\"1707\":2,\"1708\":2,\"1709\":2,\"1710\":2,\"1711\":2,\"1714\":3,\"1717\":3,\"1718\":3,\"1719\":1,\"1720\":1,\"1722\":1,\"1723\":1,\"1724\":3,\"1725\":3,\"1726\":2,\"1729\":3,\"1730\":2,\"1731\":1,\"1733\":2,\"1734\":3,\"1735\":3,\"1736\":3,\"1737\":2,\"1740\":3,\"1742\":2,\"1745\":1,\"1748\":1,\"1749\":1,\"1751\":1,\"1753\":1,\"1754\":1,\"1759\":4,\"1760\":1,\"1761\":2,\"1763\":1,\"1764\":2,\"1765\":1,\"1766\":3,\"1767\":1,\"1769\":2,\"1770\":2,\"1771\":2,\"1774\":3,\"1775\":3,\"1776\":4,\"1778\":3,\"1779\":2,\"1780\":1,\"1781\":1,\"1782\":2,\"1783\":1,\"1784\":2,\"1785\":1,\"1786\":1,\"1787\":1,\"1793\":3,\"1795\":1,\"1796\":1,\"1801\":3,\"1802\":5,\"1803\":1,\"1804\":3,\"1807\":2,\"1808\":2,\"1809\":2,\"1812\":3,\"1814\":2,\"1823\":4,\"1824\":3,\"1825\":2,\"1826\":2,\"1833\":2,\"1834\":2,\"1835\":1,\"1836\":1,\"1837\":2,\"1838\":2,\"1839\":3,\"1840\":1,\"1841\":1,\"1842\":1,\"1843\":1,\"1850\":3,\"1851\":5,\"1852\":1,\"1853\":3,\"1856\":2,\"1857\":2,\"1858\":2,\"1861\":3,\"1863\":2,\"1871\":4,\"1873\":3,\"1874\":2,\"1875\":1,\"1876\":1,\"1877\":2,\"1878\":1,\"1879\":1,\"1880\":2,\"1881\":1,\"1882\":2,\"1883\":2,\"1884\":2,\"1885\":2,\"1886\":2,\"1887\":2,\"1888\":2,\"1891\":3,\"1894\":3,\"1895\":3,\"1896\":1,\"1897\":1,\"1899\":1,\"1900\":1,\"1901\":3,\"1902\":3,\"1903\":2,\"1906\":3,\"1907\":2,\"1908\":1,\"1910\":2,\"1911\":3,\"1912\":3,\"1913\":3,\"1914\":2,\"1917\":3,\"1919\":2,\"1922\":1,\"1925\":1,\"1926\":1,\"1928\":1,\"1930\":1,\"1931\":1,\"1936\":4,\"1937\":1,\"1938\":2,\"1940\":1,\"1941\":2,\"1942\":1,\"1943\":3,\"1944\":1,\"1946\":2,\"1947\":2,\"1948\":2,\"1951\":3,\"1952\":3,\"1953\":4,\"1955\":3,\"1956\":2,\"1957\":1,\"1958\":1,\"1959\":2,\"1960\":1,\"1961\":2,\"1962\":1,\"1963\":1,\"1964\":1,\"1970\":3,\"1972\":1,\"1973\":1,\"1978\":3,\"1979\":5,\"1980\":1,\"1981\":3,\"1984\":2,\"1985\":2,\"1986\":2,\"1989\":3,\"1991\":2,\"2000\":4,\"2001\":3,\"2002\":2,\"2003\":2,\"2010\":2,\"2011\":2,\"2012\":1,\"2013\":1,\"2014\":2,\"2015\":2,\"2016\":3,\"2017\":1,\"2018\":1,\"2019\":1,\"2020\":1,\"2027\":3,\"2028\":5,\"2029\":1,\"2030\":3,\"2033\":2,\"2034\":2,\"2035\":2,\"2038\":3,\"2040\":2,\"2048\":4,\"2050\":3,\"2051\":2,\"2052\":1,\"2053\":1,\"2054\":2,\"2055\":1,\"2056\":1,\"2057\":2,\"2058\":1,\"2059\":2,\"2060\":2,\"2061\":2,\"2062\":2,\"2063\":2,\"2064\":2,\"2065\":2,\"2068\":3,\"2071\":3,\"2072\":3,\"2073\":1,\"2074\":1,\"2076\":1,\"2077\":1,\"2078\":3,\"2079\":3,\"2080\":2,\"2083\":3,\"2084\":2,\"2085\":1,\"2087\":2,\"2088\":3,\"2089\":3,\"2090\":3,\"2091\":2,\"2094\":3,\"2096\":2,\"2099\":1,\"2102\":1,\"2103\":1,\"2105\":1,\"2107\":1,\"2108\":1,\"2113\":4,\"2114\":1,\"2115\":2,\"2117\":1,\"2118\":2,\"2119\":1,\"2120\":3,\"2121\":1,\"2123\":2,\"2124\":2,\"2125\":2,\"2128\":3,\"2129\":3,\"2130\":4,\"2132\":3,\"2133\":2,\"2134\":1,\"2135\":1,\"2136\":2,\"2137\":1,\"2138\":2,\"2139\":1,\"2140\":1,\"2141\":1,\"2147\":3,\"2149\":1,\"2150\":1,\"2155\":3,\"2156\":5,\"2157\":1,\"2158\":3,\"2161\":2,\"2162\":2,\"2163\":2,\"2166\":3,\"2168\":2,\"2177\":4,\"2178\":3,\"2179\":2,\"2180\":2,\"2187\":2,\"2188\":2,\"2189\":1,\"2190\":1,\"2191\":2,\"2192\":2,\"2193\":3,\"2194\":1,\"2195\":1,\"2196\":1,\"2197\":1,\"2201\":4,\"2202\":1,\"2203\":2,\"2205\":1,\"2206\":1,\"2207\":1,\"2209\":1,\"2214\":3,\"2215\":5,\"2216\":1,\"2217\":3,\"2220\":2,\"2221\":2,\"2222\":2,\"2225\":3,\"2227\":2,\"2235\":4,\"2237\":3,\"2238\":2,\"2239\":1,\"2240\":1,\"2241\":2,\"2242\":1,\"2243\":1,\"2244\":2,\"2245\":1,\"2246\":2,\"2247\":2,\"2248\":2,\"2249\":2,\"2250\":2,\"2251\":2,\"2252\":2,\"2253\":2,\"2254\":2,\"2255\":2,\"2258\":3,\"2261\":3,\"2262\":3,\"2263\":1,\"2264\":1,\"2266\":1,\"2267\":1,\"2268\":3,\"2269\":3,\"2270\":2,\"2273\":3,\"2274\":2,\"2275\":1,\"2277\":2,\"2278\":3,\"2279\":3,\"2280\":3,\"2281\":2,\"2284\":3,\"2286\":2,\"2289\":1,\"2292\":1,\"2293\":1,\"2295\":1,\"2298\":3,\"2299\":2,\"2301\":1,\"2302\":1,\"2305\":4,\"2306\":3,\"2307\":2,\"2314\":2,\"2315\":2,\"2316\":1,\"2317\":1,\"2318\":2,\"2319\":2,\"2320\":3,\"2321\":1,\"2322\":1,\"2323\":1,\"2324\":1,\"2328\":4,\"2329\":1,\"2330\":2,\"2332\":1,\"2333\":1,\"2334\":1,\"2335\":3,\"2336\":1,\"2338\":2,\"2339\":2,\"2340\":2,\"2343\":3,\"2344\":3,\"2345\":4,\"2347\":3,\"2348\":2,\"2349\":1,\"2350\":1,\"2351\":2,\"2352\":1,\"2353\":2,\"2354\":1,\"2355\":1,\"2356\":2,\"2357\":2,\"2358\":2,\"2359\":1,\"2365\":3,\"2366\":2,\"2368\":1,\"2369\":1,\"2374\":3,\"2375\":5,\"2376\":1,\"2377\":3,\"2380\":2,\"2381\":2,\"2382\":2,\"2385\":3,\"2387\":2,\"2396\":4,\"2397\":3,\"2398\":2,\"2399\":2,\"2406\":2,\"2407\":2,\"2408\":1,\"2409\":1,\"2410\":2,\"2411\":2,\"2412\":3,\"2413\":1,\"2414\":1,\"2415\":1,\"2416\":1,\"2420\":4,\"2421\":1,\"2422\":2,\"2424\":1,\"2425\":1,\"2426\":1,\"2428\":1,\"2433\":3,\"2434\":5,\"2435\":1,\"2436\":3,\"2439\":2,\"2440\":2,\"2441\":2,\"2444\":3,\"2446\":2,\"2454\":4,\"2456\":3,\"2457\":2,\"2458\":1,\"2459\":1,\"2460\":2,\"2461\":1,\"2462\":1,\"2463\":2,\"2464\":1,\"2465\":2,\"2466\":2,\"2467\":2,\"2468\":2,\"2469\":2,\"2470\":2,\"2471\":2,\"2472\":2,\"2473\":2,\"2474\":2,\"2477\":3,\"2480\":3,\"2481\":3,\"2482\":1,\"2483\":1,\"2485\":1,\"2486\":1,\"2487\":3,\"2488\":3,\"2489\":2,\"2492\":3,\"2493\":2,\"2494\":1,\"2496\":2,\"2497\":3,\"2498\":3,\"2499\":3,\"2500\":2,\"2503\":3,\"2505\":2,\"2508\":1,\"2511\":1,\"2512\":1,\"2514\":1,\"2517\":3,\"2518\":2,\"2520\":1,\"2521\":1,\"2524\":4,\"2525\":3,\"2526\":2,\"2533\":2,\"2534\":2,\"2535\":1,\"2536\":1,\"2537\":2,\"2538\":2,\"2539\":3,\"2540\":1,\"2541\":1,\"2542\":1,\"2543\":1,\"2547\":4,\"2548\":1,\"2549\":2,\"2551\":1,\"2552\":1,\"2553\":1,\"2554\":3,\"2555\":1,\"2557\":2,\"2558\":2,\"2559\":2,\"2562\":3,\"2563\":3,\"2564\":4,\"2566\":3,\"2567\":2,\"2568\":1,\"2569\":1,\"2570\":2,\"2571\":1,\"2572\":2,\"2573\":1,\"2574\":1,\"2575\":2,\"2576\":2,\"2577\":2,\"2578\":1,\"2584\":3,\"2585\":2,\"2587\":1,\"2588\":1,\"2593\":3,\"2594\":5,\"2595\":1,\"2596\":3,\"2599\":2,\"2600\":2,\"2601\":2,\"2604\":3,\"2606\":2,\"2615\":4,\"2616\":3,\"2617\":2,\"2618\":2,\"2625\":2,\"2626\":2,\"2627\":1,\"2628\":1,\"2629\":2,\"2630\":2,\"2631\":3,\"2632\":1,\"2633\":1,\"2634\":1,\"2635\":1,\"2639\":4,\"2640\":1,\"2641\":2,\"2643\":1,\"2644\":1,\"2645\":1,\"2647\":1,\"2652\":3,\"2653\":5,\"2654\":1,\"2655\":3,\"2658\":2,\"2659\":2,\"2660\":2,\"2663\":3,\"2665\":2,\"2673\":4,\"2675\":3,\"2676\":2,\"2677\":1,\"2678\":1,\"2679\":2,\"2680\":1,\"2681\":1,\"2682\":2,\"2683\":1,\"2684\":2,\"2685\":2,\"2686\":2,\"2687\":2,\"2688\":2,\"2689\":2,\"2690\":2,\"2691\":2,\"2692\":2,\"2693\":2,\"2696\":3,\"2699\":3,\"2700\":3,\"2701\":1,\"2702\":1,\"2704\":1,\"2705\":1,\"2706\":3,\"2707\":3,\"2708\":2,\"2711\":3,\"2712\":2,\"2713\":1,\"2715\":2,\"2716\":3,\"2717\":3,\"2718\":3,\"2719\":2,\"2722\":3,\"2724\":2,\"2727\":1,\"2730\":1,\"2731\":1,\"2733\":1,\"2736\":3,\"2737\":2,\"2739\":1,\"2740\":1,\"2743\":4,\"2744\":3,\"2745\":2,\"2752\":2,\"2753\":2,\"2754\":1,\"2755\":1,\"2756\":2,\"2757\":2,\"2758\":3,\"2759\":1,\"2760\":1,\"2761\":1,\"2762\":1,\"2766\":4,\"2767\":1,\"2768\":2,\"2770\":1,\"2771\":1,\"2772\":1,\"2773\":3,\"2774\":1,\"2776\":2,\"2777\":2,\"2778\":2,\"2781\":3,\"2782\":3,\"2783\":4,\"2785\":3,\"2786\":2,\"2787\":1,\"2788\":1,\"2789\":2,\"2790\":1,\"2791\":2,\"2792\":1,\"2793\":1,\"2794\":2,\"2795\":2,\"2796\":2,\"2797\":1,\"2803\":3,\"2804\":2,\"2806\":1,\"2807\":1,\"2812\":3,\"2813\":5,\"2814\":1,\"2815\":3,\"2818\":2,\"2819\":2,\"2820\":2,\"2823\":3,\"2825\":2,\"2834\":4,\"2835\":3,\"2836\":2,\"2837\":2,\"2844\":2,\"2845\":2,\"2846\":1,\"2847\":1,\"2848\":2,\"2849\":2,\"2850\":3,\"2851\":1,\"2852\":1,\"2853\":1,\"2854\":1}}],[\"szktxyq2rh5se+j\",{\"1\":{\"905\":1,\"997\":1,\"1297\":1,\"1473\":1,\"1650\":1,\"1827\":1,\"2004\":1,\"2181\":1,\"2308\":1,\"2400\":1,\"2527\":1,\"2619\":1,\"2746\":1,\"2838\":1}}],[\"skills\",{\"1\":{\"401\":1,\"612\":1,\"658\":1,\"704\":1,\"750\":1}}],[\"skip\",{\"1\":{\"282\":1,\"293\":1,\"409\":2,\"620\":2,\"666\":2,\"712\":2,\"758\":2}}],[\"slides\",{\"1\":{\"314\":1}}],[\"sleep\",{\"0\":{\"206\":1,\"231\":1,\"863\":1,\"889\":1,\"1045\":1,\"1068\":1,\"1196\":1,\"1219\":1,\"1368\":1,\"1394\":1,\"1545\":1,\"1571\":1,\"1722\":1,\"1748\":1,\"1899\":1,\"1925\":1,\"2076\":1,\"2102\":1,\"2266\":1,\"2292\":1,\"2485\":1,\"2511\":1,\"2704\":1,\"2730\":1},\"1\":{\"206\":1,\"231\":1,\"863\":1,\"889\":1,\"1045\":1,\"1068\":1,\"1196\":1,\"1219\":1,\"1368\":1,\"1394\":1,\"1545\":1,\"1571\":1,\"1722\":1,\"1748\":1,\"1899\":1,\"1925\":1,\"2076\":1,\"2102\":1,\"2266\":1,\"2292\":1,\"2485\":1,\"2511\":1,\"2704\":1,\"2730\":1}}],[\"sample\",{\"1\":{\"314\":1,\"419\":1,\"449\":1,\"472\":1,\"498\":1,\"524\":1,\"554\":1,\"584\":1,\"630\":1,\"676\":1,\"722\":1,\"768\":1}}],[\"same\",{\"1\":{\"98\":1,\"134\":1,\"155\":5,\"285\":2,\"286\":2,\"296\":2,\"297\":2,\"299\":4,\"342\":2,\"343\":1,\"360\":1,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"smooth\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"small\",{\"1\":{\"391\":1,\"414\":1,\"625\":1,\"671\":1,\"717\":1,\"763\":1}}],[\"smime\",{\"0\":{\"220\":1,\"221\":2,\"877\":1,\"878\":2,\"1059\":1,\"1060\":2,\"1210\":1,\"1211\":2,\"1382\":1,\"1383\":2,\"1559\":1,\"1560\":2,\"1736\":1,\"1737\":2,\"1913\":1,\"1914\":2,\"2090\":1,\"2091\":2,\"2280\":1,\"2281\":2,\"2499\":1,\"2500\":2,\"2718\":1,\"2719\":2},\"1\":{\"220\":2,\"221\":3,\"877\":2,\"878\":3,\"1059\":2,\"1060\":3,\"1210\":2,\"1211\":3,\"1382\":2,\"1383\":3,\"1559\":2,\"1560\":3,\"1736\":2,\"1737\":3,\"1913\":2,\"1914\":3,\"2090\":2,\"2091\":3,\"2280\":2,\"2281\":3,\"2499\":2,\"2500\":3,\"2718\":2,\"2719\":3}}],[\"smtps\",{\"1\":{\"226\":1,\"883\":1,\"1065\":1,\"1216\":1,\"1388\":1,\"1565\":1,\"1742\":1,\"1919\":1,\"2096\":1,\"2286\":1,\"2505\":1,\"2724\":1}}],[\"smtp\",{\"1\":{\"208\":3,\"209\":3,\"210\":1,\"212\":2,\"215\":3,\"216\":1,\"218\":1,\"219\":1,\"224\":3,\"225\":3,\"226\":1,\"865\":3,\"866\":3,\"867\":1,\"869\":2,\"872\":3,\"873\":1,\"875\":1,\"876\":1,\"881\":3,\"882\":3,\"883\":1,\"1047\":3,\"1048\":3,\"1049\":1,\"1051\":2,\"1054\":3,\"1055\":1,\"1057\":1,\"1058\":1,\"1063\":3,\"1064\":3,\"1065\":1,\"1198\":3,\"1199\":3,\"1200\":1,\"1202\":2,\"1205\":3,\"1206\":1,\"1208\":1,\"1209\":1,\"1214\":3,\"1215\":3,\"1216\":1,\"1370\":3,\"1371\":3,\"1372\":1,\"1374\":2,\"1377\":3,\"1378\":1,\"1380\":1,\"1381\":1,\"1386\":3,\"1387\":3,\"1388\":1,\"1547\":3,\"1548\":3,\"1549\":1,\"1551\":2,\"1554\":3,\"1555\":1,\"1557\":1,\"1558\":1,\"1563\":3,\"1564\":3,\"1565\":1,\"1724\":3,\"1725\":3,\"1726\":1,\"1728\":2,\"1731\":3,\"1732\":1,\"1734\":1,\"1735\":1,\"1740\":3,\"1741\":3,\"1742\":1,\"1901\":3,\"1902\":3,\"1903\":1,\"1905\":2,\"1908\":3,\"1909\":1,\"1911\":1,\"1912\":1,\"1917\":3,\"1918\":3,\"1919\":1,\"2078\":3,\"2079\":3,\"2080\":1,\"2082\":2,\"2085\":3,\"2086\":1,\"2088\":1,\"2089\":1,\"2094\":3,\"2095\":3,\"2096\":1,\"2268\":3,\"2269\":3,\"2270\":1,\"2272\":2,\"2275\":3,\"2276\":1,\"2278\":1,\"2279\":1,\"2284\":3,\"2285\":3,\"2286\":1,\"2487\":3,\"2488\":3,\"2489\":1,\"2491\":2,\"2494\":3,\"2495\":1,\"2497\":1,\"2498\":1,\"2503\":3,\"2504\":3,\"2505\":1,\"2706\":3,\"2707\":3,\"2708\":1,\"2710\":2,\"2713\":3,\"2714\":1,\"2716\":1,\"2717\":1,\"2722\":3,\"2723\":3,\"2724\":1}}],[\"switchstatements\",{\"1\":{\"155\":2}}],[\"switch\",{\"1\":{\"155\":7}}],[\"switches\",{\"1\":{\"93\":1}}],[\"sslverifyclient\",{\"1\":{\"921\":1,\"1013\":1,\"1312\":1,\"1489\":1,\"1666\":1,\"1843\":1,\"2020\":1,\"2197\":1,\"2324\":1,\"2416\":1,\"2543\":1,\"2635\":1,\"2762\":1,\"2854\":1}}],[\"sslcertificatekeyfile\",{\"1\":{\"275\":1,\"920\":1,\"1012\":1,\"1140\":1,\"1311\":1,\"1488\":1,\"1665\":1,\"1842\":1,\"2019\":1,\"2196\":1,\"2323\":1,\"2415\":1,\"2542\":1,\"2634\":1,\"2761\":1,\"2853\":1}}],[\"sslcertificatefile\",{\"1\":{\"274\":1,\"919\":1,\"1011\":1,\"1139\":1,\"1310\":1,\"1487\":1,\"1664\":1,\"1841\":1,\"2018\":1,\"2195\":1,\"2322\":1,\"2414\":1,\"2541\":1,\"2633\":1,\"2760\":1,\"2852\":1}}],[\"sslcertificatechainfile\",{\"1\":{\"273\":1,\"918\":1,\"1010\":1,\"1138\":1,\"1309\":1,\"1486\":1,\"1663\":1,\"1840\":1,\"2017\":1,\"2194\":1,\"2321\":1,\"2413\":1,\"2540\":1,\"2632\":1,\"2759\":1,\"2851\":1}}],[\"sslcadnrequestfile\",{\"1\":{\"272\":1,\"917\":1,\"1009\":1,\"1137\":1,\"1308\":1,\"1485\":1,\"1662\":1,\"1839\":1,\"2016\":1,\"2193\":1,\"2320\":1,\"2412\":1,\"2539\":1,\"2631\":1,\"2758\":1,\"2850\":1}}],[\"sslcacertificatefile\",{\"1\":{\"271\":1,\"916\":1,\"1008\":1,\"1136\":1,\"1307\":1,\"1484\":1,\"1661\":1,\"1838\":1,\"2015\":1,\"2192\":1,\"2319\":1,\"2411\":1,\"2538\":1,\"2630\":1,\"2757\":1,\"2849\":1}}],[\"ssl\",{\"0\":{\"271\":1,\"272\":1,\"273\":1,\"274\":1,\"275\":1,\"916\":1,\"917\":1,\"918\":1,\"919\":1,\"920\":1,\"921\":1,\"1008\":1,\"1009\":1,\"1010\":1,\"1011\":1,\"1012\":1,\"1013\":1,\"1136\":1,\"1137\":1,\"1138\":1,\"1139\":1,\"1140\":1,\"1307\":1,\"1308\":1,\"1309\":1,\"1310\":1,\"1311\":1,\"1312\":1,\"1484\":1,\"1485\":1,\"1486\":1,\"1487\":1,\"1488\":1,\"1489\":1,\"1661\":1,\"1662\":1,\"1663\":1,\"1664\":1,\"1665\":1,\"1666\":1,\"1838\":1,\"1839\":1,\"1840\":1,\"1841\":1,\"1842\":1,\"1843\":1,\"2015\":1,\"2016\":1,\"2017\":1,\"2018\":1,\"2019\":1,\"2020\":1,\"2192\":1,\"2193\":1,\"2194\":1,\"2195\":1,\"2196\":1,\"2197\":1,\"2319\":1,\"2320\":1,\"2321\":1,\"2322\":1,\"2323\":1,\"2324\":1,\"2411\":1,\"2412\":1,\"2413\":1,\"2414\":1,\"2415\":1,\"2416\":1,\"2538\":1,\"2539\":1,\"2540\":1,\"2541\":1,\"2542\":1,\"2543\":1,\"2630\":1,\"2631\":1,\"2632\":1,\"2633\":1,\"2634\":1,\"2635\":1,\"2757\":1,\"2758\":1,\"2759\":1,\"2760\":1,\"2761\":1,\"2762\":1,\"2849\":1,\"2850\":1,\"2851\":1,\"2852\":1,\"2853\":1,\"2854\":1},\"1\":{\"108\":1,\"163\":1,\"166\":3,\"271\":1,\"272\":2,\"273\":2,\"274\":1,\"275\":1,\"284\":4,\"285\":4,\"295\":4,\"296\":4,\"437\":4,\"438\":7,\"463\":4,\"464\":7,\"486\":4,\"487\":7,\"512\":4,\"513\":7,\"542\":4,\"543\":7,\"572\":4,\"573\":7,\"602\":4,\"603\":7,\"648\":4,\"649\":7,\"694\":4,\"695\":7,\"740\":4,\"741\":7,\"786\":4,\"787\":7,\"916\":1,\"917\":2,\"918\":2,\"919\":1,\"920\":1,\"921\":1,\"1008\":1,\"1009\":2,\"1010\":2,\"1011\":1,\"1012\":1,\"1013\":1,\"1136\":1,\"1137\":2,\"1138\":2,\"1139\":1,\"1140\":1,\"1307\":1,\"1308\":2,\"1309\":2,\"1310\":1,\"1311\":1,\"1312\":1,\"1484\":1,\"1485\":2,\"1486\":2,\"1487\":1,\"1488\":1,\"1489\":1,\"1661\":1,\"1662\":2,\"1663\":2,\"1664\":1,\"1665\":1,\"1666\":1,\"1838\":1,\"1839\":2,\"1840\":2,\"1841\":1,\"1842\":1,\"1843\":1,\"2015\":1,\"2016\":2,\"2017\":2,\"2018\":1,\"2019\":1,\"2020\":1,\"2192\":1,\"2193\":2,\"2194\":2,\"2195\":1,\"2196\":1,\"2197\":1,\"2319\":1,\"2320\":2,\"2321\":2,\"2322\":1,\"2323\":1,\"2324\":1,\"2411\":1,\"2412\":2,\"2413\":2,\"2414\":1,\"2415\":1,\"2416\":1,\"2538\":1,\"2539\":2,\"2540\":2,\"2541\":1,\"2542\":1,\"2543\":1,\"2630\":1,\"2631\":2,\"2632\":2,\"2633\":1,\"2634\":1,\"2635\":1,\"2757\":1,\"2758\":2,\"2759\":2,\"2760\":1,\"2761\":1,\"2762\":1,\"2849\":1,\"2850\":2,\"2851\":2,\"2852\":1,\"2853\":1,\"2854\":1}}],[\"square\",{\"1\":{\"99\":1}}],[\"snapshots>\",{\"1\":{\"158\":1}}],[\"snapshot\",{\"1\":{\"137\":1,\"138\":1,\"159\":1}}],[\"sni\",{\"1\":{\"96\":1,\"166\":2}}],[\"snomed\",{\"1\":{\"90\":1}}],[\"scripts\",{\"1\":{\"400\":1,\"611\":1,\"657\":1,\"703\":1,\"749\":1}}],[\"scope\",{\"1\":{\"158\":1,\"394\":2}}],[\"scalar\",{\"1\":{\"798\":2,\"925\":2,\"1229\":2,\"1262\":1,\"1405\":2,\"1582\":2,\"1759\":2,\"1936\":2,\"2113\":2,\"2201\":2,\"2328\":2,\"2420\":2,\"2547\":2,\"2639\":2,\"2766\":2}}],[\"scalars\",{\"1\":{\"217\":1,\"222\":1,\"223\":1,\"229\":1,\"233\":1,\"257\":1,\"261\":1,\"262\":1,\"874\":1,\"879\":1,\"880\":1,\"887\":1,\"891\":1,\"897\":1,\"964\":1,\"1056\":1,\"1061\":1,\"1062\":1,\"1066\":1,\"1070\":1,\"1071\":1,\"1125\":1,\"1207\":1,\"1212\":1,\"1213\":1,\"1217\":1,\"1221\":1,\"1222\":1,\"1264\":1,\"1379\":1,\"1384\":1,\"1385\":1,\"1392\":1,\"1396\":1,\"1398\":1,\"1440\":1,\"1556\":1,\"1561\":1,\"1562\":1,\"1569\":1,\"1573\":1,\"1575\":1,\"1617\":1,\"1733\":1,\"1738\":1,\"1739\":1,\"1746\":1,\"1750\":1,\"1752\":1,\"1794\":1,\"1910\":1,\"1915\":1,\"1916\":1,\"1923\":1,\"1927\":1,\"1929\":1,\"1971\":1,\"2087\":1,\"2092\":1,\"2093\":1,\"2100\":1,\"2104\":1,\"2106\":1,\"2148\":1,\"2277\":1,\"2282\":1,\"2283\":1,\"2290\":1,\"2294\":1,\"2300\":1,\"2367\":1,\"2496\":1,\"2501\":1,\"2502\":1,\"2509\":1,\"2513\":1,\"2519\":1,\"2586\":1,\"2715\":1,\"2720\":1,\"2721\":1,\"2728\":1,\"2732\":1,\"2738\":1,\"2805\":1}}],[\"scalable\",{\"1\":{\"77\":1}}],[\"scales\",{\"1\":{\"94\":1}}],[\"scheme>\",{\"1\":{\"156\":1}}],[\"scheme\",{\"1\":{\"87\":1,\"156\":1,\"403\":1,\"614\":1,\"660\":1,\"706\":1,\"752\":1}}],[\"schemalocation=\",{\"1\":{\"158\":1,\"394\":1}}],[\"schema\",{\"1\":{\"87\":3}}],[\"schweizer\",{\"1\":{\"26\":3,\"79\":1}}],[\"scientific\",{\"1\":{\"74\":1}}],[\"science\",{\"1\":{\"73\":1}}],[\"sciences\",{\"0\":{\"73\":1},\"1\":{\"73\":1}}],[\"scenarios\",{\"1\":{\"5\":1}}],[\"src\",{\"1\":{\"22\":1,\"327\":3,\"328\":1}}],[\"spaces\",{\"1\":{\"155\":1}}],[\"space\",{\"1\":{\"155\":162,\"156\":2,\"217\":1,\"222\":1,\"223\":1,\"229\":1,\"233\":1,\"257\":1,\"261\":1,\"262\":1,\"874\":1,\"879\":1,\"880\":1,\"887\":1,\"891\":1,\"897\":1,\"964\":1,\"1056\":1,\"1061\":1,\"1062\":1,\"1066\":1,\"1070\":1,\"1071\":1,\"1125\":1,\"1207\":1,\"1212\":1,\"1213\":1,\"1217\":1,\"1221\":1,\"1222\":1,\"1264\":1,\"1379\":1,\"1384\":1,\"1385\":1,\"1392\":1,\"1396\":1,\"1398\":1,\"1440\":1,\"1556\":1,\"1561\":1,\"1562\":1,\"1569\":1,\"1573\":1,\"1575\":1,\"1617\":1,\"1733\":1,\"1738\":1,\"1739\":1,\"1746\":1,\"1750\":1,\"1752\":1,\"1794\":1,\"1910\":1,\"1915\":1,\"1916\":1,\"1923\":1,\"1927\":1,\"1929\":1,\"1971\":1,\"2087\":1,\"2092\":1,\"2093\":1,\"2100\":1,\"2104\":1,\"2106\":1,\"2148\":1,\"2277\":1,\"2282\":1,\"2283\":1,\"2290\":1,\"2294\":1,\"2300\":1,\"2367\":1,\"2496\":1,\"2501\":1,\"2502\":1,\"2509\":1,\"2513\":1,\"2519\":1,\"2586\":1,\"2715\":1,\"2720\":1,\"2721\":1,\"2728\":1,\"2732\":1,\"2738\":1,\"2805\":1}}],[\"spreadsheet\",{\"0\":{\"282\":1,\"293\":1},\"1\":{\"282\":2,\"293\":2}}],[\"sprechstunde\",{\"0\":{\"41\":1},\"1\":{\"14\":2,\"41\":3}}],[\"spring\",{\"1\":{\"143\":2,\"145\":1,\"146\":1,\"328\":6,\"342\":1,\"360\":1,\"386\":1}}],[\"speed\",{\"1\":{\"391\":1}}],[\"special\",{\"1\":{\"328\":1}}],[\"specifying\",{\"1\":{\"337\":1,\"355\":1,\"356\":1,\"381\":1,\"382\":1,\"806\":1,\"933\":1,\"1237\":1,\"1413\":1,\"1590\":1,\"1767\":1,\"1944\":1,\"2121\":1,\"2209\":1,\"2336\":1,\"2428\":1,\"2555\":1,\"2647\":1,\"2774\":1}}],[\"specify\",{\"1\":{\"272\":1,\"328\":4,\"330\":1,\"334\":1,\"337\":1,\"344\":1,\"345\":1,\"353\":1,\"519\":1,\"800\":1,\"825\":1,\"826\":1,\"827\":1,\"828\":1,\"903\":1,\"904\":3,\"917\":1,\"927\":1,\"985\":1,\"986\":1,\"987\":1,\"988\":1,\"994\":1,\"995\":1,\"996\":3,\"1009\":1,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":1,\"1137\":1,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":1,\"1231\":1,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":1,\"1294\":1,\"1295\":1,\"1296\":3,\"1308\":1,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":1,\"1407\":1,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":1,\"1470\":1,\"1471\":1,\"1472\":3,\"1485\":1,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":1,\"1584\":1,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":1,\"1647\":1,\"1648\":1,\"1649\":3,\"1662\":1,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":1,\"1761\":1,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":1,\"1824\":1,\"1825\":1,\"1826\":3,\"1839\":1,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":1,\"1938\":1,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":1,\"2001\":1,\"2002\":1,\"2003\":3,\"2016\":1,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":1,\"2115\":1,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":1,\"2178\":1,\"2179\":1,\"2180\":3,\"2193\":1,\"2203\":1,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":1,\"2306\":1,\"2307\":3,\"2320\":1,\"2330\":1,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":1,\"2397\":1,\"2398\":1,\"2399\":3,\"2412\":1,\"2422\":1,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":1,\"2525\":1,\"2526\":3,\"2539\":1,\"2549\":1,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":1,\"2616\":1,\"2617\":1,\"2618\":3,\"2631\":1,\"2641\":1,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":1,\"2744\":1,\"2745\":3,\"2758\":1,\"2768\":1,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":1,\"2835\":1,\"2836\":1,\"2837\":3,\"2850\":1}}],[\"specifies\",{\"1\":{\"328\":1,\"329\":1,\"352\":1,\"359\":1,\"385\":1,\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"specified\",{\"1\":{\"91\":2,\"273\":1,\"328\":1,\"334\":2,\"337\":1,\"348\":1,\"352\":2,\"353\":1,\"354\":1,\"355\":1,\"356\":1,\"357\":4,\"358\":2,\"378\":1,\"380\":1,\"381\":1,\"382\":1,\"383\":4,\"384\":2,\"798\":3,\"799\":1,\"800\":1,\"801\":2,\"802\":1,\"804\":1,\"811\":1,\"812\":1,\"814\":1,\"815\":1,\"816\":1,\"897\":1,\"918\":1,\"925\":3,\"926\":1,\"927\":1,\"928\":2,\"929\":1,\"931\":1,\"932\":2,\"964\":1,\"971\":1,\"972\":1,\"974\":1,\"975\":1,\"976\":1,\"1010\":1,\"1071\":1,\"1079\":1,\"1080\":1,\"1082\":1,\"1083\":1,\"1084\":1,\"1125\":1,\"1138\":1,\"1147\":1,\"1148\":1,\"1150\":1,\"1151\":1,\"1152\":1,\"1222\":1,\"1229\":3,\"1230\":1,\"1231\":1,\"1232\":2,\"1233\":1,\"1235\":1,\"1236\":2,\"1264\":1,\"1271\":1,\"1272\":1,\"1274\":1,\"1275\":1,\"1276\":1,\"1309\":1,\"1319\":1,\"1320\":1,\"1322\":1,\"1323\":1,\"1324\":1,\"1398\":1,\"1405\":3,\"1406\":1,\"1407\":1,\"1408\":2,\"1409\":1,\"1411\":1,\"1412\":2,\"1440\":1,\"1447\":1,\"1448\":1,\"1450\":1,\"1451\":1,\"1452\":1,\"1486\":1,\"1496\":1,\"1497\":1,\"1499\":1,\"1500\":1,\"1501\":1,\"1575\":1,\"1582\":3,\"1583\":1,\"1584\":1,\"1585\":2,\"1586\":1,\"1588\":1,\"1589\":2,\"1617\":1,\"1624\":1,\"1625\":1,\"1627\":1,\"1628\":1,\"1629\":1,\"1663\":1,\"1673\":1,\"1674\":1,\"1676\":1,\"1677\":1,\"1678\":1,\"1752\":1,\"1759\":3,\"1760\":1,\"1761\":1,\"1762\":2,\"1763\":1,\"1765\":1,\"1766\":2,\"1794\":1,\"1801\":1,\"1802\":1,\"1804\":1,\"1805\":1,\"1806\":1,\"1840\":1,\"1850\":1,\"1851\":1,\"1853\":1,\"1854\":1,\"1855\":1,\"1929\":1,\"1936\":3,\"1937\":1,\"1938\":1,\"1939\":2,\"1940\":1,\"1942\":1,\"1943\":2,\"1971\":1,\"1978\":1,\"1979\":1,\"1981\":1,\"1982\":1,\"1983\":1,\"2017\":1,\"2027\":1,\"2028\":1,\"2030\":1,\"2031\":1,\"2032\":1,\"2106\":1,\"2113\":3,\"2114\":1,\"2115\":1,\"2116\":2,\"2117\":1,\"2119\":1,\"2120\":2,\"2148\":1,\"2155\":1,\"2156\":1,\"2158\":1,\"2159\":1,\"2160\":1,\"2194\":1,\"2201\":3,\"2202\":1,\"2203\":1,\"2204\":2,\"2205\":1,\"2207\":1,\"2214\":1,\"2215\":1,\"2217\":1,\"2218\":1,\"2219\":1,\"2300\":1,\"2321\":1,\"2328\":3,\"2329\":1,\"2330\":1,\"2331\":2,\"2332\":1,\"2334\":1,\"2335\":2,\"2367\":1,\"2374\":1,\"2375\":1,\"2377\":1,\"2378\":1,\"2379\":1,\"2413\":1,\"2420\":3,\"2421\":1,\"2422\":1,\"2423\":2,\"2424\":1,\"2426\":1,\"2433\":1,\"2434\":1,\"2436\":1,\"2437\":1,\"2438\":1,\"2519\":1,\"2540\":1,\"2547\":3,\"2548\":1,\"2549\":1,\"2550\":2,\"2551\":1,\"2553\":1,\"2554\":2,\"2586\":1,\"2593\":1,\"2594\":1,\"2596\":1,\"2597\":1,\"2598\":1,\"2632\":1,\"2639\":3,\"2640\":1,\"2641\":1,\"2642\":2,\"2643\":1,\"2645\":1,\"2652\":1,\"2653\":1,\"2655\":1,\"2656\":1,\"2657\":1,\"2738\":1,\"2759\":1,\"2766\":3,\"2767\":1,\"2768\":1,\"2769\":2,\"2770\":1,\"2772\":1,\"2773\":2,\"2805\":1,\"2812\":1,\"2813\":1,\"2815\":1,\"2816\":1,\"2817\":1,\"2851\":1}}],[\"specification\",{\"1\":{\"143\":1,\"146\":1}}],[\"specifications\",{\"1\":{\"77\":1}}],[\"specific\",{\"1\":{\"113\":2,\"116\":1,\"123\":1,\"150\":1,\"300\":2,\"328\":1,\"334\":1,\"343\":1,\"344\":2,\"357\":4,\"358\":2,\"359\":2,\"363\":1,\"373\":1,\"383\":4,\"384\":2,\"385\":2,\"389\":1,\"403\":1,\"425\":1,\"430\":1,\"456\":1,\"479\":1,\"505\":1,\"519\":1,\"535\":1,\"560\":1,\"565\":1,\"590\":1,\"595\":1,\"614\":1,\"636\":1,\"641\":1,\"660\":1,\"682\":1,\"687\":1,\"706\":1,\"728\":1,\"733\":1,\"752\":1,\"774\":1,\"779\":1,\"798\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"speziellen\",{\"1\":{\"15\":1}}],[\"synthetic\",{\"1\":{\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1}}],[\"syntax\",{\"1\":{\"90\":1}}],[\"syntactically\",{\"1\":{\"0\":1,\"94\":1}}],[\"synchronized\",{\"1\":{\"106\":1,\"155\":3,\"161\":1}}],[\"systemctl\",{\"1\":{\"433\":2,\"459\":2,\"482\":2,\"508\":2,\"538\":2,\"568\":2,\"598\":2,\"644\":2,\"690\":2,\"736\":2,\"782\":2}}],[\"systematically\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"system32\",{\"1\":{\"396\":1}}],[\"systems\",{\"1\":{\"33\":1,\"35\":1,\"38\":1,\"74\":1,\"86\":1,\"90\":3,\"91\":1,\"94\":1,\"105\":1,\"123\":1,\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"system\",{\"1\":{\"16\":1,\"37\":1,\"90\":2,\"91\":1,\"95\":1,\"165\":1,\"285\":2,\"286\":2,\"296\":2,\"297\":2,\"391\":1,\"407\":1,\"438\":2,\"439\":2,\"464\":2,\"465\":2,\"487\":2,\"488\":2,\"513\":2,\"514\":2,\"543\":2,\"544\":2,\"573\":2,\"574\":2,\"603\":2,\"604\":2,\"618\":1,\"649\":2,\"650\":2,\"664\":1,\"695\":2,\"696\":2,\"710\":1,\"741\":2,\"742\":2,\"756\":1,\"787\":2,\"788\":2,\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"systeme\",{\"1\":{\"15\":1}}],[\"sixth\",{\"1\":{\"389\":1}}],[\"sid\",{\"1\":{\"359\":2,\"385\":2}}],[\"side\",{\"1\":{\"93\":3}}],[\"signing\",{\"1\":{\"271\":1,\"272\":1,\"916\":1,\"917\":1,\"1008\":1,\"1009\":1,\"1136\":1,\"1137\":1,\"1307\":1,\"1308\":1,\"1484\":1,\"1485\":1,\"1661\":1,\"1662\":1,\"1838\":1,\"1839\":1,\"2015\":1,\"2016\":1,\"2192\":1,\"2193\":1,\"2319\":1,\"2320\":1,\"2411\":1,\"2412\":1,\"2538\":1,\"2539\":1,\"2630\":1,\"2631\":1,\"2757\":1,\"2758\":1,\"2849\":1,\"2850\":1}}],[\"significant\",{\"1\":{\"123\":1,\"414\":1,\"625\":1,\"671\":1,\"717\":1,\"763\":1}}],[\"signed\",{\"1\":{\"220\":1,\"273\":1,\"279\":1,\"285\":2,\"290\":1,\"296\":2,\"433\":1,\"438\":2,\"459\":1,\"464\":2,\"482\":1,\"487\":2,\"508\":1,\"513\":2,\"538\":1,\"543\":2,\"568\":1,\"573\":2,\"598\":1,\"603\":2,\"644\":1,\"649\":2,\"690\":1,\"695\":2,\"736\":1,\"741\":2,\"782\":1,\"787\":2,\"877\":1,\"918\":1,\"1010\":1,\"1059\":1,\"1138\":1,\"1210\":1,\"1309\":1,\"1382\":1,\"1486\":1,\"1559\":1,\"1663\":1,\"1736\":1,\"1840\":1,\"1913\":1,\"2017\":1,\"2090\":1,\"2194\":1,\"2280\":1,\"2321\":1,\"2413\":1,\"2499\":1,\"2540\":1,\"2632\":1,\"2718\":1,\"2759\":1,\"2851\":1}}],[\"sign\",{\"1\":{\"156\":1,\"409\":1,\"620\":1,\"666\":1,\"712\":1,\"758\":1}}],[\"singleton\",{\"1\":{\"331\":1}}],[\"single\",{\"1\":{\"327\":2,\"334\":1,\"352\":1,\"464\":1,\"798\":2,\"799\":1,\"925\":2,\"926\":1,\"1229\":2,\"1230\":1,\"1262\":1,\"1405\":2,\"1406\":1,\"1582\":2,\"1583\":1,\"1759\":2,\"1760\":1,\"1936\":2,\"1937\":1,\"2113\":2,\"2114\":1,\"2201\":2,\"2202\":1,\"2328\":2,\"2329\":1,\"2420\":2,\"2421\":1,\"2547\":2,\"2548\":1,\"2639\":2,\"2640\":1,\"2766\":2,\"2767\":1}}],[\"since\",{\"1\":{\"125\":1,\"150\":1,\"153\":1,\"343\":1,\"409\":1,\"620\":1,\"666\":1,\"712\":1,\"758\":1}}],[\"sind\",{\"1\":{\"17\":1}}],[\"silent\",{\"1\":{\"98\":1}}],[\"sizes\",{\"1\":{\"123\":1}}],[\"size\",{\"1\":{\"95\":1,\"123\":1,\"155\":2,\"165\":1,\"260\":1,\"400\":1,\"611\":1,\"657\":1,\"703\":1,\"749\":1,\"884\":1,\"885\":2,\"886\":1,\"960\":1,\"1122\":1,\"1261\":1,\"1389\":1,\"1390\":2,\"1391\":1,\"1437\":1,\"1566\":1,\"1567\":2,\"1568\":1,\"1614\":1,\"1743\":1,\"1744\":2,\"1745\":1,\"1791\":1,\"1920\":1,\"1921\":2,\"1922\":1,\"1968\":1,\"2097\":1,\"2098\":2,\"2099\":1,\"2145\":1,\"2287\":1,\"2288\":2,\"2289\":1,\"2363\":1,\"2506\":1,\"2507\":2,\"2508\":1,\"2582\":1,\"2725\":1,\"2726\":2,\"2727\":1,\"2801\":1}}],[\"simulated\",{\"1\":{\"396\":1,\"399\":1}}],[\"simulate\",{\"1\":{\"395\":1}}],[\"simulating\",{\"1\":{\"327\":1}}],[\"simultaneously\",{\"1\":{\"86\":1}}],[\"simply\",{\"1\":{\"464\":1}}],[\"simple\",{\"0\":{\"316\":1,\"324\":1,\"325\":1},\"1\":{\"155\":4,\"316\":1,\"325\":2}}],[\"simplifier\",{\"1\":{\"281\":1,\"292\":1,\"435\":1,\"461\":1,\"484\":1,\"510\":1,\"540\":1,\"570\":1,\"600\":1,\"646\":1,\"692\":1,\"738\":1,\"784\":1}}],[\"simplifies\",{\"1\":{\"92\":1}}],[\"simplified\",{\"1\":{\"84\":1}}],[\"simplify\",{\"1\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"398\":1,\"423\":1,\"453\":1,\"476\":1,\"502\":1,\"528\":1,\"558\":1,\"588\":1,\"634\":1,\"680\":1,\"726\":1,\"772\":1}}],[\"similar\",{\"1\":{\"143\":2,\"144\":2}}],[\"simon\",{\"1\":{\"79\":2}}],[\"sicherzustellen\",{\"1\":{\"16\":1}}],[\"sich\",{\"1\":{\"14\":1,\"16\":2,\"22\":1}}],[\"sie\",{\"1\":{\"14\":1,\"16\":1,\"22\":2,\"41\":1}}],[\"sites\",{\"1\":{\"0\":1,\"8\":1,\"32\":2,\"84\":1,\"94\":1,\"122\":1}}],[\"site\",{\"1\":{\"0\":2,\"8\":2,\"13\":1,\"32\":2,\"124\":2,\"425\":1,\"560\":1,\"590\":1,\"636\":1,\"682\":1,\"728\":1,\"774\":1}}],[\"sort\",{\"1\":{\"152\":1,\"403\":1,\"614\":1,\"660\":1,\"706\":1,\"752\":1}}],[\"socket\",{\"1\":{\"105\":1,\"323\":6}}],[\"social\",{\"1\":{\"90\":1}}],[\"sources\",{\"1\":{\"279\":1,\"290\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"source\",{\"1\":{\"105\":1,\"112\":1,\"113\":1,\"155\":1,\"258\":1,\"281\":1,\"292\":1,\"300\":6,\"323\":22,\"391\":1,\"392\":1,\"435\":1,\"461\":1,\"484\":1,\"510\":1,\"540\":1,\"570\":1,\"600\":1,\"646\":1,\"692\":1,\"738\":1,\"784\":1,\"957\":1,\"1120\":1,\"1258\":1,\"1434\":1,\"1611\":1,\"1788\":1,\"1965\":1,\"2142\":1,\"2360\":1,\"2579\":1,\"2798\":1}}],[\"some\",{\"1\":{\"89\":1,\"93\":1,\"96\":1,\"166\":1,\"342\":3,\"359\":1,\"377\":1,\"385\":3,\"410\":1,\"411\":1,\"440\":2,\"442\":1,\"466\":2,\"489\":2,\"515\":2,\"545\":2,\"547\":1,\"575\":2,\"577\":1,\"605\":2,\"607\":1,\"621\":1,\"622\":1,\"651\":2,\"653\":1,\"667\":1,\"668\":1,\"697\":2,\"699\":1,\"713\":1,\"714\":1,\"743\":2,\"745\":1,\"759\":1,\"760\":1,\"789\":2,\"791\":1}}],[\"something\",{\"1\":{\"85\":1,\"413\":1,\"425\":1,\"441\":1,\"455\":1,\"467\":1,\"478\":1,\"490\":1,\"504\":1,\"516\":1,\"530\":1,\"546\":1,\"560\":1,\"576\":1,\"590\":1,\"606\":1,\"624\":1,\"636\":1,\"652\":1,\"670\":1,\"682\":1,\"698\":1,\"716\":1,\"728\":1,\"744\":1,\"762\":1,\"774\":1,\"790\":1}}],[\"so\",{\"1\":{\"77\":1,\"87\":1,\"123\":1,\"396\":1,\"407\":1,\"440\":1,\"466\":1,\"468\":1,\"489\":1,\"491\":1,\"515\":1,\"517\":1,\"545\":1,\"575\":1,\"605\":1,\"618\":1,\"651\":1,\"664\":1,\"697\":1,\"710\":1,\"743\":1,\"756\":1,\"789\":1,\"798\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"software\",{\"1\":{\"35\":2,\"112\":1,\"114\":1,\"315\":1,\"390\":1,\"393\":1}}],[\"solve\",{\"1\":{\"315\":1,\"377\":1,\"390\":1}}],[\"solved\",{\"1\":{\"94\":1}}],[\"sollten\",{\"1\":{\"15\":1}}],[\"solutions\",{\"1\":{\"78\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"solution\",{\"0\":{\"332\":1,\"346\":1,\"361\":1,\"371\":1,\"387\":1},\"1\":{\"6\":1,\"314\":1,\"327\":1}}],[\"sowie\",{\"1\":{\"14\":1}}],[\"soon\",{\"0\":{\"2\":1,\"83\":1},\"1\":{\"67\":1}}],[\"s\",{\"1\":{\"5\":1,\"26\":5,\"37\":1,\"40\":1,\"68\":1,\"71\":1,\"73\":1,\"86\":1,\"113\":1,\"143\":1,\"220\":2,\"221\":1,\"229\":1,\"279\":1,\"285\":1,\"286\":1,\"290\":1,\"296\":1,\"297\":1,\"329\":1,\"338\":1,\"342\":1,\"370\":1,\"393\":1,\"404\":1,\"411\":4,\"413\":3,\"414\":1,\"439\":1,\"464\":1,\"465\":1,\"488\":1,\"514\":1,\"544\":1,\"574\":1,\"604\":1,\"615\":1,\"622\":4,\"624\":3,\"625\":1,\"650\":1,\"661\":1,\"668\":4,\"670\":3,\"671\":1,\"696\":1,\"707\":1,\"714\":4,\"716\":3,\"717\":1,\"742\":1,\"753\":1,\"760\":4,\"762\":3,\"763\":1,\"788\":1,\"877\":2,\"878\":1,\"887\":1,\"932\":1,\"1059\":2,\"1060\":1,\"1066\":1,\"1210\":2,\"1211\":1,\"1217\":1,\"1236\":1,\"1382\":2,\"1383\":1,\"1392\":1,\"1412\":1,\"1559\":2,\"1560\":1,\"1569\":1,\"1589\":1,\"1736\":2,\"1737\":1,\"1746\":1,\"1766\":1,\"1913\":2,\"1914\":1,\"1923\":1,\"1943\":1,\"2090\":2,\"2091\":1,\"2100\":1,\"2120\":1,\"2280\":2,\"2281\":1,\"2290\":1,\"2335\":1,\"2499\":2,\"2500\":1,\"2509\":1,\"2554\":1,\"2718\":2,\"2719\":1,\"2728\":1,\"2773\":1}}],[\"suggest\",{\"1\":{\"415\":2,\"626\":2,\"672\":2,\"718\":2,\"764\":2}}],[\"suggestions\",{\"1\":{\"413\":1,\"415\":2,\"624\":1,\"626\":2,\"670\":1,\"672\":2,\"716\":1,\"718\":2,\"762\":1,\"764\":2}}],[\"suggestion\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"suspend=n\",{\"1\":{\"323\":6}}],[\"sustainable\",{\"1\":{\"113\":1}}],[\"sudo\",{\"1\":{\"279\":8,\"285\":4,\"286\":4,\"290\":8,\"296\":4,\"297\":4,\"299\":5,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"429\":4,\"433\":8,\"438\":3,\"439\":3,\"444\":1,\"445\":1,\"459\":8,\"464\":3,\"465\":3,\"482\":8,\"487\":3,\"488\":3,\"493\":1,\"494\":1,\"508\":8,\"513\":3,\"514\":3,\"519\":1,\"520\":1,\"538\":8,\"543\":3,\"544\":3,\"549\":1,\"550\":1,\"568\":8,\"573\":3,\"574\":3,\"579\":1,\"580\":1,\"598\":8,\"603\":3,\"604\":3,\"609\":1,\"610\":1,\"644\":8,\"649\":3,\"650\":3,\"655\":1,\"656\":1,\"690\":8,\"695\":3,\"696\":3,\"701\":1,\"702\":1,\"736\":8,\"741\":3,\"742\":3,\"747\":1,\"748\":1,\"778\":4,\"782\":8,\"787\":3,\"788\":3,\"793\":1,\"794\":1}}],[\"suitable\",{\"1\":{\"276\":1,\"287\":1}}],[\"suing\",{\"1\":{\"39\":1}}],[\"superclass\",{\"1\":{\"155\":1}}],[\"superinterfaces\",{\"1\":{\"155\":4}}],[\"supply\",{\"1\":{\"148\":1,\"149\":1}}],[\"supporting\",{\"1\":{\"148\":1}}],[\"supports\",{\"1\":{\"91\":1,\"902\":1,\"993\":1,\"1293\":1,\"1469\":1,\"1646\":1,\"1823\":1,\"2000\":1,\"2177\":1,\"2305\":1,\"2396\":1,\"2524\":1,\"2615\":1,\"2743\":1,\"2834\":1}}],[\"supported\",{\"1\":{\"77\":1,\"106\":1,\"161\":1,\"217\":1,\"222\":1,\"223\":1,\"229\":1,\"233\":1,\"257\":1,\"261\":1,\"262\":1,\"442\":1,\"468\":1,\"491\":1,\"517\":1,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"791\":1,\"874\":1,\"879\":1,\"880\":1,\"887\":1,\"891\":1,\"896\":1,\"897\":1,\"902\":1,\"963\":1,\"964\":1,\"993\":1,\"1056\":1,\"1061\":1,\"1062\":1,\"1066\":1,\"1070\":1,\"1071\":1,\"1125\":1,\"1207\":1,\"1212\":1,\"1213\":1,\"1217\":1,\"1221\":1,\"1222\":1,\"1264\":1,\"1293\":1,\"1379\":1,\"1384\":1,\"1385\":1,\"1392\":1,\"1396\":1,\"1398\":1,\"1440\":1,\"1469\":1,\"1556\":1,\"1561\":1,\"1562\":1,\"1569\":1,\"1573\":1,\"1575\":1,\"1617\":1,\"1646\":1,\"1733\":1,\"1738\":1,\"1739\":1,\"1746\":1,\"1750\":1,\"1752\":1,\"1794\":1,\"1823\":1,\"1910\":1,\"1915\":1,\"1916\":1,\"1923\":1,\"1927\":1,\"1929\":1,\"1971\":1,\"2000\":1,\"2087\":1,\"2092\":1,\"2093\":1,\"2100\":1,\"2104\":1,\"2106\":1,\"2148\":1,\"2177\":1,\"2277\":1,\"2282\":1,\"2283\":1,\"2290\":1,\"2294\":1,\"2299\":1,\"2300\":1,\"2305\":1,\"2366\":1,\"2367\":1,\"2396\":1,\"2496\":1,\"2501\":1,\"2502\":1,\"2509\":1,\"2513\":1,\"2518\":1,\"2519\":1,\"2524\":1,\"2585\":1,\"2586\":1,\"2615\":1,\"2715\":1,\"2720\":1,\"2721\":1,\"2728\":1,\"2732\":1,\"2737\":1,\"2738\":1,\"2743\":1,\"2804\":1,\"2805\":1,\"2834\":1}}],[\"support\",{\"0\":{\"71\":1},\"1\":{\"0\":2,\"6\":1,\"12\":1,\"32\":2,\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"400\":1,\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"520\":1,\"545\":1,\"575\":1,\"605\":1,\"611\":1,\"651\":1,\"657\":1,\"697\":1,\"703\":1,\"743\":1,\"749\":1,\"789\":1,\"805\":1,\"2208\":1,\"2427\":1,\"2646\":1}}],[\"success\",{\"1\":{\"377\":1,\"414\":1,\"415\":1,\"625\":1,\"626\":1,\"671\":1,\"672\":1,\"717\":1,\"718\":1,\"763\":1,\"764\":1}}],[\"successfully\",{\"1\":{\"334\":3,\"348\":3,\"363\":5,\"373\":5,\"389\":7}}],[\"successful\",{\"1\":{\"122\":1,\"124\":1,\"333\":1,\"347\":1,\"362\":1,\"372\":1,\"388\":1,\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"651\":1,\"697\":1,\"743\":1,\"789\":1}}],[\"such\",{\"1\":{\"6\":1,\"86\":1,\"90\":1,\"91\":2,\"94\":2,\"112\":2,\"113\":4,\"122\":1,\"337\":1}}],[\"sufficient\",{\"1\":{\"94\":1,\"123\":1}}],[\"subset\",{\"1\":{\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2328\":1,\"2547\":1,\"2766\":1}}],[\"subscription\",{\"0\":{\"202\":1,\"205\":1,\"206\":1,\"207\":1,\"860\":1,\"862\":1,\"863\":1,\"864\":1,\"1041\":1,\"1044\":1,\"1045\":1,\"1046\":1,\"1192\":1,\"1195\":1,\"1196\":1,\"1197\":1,\"1365\":1,\"1367\":1,\"1368\":1,\"1369\":1,\"1542\":1,\"1544\":1,\"1545\":1,\"1546\":1,\"1719\":1,\"1721\":1,\"1722\":1,\"1723\":1,\"1896\":1,\"1898\":1,\"1899\":1,\"1900\":1,\"2073\":1,\"2075\":1,\"2076\":1,\"2077\":1,\"2263\":1,\"2265\":1,\"2266\":1,\"2267\":1,\"2482\":1,\"2484\":1,\"2485\":1,\"2486\":1,\"2701\":1,\"2703\":1,\"2704\":1,\"2705\":1},\"1\":{\"86\":1,\"93\":1,\"202\":2,\"205\":1,\"206\":1,\"207\":2,\"286\":1,\"297\":1,\"439\":1,\"465\":1,\"488\":1,\"514\":1,\"544\":1,\"574\":1,\"604\":1,\"650\":1,\"696\":1,\"742\":1,\"788\":1,\"860\":2,\"862\":1,\"863\":1,\"864\":2,\"1041\":2,\"1044\":1,\"1045\":1,\"1046\":2,\"1192\":2,\"1195\":1,\"1196\":1,\"1197\":2,\"1365\":2,\"1367\":1,\"1368\":1,\"1369\":2,\"1542\":2,\"1544\":1,\"1545\":1,\"1546\":2,\"1719\":2,\"1721\":1,\"1722\":1,\"1723\":2,\"1896\":2,\"1898\":1,\"1899\":1,\"1900\":2,\"2073\":2,\"2075\":1,\"2076\":1,\"2077\":2,\"2263\":2,\"2265\":1,\"2266\":1,\"2267\":2,\"2482\":2,\"2484\":1,\"2485\":1,\"2486\":2,\"2701\":2,\"2703\":1,\"2704\":1,\"2705\":2}}],[\"sub\",{\"1\":{\"354\":1,\"380\":1,\"897\":1,\"964\":1,\"1071\":1,\"1125\":1,\"1222\":1,\"1264\":1,\"1398\":1,\"1440\":1,\"1575\":1,\"1617\":1,\"1752\":1,\"1794\":1,\"1929\":1,\"1971\":1,\"2106\":1,\"2148\":1,\"2300\":1,\"2367\":1,\"2519\":1,\"2586\":1,\"2738\":1,\"2805\":1}}],[\"submodule\",{\"1\":{\"342\":1}}],[\"submitting\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"submit\",{\"1\":{\"94\":1,\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"subnet\",{\"1\":{\"323\":3}}],[\"subject\",{\"1\":{\"108\":1,\"163\":1,\"801\":2,\"928\":2,\"1232\":2,\"1408\":2,\"1585\":2,\"1762\":2,\"1939\":2,\"2116\":2,\"2204\":2,\"2331\":2,\"2423\":2,\"2550\":2,\"2642\":2,\"2769\":2}}],[\"subprocess\",{\"1\":{\"101\":1,\"102\":1,\"103\":1}}],[\"subprocesses\",{\"1\":{\"100\":1}}],[\"sure\",{\"1\":{\"81\":1,\"130\":1,\"131\":1,\"300\":3,\"303\":3,\"306\":1,\"334\":1,\"386\":1,\"407\":1,\"429\":1,\"618\":1,\"664\":1,\"710\":1,\"756\":1,\"778\":1}}],[\"summary\",{\"1\":{\"5\":1}}],[\"shutdown\",{\"1\":{\"442\":1,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"791\":1}}],[\"shut\",{\"1\":{\"442\":1,\"468\":1,\"491\":1,\"517\":1,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"791\":1}}],[\"ship\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"shell\",{\"1\":{\"323\":1}}],[\"sha\",{\"1\":{\"285\":3,\"296\":3,\"438\":1,\"464\":2,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1,\"798\":2,\"800\":1,\"925\":2,\"927\":1,\"959\":1,\"1229\":2,\"1231\":1,\"1260\":1,\"1405\":2,\"1407\":1,\"1436\":1,\"1582\":2,\"1584\":1,\"1613\":1,\"1759\":2,\"1761\":1,\"1790\":1,\"1936\":2,\"1938\":1,\"1967\":1,\"2113\":2,\"2115\":1,\"2144\":1,\"2201\":2,\"2203\":1,\"2328\":2,\"2330\":1,\"2362\":1,\"2420\":2,\"2422\":1,\"2547\":2,\"2549\":1,\"2581\":1,\"2639\":2,\"2641\":1,\"2766\":2,\"2768\":1,\"2800\":1}}],[\"sha512\",{\"1\":{\"261\":1,\"262\":1}}],[\"sharpen\",{\"1\":{\"401\":1,\"612\":1,\"658\":1,\"704\":1,\"750\":1}}],[\"share\",{\"0\":{\"71\":1},\"1\":{\"71\":1,\"94\":1,\"125\":1,\"279\":2,\"290\":2,\"400\":1,\"415\":3,\"433\":2,\"459\":2,\"482\":2,\"508\":2,\"538\":2,\"568\":2,\"598\":2,\"611\":1,\"626\":3,\"644\":2,\"657\":1,\"672\":3,\"690\":2,\"703\":1,\"718\":3,\"736\":2,\"749\":1,\"764\":3,\"782\":2}}],[\"shared\",{\"1\":{\"5\":1,\"8\":1,\"90\":1,\"257\":1}}],[\"sharing\",{\"0\":{\"0\":1,\"8\":1,\"22\":1,\"77\":1},\"1\":{\"0\":3,\"1\":1,\"5\":1,\"6\":2,\"8\":2,\"10\":1,\"12\":2,\"14\":3,\"15\":1,\"17\":3,\"20\":1,\"22\":1,\"26\":5,\"28\":1,\"29\":2,\"30\":2,\"32\":2,\"40\":1,\"42\":2,\"44\":2,\"46\":2,\"48\":2,\"50\":2,\"52\":2,\"54\":2,\"56\":2,\"58\":2,\"60\":2,\"62\":2,\"72\":1,\"84\":1,\"93\":1,\"94\":2,\"95\":1,\"105\":1,\"112\":1,\"113\":2,\"114\":2,\"126\":1,\"165\":1,\"286\":1,\"300\":2,\"303\":2,\"314\":1,\"400\":2,\"401\":1,\"412\":1,\"413\":2,\"415\":1,\"427\":1,\"429\":4,\"611\":2,\"612\":1,\"623\":1,\"624\":2,\"626\":1,\"657\":2,\"658\":1,\"669\":1,\"670\":2,\"672\":1,\"703\":2,\"704\":1,\"715\":1,\"716\":2,\"718\":1,\"731\":2,\"749\":2,\"750\":1,\"761\":1,\"762\":2,\"764\":1,\"776\":1,\"778\":4}}],[\"sh\",{\"1\":{\"131\":1,\"323\":2}}],[\"shown\",{\"1\":{\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2328\":1,\"2547\":1,\"2766\":1}}],[\"show\",{\"1\":{\"369\":1,\"411\":2,\"425\":1,\"430\":1,\"456\":1,\"479\":1,\"505\":1,\"535\":1,\"560\":1,\"565\":1,\"590\":1,\"595\":1,\"622\":2,\"636\":1,\"641\":1,\"668\":2,\"682\":1,\"687\":1,\"714\":2,\"728\":1,\"733\":1,\"760\":2,\"774\":1,\"779\":1}}],[\"showing\",{\"1\":{\"334\":3,\"348\":2,\"363\":1,\"389\":2}}],[\"shows\",{\"1\":{\"84\":1,\"100\":1,\"158\":1,\"316\":1,\"319\":1,\"325\":1,\"350\":1,\"352\":1,\"377\":1,\"394\":1,\"798\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"shortest\",{\"1\":{\"204\":1,\"259\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"424\":1,\"438\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"559\":1,\"573\":1,\"589\":1,\"603\":1,\"635\":1,\"649\":1,\"681\":1,\"695\":1,\"727\":1,\"741\":1,\"773\":1,\"787\":1,\"958\":1,\"1043\":1,\"1121\":1,\"1194\":1,\"1259\":1,\"1435\":1,\"1612\":1,\"1789\":1,\"1966\":1,\"2143\":1,\"2361\":1,\"2580\":1,\"2799\":1}}],[\"should\",{\"1\":{\"12\":1,\"33\":1,\"102\":1,\"153\":2,\"180\":1,\"181\":1,\"182\":1,\"229\":1,\"233\":1,\"281\":1,\"286\":1,\"292\":1,\"297\":1,\"299\":1,\"300\":2,\"303\":2,\"306\":2,\"309\":2,\"312\":2,\"328\":1,\"334\":5,\"343\":1,\"345\":1,\"348\":1,\"352\":1,\"355\":1,\"356\":1,\"363\":4,\"367\":1,\"370\":1,\"381\":1,\"382\":1,\"389\":5,\"411\":1,\"435\":1,\"439\":1,\"440\":1,\"445\":2,\"461\":1,\"465\":1,\"466\":1,\"484\":1,\"488\":1,\"489\":1,\"494\":2,\"510\":1,\"514\":1,\"515\":1,\"520\":2,\"540\":1,\"544\":1,\"545\":1,\"550\":2,\"570\":1,\"574\":1,\"575\":1,\"580\":2,\"600\":1,\"604\":1,\"605\":1,\"610\":2,\"622\":1,\"646\":1,\"650\":1,\"651\":1,\"656\":2,\"668\":1,\"692\":1,\"696\":1,\"697\":1,\"702\":2,\"714\":1,\"738\":1,\"742\":1,\"743\":1,\"748\":2,\"760\":1,\"784\":1,\"788\":1,\"789\":1,\"794\":2,\"798\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"887\":1,\"891\":1,\"925\":1,\"953\":1,\"954\":1,\"955\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1066\":1,\"1070\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1217\":1,\"1221\":1,\"1229\":1,\"1262\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1392\":1,\"1396\":1,\"1405\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1569\":1,\"1573\":1,\"1582\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1746\":1,\"1750\":1,\"1759\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1923\":1,\"1927\":1,\"1936\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2100\":1,\"2104\":1,\"2113\":1,\"2201\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2290\":1,\"2294\":1,\"2328\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2420\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2509\":1,\"2513\":1,\"2547\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2639\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2728\":1,\"2732\":1,\"2766\":1,\"2794\":1,\"2795\":1,\"2796\":1}}],[\"shti230921\",{\"1\":{\"26\":1}}],[\"shti230113\",{\"1\":{\"26\":1}}],[\"shti230066\",{\"1\":{\"1\":1,\"26\":1}}],[\"shti220802\",{\"1\":{\"26\":1}}],[\"shti220554\",{\"1\":{\"26\":1}}],[\"shti210548\",{\"1\":{\"26\":1}}],[\"shti210062\",{\"1\":{\"26\":1}}],[\"shti210061\",{\"1\":{\"26\":1}}],[\"shti210060\",{\"1\":{\"26\":1}}],[\"session\",{\"1\":{\"440\":2,\"466\":2,\"489\":2,\"515\":2,\"545\":2,\"575\":2,\"605\":2,\"651\":2,\"697\":2,\"743\":2,\"789\":2}}],[\"sensitive\",{\"1\":{\"412\":2,\"623\":2,\"669\":2,\"715\":2,\"761\":2}}],[\"sent\",{\"1\":{\"386\":1,\"389\":1}}],[\"sending\",{\"1\":{\"341\":1,\"343\":1,\"350\":1,\"352\":1,\"379\":1,\"389\":1}}],[\"sendtestmailonstartup\",{\"0\":{\"219\":1,\"876\":1,\"1058\":1,\"1209\":1,\"1381\":1,\"1558\":1,\"1735\":1,\"1912\":1,\"2089\":1,\"2279\":1,\"2498\":1,\"2717\":1},\"1\":{\"219\":1,\"876\":1,\"1058\":1,\"1209\":1,\"1381\":1,\"1558\":1,\"1735\":1,\"1912\":1,\"2089\":1,\"2279\":1,\"2498\":1,\"2717\":1}}],[\"sendmailonerrorlogevent\",{\"0\":{\"218\":1,\"875\":1,\"1057\":1,\"1208\":1,\"1380\":1,\"1557\":1,\"1734\":1,\"1911\":1,\"2088\":1,\"2278\":1,\"2497\":1,\"2716\":1},\"1\":{\"218\":1,\"875\":1,\"1057\":1,\"1208\":1,\"1380\":1,\"1557\":1,\"1734\":1,\"1911\":1,\"2088\":1,\"2278\":1,\"2497\":1,\"2716\":1}}],[\"sender\",{\"1\":{\"211\":2,\"868\":2,\"1050\":2,\"1201\":2,\"1373\":2,\"1550\":2,\"1727\":2,\"1904\":2,\"2081\":2,\"2271\":2,\"2490\":2,\"2709\":2}}],[\"sends\",{\"1\":{\"93\":1,\"134\":1}}],[\"send\",{\"1\":{\"37\":1,\"40\":1,\"93\":2,\"102\":1,\"103\":2,\"126\":1,\"213\":1,\"214\":1,\"218\":1,\"219\":1,\"220\":1,\"272\":1,\"282\":1,\"293\":1,\"352\":2,\"363\":1,\"377\":1,\"379\":1,\"386\":2,\"389\":4,\"870\":1,\"871\":1,\"875\":1,\"876\":1,\"877\":1,\"917\":1,\"1009\":1,\"1052\":1,\"1053\":1,\"1057\":1,\"1058\":1,\"1059\":1,\"1137\":1,\"1203\":1,\"1204\":1,\"1208\":1,\"1209\":1,\"1210\":1,\"1308\":1,\"1375\":1,\"1376\":1,\"1380\":1,\"1381\":1,\"1382\":1,\"1485\":1,\"1552\":1,\"1553\":1,\"1557\":1,\"1558\":1,\"1559\":1,\"1662\":1,\"1729\":1,\"1730\":1,\"1734\":1,\"1735\":1,\"1736\":1,\"1839\":1,\"1906\":1,\"1907\":1,\"1911\":1,\"1912\":1,\"1913\":1,\"2016\":1,\"2083\":1,\"2084\":1,\"2088\":1,\"2089\":1,\"2090\":1,\"2193\":1,\"2273\":1,\"2274\":1,\"2278\":1,\"2279\":1,\"2280\":1,\"2320\":1,\"2412\":1,\"2492\":1,\"2493\":1,\"2497\":1,\"2498\":1,\"2499\":1,\"2539\":1,\"2631\":1,\"2711\":1,\"2712\":1,\"2716\":1,\"2717\":1,\"2718\":1,\"2758\":1,\"2850\":1}}],[\"sequence\",{\"1\":{\"367\":3,\"370\":2}}],[\"self\",{\"1\":{\"273\":1,\"918\":1,\"1010\":1,\"1138\":1,\"1309\":1,\"1486\":1,\"1663\":1,\"1840\":1,\"2017\":1,\"2194\":1,\"2321\":1,\"2413\":1,\"2540\":1,\"2632\":1,\"2759\":1,\"2851\":1}}],[\"selector\",{\"1\":{\"155\":1}}],[\"selected\",{\"1\":{\"102\":2}}],[\"select\",{\"1\":{\"102\":1,\"403\":2,\"455\":1,\"478\":1,\"504\":1,\"530\":1,\"614\":2,\"660\":2,\"706\":2,\"752\":2}}],[\"separate\",{\"1\":{\"314\":1,\"327\":2}}],[\"separated\",{\"1\":{\"217\":1,\"222\":1,\"223\":1,\"229\":1,\"233\":1,\"257\":1,\"261\":1,\"262\":1,\"285\":2,\"296\":2,\"874\":1,\"879\":1,\"880\":1,\"887\":1,\"891\":1,\"897\":1,\"964\":1,\"1056\":1,\"1061\":1,\"1062\":1,\"1066\":1,\"1070\":1,\"1071\":1,\"1125\":1,\"1207\":1,\"1212\":1,\"1213\":1,\"1217\":1,\"1221\":1,\"1222\":1,\"1264\":1,\"1379\":1,\"1384\":1,\"1385\":1,\"1392\":1,\"1396\":1,\"1398\":1,\"1440\":1,\"1556\":1,\"1561\":1,\"1562\":1,\"1569\":1,\"1573\":1,\"1575\":1,\"1617\":1,\"1733\":1,\"1738\":1,\"1739\":1,\"1746\":1,\"1750\":1,\"1752\":1,\"1794\":1,\"1910\":1,\"1915\":1,\"1916\":1,\"1923\":1,\"1927\":1,\"1929\":1,\"1971\":1,\"2087\":1,\"2092\":1,\"2093\":1,\"2100\":1,\"2104\":1,\"2106\":1,\"2148\":1,\"2277\":1,\"2282\":1,\"2283\":1,\"2290\":1,\"2294\":1,\"2300\":1,\"2367\":1,\"2496\":1,\"2501\":1,\"2502\":1,\"2509\":1,\"2513\":1,\"2519\":1,\"2586\":1,\"2715\":1,\"2720\":1,\"2721\":1,\"2728\":1,\"2732\":1,\"2738\":1,\"2805\":1}}],[\"separates\",{\"1\":{\"94\":1}}],[\"semicolon\",{\"1\":{\"155\":5}}],[\"semantic\",{\"1\":{\"90\":1}}],[\"semantically\",{\"1\":{\"0\":1,\"94\":1}}],[\"seasoned\",{\"1\":{\"414\":1,\"625\":1,\"671\":1,\"717\":1,\"763\":1}}],[\"searching\",{\"1\":{\"260\":1,\"960\":1,\"1122\":1,\"1261\":1,\"1437\":1,\"1614\":1,\"1791\":1,\"1968\":1,\"2145\":1,\"2363\":1,\"2582\":1,\"2801\":1}}],[\"searches\",{\"1\":{\"148\":1,\"149\":1,\"328\":1,\"342\":1}}],[\"search\",{\"0\":{\"202\":1,\"207\":1,\"860\":1,\"864\":1,\"1041\":1,\"1046\":1,\"1192\":1,\"1197\":1,\"1365\":1,\"1369\":1,\"1542\":1,\"1546\":1,\"1719\":1,\"1723\":1,\"1896\":1,\"1900\":1,\"2073\":1,\"2077\":1,\"2263\":1,\"2267\":1,\"2482\":1,\"2486\":1,\"2701\":1,\"2705\":1},\"1\":{\"143\":8,\"146\":1,\"147\":1,\"202\":1,\"207\":1,\"860\":1,\"864\":1,\"925\":1,\"931\":1,\"933\":3,\"1041\":1,\"1046\":1,\"1192\":1,\"1197\":1,\"1229\":1,\"1235\":1,\"1237\":3,\"1365\":1,\"1369\":1,\"1405\":1,\"1411\":1,\"1413\":3,\"1542\":1,\"1546\":1,\"1582\":1,\"1588\":1,\"1590\":3,\"1719\":1,\"1723\":1,\"1759\":1,\"1765\":1,\"1767\":3,\"1896\":1,\"1900\":1,\"1936\":1,\"1942\":1,\"1944\":3,\"2073\":1,\"2077\":1,\"2113\":1,\"2119\":1,\"2121\":3,\"2263\":1,\"2267\":1,\"2328\":1,\"2334\":1,\"2336\":3,\"2482\":1,\"2486\":1,\"2547\":1,\"2553\":1,\"2555\":3,\"2701\":1,\"2705\":1,\"2766\":1,\"2772\":1,\"2774\":3}}],[\"seamless\",{\"1\":{\"90\":1,\"91\":1}}],[\"seamlessly\",{\"1\":{\"90\":1}}],[\"several\",{\"1\":{\"94\":1,\"98\":1,\"314\":1,\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"secrets\",{\"1\":{\"171\":1,\"175\":1,\"178\":1,\"183\":1,\"184\":1,\"185\":1,\"201\":1,\"208\":1,\"209\":1,\"210\":1,\"220\":1,\"221\":1,\"224\":1,\"237\":1,\"238\":1,\"239\":1,\"245\":1,\"247\":1,\"251\":1,\"253\":1,\"271\":1,\"272\":1,\"273\":1,\"274\":1,\"275\":1,\"285\":9,\"286\":8,\"296\":9,\"297\":8,\"323\":76,\"438\":11,\"439\":7,\"464\":11,\"465\":7,\"487\":11,\"488\":7,\"513\":11,\"514\":7,\"543\":11,\"544\":7,\"573\":11,\"574\":7,\"603\":11,\"604\":7,\"649\":11,\"650\":7,\"695\":11,\"696\":7,\"741\":11,\"742\":7,\"787\":11,\"788\":7,\"817\":1,\"818\":1,\"819\":1,\"822\":1,\"824\":1,\"834\":1,\"838\":1,\"841\":1,\"850\":1,\"851\":1,\"852\":1,\"859\":1,\"865\":1,\"866\":1,\"867\":1,\"877\":1,\"878\":1,\"881\":1,\"905\":4,\"916\":1,\"917\":1,\"918\":1,\"919\":1,\"920\":1,\"935\":1,\"936\":1,\"937\":1,\"940\":1,\"944\":1,\"948\":1,\"950\":1,\"977\":1,\"978\":1,\"979\":1,\"982\":1,\"984\":1,\"997\":4,\"1008\":1,\"1009\":1,\"1010\":1,\"1011\":1,\"1012\":1,\"1019\":1,\"1023\":1,\"1026\":1,\"1031\":1,\"1032\":1,\"1033\":1,\"1040\":1,\"1047\":1,\"1048\":1,\"1049\":1,\"1059\":1,\"1060\":1,\"1063\":1,\"1085\":1,\"1086\":1,\"1087\":1,\"1090\":1,\"1092\":1,\"1101\":1,\"1102\":1,\"1103\":1,\"1106\":1,\"1110\":1,\"1114\":1,\"1116\":1,\"1136\":1,\"1137\":1,\"1138\":1,\"1139\":1,\"1140\":1,\"1153\":1,\"1154\":1,\"1155\":1,\"1158\":1,\"1160\":1,\"1170\":1,\"1174\":1,\"1177\":1,\"1182\":1,\"1183\":1,\"1184\":1,\"1191\":1,\"1198\":1,\"1199\":1,\"1200\":1,\"1210\":1,\"1211\":1,\"1214\":1,\"1239\":1,\"1240\":1,\"1241\":1,\"1244\":1,\"1248\":1,\"1252\":1,\"1254\":1,\"1277\":1,\"1278\":1,\"1279\":1,\"1282\":1,\"1284\":1,\"1297\":4,\"1307\":1,\"1308\":1,\"1309\":1,\"1310\":1,\"1311\":1,\"1325\":1,\"1326\":1,\"1327\":1,\"1330\":1,\"1332\":1,\"1342\":1,\"1346\":1,\"1349\":1,\"1355\":1,\"1356\":1,\"1357\":1,\"1364\":1,\"1370\":1,\"1371\":1,\"1372\":1,\"1382\":1,\"1383\":1,\"1386\":1,\"1415\":1,\"1416\":1,\"1417\":1,\"1420\":1,\"1424\":1,\"1428\":1,\"1430\":1,\"1453\":1,\"1454\":1,\"1455\":1,\"1458\":1,\"1460\":1,\"1473\":4,\"1484\":1,\"1485\":1,\"1486\":1,\"1487\":1,\"1488\":1,\"1502\":1,\"1503\":1,\"1504\":1,\"1507\":1,\"1509\":1,\"1519\":1,\"1523\":1,\"1526\":1,\"1532\":1,\"1533\":1,\"1534\":1,\"1541\":1,\"1547\":1,\"1548\":1,\"1549\":1,\"1559\":1,\"1560\":1,\"1563\":1,\"1592\":1,\"1593\":1,\"1594\":1,\"1597\":1,\"1601\":1,\"1605\":1,\"1607\":1,\"1630\":1,\"1631\":1,\"1632\":1,\"1635\":1,\"1637\":1,\"1650\":4,\"1661\":1,\"1662\":1,\"1663\":1,\"1664\":1,\"1665\":1,\"1679\":1,\"1680\":1,\"1681\":1,\"1684\":1,\"1686\":1,\"1696\":1,\"1700\":1,\"1703\":1,\"1709\":1,\"1710\":1,\"1711\":1,\"1718\":1,\"1724\":1,\"1725\":1,\"1726\":1,\"1736\":1,\"1737\":1,\"1740\":1,\"1769\":1,\"1770\":1,\"1771\":1,\"1774\":1,\"1778\":1,\"1782\":1,\"1784\":1,\"1807\":1,\"1808\":1,\"1809\":1,\"1812\":1,\"1814\":1,\"1827\":4,\"1838\":1,\"1839\":1,\"1840\":1,\"1841\":1,\"1842\":1,\"1856\":1,\"1857\":1,\"1858\":1,\"1861\":1,\"1863\":1,\"1873\":1,\"1877\":1,\"1880\":1,\"1886\":1,\"1887\":1,\"1888\":1,\"1895\":1,\"1901\":1,\"1902\":1,\"1903\":1,\"1913\":1,\"1914\":1,\"1917\":1,\"1946\":1,\"1947\":1,\"1948\":1,\"1951\":1,\"1955\":1,\"1959\":1,\"1961\":1,\"1984\":1,\"1985\":1,\"1986\":1,\"1989\":1,\"1991\":1,\"2004\":4,\"2015\":1,\"2016\":1,\"2017\":1,\"2018\":1,\"2019\":1,\"2033\":1,\"2034\":1,\"2035\":1,\"2038\":1,\"2040\":1,\"2050\":1,\"2054\":1,\"2057\":1,\"2063\":1,\"2064\":1,\"2065\":1,\"2072\":1,\"2078\":1,\"2079\":1,\"2080\":1,\"2090\":1,\"2091\":1,\"2094\":1,\"2123\":1,\"2124\":1,\"2125\":1,\"2128\":1,\"2132\":1,\"2136\":1,\"2138\":1,\"2161\":1,\"2162\":1,\"2163\":1,\"2166\":1,\"2168\":1,\"2181\":4,\"2192\":1,\"2193\":1,\"2194\":1,\"2195\":1,\"2196\":1,\"2220\":1,\"2221\":1,\"2222\":1,\"2225\":1,\"2227\":1,\"2237\":1,\"2241\":1,\"2244\":1,\"2253\":1,\"2254\":1,\"2255\":1,\"2262\":1,\"2268\":1,\"2269\":1,\"2270\":1,\"2280\":1,\"2281\":1,\"2284\":1,\"2308\":4,\"2319\":1,\"2320\":1,\"2321\":1,\"2322\":1,\"2323\":1,\"2338\":1,\"2339\":1,\"2340\":1,\"2343\":1,\"2347\":1,\"2351\":1,\"2353\":1,\"2380\":1,\"2381\":1,\"2382\":1,\"2385\":1,\"2387\":1,\"2400\":4,\"2411\":1,\"2412\":1,\"2413\":1,\"2414\":1,\"2415\":1,\"2439\":1,\"2440\":1,\"2441\":1,\"2444\":1,\"2446\":1,\"2456\":1,\"2460\":1,\"2463\":1,\"2472\":1,\"2473\":1,\"2474\":1,\"2481\":1,\"2487\":1,\"2488\":1,\"2489\":1,\"2499\":1,\"2500\":1,\"2503\":1,\"2527\":4,\"2538\":1,\"2539\":1,\"2540\":1,\"2541\":1,\"2542\":1,\"2557\":1,\"2558\":1,\"2559\":1,\"2562\":1,\"2566\":1,\"2570\":1,\"2572\":1,\"2599\":1,\"2600\":1,\"2601\":1,\"2604\":1,\"2606\":1,\"2619\":4,\"2630\":1,\"2631\":1,\"2632\":1,\"2633\":1,\"2634\":1,\"2658\":1,\"2659\":1,\"2660\":1,\"2663\":1,\"2665\":1,\"2675\":1,\"2679\":1,\"2682\":1,\"2691\":1,\"2692\":1,\"2693\":1,\"2700\":1,\"2706\":1,\"2707\":1,\"2708\":1,\"2718\":1,\"2719\":1,\"2722\":1,\"2746\":4,\"2757\":1,\"2758\":1,\"2759\":1,\"2760\":1,\"2761\":1,\"2776\":1,\"2777\":1,\"2778\":1,\"2781\":1,\"2785\":1,\"2789\":1,\"2791\":1,\"2818\":1,\"2819\":1,\"2820\":1,\"2823\":1,\"2825\":1,\"2838\":4,\"2849\":1,\"2850\":1,\"2851\":1,\"2852\":1,\"2853\":1}}],[\"secret\",{\"0\":{\"816\":1,\"976\":1,\"1084\":1,\"1152\":1,\"1276\":1,\"1324\":1,\"1452\":1,\"1501\":1,\"1629\":1,\"1678\":1,\"1806\":1,\"1855\":1,\"1983\":1,\"2032\":1,\"2160\":1,\"2219\":1,\"2379\":1,\"2438\":1,\"2598\":1,\"2657\":1,\"2817\":1},\"1\":{\"171\":1,\"175\":1,\"178\":1,\"183\":1,\"184\":1,\"185\":1,\"186\":1,\"192\":1,\"195\":1,\"201\":1,\"208\":1,\"209\":1,\"210\":1,\"215\":1,\"220\":1,\"221\":1,\"224\":1,\"237\":1,\"238\":1,\"239\":1,\"240\":1,\"245\":1,\"247\":1,\"251\":1,\"253\":1,\"271\":1,\"272\":1,\"273\":1,\"274\":1,\"275\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1,\"811\":1,\"816\":2,\"817\":1,\"818\":1,\"819\":1,\"822\":1,\"824\":1,\"834\":1,\"838\":1,\"841\":1,\"850\":1,\"851\":1,\"852\":1,\"859\":1,\"865\":1,\"866\":1,\"867\":1,\"872\":1,\"877\":1,\"878\":1,\"881\":1,\"898\":1,\"903\":1,\"905\":1,\"916\":1,\"917\":1,\"918\":1,\"919\":1,\"920\":1,\"935\":1,\"936\":1,\"937\":1,\"940\":1,\"944\":1,\"948\":1,\"950\":1,\"965\":1,\"971\":1,\"976\":2,\"977\":1,\"978\":1,\"979\":1,\"982\":1,\"984\":1,\"994\":1,\"997\":1,\"1008\":1,\"1009\":1,\"1010\":1,\"1011\":1,\"1012\":1,\"1019\":1,\"1023\":1,\"1026\":1,\"1031\":1,\"1032\":1,\"1033\":1,\"1040\":1,\"1047\":1,\"1048\":1,\"1049\":1,\"1054\":1,\"1059\":1,\"1060\":1,\"1063\":1,\"1072\":1,\"1079\":1,\"1084\":2,\"1085\":1,\"1086\":1,\"1087\":1,\"1090\":1,\"1092\":1,\"1101\":1,\"1102\":1,\"1103\":1,\"1106\":1,\"1110\":1,\"1114\":1,\"1116\":1,\"1126\":1,\"1136\":1,\"1137\":1,\"1138\":1,\"1139\":1,\"1140\":1,\"1147\":1,\"1152\":2,\"1153\":1,\"1154\":1,\"1155\":1,\"1158\":1,\"1160\":1,\"1170\":1,\"1174\":1,\"1177\":1,\"1182\":1,\"1183\":1,\"1184\":1,\"1191\":1,\"1198\":1,\"1199\":1,\"1200\":1,\"1205\":1,\"1210\":1,\"1211\":1,\"1214\":1,\"1223\":1,\"1239\":1,\"1240\":1,\"1241\":1,\"1244\":1,\"1248\":1,\"1252\":1,\"1254\":1,\"1265\":1,\"1271\":1,\"1276\":2,\"1277\":1,\"1278\":1,\"1279\":1,\"1282\":1,\"1284\":1,\"1294\":1,\"1297\":1,\"1307\":1,\"1308\":1,\"1309\":1,\"1310\":1,\"1311\":1,\"1319\":1,\"1324\":2,\"1325\":1,\"1326\":1,\"1327\":1,\"1330\":1,\"1332\":1,\"1342\":1,\"1346\":1,\"1349\":1,\"1355\":1,\"1356\":1,\"1357\":1,\"1364\":1,\"1370\":1,\"1371\":1,\"1372\":1,\"1377\":1,\"1382\":1,\"1383\":1,\"1386\":1,\"1399\":1,\"1415\":1,\"1416\":1,\"1417\":1,\"1420\":1,\"1424\":1,\"1428\":1,\"1430\":1,\"1441\":1,\"1447\":1,\"1452\":2,\"1453\":1,\"1454\":1,\"1455\":1,\"1458\":1,\"1460\":1,\"1470\":1,\"1473\":1,\"1484\":1,\"1485\":1,\"1486\":1,\"1487\":1,\"1488\":1,\"1496\":1,\"1501\":2,\"1502\":1,\"1503\":1,\"1504\":1,\"1507\":1,\"1509\":1,\"1519\":1,\"1523\":1,\"1526\":1,\"1532\":1,\"1533\":1,\"1534\":1,\"1541\":1,\"1547\":1,\"1548\":1,\"1549\":1,\"1554\":1,\"1559\":1,\"1560\":1,\"1563\":1,\"1576\":1,\"1592\":1,\"1593\":1,\"1594\":1,\"1597\":1,\"1601\":1,\"1605\":1,\"1607\":1,\"1618\":1,\"1624\":1,\"1629\":2,\"1630\":1,\"1631\":1,\"1632\":1,\"1635\":1,\"1637\":1,\"1647\":1,\"1650\":1,\"1661\":1,\"1662\":1,\"1663\":1,\"1664\":1,\"1665\":1,\"1673\":1,\"1678\":2,\"1679\":1,\"1680\":1,\"1681\":1,\"1684\":1,\"1686\":1,\"1696\":1,\"1700\":1,\"1703\":1,\"1709\":1,\"1710\":1,\"1711\":1,\"1718\":1,\"1724\":1,\"1725\":1,\"1726\":1,\"1731\":1,\"1736\":1,\"1737\":1,\"1740\":1,\"1753\":1,\"1769\":1,\"1770\":1,\"1771\":1,\"1774\":1,\"1778\":1,\"1782\":1,\"1784\":1,\"1795\":1,\"1801\":1,\"1806\":2,\"1807\":1,\"1808\":1,\"1809\":1,\"1812\":1,\"1814\":1,\"1824\":1,\"1827\":1,\"1838\":1,\"1839\":1,\"1840\":1,\"1841\":1,\"1842\":1,\"1850\":1,\"1855\":2,\"1856\":1,\"1857\":1,\"1858\":1,\"1861\":1,\"1863\":1,\"1873\":1,\"1877\":1,\"1880\":1,\"1886\":1,\"1887\":1,\"1888\":1,\"1895\":1,\"1901\":1,\"1902\":1,\"1903\":1,\"1908\":1,\"1913\":1,\"1914\":1,\"1917\":1,\"1930\":1,\"1946\":1,\"1947\":1,\"1948\":1,\"1951\":1,\"1955\":1,\"1959\":1,\"1961\":1,\"1972\":1,\"1978\":1,\"1983\":2,\"1984\":1,\"1985\":1,\"1986\":1,\"1989\":1,\"1991\":1,\"2001\":1,\"2004\":1,\"2015\":1,\"2016\":1,\"2017\":1,\"2018\":1,\"2019\":1,\"2027\":1,\"2032\":2,\"2033\":1,\"2034\":1,\"2035\":1,\"2038\":1,\"2040\":1,\"2050\":1,\"2054\":1,\"2057\":1,\"2063\":1,\"2064\":1,\"2065\":1,\"2072\":1,\"2078\":1,\"2079\":1,\"2080\":1,\"2085\":1,\"2090\":1,\"2091\":1,\"2094\":1,\"2107\":1,\"2123\":1,\"2124\":1,\"2125\":1,\"2128\":1,\"2132\":1,\"2136\":1,\"2138\":1,\"2149\":1,\"2155\":1,\"2160\":2,\"2161\":1,\"2162\":1,\"2163\":1,\"2166\":1,\"2168\":1,\"2178\":1,\"2181\":1,\"2192\":1,\"2193\":1,\"2194\":1,\"2195\":1,\"2196\":1,\"2214\":1,\"2219\":2,\"2220\":1,\"2221\":1,\"2222\":1,\"2225\":1,\"2227\":1,\"2237\":1,\"2241\":1,\"2244\":1,\"2253\":1,\"2254\":1,\"2255\":1,\"2262\":1,\"2268\":1,\"2269\":1,\"2270\":1,\"2275\":1,\"2280\":1,\"2281\":1,\"2284\":1,\"2301\":1,\"2306\":1,\"2308\":1,\"2319\":1,\"2320\":1,\"2321\":1,\"2322\":1,\"2323\":1,\"2338\":1,\"2339\":1,\"2340\":1,\"2343\":1,\"2347\":1,\"2351\":1,\"2353\":1,\"2368\":1,\"2374\":1,\"2379\":2,\"2380\":1,\"2381\":1,\"2382\":1,\"2385\":1,\"2387\":1,\"2397\":1,\"2400\":1,\"2411\":1,\"2412\":1,\"2413\":1,\"2414\":1,\"2415\":1,\"2433\":1,\"2438\":2,\"2439\":1,\"2440\":1,\"2441\":1,\"2444\":1,\"2446\":1,\"2456\":1,\"2460\":1,\"2463\":1,\"2472\":1,\"2473\":1,\"2474\":1,\"2481\":1,\"2487\":1,\"2488\":1,\"2489\":1,\"2494\":1,\"2499\":1,\"2500\":1,\"2503\":1,\"2520\":1,\"2525\":1,\"2527\":1,\"2538\":1,\"2539\":1,\"2540\":1,\"2541\":1,\"2542\":1,\"2557\":1,\"2558\":1,\"2559\":1,\"2562\":1,\"2566\":1,\"2570\":1,\"2572\":1,\"2587\":1,\"2593\":1,\"2598\":2,\"2599\":1,\"2600\":1,\"2601\":1,\"2604\":1,\"2606\":1,\"2616\":1,\"2619\":1,\"2630\":1,\"2631\":1,\"2632\":1,\"2633\":1,\"2634\":1,\"2652\":1,\"2657\":2,\"2658\":1,\"2659\":1,\"2660\":1,\"2663\":1,\"2665\":1,\"2675\":1,\"2679\":1,\"2682\":1,\"2691\":1,\"2692\":1,\"2693\":1,\"2700\":1,\"2706\":1,\"2707\":1,\"2708\":1,\"2713\":1,\"2718\":1,\"2719\":1,\"2722\":1,\"2739\":1,\"2744\":1,\"2746\":1,\"2757\":1,\"2758\":1,\"2759\":1,\"2760\":1,\"2761\":1,\"2776\":1,\"2777\":1,\"2778\":1,\"2781\":1,\"2785\":1,\"2789\":1,\"2791\":1,\"2806\":1,\"2812\":1,\"2817\":2,\"2818\":1,\"2819\":1,\"2820\":1,\"2823\":1,\"2825\":1,\"2835\":1,\"2838\":1,\"2849\":1,\"2850\":1,\"2851\":1,\"2852\":1,\"2853\":1}}],[\"seconds\",{\"1\":{\"267\":2,\"268\":2,\"269\":2,\"270\":2,\"911\":2,\"912\":2,\"913\":2,\"914\":2,\"1003\":2,\"1004\":2,\"1005\":2,\"1006\":2,\"1132\":2,\"1133\":2,\"1134\":2,\"1135\":2,\"1303\":2,\"1304\":2,\"1305\":2,\"1306\":2,\"1479\":2,\"1480\":2,\"1481\":2,\"1482\":2,\"1656\":2,\"1657\":2,\"1658\":2,\"1659\":2,\"1833\":2,\"1834\":2,\"1835\":2,\"1836\":2,\"2010\":2,\"2011\":2,\"2012\":2,\"2013\":2,\"2187\":2,\"2188\":2,\"2189\":2,\"2190\":2,\"2314\":2,\"2315\":2,\"2316\":2,\"2317\":2,\"2406\":2,\"2407\":2,\"2408\":2,\"2409\":2,\"2533\":2,\"2534\":2,\"2535\":2,\"2536\":2,\"2625\":2,\"2626\":2,\"2627\":2,\"2628\":2,\"2752\":2,\"2753\":2,\"2754\":2,\"2755\":2,\"2844\":2,\"2845\":2,\"2846\":2,\"2847\":2}}],[\"second\",{\"1\":{\"90\":1,\"261\":1,\"262\":1,\"334\":1,\"338\":1,\"348\":1,\"352\":1,\"370\":1,\"373\":1,\"379\":1,\"389\":1,\"806\":2,\"933\":2,\"1237\":2,\"1413\":2,\"1590\":2,\"1767\":2,\"1944\":2,\"2121\":2,\"2209\":2,\"2336\":2,\"2428\":2,\"2555\":2,\"2647\":2,\"2774\":2}}],[\"secondly\",{\"1\":{\"81\":1}}],[\"section\",{\"1\":{\"85\":1,\"92\":1,\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"security\",{\"0\":{\"10\":1,\"33\":1,\"34\":1,\"35\":1,\"104\":1,\"105\":1,\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1},\"1\":{\"5\":2,\"6\":1,\"10\":1,\"33\":5,\"35\":2,\"36\":1,\"37\":4,\"38\":2,\"40\":2,\"87\":2,\"105\":3}}],[\"securely\",{\"1\":{\"8\":1,\"90\":1}}],[\"secured\",{\"1\":{\"0\":1,\"32\":1,\"84\":1}}],[\"secure\",{\"1\":{\"0\":3,\"5\":1,\"6\":1,\"12\":1,\"26\":2,\"29\":1,\"33\":2,\"38\":1,\"77\":1,\"86\":1,\"90\":1,\"94\":3,\"105\":1,\"146\":1}}],[\"seidel\",{\"1\":{\"79\":1}}],[\"sein\",{\"1\":{\"15\":1,\"16\":1}}],[\"seen\",{\"1\":{\"86\":1,\"126\":1}}],[\"see\",{\"1\":{\"43\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"70\":1,\"93\":1,\"106\":1,\"133\":2,\"161\":1,\"276\":1,\"279\":1,\"280\":1,\"281\":1,\"285\":2,\"286\":4,\"287\":1,\"290\":1,\"291\":1,\"292\":1,\"296\":2,\"297\":4,\"298\":1,\"300\":5,\"301\":2,\"303\":3,\"304\":1,\"306\":3,\"309\":1,\"312\":1,\"315\":1,\"316\":1,\"317\":1,\"318\":1,\"319\":1,\"320\":1,\"321\":1,\"369\":1,\"413\":1,\"433\":1,\"438\":3,\"439\":1,\"440\":1,\"459\":1,\"464\":2,\"465\":1,\"466\":1,\"482\":1,\"487\":3,\"488\":1,\"489\":1,\"508\":1,\"513\":3,\"514\":1,\"515\":1,\"519\":1,\"538\":1,\"543\":3,\"544\":1,\"545\":1,\"568\":1,\"573\":3,\"574\":1,\"575\":1,\"598\":1,\"603\":3,\"604\":1,\"605\":1,\"624\":1,\"644\":1,\"649\":3,\"650\":1,\"651\":1,\"670\":1,\"690\":1,\"695\":3,\"696\":1,\"697\":1,\"716\":1,\"736\":1,\"741\":3,\"742\":1,\"743\":1,\"762\":1,\"782\":1,\"787\":3,\"788\":1,\"789\":1,\"798\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"seriously\",{\"1\":{\"33\":1,\"35\":1}}],[\"servicetask\",{\"1\":{\"328\":2,\"368\":1}}],[\"serviceloader\",{\"1\":{\"328\":1}}],[\"service\",{\"0\":{\"150\":1},\"1\":{\"78\":1,\"95\":2,\"132\":1,\"144\":2,\"148\":1,\"149\":1,\"150\":7,\"165\":2,\"211\":1,\"217\":1,\"222\":1,\"223\":1,\"234\":2,\"325\":2,\"328\":1,\"331\":2,\"345\":1,\"360\":1,\"433\":2,\"459\":2,\"482\":2,\"508\":2,\"538\":2,\"568\":2,\"598\":2,\"644\":2,\"690\":2,\"736\":2,\"782\":2,\"868\":1,\"874\":1,\"879\":1,\"880\":1,\"1050\":1,\"1056\":1,\"1061\":1,\"1062\":1,\"1201\":1,\"1207\":1,\"1212\":1,\"1213\":1,\"1373\":1,\"1379\":1,\"1384\":1,\"1385\":1,\"1550\":1,\"1556\":1,\"1561\":1,\"1562\":1,\"1727\":1,\"1733\":1,\"1738\":1,\"1739\":1,\"1904\":1,\"1910\":1,\"1915\":1,\"1916\":1,\"2081\":1,\"2087\":1,\"2092\":1,\"2093\":1,\"2271\":1,\"2277\":1,\"2282\":1,\"2283\":1,\"2490\":1,\"2496\":1,\"2501\":1,\"2502\":1,\"2709\":1,\"2715\":1,\"2720\":1,\"2721\":1}}],[\"services\",{\"1\":{\"33\":1,\"35\":1,\"40\":1,\"148\":1,\"149\":1,\"285\":2,\"286\":2,\"296\":2,\"297\":1,\"299\":2,\"300\":8,\"302\":2,\"303\":5,\"305\":2,\"306\":2,\"308\":2,\"309\":1,\"311\":2,\"312\":1,\"323\":1,\"328\":1,\"435\":1,\"438\":2,\"439\":1,\"444\":1,\"445\":1,\"461\":1,\"464\":2,\"465\":1,\"484\":1,\"487\":2,\"488\":1,\"493\":1,\"494\":1,\"510\":1,\"513\":2,\"514\":1,\"519\":1,\"520\":1,\"540\":1,\"543\":2,\"544\":1,\"549\":1,\"550\":1,\"570\":1,\"573\":2,\"574\":1,\"579\":1,\"580\":1,\"600\":1,\"603\":2,\"604\":1,\"609\":1,\"610\":1,\"646\":1,\"649\":2,\"650\":1,\"655\":1,\"656\":1,\"692\":1,\"695\":2,\"696\":1,\"701\":1,\"702\":1,\"738\":1,\"741\":2,\"742\":1,\"747\":1,\"748\":1,\"784\":1,\"787\":2,\"788\":1,\"793\":1,\"794\":1,\"905\":1,\"997\":1,\"1297\":1,\"1473\":1,\"1650\":1,\"1827\":1,\"2004\":1,\"2181\":1,\"2308\":1,\"2400\":1,\"2527\":1,\"2619\":1,\"2746\":1,\"2838\":1}}],[\"server=y\",{\"1\":{\"323\":6}}],[\"server>\",{\"1\":{\"158\":1,\"394\":1}}],[\"server\",{\"0\":{\"85\":1,\"109\":1,\"164\":1,\"169\":1,\"203\":1,\"204\":1,\"230\":1,\"231\":1,\"236\":1,\"256\":1,\"257\":1,\"258\":1,\"259\":1,\"260\":1,\"261\":1,\"262\":1,\"265\":1,\"266\":1,\"280\":1,\"285\":1,\"286\":1,\"291\":1,\"296\":1,\"297\":1,\"299\":1,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"434\":1,\"438\":1,\"439\":1,\"444\":1,\"445\":1,\"460\":1,\"464\":1,\"465\":1,\"483\":1,\"487\":1,\"488\":1,\"493\":1,\"494\":1,\"509\":1,\"513\":1,\"514\":1,\"519\":1,\"520\":1,\"539\":1,\"543\":1,\"544\":1,\"549\":1,\"550\":1,\"569\":1,\"573\":1,\"574\":1,\"579\":1,\"580\":1,\"599\":1,\"603\":1,\"604\":1,\"609\":1,\"610\":1,\"645\":1,\"649\":1,\"650\":1,\"655\":1,\"656\":1,\"691\":1,\"695\":1,\"696\":1,\"701\":1,\"702\":1,\"737\":1,\"741\":1,\"742\":1,\"747\":1,\"748\":1,\"783\":1,\"787\":1,\"788\":1,\"793\":1,\"794\":1,\"795\":1,\"808\":1,\"809\":1,\"810\":1,\"811\":1,\"812\":1,\"813\":1,\"814\":1,\"815\":1,\"816\":1,\"817\":1,\"818\":1,\"819\":2,\"820\":1,\"821\":1,\"822\":2,\"823\":1,\"824\":1,\"825\":1,\"826\":1,\"827\":1,\"828\":2,\"829\":1,\"830\":1,\"831\":1,\"859\":1,\"861\":1,\"881\":1,\"888\":1,\"889\":1,\"893\":1,\"894\":1,\"895\":1,\"896\":1,\"909\":1,\"910\":1,\"915\":1,\"922\":1,\"940\":1,\"956\":1,\"957\":1,\"958\":1,\"959\":1,\"960\":1,\"961\":1,\"962\":1,\"963\":1,\"968\":1,\"969\":1,\"970\":1,\"971\":1,\"972\":1,\"973\":1,\"974\":1,\"975\":1,\"976\":1,\"977\":1,\"978\":1,\"979\":2,\"980\":1,\"981\":1,\"982\":2,\"983\":1,\"984\":1,\"985\":1,\"986\":1,\"987\":1,\"988\":2,\"989\":1,\"990\":1,\"991\":1,\"1001\":1,\"1002\":1,\"1007\":1,\"1016\":1,\"1040\":1,\"1042\":1,\"1043\":1,\"1063\":1,\"1067\":1,\"1068\":1,\"1076\":1,\"1077\":1,\"1078\":1,\"1079\":1,\"1080\":1,\"1081\":1,\"1082\":1,\"1083\":1,\"1084\":1,\"1085\":1,\"1086\":1,\"1087\":2,\"1088\":1,\"1089\":1,\"1090\":2,\"1091\":1,\"1092\":1,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":2,\"1097\":1,\"1098\":1,\"1099\":1,\"1100\":1,\"1106\":1,\"1119\":1,\"1120\":1,\"1121\":1,\"1122\":1,\"1123\":1,\"1124\":1,\"1130\":1,\"1131\":1,\"1141\":1,\"1144\":1,\"1145\":1,\"1146\":1,\"1147\":1,\"1148\":1,\"1149\":1,\"1150\":1,\"1151\":1,\"1152\":1,\"1153\":1,\"1154\":1,\"1155\":2,\"1156\":1,\"1157\":1,\"1158\":2,\"1159\":1,\"1160\":1,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":2,\"1165\":1,\"1166\":1,\"1167\":1,\"1191\":1,\"1193\":1,\"1194\":1,\"1214\":1,\"1218\":1,\"1219\":1,\"1226\":1,\"1244\":1,\"1257\":1,\"1258\":1,\"1259\":1,\"1260\":1,\"1261\":1,\"1262\":1,\"1263\":1,\"1268\":1,\"1269\":1,\"1270\":1,\"1271\":1,\"1272\":1,\"1273\":1,\"1274\":1,\"1275\":1,\"1276\":1,\"1277\":1,\"1278\":1,\"1279\":2,\"1280\":1,\"1281\":1,\"1282\":2,\"1283\":1,\"1284\":1,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":2,\"1289\":1,\"1290\":1,\"1291\":1,\"1301\":1,\"1302\":1,\"1313\":1,\"1316\":1,\"1317\":1,\"1318\":1,\"1319\":1,\"1320\":1,\"1321\":1,\"1322\":1,\"1323\":1,\"1324\":1,\"1325\":1,\"1326\":1,\"1327\":2,\"1328\":1,\"1329\":1,\"1330\":2,\"1331\":1,\"1332\":1,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":2,\"1337\":1,\"1338\":1,\"1339\":1,\"1364\":1,\"1366\":1,\"1386\":1,\"1393\":1,\"1394\":1,\"1402\":1,\"1420\":1,\"1433\":1,\"1434\":1,\"1435\":1,\"1436\":1,\"1437\":1,\"1438\":1,\"1439\":1,\"1444\":1,\"1445\":1,\"1446\":1,\"1447\":1,\"1448\":1,\"1449\":1,\"1450\":1,\"1451\":1,\"1452\":1,\"1453\":1,\"1454\":1,\"1455\":2,\"1456\":1,\"1457\":1,\"1458\":2,\"1459\":1,\"1460\":1,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":2,\"1465\":1,\"1466\":1,\"1467\":1,\"1477\":1,\"1478\":1,\"1483\":1,\"1490\":1,\"1493\":1,\"1494\":1,\"1495\":1,\"1496\":1,\"1497\":1,\"1498\":1,\"1499\":1,\"1500\":1,\"1501\":1,\"1502\":1,\"1503\":1,\"1504\":2,\"1505\":1,\"1506\":1,\"1507\":2,\"1508\":1,\"1509\":1,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":2,\"1514\":1,\"1515\":1,\"1516\":1,\"1541\":1,\"1543\":1,\"1563\":1,\"1570\":1,\"1571\":1,\"1579\":1,\"1597\":1,\"1610\":1,\"1611\":1,\"1612\":1,\"1613\":1,\"1614\":1,\"1615\":1,\"1616\":1,\"1621\":1,\"1622\":1,\"1623\":1,\"1624\":1,\"1625\":1,\"1626\":1,\"1627\":1,\"1628\":1,\"1629\":1,\"1630\":1,\"1631\":1,\"1632\":2,\"1633\":1,\"1634\":1,\"1635\":2,\"1636\":1,\"1637\":1,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":2,\"1642\":1,\"1643\":1,\"1644\":1,\"1654\":1,\"1655\":1,\"1660\":1,\"1667\":1,\"1670\":1,\"1671\":1,\"1672\":1,\"1673\":1,\"1674\":1,\"1675\":1,\"1676\":1,\"1677\":1,\"1678\":1,\"1679\":1,\"1680\":1,\"1681\":2,\"1682\":1,\"1683\":1,\"1684\":2,\"1685\":1,\"1686\":1,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":2,\"1691\":1,\"1692\":1,\"1693\":1,\"1718\":1,\"1720\":1,\"1740\":1,\"1747\":1,\"1748\":1,\"1756\":1,\"1774\":1,\"1787\":1,\"1788\":1,\"1789\":1,\"1790\":1,\"1791\":1,\"1792\":1,\"1793\":1,\"1798\":1,\"1799\":1,\"1800\":1,\"1801\":1,\"1802\":1,\"1803\":1,\"1804\":1,\"1805\":1,\"1806\":1,\"1807\":1,\"1808\":1,\"1809\":2,\"1810\":1,\"1811\":1,\"1812\":2,\"1813\":1,\"1814\":1,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":2,\"1819\":1,\"1820\":1,\"1821\":1,\"1831\":1,\"1832\":1,\"1837\":1,\"1844\":1,\"1847\":1,\"1848\":1,\"1849\":1,\"1850\":1,\"1851\":1,\"1852\":1,\"1853\":1,\"1854\":1,\"1855\":1,\"1856\":1,\"1857\":1,\"1858\":2,\"1859\":1,\"1860\":1,\"1861\":2,\"1862\":1,\"1863\":1,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":2,\"1868\":1,\"1869\":1,\"1870\":1,\"1895\":1,\"1897\":1,\"1917\":1,\"1924\":1,\"1925\":1,\"1933\":1,\"1951\":1,\"1964\":1,\"1965\":1,\"1966\":1,\"1967\":1,\"1968\":1,\"1969\":1,\"1970\":1,\"1975\":1,\"1976\":1,\"1977\":1,\"1978\":1,\"1979\":1,\"1980\":1,\"1981\":1,\"1982\":1,\"1983\":1,\"1984\":1,\"1985\":1,\"1986\":2,\"1987\":1,\"1988\":1,\"1989\":2,\"1990\":1,\"1991\":1,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":2,\"1996\":1,\"1997\":1,\"1998\":1,\"2008\":1,\"2009\":1,\"2014\":1,\"2021\":1,\"2024\":1,\"2025\":1,\"2026\":1,\"2027\":1,\"2028\":1,\"2029\":1,\"2030\":1,\"2031\":1,\"2032\":1,\"2033\":1,\"2034\":1,\"2035\":2,\"2036\":1,\"2037\":1,\"2038\":2,\"2039\":1,\"2040\":1,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":2,\"2045\":1,\"2046\":1,\"2047\":1,\"2072\":1,\"2074\":1,\"2094\":1,\"2101\":1,\"2102\":1,\"2110\":1,\"2128\":1,\"2141\":1,\"2142\":1,\"2143\":1,\"2144\":1,\"2145\":1,\"2146\":1,\"2147\":1,\"2152\":1,\"2153\":1,\"2154\":1,\"2155\":1,\"2156\":1,\"2157\":1,\"2158\":1,\"2159\":1,\"2160\":1,\"2161\":1,\"2162\":1,\"2163\":2,\"2164\":1,\"2165\":1,\"2166\":2,\"2167\":1,\"2168\":1,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":2,\"2173\":1,\"2174\":1,\"2175\":1,\"2185\":1,\"2186\":1,\"2191\":1,\"2198\":1,\"2211\":1,\"2212\":1,\"2213\":1,\"2214\":1,\"2215\":1,\"2216\":1,\"2217\":1,\"2218\":1,\"2219\":1,\"2220\":1,\"2221\":1,\"2222\":2,\"2223\":1,\"2224\":1,\"2225\":2,\"2226\":1,\"2227\":1,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":2,\"2232\":1,\"2233\":1,\"2234\":1,\"2262\":1,\"2264\":1,\"2284\":1,\"2291\":1,\"2292\":1,\"2296\":1,\"2297\":1,\"2298\":1,\"2299\":1,\"2312\":1,\"2313\":1,\"2318\":1,\"2325\":1,\"2343\":1,\"2359\":1,\"2360\":1,\"2361\":1,\"2362\":1,\"2363\":1,\"2364\":1,\"2365\":1,\"2366\":1,\"2371\":1,\"2372\":1,\"2373\":1,\"2374\":1,\"2375\":1,\"2376\":1,\"2377\":1,\"2378\":1,\"2379\":1,\"2380\":1,\"2381\":1,\"2382\":2,\"2383\":1,\"2384\":1,\"2385\":2,\"2386\":1,\"2387\":1,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":2,\"2392\":1,\"2393\":1,\"2394\":1,\"2404\":1,\"2405\":1,\"2410\":1,\"2417\":1,\"2430\":1,\"2431\":1,\"2432\":1,\"2433\":1,\"2434\":1,\"2435\":1,\"2436\":1,\"2437\":1,\"2438\":1,\"2439\":1,\"2440\":1,\"2441\":2,\"2442\":1,\"2443\":1,\"2444\":2,\"2445\":1,\"2446\":1,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":2,\"2451\":1,\"2452\":1,\"2453\":1,\"2481\":1,\"2483\":1,\"2503\":1,\"2510\":1,\"2511\":1,\"2515\":1,\"2516\":1,\"2517\":1,\"2518\":1,\"2531\":1,\"2532\":1,\"2537\":1,\"2544\":1,\"2562\":1,\"2578\":1,\"2579\":1,\"2580\":1,\"2581\":1,\"2582\":1,\"2583\":1,\"2584\":1,\"2585\":1,\"2590\":1,\"2591\":1,\"2592\":1,\"2593\":1,\"2594\":1,\"2595\":1,\"2596\":1,\"2597\":1,\"2598\":1,\"2599\":1,\"2600\":1,\"2601\":2,\"2602\":1,\"2603\":1,\"2604\":2,\"2605\":1,\"2606\":1,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":2,\"2611\":1,\"2612\":1,\"2613\":1,\"2623\":1,\"2624\":1,\"2629\":1,\"2636\":1,\"2649\":1,\"2650\":1,\"2651\":1,\"2652\":1,\"2653\":1,\"2654\":1,\"2655\":1,\"2656\":1,\"2657\":1,\"2658\":1,\"2659\":1,\"2660\":2,\"2661\":1,\"2662\":1,\"2663\":2,\"2664\":1,\"2665\":1,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":2,\"2670\":1,\"2671\":1,\"2672\":1,\"2700\":1,\"2702\":1,\"2722\":1,\"2729\":1,\"2730\":1,\"2734\":1,\"2735\":1,\"2736\":1,\"2737\":1,\"2750\":1,\"2751\":1,\"2756\":1,\"2763\":1,\"2781\":1,\"2797\":1,\"2798\":1,\"2799\":1,\"2800\":1,\"2801\":1,\"2802\":1,\"2803\":1,\"2804\":1,\"2809\":1,\"2810\":1,\"2811\":1,\"2812\":1,\"2813\":1,\"2814\":1,\"2815\":1,\"2816\":1,\"2817\":1,\"2818\":1,\"2819\":1,\"2820\":2,\"2821\":1,\"2822\":1,\"2823\":2,\"2824\":1,\"2825\":1,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":2,\"2830\":1,\"2831\":1,\"2832\":1,\"2842\":1,\"2843\":1,\"2848\":1},\"1\":{\"17\":2,\"32\":1,\"81\":1,\"85\":3,\"86\":3,\"92\":1,\"95\":18,\"105\":1,\"106\":3,\"108\":6,\"109\":6,\"130\":2,\"131\":2,\"140\":1,\"141\":4,\"143\":9,\"145\":2,\"146\":6,\"147\":2,\"161\":2,\"163\":5,\"164\":6,\"165\":18,\"166\":5,\"170\":2,\"171\":1,\"172\":1,\"173\":1,\"174\":1,\"175\":1,\"176\":2,\"177\":1,\"178\":1,\"179\":2,\"186\":2,\"187\":2,\"188\":2,\"189\":1,\"190\":1,\"191\":1,\"192\":2,\"193\":2,\"194\":2,\"195\":1,\"196\":1,\"197\":1,\"198\":1,\"199\":1,\"201\":1,\"202\":1,\"203\":2,\"204\":1,\"205\":1,\"206\":1,\"207\":1,\"208\":2,\"209\":2,\"210\":1,\"212\":2,\"215\":2,\"216\":1,\"218\":1,\"219\":1,\"224\":3,\"225\":2,\"227\":1,\"229\":1,\"230\":2,\"231\":2,\"232\":1,\"233\":1,\"240\":1,\"241\":1,\"242\":1,\"243\":2,\"244\":1,\"245\":1,\"247\":1,\"248\":1,\"249\":1,\"250\":1,\"251\":1,\"252\":1,\"253\":1,\"254\":2,\"255\":2,\"256\":2,\"257\":1,\"258\":2,\"259\":1,\"260\":2,\"261\":2,\"262\":2,\"266\":1,\"267\":1,\"268\":1,\"269\":1,\"270\":1,\"273\":2,\"274\":1,\"275\":1,\"280\":2,\"281\":5,\"284\":2,\"285\":15,\"286\":15,\"291\":2,\"292\":5,\"295\":2,\"296\":17,\"297\":15,\"299\":1,\"300\":15,\"303\":12,\"306\":9,\"309\":7,\"312\":7,\"323\":30,\"327\":3,\"328\":3,\"334\":17,\"337\":4,\"338\":2,\"344\":2,\"348\":7,\"352\":3,\"358\":4,\"363\":20,\"373\":9,\"377\":1,\"384\":4,\"389\":25,\"394\":1,\"421\":2,\"434\":4,\"435\":5,\"437\":2,\"438\":13,\"439\":11,\"442\":2,\"445\":7,\"460\":4,\"461\":5,\"463\":2,\"464\":14,\"465\":13,\"466\":2,\"468\":1,\"474\":2,\"483\":4,\"484\":5,\"486\":2,\"487\":13,\"488\":12,\"489\":2,\"491\":1,\"494\":7,\"500\":2,\"509\":4,\"510\":5,\"512\":2,\"513\":13,\"514\":12,\"515\":2,\"517\":1,\"519\":1,\"520\":7,\"526\":2,\"539\":4,\"540\":5,\"542\":2,\"543\":13,\"544\":12,\"545\":2,\"547\":2,\"550\":7,\"556\":2,\"569\":4,\"570\":5,\"572\":2,\"573\":13,\"574\":11,\"575\":2,\"577\":2,\"580\":7,\"586\":2,\"599\":4,\"600\":5,\"602\":2,\"603\":13,\"604\":11,\"605\":2,\"607\":2,\"610\":7,\"632\":2,\"645\":4,\"646\":5,\"648\":2,\"649\":13,\"650\":11,\"651\":2,\"653\":2,\"656\":7,\"678\":2,\"691\":4,\"692\":5,\"694\":2,\"695\":13,\"696\":11,\"697\":2,\"699\":2,\"702\":7,\"724\":2,\"737\":4,\"738\":5,\"740\":2,\"741\":13,\"742\":11,\"745\":2,\"748\":7,\"770\":2,\"783\":4,\"784\":5,\"786\":2,\"787\":13,\"788\":11,\"791\":2,\"794\":7,\"798\":5,\"805\":1,\"806\":3,\"808\":1,\"809\":1,\"810\":1,\"811\":4,\"812\":4,\"813\":1,\"814\":2,\"815\":2,\"816\":2,\"817\":1,\"818\":3,\"819\":2,\"820\":1,\"821\":1,\"822\":3,\"823\":1,\"824\":1,\"825\":3,\"826\":3,\"827\":3,\"828\":3,\"829\":1,\"830\":1,\"831\":1,\"834\":1,\"835\":1,\"836\":1,\"837\":1,\"838\":1,\"839\":2,\"840\":1,\"841\":1,\"842\":2,\"853\":1,\"854\":1,\"855\":1,\"856\":1,\"857\":1,\"859\":2,\"860\":1,\"861\":2,\"862\":1,\"863\":1,\"864\":1,\"865\":2,\"866\":2,\"867\":1,\"869\":2,\"872\":2,\"873\":1,\"875\":1,\"876\":1,\"881\":4,\"882\":2,\"887\":1,\"888\":2,\"889\":2,\"890\":1,\"891\":1,\"893\":2,\"894\":2,\"895\":1,\"896\":1,\"902\":2,\"903\":8,\"904\":4,\"905\":8,\"909\":1,\"910\":1,\"911\":1,\"912\":1,\"913\":1,\"914\":1,\"915\":1,\"918\":2,\"919\":1,\"920\":1,\"925\":6,\"933\":3,\"938\":2,\"939\":1,\"940\":2,\"944\":1,\"945\":1,\"946\":1,\"947\":1,\"948\":1,\"949\":1,\"950\":1,\"951\":2,\"952\":2,\"956\":2,\"957\":2,\"958\":1,\"959\":1,\"960\":2,\"961\":2,\"962\":1,\"963\":1,\"968\":1,\"969\":1,\"970\":1,\"971\":4,\"972\":4,\"973\":1,\"974\":2,\"975\":2,\"976\":2,\"977\":1,\"978\":3,\"979\":2,\"980\":1,\"981\":1,\"982\":3,\"983\":1,\"984\":1,\"985\":3,\"986\":3,\"987\":3,\"988\":3,\"989\":1,\"990\":1,\"991\":1,\"993\":2,\"994\":8,\"995\":2,\"996\":4,\"997\":8,\"1001\":1,\"1002\":1,\"1003\":1,\"1004\":1,\"1005\":1,\"1006\":1,\"1007\":1,\"1010\":2,\"1011\":1,\"1012\":1,\"1015\":2,\"1019\":1,\"1020\":1,\"1021\":1,\"1022\":1,\"1023\":1,\"1024\":2,\"1025\":1,\"1026\":1,\"1027\":2,\"1034\":1,\"1035\":1,\"1036\":1,\"1037\":1,\"1038\":1,\"1040\":3,\"1041\":1,\"1042\":2,\"1043\":1,\"1044\":1,\"1045\":1,\"1046\":1,\"1047\":2,\"1048\":2,\"1049\":1,\"1051\":2,\"1054\":2,\"1055\":1,\"1057\":1,\"1058\":1,\"1063\":4,\"1064\":2,\"1066\":1,\"1067\":2,\"1068\":2,\"1069\":1,\"1070\":1,\"1076\":1,\"1077\":1,\"1078\":1,\"1079\":4,\"1080\":4,\"1081\":1,\"1082\":2,\"1083\":2,\"1084\":2,\"1085\":1,\"1086\":3,\"1087\":2,\"1088\":1,\"1089\":1,\"1090\":3,\"1091\":1,\"1092\":1,\"1093\":3,\"1094\":3,\"1095\":3,\"1096\":3,\"1097\":1,\"1098\":1,\"1099\":1,\"1104\":2,\"1105\":1,\"1106\":3,\"1110\":1,\"1111\":1,\"1112\":1,\"1113\":1,\"1114\":1,\"1115\":1,\"1116\":1,\"1117\":2,\"1118\":2,\"1119\":2,\"1120\":2,\"1121\":1,\"1122\":2,\"1123\":1,\"1124\":1,\"1131\":1,\"1132\":1,\"1133\":1,\"1134\":1,\"1135\":1,\"1138\":2,\"1139\":1,\"1140\":1,\"1144\":1,\"1145\":1,\"1146\":1,\"1147\":4,\"1148\":4,\"1149\":1,\"1150\":2,\"1151\":2,\"1152\":2,\"1153\":1,\"1154\":3,\"1155\":2,\"1156\":1,\"1157\":1,\"1158\":3,\"1159\":1,\"1160\":1,\"1161\":3,\"1162\":3,\"1163\":3,\"1164\":3,\"1165\":1,\"1166\":1,\"1167\":1,\"1170\":1,\"1171\":1,\"1172\":1,\"1173\":1,\"1174\":1,\"1175\":2,\"1176\":1,\"1177\":1,\"1178\":2,\"1185\":1,\"1186\":1,\"1187\":1,\"1188\":1,\"1189\":1,\"1191\":3,\"1192\":1,\"1193\":2,\"1194\":1,\"1195\":1,\"1196\":1,\"1197\":1,\"1198\":2,\"1199\":2,\"1200\":1,\"1202\":2,\"1205\":2,\"1206\":1,\"1208\":1,\"1209\":1,\"1214\":4,\"1215\":2,\"1217\":1,\"1218\":2,\"1219\":2,\"1220\":1,\"1221\":1,\"1229\":6,\"1237\":3,\"1242\":2,\"1243\":1,\"1244\":3,\"1248\":1,\"1249\":1,\"1250\":1,\"1251\":1,\"1252\":1,\"1253\":1,\"1254\":1,\"1255\":2,\"1256\":2,\"1257\":2,\"1258\":2,\"1259\":1,\"1260\":1,\"1261\":2,\"1262\":2,\"1263\":1,\"1268\":1,\"1269\":1,\"1270\":1,\"1271\":4,\"1272\":4,\"1273\":1,\"1274\":2,\"1275\":2,\"1276\":2,\"1277\":1,\"1278\":3,\"1279\":2,\"1280\":1,\"1281\":1,\"1282\":3,\"1283\":1,\"1284\":1,\"1285\":3,\"1286\":3,\"1287\":3,\"1288\":3,\"1289\":1,\"1290\":1,\"1291\":1,\"1293\":2,\"1294\":8,\"1295\":2,\"1296\":4,\"1297\":8,\"1302\":1,\"1303\":1,\"1304\":1,\"1305\":1,\"1306\":1,\"1309\":2,\"1310\":1,\"1311\":1,\"1316\":1,\"1317\":1,\"1318\":1,\"1319\":4,\"1320\":4,\"1321\":1,\"1322\":2,\"1323\":2,\"1324\":2,\"1325\":1,\"1326\":3,\"1327\":2,\"1328\":1,\"1329\":1,\"1330\":3,\"1331\":1,\"1332\":1,\"1333\":3,\"1334\":3,\"1335\":3,\"1336\":3,\"1337\":1,\"1338\":1,\"1339\":1,\"1342\":1,\"1343\":1,\"1344\":1,\"1345\":1,\"1346\":1,\"1347\":2,\"1348\":1,\"1349\":1,\"1350\":2,\"1358\":1,\"1359\":1,\"1360\":1,\"1361\":1,\"1362\":1,\"1364\":3,\"1365\":1,\"1366\":2,\"1367\":1,\"1368\":1,\"1369\":1,\"1370\":2,\"1371\":2,\"1372\":1,\"1374\":2,\"1377\":2,\"1378\":1,\"1380\":1,\"1381\":1,\"1386\":4,\"1387\":2,\"1392\":1,\"1393\":2,\"1394\":2,\"1395\":1,\"1396\":1,\"1405\":6,\"1413\":3,\"1418\":2,\"1419\":1,\"1420\":3,\"1424\":1,\"1425\":1,\"1426\":1,\"1427\":1,\"1428\":1,\"1429\":1,\"1430\":1,\"1431\":2,\"1432\":2,\"1433\":2,\"1434\":2,\"1435\":1,\"1436\":1,\"1437\":2,\"1438\":2,\"1439\":1,\"1444\":1,\"1445\":1,\"1446\":1,\"1447\":4,\"1448\":4,\"1449\":1,\"1450\":2,\"1451\":2,\"1452\":2,\"1453\":1,\"1454\":3,\"1455\":2,\"1456\":1,\"1457\":1,\"1458\":3,\"1459\":1,\"1460\":1,\"1461\":3,\"1462\":3,\"1463\":3,\"1464\":3,\"1465\":1,\"1466\":1,\"1467\":1,\"1469\":2,\"1470\":8,\"1471\":2,\"1472\":4,\"1473\":8,\"1478\":1,\"1479\":1,\"1480\":1,\"1481\":1,\"1482\":1,\"1483\":1,\"1486\":2,\"1487\":1,\"1488\":1,\"1493\":1,\"1494\":1,\"1495\":1,\"1496\":4,\"1497\":4,\"1498\":1,\"1499\":2,\"1500\":2,\"1501\":2,\"1502\":1,\"1503\":3,\"1504\":2,\"1505\":1,\"1506\":1,\"1507\":3,\"1508\":1,\"1509\":1,\"1510\":3,\"1511\":3,\"1512\":3,\"1513\":3,\"1514\":1,\"1515\":1,\"1516\":1,\"1519\":1,\"1520\":1,\"1521\":1,\"1522\":1,\"1523\":1,\"1524\":2,\"1525\":1,\"1526\":1,\"1527\":2,\"1535\":1,\"1536\":1,\"1537\":1,\"1538\":1,\"1539\":1,\"1541\":2,\"1542\":1,\"1543\":2,\"1544\":1,\"1545\":1,\"1546\":1,\"1547\":2,\"1548\":2,\"1549\":1,\"1551\":2,\"1554\":2,\"1555\":1,\"1557\":1,\"1558\":1,\"1563\":4,\"1564\":2,\"1569\":1,\"1570\":2,\"1571\":2,\"1572\":1,\"1573\":1,\"1582\":6,\"1590\":3,\"1595\":2,\"1596\":1,\"1597\":2,\"1601\":1,\"1602\":1,\"1603\":1,\"1604\":1,\"1605\":1,\"1606\":1,\"1607\":1,\"1608\":2,\"1609\":2,\"1610\":2,\"1611\":2,\"1612\":1,\"1613\":1,\"1614\":2,\"1615\":2,\"1616\":1,\"1621\":1,\"1622\":1,\"1623\":1,\"1624\":4,\"1625\":4,\"1626\":1,\"1627\":2,\"1628\":2,\"1629\":2,\"1630\":1,\"1631\":3,\"1632\":2,\"1633\":1,\"1634\":1,\"1635\":3,\"1636\":1,\"1637\":1,\"1638\":3,\"1639\":3,\"1640\":3,\"1641\":3,\"1642\":1,\"1643\":1,\"1644\":1,\"1646\":2,\"1647\":8,\"1648\":2,\"1649\":4,\"1650\":8,\"1655\":1,\"1656\":1,\"1657\":1,\"1658\":1,\"1659\":1,\"1660\":1,\"1663\":2,\"1664\":1,\"1665\":1,\"1670\":1,\"1671\":1,\"1672\":1,\"1673\":4,\"1674\":4,\"1675\":1,\"1676\":2,\"1677\":2,\"1678\":2,\"1679\":1,\"1680\":3,\"1681\":2,\"1682\":1,\"1683\":1,\"1684\":3,\"1685\":1,\"1686\":1,\"1687\":3,\"1688\":3,\"1689\":3,\"1690\":3,\"1691\":1,\"1692\":1,\"1693\":1,\"1696\":1,\"1697\":1,\"1698\":1,\"1699\":1,\"1700\":1,\"1701\":2,\"1702\":1,\"1703\":1,\"1704\":2,\"1712\":1,\"1713\":1,\"1714\":1,\"1715\":1,\"1716\":1,\"1718\":2,\"1719\":1,\"1720\":2,\"1721\":1,\"1722\":1,\"1723\":1,\"1724\":2,\"1725\":2,\"1726\":1,\"1728\":2,\"1731\":2,\"1732\":1,\"1734\":1,\"1735\":1,\"1740\":4,\"1741\":2,\"1746\":1,\"1747\":2,\"1748\":2,\"1749\":1,\"1750\":1,\"1759\":6,\"1767\":3,\"1772\":2,\"1773\":1,\"1774\":2,\"1778\":1,\"1779\":1,\"1780\":1,\"1781\":1,\"1782\":1,\"1783\":1,\"1784\":1,\"1785\":2,\"1786\":2,\"1787\":2,\"1788\":2,\"1789\":1,\"1790\":1,\"1791\":2,\"1792\":2,\"1793\":1,\"1798\":1,\"1799\":1,\"1800\":1,\"1801\":4,\"1802\":4,\"1803\":1,\"1804\":2,\"1805\":2,\"1806\":2,\"1807\":1,\"1808\":3,\"1809\":2,\"1810\":1,\"1811\":1,\"1812\":3,\"1813\":1,\"1814\":1,\"1815\":3,\"1816\":3,\"1817\":3,\"1818\":3,\"1819\":1,\"1820\":1,\"1821\":1,\"1823\":2,\"1824\":8,\"1825\":2,\"1826\":4,\"1827\":8,\"1832\":1,\"1833\":1,\"1834\":1,\"1835\":1,\"1836\":1,\"1837\":1,\"1840\":2,\"1841\":1,\"1842\":1,\"1847\":1,\"1848\":1,\"1849\":1,\"1850\":4,\"1851\":4,\"1852\":1,\"1853\":2,\"1854\":2,\"1855\":2,\"1856\":1,\"1857\":3,\"1858\":2,\"1859\":1,\"1860\":1,\"1861\":3,\"1862\":1,\"1863\":1,\"1864\":3,\"1865\":3,\"1866\":3,\"1867\":3,\"1868\":1,\"1869\":1,\"1870\":1,\"1873\":1,\"1874\":1,\"1875\":1,\"1876\":1,\"1877\":1,\"1878\":2,\"1879\":1,\"1880\":1,\"1881\":2,\"1889\":1,\"1890\":1,\"1891\":1,\"1892\":1,\"1893\":1,\"1895\":2,\"1896\":1,\"1897\":2,\"1898\":1,\"1899\":1,\"1900\":1,\"1901\":2,\"1902\":2,\"1903\":1,\"1905\":2,\"1908\":2,\"1909\":1,\"1911\":1,\"1912\":1,\"1917\":4,\"1918\":2,\"1923\":1,\"1924\":2,\"1925\":2,\"1926\":1,\"1927\":1,\"1936\":6,\"1944\":3,\"1949\":2,\"1950\":1,\"1951\":2,\"1955\":1,\"1956\":1,\"1957\":1,\"1958\":1,\"1959\":1,\"1960\":1,\"1961\":1,\"1962\":2,\"1963\":2,\"1964\":2,\"1965\":2,\"1966\":1,\"1967\":1,\"1968\":2,\"1969\":2,\"1970\":1,\"1975\":1,\"1976\":1,\"1977\":1,\"1978\":4,\"1979\":4,\"1980\":1,\"1981\":2,\"1982\":2,\"1983\":2,\"1984\":1,\"1985\":3,\"1986\":2,\"1987\":1,\"1988\":1,\"1989\":3,\"1990\":1,\"1991\":1,\"1992\":3,\"1993\":3,\"1994\":3,\"1995\":3,\"1996\":1,\"1997\":1,\"1998\":1,\"2000\":2,\"2001\":8,\"2002\":2,\"2003\":4,\"2004\":8,\"2009\":1,\"2010\":1,\"2011\":1,\"2012\":1,\"2013\":1,\"2014\":1,\"2017\":2,\"2018\":1,\"2019\":1,\"2024\":1,\"2025\":1,\"2026\":1,\"2027\":4,\"2028\":4,\"2029\":1,\"2030\":2,\"2031\":2,\"2032\":2,\"2033\":1,\"2034\":3,\"2035\":2,\"2036\":1,\"2037\":1,\"2038\":3,\"2039\":1,\"2040\":1,\"2041\":3,\"2042\":3,\"2043\":3,\"2044\":3,\"2045\":1,\"2046\":1,\"2047\":1,\"2050\":1,\"2051\":1,\"2052\":1,\"2053\":1,\"2054\":1,\"2055\":2,\"2056\":1,\"2057\":1,\"2058\":2,\"2066\":1,\"2067\":1,\"2068\":1,\"2069\":1,\"2070\":1,\"2072\":2,\"2073\":1,\"2074\":2,\"2075\":1,\"2076\":1,\"2077\":1,\"2078\":2,\"2079\":2,\"2080\":1,\"2082\":2,\"2085\":2,\"2086\":1,\"2088\":1,\"2089\":1,\"2094\":4,\"2095\":2,\"2100\":1,\"2101\":2,\"2102\":2,\"2103\":1,\"2104\":1,\"2113\":6,\"2121\":3,\"2126\":2,\"2127\":1,\"2128\":2,\"2132\":1,\"2133\":1,\"2134\":1,\"2135\":1,\"2136\":1,\"2137\":1,\"2138\":1,\"2139\":2,\"2140\":2,\"2141\":2,\"2142\":2,\"2143\":1,\"2144\":1,\"2145\":2,\"2146\":2,\"2147\":1,\"2152\":1,\"2153\":1,\"2154\":1,\"2155\":4,\"2156\":4,\"2157\":1,\"2158\":2,\"2159\":2,\"2160\":2,\"2161\":1,\"2162\":3,\"2163\":2,\"2164\":1,\"2165\":1,\"2166\":3,\"2167\":1,\"2168\":1,\"2169\":3,\"2170\":3,\"2171\":3,\"2172\":3,\"2173\":1,\"2174\":1,\"2175\":1,\"2177\":2,\"2178\":8,\"2179\":2,\"2180\":4,\"2181\":8,\"2186\":1,\"2187\":1,\"2188\":1,\"2189\":1,\"2190\":1,\"2191\":1,\"2194\":2,\"2195\":1,\"2196\":1,\"2201\":5,\"2208\":1,\"2209\":3,\"2211\":1,\"2212\":1,\"2213\":1,\"2214\":4,\"2215\":4,\"2216\":1,\"2217\":2,\"2218\":2,\"2219\":2,\"2220\":1,\"2221\":3,\"2222\":2,\"2223\":1,\"2224\":1,\"2225\":3,\"2226\":1,\"2227\":1,\"2228\":3,\"2229\":3,\"2230\":3,\"2231\":3,\"2232\":1,\"2233\":1,\"2234\":1,\"2237\":1,\"2238\":1,\"2239\":1,\"2240\":1,\"2241\":1,\"2242\":2,\"2243\":1,\"2244\":1,\"2245\":2,\"2256\":1,\"2257\":1,\"2258\":1,\"2259\":1,\"2260\":1,\"2262\":2,\"2263\":1,\"2264\":2,\"2265\":1,\"2266\":1,\"2267\":1,\"2268\":2,\"2269\":2,\"2270\":1,\"2272\":2,\"2275\":2,\"2276\":1,\"2278\":1,\"2279\":1,\"2284\":4,\"2285\":2,\"2290\":1,\"2291\":2,\"2292\":2,\"2293\":1,\"2294\":1,\"2296\":2,\"2297\":2,\"2298\":1,\"2299\":1,\"2305\":2,\"2306\":8,\"2307\":4,\"2308\":8,\"2312\":1,\"2313\":1,\"2314\":1,\"2315\":1,\"2316\":1,\"2317\":1,\"2318\":1,\"2321\":2,\"2322\":1,\"2323\":1,\"2328\":6,\"2336\":3,\"2341\":2,\"2342\":1,\"2343\":2,\"2347\":1,\"2348\":1,\"2349\":1,\"2350\":1,\"2351\":1,\"2352\":1,\"2353\":1,\"2354\":2,\"2355\":2,\"2359\":2,\"2360\":2,\"2361\":1,\"2362\":1,\"2363\":2,\"2364\":2,\"2365\":1,\"2366\":1,\"2371\":1,\"2372\":1,\"2373\":1,\"2374\":4,\"2375\":4,\"2376\":1,\"2377\":2,\"2378\":2,\"2379\":2,\"2380\":1,\"2381\":3,\"2382\":2,\"2383\":1,\"2384\":1,\"2385\":3,\"2386\":1,\"2387\":1,\"2388\":3,\"2389\":3,\"2390\":3,\"2391\":3,\"2392\":1,\"2393\":1,\"2394\":1,\"2396\":2,\"2397\":8,\"2398\":2,\"2399\":4,\"2400\":8,\"2404\":1,\"2405\":1,\"2406\":1,\"2407\":1,\"2408\":1,\"2409\":1,\"2410\":1,\"2413\":2,\"2414\":1,\"2415\":1,\"2420\":5,\"2427\":1,\"2428\":3,\"2430\":1,\"2431\":1,\"2432\":1,\"2433\":4,\"2434\":4,\"2435\":1,\"2436\":2,\"2437\":2,\"2438\":2,\"2439\":1,\"2440\":3,\"2441\":2,\"2442\":1,\"2443\":1,\"2444\":3,\"2445\":1,\"2446\":1,\"2447\":3,\"2448\":3,\"2449\":3,\"2450\":3,\"2451\":1,\"2452\":1,\"2453\":1,\"2456\":1,\"2457\":1,\"2458\":1,\"2459\":1,\"2460\":1,\"2461\":2,\"2462\":1,\"2463\":1,\"2464\":2,\"2475\":1,\"2476\":1,\"2477\":1,\"2478\":1,\"2479\":1,\"2481\":2,\"2482\":1,\"2483\":2,\"2484\":1,\"2485\":1,\"2486\":1,\"2487\":2,\"2488\":2,\"2489\":1,\"2491\":2,\"2494\":2,\"2495\":1,\"2497\":1,\"2498\":1,\"2503\":4,\"2504\":2,\"2509\":1,\"2510\":2,\"2511\":2,\"2512\":1,\"2513\":1,\"2515\":2,\"2516\":2,\"2517\":1,\"2518\":1,\"2524\":2,\"2525\":8,\"2526\":4,\"2527\":8,\"2531\":1,\"2532\":1,\"2533\":1,\"2534\":1,\"2535\":1,\"2536\":1,\"2537\":1,\"2540\":2,\"2541\":1,\"2542\":1,\"2547\":6,\"2555\":3,\"2560\":2,\"2561\":1,\"2562\":2,\"2566\":1,\"2567\":1,\"2568\":1,\"2569\":1,\"2570\":1,\"2571\":1,\"2572\":1,\"2573\":2,\"2574\":2,\"2578\":2,\"2579\":2,\"2580\":1,\"2581\":1,\"2582\":2,\"2583\":2,\"2584\":1,\"2585\":1,\"2590\":1,\"2591\":1,\"2592\":1,\"2593\":4,\"2594\":4,\"2595\":1,\"2596\":2,\"2597\":2,\"2598\":2,\"2599\":1,\"2600\":3,\"2601\":2,\"2602\":1,\"2603\":1,\"2604\":3,\"2605\":1,\"2606\":1,\"2607\":3,\"2608\":3,\"2609\":3,\"2610\":3,\"2611\":1,\"2612\":1,\"2613\":1,\"2615\":2,\"2616\":8,\"2617\":2,\"2618\":4,\"2619\":8,\"2623\":1,\"2624\":1,\"2625\":1,\"2626\":1,\"2627\":1,\"2628\":1,\"2629\":1,\"2632\":2,\"2633\":1,\"2634\":1,\"2639\":5,\"2646\":1,\"2647\":3,\"2649\":1,\"2650\":1,\"2651\":1,\"2652\":4,\"2653\":4,\"2654\":1,\"2655\":2,\"2656\":2,\"2657\":2,\"2658\":1,\"2659\":3,\"2660\":2,\"2661\":1,\"2662\":1,\"2663\":3,\"2664\":1,\"2665\":1,\"2666\":3,\"2667\":3,\"2668\":3,\"2669\":3,\"2670\":1,\"2671\":1,\"2672\":1,\"2675\":1,\"2676\":1,\"2677\":1,\"2678\":1,\"2679\":1,\"2680\":2,\"2681\":1,\"2682\":1,\"2683\":2,\"2694\":1,\"2695\":1,\"2696\":1,\"2697\":1,\"2698\":1,\"2700\":2,\"2701\":1,\"2702\":2,\"2703\":1,\"2704\":1,\"2705\":1,\"2706\":2,\"2707\":2,\"2708\":1,\"2710\":2,\"2713\":2,\"2714\":1,\"2716\":1,\"2717\":1,\"2722\":4,\"2723\":2,\"2728\":1,\"2729\":2,\"2730\":2,\"2731\":1,\"2732\":1,\"2734\":2,\"2735\":2,\"2736\":1,\"2737\":1,\"2743\":2,\"2744\":8,\"2745\":4,\"2746\":8,\"2750\":1,\"2751\":1,\"2752\":1,\"2753\":1,\"2754\":1,\"2755\":1,\"2756\":1,\"2759\":2,\"2760\":1,\"2761\":1,\"2766\":6,\"2774\":3,\"2779\":2,\"2780\":1,\"2781\":2,\"2785\":1,\"2786\":1,\"2787\":1,\"2788\":1,\"2789\":1,\"2790\":1,\"2791\":1,\"2792\":2,\"2793\":2,\"2797\":2,\"2798\":2,\"2799\":1,\"2800\":1,\"2801\":2,\"2802\":2,\"2803\":1,\"2804\":1,\"2809\":1,\"2810\":1,\"2811\":1,\"2812\":4,\"2813\":4,\"2814\":1,\"2815\":2,\"2816\":2,\"2817\":2,\"2818\":1,\"2819\":3,\"2820\":2,\"2821\":1,\"2822\":1,\"2823\":3,\"2824\":1,\"2825\":1,\"2826\":3,\"2827\":3,\"2828\":3,\"2829\":3,\"2830\":1,\"2831\":1,\"2832\":1,\"2834\":2,\"2835\":8,\"2836\":2,\"2837\":4,\"2838\":8,\"2842\":1,\"2843\":1,\"2844\":1,\"2845\":1,\"2846\":1,\"2847\":1,\"2848\":1,\"2851\":2,\"2852\":1,\"2853\":1}}],[\"servers>\",{\"1\":{\"158\":1,\"394\":1}}],[\"servers\",{\"1\":{\"16\":1,\"86\":1,\"95\":2,\"105\":1,\"165\":2,\"183\":1,\"186\":1,\"187\":1,\"188\":1,\"192\":1,\"193\":1,\"194\":1,\"200\":1,\"201\":1,\"237\":1,\"245\":1,\"246\":1,\"265\":1,\"280\":2,\"284\":3,\"285\":3,\"286\":1,\"291\":2,\"295\":3,\"296\":4,\"297\":1,\"337\":1,\"379\":1,\"396\":1,\"434\":2,\"437\":3,\"438\":2,\"439\":1,\"460\":2,\"463\":3,\"464\":2,\"465\":1,\"483\":2,\"486\":3,\"487\":2,\"488\":1,\"509\":2,\"512\":3,\"513\":2,\"514\":1,\"539\":2,\"542\":3,\"543\":2,\"544\":1,\"569\":2,\"572\":3,\"573\":2,\"574\":1,\"599\":2,\"602\":3,\"603\":2,\"604\":1,\"645\":2,\"648\":3,\"649\":2,\"650\":1,\"691\":2,\"694\":3,\"695\":2,\"696\":1,\"737\":2,\"740\":3,\"741\":2,\"742\":1,\"783\":2,\"786\":3,\"787\":2,\"788\":1,\"850\":1,\"858\":1,\"859\":1,\"935\":1,\"940\":1,\"941\":1,\"1031\":1,\"1039\":1,\"1040\":1,\"1101\":1,\"1106\":1,\"1107\":1,\"1130\":1,\"1182\":1,\"1190\":1,\"1191\":1,\"1239\":1,\"1244\":1,\"1245\":1,\"1301\":1,\"1355\":1,\"1363\":1,\"1364\":1,\"1415\":1,\"1420\":1,\"1421\":1,\"1477\":1,\"1532\":1,\"1540\":1,\"1541\":1,\"1592\":1,\"1597\":1,\"1598\":1,\"1654\":1,\"1709\":1,\"1717\":1,\"1718\":1,\"1769\":1,\"1774\":1,\"1775\":1,\"1831\":1,\"1886\":1,\"1894\":1,\"1895\":1,\"1946\":1,\"1951\":1,\"1952\":1,\"2008\":1,\"2063\":1,\"2071\":1,\"2072\":1,\"2123\":1,\"2128\":1,\"2129\":1,\"2185\":1,\"2253\":1,\"2261\":1,\"2262\":1,\"2338\":1,\"2343\":1,\"2344\":1,\"2472\":1,\"2480\":1,\"2481\":1,\"2557\":1,\"2562\":1,\"2563\":1,\"2691\":1,\"2699\":1,\"2700\":1,\"2776\":1,\"2781\":1,\"2782\":1}}],[\"setvariable\",{\"1\":{\"369\":1}}],[\"sets\",{\"1\":{\"271\":1,\"272\":1,\"273\":1,\"274\":1,\"275\":1,\"916\":1,\"917\":1,\"918\":1,\"919\":1,\"920\":1,\"1008\":1,\"1009\":1,\"1010\":1,\"1011\":1,\"1012\":1,\"1136\":1,\"1137\":1,\"1138\":1,\"1139\":1,\"1140\":1,\"1307\":1,\"1308\":1,\"1309\":1,\"1310\":1,\"1311\":1,\"1484\":1,\"1485\":1,\"1486\":1,\"1487\":1,\"1488\":1,\"1661\":1,\"1662\":1,\"1663\":1,\"1664\":1,\"1665\":1,\"1838\":1,\"1839\":1,\"1840\":1,\"1841\":1,\"1842\":1,\"2015\":1,\"2016\":1,\"2017\":1,\"2018\":1,\"2019\":1,\"2192\":1,\"2193\":1,\"2194\":1,\"2195\":1,\"2196\":1,\"2319\":1,\"2320\":1,\"2321\":1,\"2322\":1,\"2323\":1,\"2411\":1,\"2412\":1,\"2413\":1,\"2414\":1,\"2415\":1,\"2538\":1,\"2539\":1,\"2540\":1,\"2541\":1,\"2542\":1,\"2630\":1,\"2631\":1,\"2632\":1,\"2633\":1,\"2634\":1,\"2757\":1,\"2758\":1,\"2759\":1,\"2760\":1,\"2761\":1,\"2849\":1,\"2850\":1,\"2851\":1,\"2852\":1,\"2853\":1}}],[\"setter\",{\"1\":{\"155\":1}}],[\"setting\",{\"0\":{\"406\":1,\"617\":1,\"663\":1,\"709\":1,\"755\":1},\"1\":{\"112\":1,\"113\":1,\"133\":2,\"316\":1,\"325\":1,\"903\":1,\"994\":1,\"1294\":1,\"1470\":1,\"1647\":1,\"1824\":1,\"2001\":1,\"2178\":1,\"2306\":1,\"2397\":1,\"2525\":1,\"2616\":1,\"2744\":1,\"2835\":1}}],[\"settings>\",{\"1\":{\"158\":1,\"394\":1}}],[\"settings\",{\"1\":{\"5\":1,\"11\":1,\"158\":4,\"173\":1,\"249\":1,\"394\":4,\"403\":2,\"442\":1,\"547\":1,\"577\":1,\"607\":1,\"614\":2,\"653\":1,\"660\":2,\"699\":1,\"706\":2,\"745\":1,\"752\":2,\"791\":1,\"836\":1,\"946\":1,\"1021\":1,\"1112\":1,\"1172\":1,\"1250\":1,\"1344\":1,\"1426\":1,\"1521\":1,\"1603\":1,\"1698\":1,\"1780\":1,\"1875\":1,\"1957\":1,\"2052\":1,\"2134\":1,\"2239\":1,\"2349\":1,\"2458\":1,\"2568\":1,\"2677\":1,\"2787\":1}}],[\"set\",{\"1\":{\"91\":1,\"124\":1,\"134\":2,\"148\":1,\"149\":1,\"180\":1,\"181\":1,\"182\":1,\"186\":1,\"187\":1,\"188\":1,\"191\":1,\"192\":1,\"193\":1,\"194\":1,\"195\":1,\"196\":1,\"197\":1,\"200\":1,\"218\":1,\"219\":1,\"226\":1,\"240\":1,\"241\":1,\"242\":1,\"246\":1,\"257\":1,\"285\":8,\"286\":3,\"296\":9,\"297\":3,\"331\":1,\"334\":1,\"345\":1,\"360\":2,\"386\":1,\"438\":6,\"439\":2,\"464\":7,\"465\":3,\"487\":6,\"488\":3,\"513\":6,\"514\":3,\"543\":6,\"544\":3,\"573\":6,\"574\":2,\"603\":6,\"604\":2,\"649\":6,\"650\":2,\"695\":6,\"696\":2,\"741\":6,\"742\":2,\"787\":6,\"788\":2,\"811\":1,\"812\":2,\"814\":1,\"832\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"855\":1,\"858\":1,\"875\":1,\"876\":1,\"883\":1,\"895\":2,\"902\":1,\"903\":1,\"921\":1,\"932\":1,\"941\":1,\"942\":1,\"953\":1,\"954\":1,\"955\":1,\"962\":2,\"971\":1,\"972\":2,\"974\":1,\"993\":1,\"994\":1,\"995\":1,\"1013\":1,\"1017\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1036\":1,\"1039\":1,\"1057\":1,\"1058\":1,\"1065\":1,\"1079\":1,\"1080\":2,\"1082\":1,\"1107\":1,\"1108\":1,\"1124\":2,\"1147\":1,\"1148\":2,\"1150\":1,\"1168\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1187\":1,\"1190\":1,\"1208\":1,\"1209\":1,\"1216\":1,\"1236\":1,\"1245\":1,\"1246\":1,\"1263\":2,\"1271\":1,\"1272\":2,\"1274\":1,\"1293\":1,\"1294\":1,\"1295\":1,\"1312\":1,\"1319\":1,\"1320\":2,\"1322\":1,\"1340\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1360\":1,\"1363\":1,\"1380\":1,\"1381\":1,\"1388\":1,\"1412\":1,\"1421\":1,\"1422\":1,\"1439\":2,\"1447\":1,\"1448\":2,\"1450\":1,\"1469\":1,\"1470\":1,\"1471\":1,\"1489\":1,\"1496\":1,\"1497\":2,\"1499\":1,\"1517\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1537\":1,\"1540\":1,\"1557\":1,\"1558\":1,\"1565\":1,\"1589\":1,\"1598\":1,\"1599\":1,\"1616\":2,\"1624\":1,\"1625\":2,\"1627\":1,\"1646\":1,\"1647\":1,\"1648\":1,\"1666\":1,\"1673\":1,\"1674\":2,\"1676\":1,\"1694\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1714\":1,\"1717\":1,\"1734\":1,\"1735\":1,\"1742\":1,\"1766\":1,\"1775\":1,\"1776\":1,\"1793\":2,\"1801\":1,\"1802\":2,\"1804\":1,\"1823\":1,\"1824\":1,\"1825\":1,\"1843\":1,\"1850\":1,\"1851\":2,\"1853\":1,\"1871\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1891\":1,\"1894\":1,\"1911\":1,\"1912\":1,\"1919\":1,\"1943\":1,\"1952\":1,\"1953\":1,\"1970\":2,\"1978\":1,\"1979\":2,\"1981\":1,\"2000\":1,\"2001\":1,\"2002\":1,\"2020\":1,\"2027\":1,\"2028\":2,\"2030\":1,\"2048\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2068\":1,\"2071\":1,\"2088\":1,\"2089\":1,\"2096\":1,\"2120\":1,\"2129\":1,\"2130\":1,\"2147\":2,\"2155\":1,\"2156\":2,\"2158\":1,\"2177\":1,\"2178\":1,\"2179\":1,\"2197\":1,\"2214\":1,\"2215\":2,\"2217\":1,\"2235\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2258\":1,\"2261\":1,\"2278\":1,\"2279\":1,\"2286\":1,\"2298\":2,\"2305\":1,\"2306\":1,\"2324\":1,\"2335\":1,\"2344\":1,\"2345\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2365\":2,\"2374\":1,\"2375\":2,\"2377\":1,\"2396\":1,\"2397\":1,\"2398\":1,\"2416\":1,\"2433\":1,\"2434\":2,\"2436\":1,\"2454\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2477\":1,\"2480\":1,\"2497\":1,\"2498\":1,\"2505\":1,\"2517\":2,\"2524\":1,\"2525\":1,\"2543\":1,\"2554\":1,\"2563\":1,\"2564\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2584\":2,\"2593\":1,\"2594\":2,\"2596\":1,\"2615\":1,\"2616\":1,\"2617\":1,\"2635\":1,\"2652\":1,\"2653\":2,\"2655\":1,\"2673\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2696\":1,\"2699\":1,\"2716\":1,\"2717\":1,\"2724\":1,\"2736\":2,\"2743\":1,\"2744\":1,\"2762\":1,\"2773\":1,\"2782\":1,\"2783\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2803\":2,\"2812\":1,\"2813\":2,\"2815\":1,\"2834\":1,\"2835\":1,\"2836\":1,\"2854\":1}}],[\"setups\",{\"1\":{\"408\":1,\"619\":1,\"665\":1,\"711\":1,\"757\":1}}],[\"setup\",{\"0\":{\"88\":1,\"95\":1,\"165\":1,\"281\":1,\"283\":1,\"292\":1,\"294\":1,\"299\":1,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"327\":1,\"396\":1,\"435\":1,\"436\":1,\"444\":1,\"445\":1,\"461\":1,\"462\":1,\"484\":1,\"485\":1,\"493\":1,\"494\":1,\"510\":1,\"511\":1,\"519\":1,\"520\":1,\"540\":1,\"541\":1,\"549\":1,\"550\":1,\"570\":1,\"571\":1,\"579\":1,\"580\":1,\"600\":1,\"601\":1,\"609\":1,\"610\":1,\"646\":1,\"647\":1,\"655\":1,\"656\":1,\"692\":1,\"693\":1,\"701\":1,\"702\":1,\"738\":1,\"739\":1,\"747\":1,\"748\":1,\"784\":1,\"785\":1,\"793\":1,\"794\":1},\"1\":{\"8\":1,\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"88\":1,\"95\":1,\"96\":1,\"124\":1,\"131\":4,\"133\":2,\"134\":1,\"137\":1,\"138\":1,\"165\":1,\"166\":1,\"276\":1,\"281\":2,\"287\":1,\"292\":2,\"325\":1,\"327\":2,\"334\":3,\"337\":1,\"338\":2,\"345\":1,\"348\":3,\"350\":1,\"363\":5,\"373\":4,\"389\":7,\"395\":1,\"399\":1,\"435\":1,\"442\":4,\"461\":1,\"484\":1,\"510\":1,\"540\":1,\"547\":4,\"570\":1,\"577\":4,\"600\":1,\"607\":4,\"646\":1,\"653\":4,\"692\":1,\"699\":4,\"738\":1,\"745\":4,\"784\":1,\"791\":4}}],[\"stuck\",{\"1\":{\"832\":1,\"942\":1,\"1017\":1,\"1108\":1,\"1168\":1,\"1246\":1,\"1340\":1,\"1422\":1,\"1517\":1,\"1599\":1,\"1694\":1,\"1776\":1,\"1871\":1,\"1953\":1,\"2048\":1,\"2130\":1,\"2235\":1,\"2345\":1,\"2454\":1,\"2564\":1,\"2673\":1,\"2783\":1}}],[\"stub\",{\"1\":{\"170\":2,\"227\":2,\"228\":2,\"234\":2}}],[\"study\",{\"1\":{\"418\":1,\"448\":1,\"471\":1,\"497\":1,\"523\":1,\"553\":1,\"583\":1,\"629\":1,\"675\":1,\"721\":1,\"767\":1}}],[\"studies\",{\"1\":{\"113\":2}}],[\"stud\",{\"1\":{\"26\":9}}],[\"style\",{\"0\":{\"152\":1,\"155\":1,\"156\":1,\"403\":1,\"614\":1,\"660\":1,\"706\":1,\"752\":1},\"1\":{\"152\":2,\"156\":3,\"403\":4,\"614\":4,\"660\":4,\"706\":4,\"752\":4}}],[\"stopping\",{\"1\":{\"370\":1}}],[\"stop\",{\"1\":{\"101\":1,\"285\":1,\"286\":5,\"296\":1,\"297\":5,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"storing\",{\"0\":{\"369\":1},\"1\":{\"95\":2,\"125\":1,\"165\":2,\"370\":1}}],[\"stores\",{\"1\":{\"81\":1}}],[\"store\",{\"0\":{\"17\":1},\"1\":{\"17\":1,\"130\":2,\"131\":2,\"203\":1,\"256\":1,\"284\":4,\"295\":4,\"334\":2,\"423\":1,\"437\":4,\"463\":4,\"486\":4,\"512\":4,\"542\":4,\"558\":1,\"572\":4,\"588\":1,\"602\":4,\"634\":1,\"648\":4,\"680\":1,\"694\":4,\"726\":1,\"740\":4,\"772\":1,\"786\":4,\"861\":1,\"956\":1,\"1042\":1,\"1119\":1,\"1193\":1,\"1257\":1,\"1366\":1,\"1433\":1,\"1543\":1,\"1610\":1,\"1720\":1,\"1787\":1,\"1897\":1,\"1964\":1,\"2074\":1,\"2141\":1,\"2264\":1,\"2359\":1,\"2483\":1,\"2578\":1,\"2702\":1,\"2797\":1}}],[\"stored\",{\"1\":{\"0\":1,\"86\":1,\"94\":1,\"368\":1,\"370\":1}}],[\"step\",{\"1\":{\"282\":1,\"293\":1,\"338\":1,\"409\":1,\"620\":1,\"666\":1,\"712\":1,\"758\":1,\"832\":1,\"942\":1,\"1017\":1,\"1108\":1,\"1168\":1,\"1246\":1,\"1340\":1,\"1422\":1,\"1517\":1,\"1599\":1,\"1694\":1,\"1776\":1,\"1871\":1,\"1953\":1,\"2048\":1,\"2130\":1,\"2235\":1,\"2345\":1,\"2454\":1,\"2564\":1,\"2673\":1,\"2783\":1}}],[\"steps\",{\"1\":{\"0\":1,\"32\":1,\"37\":1,\"94\":1,\"101\":1,\"102\":1,\"103\":1,\"140\":1,\"150\":1,\"415\":2,\"430\":1,\"442\":1,\"456\":1,\"468\":1,\"479\":1,\"491\":1,\"505\":1,\"517\":1,\"535\":1,\"547\":1,\"565\":1,\"577\":1,\"595\":1,\"607\":1,\"626\":2,\"641\":1,\"653\":1,\"672\":2,\"687\":1,\"699\":1,\"718\":2,\"733\":1,\"745\":1,\"764\":2,\"779\":1,\"791\":1}}],[\"stellen\",{\"1\":{\"17\":1}}],[\"stale\",{\"1\":{\"377\":1}}],[\"staff\",{\"1\":{\"113\":1}}],[\"stakeholders\",{\"1\":{\"92\":1}}],[\"star\",{\"1\":{\"87\":2}}],[\"starter\",{\"1\":{\"345\":1}}],[\"started\",{\"0\":{\"12\":1},\"1\":{\"229\":1,\"300\":2,\"303\":2,\"306\":2,\"309\":2,\"312\":2,\"329\":1,\"334\":3,\"348\":3,\"352\":2,\"363\":4,\"370\":1,\"373\":3,\"377\":1,\"389\":6,\"415\":4,\"418\":1,\"445\":2,\"494\":2,\"520\":2,\"550\":2,\"580\":2,\"610\":2,\"626\":4,\"629\":1,\"656\":2,\"672\":4,\"675\":1,\"702\":2,\"718\":4,\"721\":1,\"748\":2,\"764\":4,\"767\":1,\"794\":2,\"887\":1,\"1066\":1,\"1217\":1,\"1392\":1,\"1569\":1,\"1746\":1,\"1923\":1,\"2100\":1,\"2290\":1,\"2509\":1,\"2728\":1}}],[\"startup\",{\"1\":{\"148\":1,\"149\":1,\"219\":1,\"229\":1,\"232\":1,\"233\":1,\"258\":1,\"286\":4,\"297\":4,\"439\":4,\"465\":4,\"488\":4,\"514\":4,\"544\":4,\"574\":4,\"604\":4,\"650\":4,\"696\":4,\"742\":4,\"788\":4,\"876\":1,\"887\":1,\"890\":1,\"891\":1,\"957\":1,\"1058\":1,\"1066\":1,\"1069\":1,\"1070\":1,\"1120\":1,\"1209\":1,\"1217\":1,\"1220\":1,\"1221\":1,\"1258\":1,\"1381\":1,\"1392\":1,\"1395\":1,\"1396\":1,\"1434\":1,\"1558\":1,\"1569\":1,\"1572\":1,\"1573\":1,\"1611\":1,\"1735\":1,\"1746\":1,\"1749\":1,\"1750\":1,\"1788\":1,\"1912\":1,\"1923\":1,\"1926\":1,\"1927\":1,\"1965\":1,\"2089\":1,\"2100\":1,\"2103\":1,\"2104\":1,\"2142\":1,\"2279\":1,\"2290\":1,\"2293\":1,\"2294\":1,\"2360\":1,\"2498\":1,\"2509\":1,\"2512\":1,\"2513\":1,\"2579\":1,\"2717\":1,\"2728\":1,\"2731\":1,\"2732\":1,\"2798\":1}}],[\"starting\",{\"0\":{\"134\":1},\"1\":{\"132\":1,\"155\":2,\"352\":1,\"370\":2,\"414\":1,\"442\":2,\"547\":2,\"577\":2,\"607\":2,\"625\":1,\"653\":2,\"671\":1,\"699\":2,\"717\":1,\"745\":2,\"763\":1,\"791\":2}}],[\"starts\",{\"1\":{\"86\":1,\"93\":1,\"329\":1,\"343\":1}}],[\"start\",{\"0\":{\"425\":1,\"455\":1,\"478\":1,\"504\":1,\"530\":1,\"560\":1,\"590\":1,\"636\":1,\"682\":1,\"728\":1,\"774\":1},\"1\":{\"12\":1,\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"93\":1,\"101\":2,\"112\":1,\"130\":2,\"131\":3,\"134\":1,\"137\":1,\"153\":1,\"181\":1,\"182\":1,\"285\":2,\"286\":4,\"296\":2,\"297\":4,\"327\":1,\"330\":1,\"334\":4,\"338\":4,\"341\":1,\"348\":4,\"352\":1,\"355\":1,\"360\":1,\"363\":7,\"373\":6,\"381\":1,\"389\":10,\"401\":1,\"415\":1,\"425\":1,\"438\":2,\"439\":2,\"440\":1,\"442\":2,\"455\":1,\"464\":2,\"465\":2,\"466\":1,\"478\":1,\"487\":2,\"488\":2,\"489\":1,\"504\":1,\"513\":2,\"514\":2,\"515\":1,\"530\":1,\"543\":2,\"544\":2,\"545\":1,\"547\":2,\"560\":1,\"573\":2,\"574\":2,\"575\":1,\"577\":2,\"590\":1,\"603\":2,\"604\":2,\"605\":1,\"607\":2,\"612\":1,\"626\":1,\"636\":1,\"649\":2,\"650\":2,\"651\":1,\"653\":2,\"658\":1,\"672\":1,\"682\":1,\"695\":2,\"696\":2,\"697\":1,\"699\":2,\"704\":1,\"718\":1,\"728\":1,\"741\":2,\"742\":2,\"743\":1,\"745\":2,\"750\":1,\"764\":1,\"774\":1,\"787\":2,\"788\":2,\"789\":1,\"791\":2,\"846\":1,\"847\":1,\"848\":1,\"892\":1,\"915\":1,\"932\":2,\"1007\":1,\"1029\":1,\"1030\":1,\"1180\":1,\"1181\":1,\"1236\":2,\"1352\":1,\"1353\":1,\"1354\":1,\"1397\":1,\"1412\":2,\"1483\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1574\":1,\"1589\":2,\"1660\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1751\":1,\"1766\":2,\"1837\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1928\":1,\"1943\":2,\"2014\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2105\":1,\"2120\":2,\"2191\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2295\":1,\"2318\":1,\"2335\":2,\"2410\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2514\":1,\"2537\":1,\"2554\":2,\"2629\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2733\":1,\"2756\":1,\"2773\":2,\"2848\":1}}],[\"static\",{\"0\":{\"895\":1,\"962\":1,\"1124\":1,\"1263\":1,\"1439\":1,\"1616\":1,\"1793\":1,\"1970\":1,\"2147\":1,\"2298\":1,\"2365\":1,\"2517\":1,\"2584\":1,\"2736\":1,\"2803\":1},\"1\":{\"341\":1,\"342\":1,\"895\":2,\"962\":2,\"1124\":2,\"1263\":2,\"1439\":2,\"1616\":2,\"1793\":2,\"1970\":2,\"2147\":2,\"2298\":2,\"2365\":2,\"2517\":2,\"2584\":2,\"2736\":2,\"2803\":2}}],[\"static=\",{\"1\":{\"156\":8}}],[\"statment\",{\"1\":{\"155\":1}}],[\"statusclient\",{\"1\":{\"299\":1,\"300\":2,\"302\":1,\"303\":2,\"305\":1,\"306\":2,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"519\":1,\"520\":1}}],[\"status=active\",{\"1\":{\"202\":1,\"207\":1,\"860\":1,\"864\":1,\"1041\":1,\"1046\":1,\"1192\":1,\"1197\":1,\"1365\":1,\"1369\":1,\"1542\":1,\"1546\":1,\"1719\":1,\"1723\":1,\"1896\":1,\"1900\":1,\"2073\":1,\"2077\":1,\"2263\":1,\"2267\":1,\"2482\":1,\"2486\":1,\"2701\":1,\"2705\":1}}],[\"status\",{\"0\":{\"830\":1,\"831\":1,\"990\":1,\"991\":1,\"1098\":1,\"1099\":1,\"1166\":1,\"1167\":1,\"1290\":1,\"1291\":1,\"1338\":1,\"1339\":1,\"1466\":1,\"1467\":1,\"1515\":1,\"1516\":1,\"1643\":1,\"1644\":1,\"1692\":1,\"1693\":1,\"1820\":1,\"1821\":1,\"1869\":1,\"1870\":1,\"1997\":1,\"1998\":1,\"2046\":1,\"2047\":1,\"2174\":1,\"2175\":1,\"2233\":1,\"2234\":1,\"2393\":1,\"2394\":1,\"2452\":1,\"2453\":1,\"2612\":1,\"2613\":1,\"2671\":1,\"2672\":1,\"2831\":1,\"2832\":1},\"1\":{\"86\":2,\"93\":2,\"102\":1,\"103\":1,\"137\":1,\"138\":1,\"519\":1,\"520\":1,\"830\":2,\"831\":2,\"990\":2,\"991\":2,\"1098\":2,\"1099\":2,\"1166\":2,\"1167\":2,\"1290\":2,\"1291\":2,\"1338\":2,\"1339\":2,\"1466\":2,\"1467\":2,\"1515\":2,\"1516\":2,\"1643\":2,\"1644\":2,\"1692\":2,\"1693\":2,\"1820\":2,\"1821\":2,\"1869\":2,\"1870\":2,\"1997\":2,\"1998\":2,\"2046\":2,\"2047\":2,\"2174\":2,\"2175\":2,\"2233\":2,\"2234\":2,\"2393\":2,\"2394\":2,\"2452\":2,\"2453\":2,\"2612\":2,\"2613\":2,\"2671\":2,\"2672\":2,\"2831\":2,\"2832\":2}}],[\"statements\",{\"1\":{\"155\":4}}],[\"statement\",{\"1\":{\"155\":11,\"156\":1}}],[\"state\",{\"1\":{\"33\":1,\"320\":1,\"365\":1,\"377\":2}}],[\"stable\",{\"1\":{\"77\":1,\"279\":1,\"290\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"stay\",{\"0\":{\"69\":1},\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"standalone=\",{\"1\":{\"155\":1}}],[\"standardized\",{\"1\":{\"122\":1}}],[\"standardised\",{\"1\":{\"92\":1}}],[\"standard\",{\"1\":{\"9\":1,\"91\":2,\"123\":1,\"344\":1,\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"standards\",{\"0\":{\"9\":1,\"89\":1},\"1\":{\"0\":1,\"6\":1,\"32\":1,\"84\":1,\"85\":1,\"89\":3,\"91\":1,\"94\":1,\"105\":1,\"112\":1,\"113\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"stand\",{\"1\":{\"14\":1}}],[\"standorte\",{\"1\":{\"14\":1}}],[\"strategy\",{\"0\":{\"404\":1,\"615\":1,\"661\":1,\"707\":1,\"753\":1},\"1\":{\"404\":1,\"615\":1,\"661\":1,\"707\":1,\"753\":1}}],[\"strategies\",{\"1\":{\"116\":1}}],[\"stronger\",{\"1\":{\"401\":1,\"612\":1,\"658\":1,\"704\":1,\"750\":1}}],[\"stream\",{\"1\":{\"166\":1}}],[\"structural\",{\"1\":{\"90\":1}}],[\"structures\",{\"1\":{\"94\":1,\"300\":1,\"303\":1,\"306\":1}}],[\"structuredefinition\",{\"1\":{\"93\":1,\"334\":2,\"344\":1,\"354\":2,\"357\":4,\"358\":2,\"359\":4,\"360\":2,\"363\":2,\"380\":2,\"383\":4,\"384\":2,\"385\":4,\"389\":2}}],[\"structured\",{\"1\":{\"74\":2}}],[\"structure\",{\"0\":{\"77\":1,\"327\":1},\"1\":{\"0\":1,\"94\":1,\"232\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"404\":1,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"615\":1,\"649\":1,\"650\":1,\"661\":1,\"695\":1,\"696\":1,\"707\":1,\"741\":1,\"742\":1,\"753\":1,\"787\":1,\"788\":1,\"890\":1,\"1069\":1,\"1220\":1,\"1395\":1,\"1572\":1,\"1749\":1,\"1926\":1,\"2103\":1,\"2293\":1,\"2512\":1,\"2731\":1}}],[\"string\",{\"1\":{\"345\":2,\"355\":1,\"381\":1,\"798\":2,\"915\":1,\"925\":2,\"1007\":1,\"1229\":1,\"1262\":1,\"1405\":1,\"1483\":1,\"1582\":1,\"1660\":1,\"1759\":1,\"1837\":1,\"1936\":1,\"2014\":1,\"2113\":1,\"2191\":1,\"2201\":2,\"2318\":1,\"2328\":2,\"2410\":1,\"2420\":2,\"2537\":1,\"2547\":2,\"2629\":1,\"2639\":2,\"2756\":1,\"2766\":2,\"2848\":1}}],[\"stringent\",{\"1\":{\"5\":1}}],[\"strive\",{\"1\":{\"38\":1}}],[\"f0\",{\"1\":{\"798\":2,\"925\":2,\"1229\":2,\"1405\":2,\"1582\":2,\"1759\":2,\"1936\":2,\"2113\":2,\"2201\":2,\"2328\":2,\"2420\":2,\"2547\":2,\"2639\":2,\"2766\":2}}],[\"f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f\",{\"1\":{\"438\":1,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1}}],[\"f3a2\",{\"1\":{\"285\":2,\"296\":2}}],[\"fttp\",{\"1\":{\"281\":1,\"292\":1,\"435\":1,\"461\":1,\"484\":1,\"510\":1,\"540\":1,\"570\":1,\"600\":1,\"646\":1,\"692\":1,\"738\":1,\"784\":1}}],[\"fssl\",{\"1\":{\"279\":1,\"290\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"f\",{\"1\":{\"131\":4,\"285\":1,\"286\":2,\"296\":1,\"297\":2,\"299\":1,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"438\":1,\"439\":1,\"440\":1,\"444\":1,\"445\":1,\"464\":1,\"465\":1,\"466\":1,\"487\":1,\"488\":1,\"489\":1,\"493\":1,\"494\":1,\"513\":1,\"514\":1,\"515\":1,\"519\":1,\"520\":1,\"543\":1,\"544\":1,\"545\":1,\"549\":1,\"550\":1,\"573\":1,\"574\":1,\"575\":1,\"579\":1,\"580\":1,\"603\":1,\"604\":1,\"605\":1,\"609\":1,\"610\":1,\"649\":1,\"650\":1,\"651\":1,\"655\":1,\"656\":1,\"695\":1,\"696\":1,\"697\":1,\"701\":1,\"702\":1,\"741\":1,\"742\":1,\"743\":1,\"747\":1,\"748\":1,\"787\":1,\"788\":1,\"789\":1,\"793\":1,\"794\":1}}],[\"fqdns\",{\"1\":{\"108\":1,\"163\":1}}],[\"fqdn\",{\"1\":{\"108\":3,\"109\":2,\"163\":3,\"164\":2,\"204\":1,\"259\":1,\"266\":2,\"280\":2,\"281\":1,\"285\":5,\"286\":4,\"291\":2,\"292\":1,\"296\":8,\"297\":4,\"300\":2,\"303\":1,\"424\":1,\"434\":2,\"435\":1,\"438\":4,\"439\":2,\"454\":1,\"460\":2,\"461\":1,\"464\":5,\"465\":4,\"466\":2,\"477\":1,\"483\":2,\"484\":1,\"487\":4,\"488\":3,\"489\":2,\"503\":1,\"509\":2,\"510\":1,\"513\":4,\"514\":3,\"515\":2,\"529\":1,\"539\":2,\"540\":1,\"543\":4,\"544\":3,\"545\":2,\"559\":1,\"569\":2,\"570\":1,\"573\":4,\"574\":2,\"575\":2,\"589\":1,\"599\":2,\"600\":1,\"603\":4,\"604\":2,\"605\":2,\"635\":1,\"645\":2,\"646\":1,\"649\":4,\"650\":2,\"651\":2,\"681\":1,\"691\":2,\"692\":1,\"695\":4,\"696\":2,\"697\":2,\"727\":1,\"737\":2,\"738\":1,\"741\":4,\"742\":2,\"773\":1,\"783\":2,\"784\":1,\"787\":4,\"788\":2,\"910\":2,\"958\":1,\"1002\":2,\"1043\":1,\"1121\":1,\"1131\":2,\"1194\":1,\"1259\":1,\"1302\":2,\"1435\":1,\"1478\":2,\"1612\":1,\"1655\":2,\"1789\":1,\"1832\":2,\"1966\":1,\"2009\":2,\"2143\":1,\"2186\":2,\"2313\":2,\"2361\":1,\"2405\":2,\"2532\":2,\"2580\":1,\"2624\":2,\"2751\":2,\"2799\":1,\"2843\":2}}],[\"fdgp+\",{\"1\":{\"77\":1}}],[\"fdpg\",{\"1\":{\"16\":1,\"77\":2,\"87\":1,\"122\":1}}],[\"fdpg+\",{\"1\":{\"14\":1,\"41\":1,\"77\":2}}],[\"fowler\",{\"1\":{\"411\":3,\"622\":3,\"668\":3,\"714\":3,\"760\":3}}],[\"foster\",{\"1\":{\"401\":1,\"612\":1,\"658\":1,\"704\":1,\"750\":1}}],[\"footer\",{\"1\":{\"214\":1,\"871\":1,\"1053\":1,\"1204\":1,\"1376\":1,\"1553\":1,\"1730\":1,\"1907\":1,\"2084\":1,\"2274\":1,\"2493\":1,\"2712\":1}}],[\"foo\",{\"1\":{\"187\":1,\"193\":1,\"196\":1,\"203\":1,\"241\":1,\"256\":1,\"285\":4,\"286\":2,\"296\":5,\"297\":2,\"359\":1,\"385\":1,\"438\":4,\"439\":2,\"464\":4,\"465\":2,\"487\":4,\"488\":2,\"513\":4,\"514\":2,\"543\":4,\"544\":2,\"573\":4,\"574\":2,\"603\":4,\"604\":2,\"649\":4,\"650\":2,\"695\":4,\"696\":2,\"741\":4,\"742\":2,\"787\":4,\"788\":2,\"861\":1,\"893\":1,\"897\":1,\"899\":1,\"956\":1,\"964\":1,\"966\":1,\"1042\":1,\"1071\":1,\"1073\":1,\"1119\":1,\"1125\":1,\"1127\":1,\"1193\":1,\"1222\":1,\"1224\":1,\"1257\":1,\"1264\":1,\"1266\":1,\"1366\":1,\"1398\":1,\"1400\":1,\"1433\":1,\"1440\":1,\"1442\":1,\"1543\":1,\"1575\":1,\"1577\":1,\"1610\":1,\"1617\":1,\"1619\":1,\"1720\":1,\"1752\":1,\"1754\":1,\"1787\":1,\"1794\":1,\"1796\":1,\"1897\":1,\"1929\":1,\"1931\":1,\"1964\":1,\"1971\":1,\"1973\":1,\"2074\":1,\"2106\":1,\"2108\":1,\"2141\":1,\"2148\":1,\"2150\":1,\"2264\":1,\"2296\":1,\"2300\":1,\"2302\":1,\"2359\":1,\"2367\":1,\"2369\":1,\"2483\":1,\"2515\":1,\"2519\":1,\"2521\":1,\"2578\":1,\"2586\":1,\"2588\":1,\"2702\":1,\"2734\":1,\"2738\":1,\"2740\":1,\"2797\":1,\"2805\":1,\"2807\":1}}],[\"folders\",{\"1\":{\"286\":2,\"297\":2,\"439\":1,\"442\":1,\"465\":1,\"468\":1,\"488\":1,\"491\":1,\"514\":1,\"517\":1,\"544\":1,\"547\":1,\"574\":1,\"577\":1,\"604\":1,\"607\":1,\"650\":1,\"653\":1,\"696\":1,\"699\":1,\"742\":1,\"745\":1,\"788\":1,\"791\":1}}],[\"folder\",{\"1\":{\"130\":2,\"131\":4,\"148\":2,\"149\":2,\"285\":2,\"286\":1,\"296\":2,\"297\":1,\"327\":1,\"342\":1,\"429\":1,\"438\":2,\"439\":1,\"464\":2,\"465\":1,\"487\":2,\"488\":1,\"513\":2,\"514\":1,\"543\":2,\"544\":1,\"573\":2,\"574\":1,\"603\":2,\"604\":1,\"649\":2,\"650\":1,\"695\":2,\"696\":1,\"741\":2,\"742\":1,\"778\":1,\"787\":2,\"788\":1}}],[\"followed\",{\"1\":{\"367\":1}}],[\"follows\",{\"1\":{\"70\":1,\"159\":1,\"342\":1}}],[\"following\",{\"1\":{\"37\":1,\"84\":1,\"93\":2,\"99\":1,\"100\":1,\"101\":1,\"102\":1,\"103\":1,\"126\":1,\"134\":1,\"148\":1,\"149\":1,\"158\":1,\"285\":2,\"286\":2,\"296\":2,\"297\":2,\"307\":1,\"310\":1,\"344\":1,\"352\":1,\"353\":1,\"359\":1,\"369\":1,\"377\":1,\"385\":1,\"394\":1,\"396\":1,\"404\":1,\"405\":1,\"409\":1,\"412\":1,\"430\":1,\"438\":2,\"439\":1,\"440\":1,\"442\":1,\"456\":1,\"464\":2,\"465\":1,\"466\":1,\"468\":1,\"479\":1,\"487\":2,\"488\":1,\"489\":1,\"491\":1,\"505\":1,\"513\":2,\"514\":1,\"515\":1,\"517\":1,\"535\":1,\"543\":2,\"544\":1,\"545\":1,\"547\":1,\"565\":1,\"573\":2,\"574\":1,\"575\":1,\"577\":1,\"595\":1,\"603\":2,\"604\":1,\"605\":1,\"607\":1,\"615\":1,\"616\":1,\"620\":1,\"623\":1,\"641\":1,\"649\":2,\"650\":1,\"651\":1,\"653\":1,\"661\":1,\"662\":1,\"666\":1,\"669\":1,\"687\":1,\"695\":2,\"696\":1,\"697\":1,\"699\":1,\"707\":1,\"708\":1,\"712\":1,\"715\":1,\"733\":1,\"741\":2,\"742\":1,\"743\":1,\"745\":1,\"753\":1,\"754\":1,\"758\":1,\"761\":1,\"779\":1,\"787\":2,\"788\":1,\"789\":1,\"791\":1,\"903\":1,\"994\":1,\"995\":1,\"1294\":1,\"1295\":1,\"1470\":1,\"1471\":1,\"1647\":1,\"1648\":1,\"1824\":1,\"1825\":1,\"2001\":1,\"2002\":1,\"2178\":1,\"2179\":1,\"2306\":1,\"2397\":1,\"2398\":1,\"2525\":1,\"2616\":1,\"2617\":1,\"2744\":1,\"2835\":1,\"2836\":1}}],[\"follow\",{\"1\":{\"36\":1,\"69\":1,\"75\":1,\"153\":1,\"307\":1,\"310\":1,\"411\":1,\"453\":1,\"476\":1,\"492\":1,\"502\":1,\"518\":1,\"528\":1,\"548\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"fourth\",{\"1\":{\"373\":1,\"389\":1}}],[\"four\",{\"1\":{\"90\":1,\"354\":1,\"380\":1}}],[\"founded\",{\"1\":{\"94\":1}}],[\"foundational\",{\"1\":{\"90\":1}}],[\"found\",{\"1\":{\"37\":1,\"96\":1,\"105\":1,\"106\":1,\"122\":1,\"126\":1,\"143\":1,\"148\":1,\"149\":1,\"150\":1,\"152\":1,\"166\":1,\"314\":1,\"378\":1,\"391\":1,\"393\":1,\"395\":1,\"397\":2,\"398\":1,\"425\":1,\"428\":1,\"441\":1,\"455\":1,\"467\":1,\"478\":1,\"490\":1,\"504\":1,\"516\":1,\"530\":1,\"546\":1,\"560\":1,\"576\":1,\"590\":1,\"606\":1,\"636\":1,\"652\":1,\"682\":1,\"698\":1,\"728\":1,\"744\":1,\"774\":1,\"777\":1,\"790\":1,\"2855\":1}}],[\"focusing\",{\"1\":{\"77\":1}}],[\"focuses\",{\"1\":{\"77\":1,\"316\":1,\"325\":1}}],[\"focus\",{\"1\":{\"74\":1}}],[\"forward\",{\"1\":{\"897\":1,\"898\":1,\"899\":2,\"900\":1,\"964\":1,\"965\":1,\"966\":2,\"967\":1,\"1071\":1,\"1072\":1,\"1073\":2,\"1074\":1,\"1125\":1,\"1126\":1,\"1127\":2,\"1128\":1,\"1222\":1,\"1223\":1,\"1224\":2,\"1225\":1,\"1264\":1,\"1265\":1,\"1266\":2,\"1267\":1,\"1398\":1,\"1399\":1,\"1400\":2,\"1401\":1,\"1440\":1,\"1441\":1,\"1442\":2,\"1443\":1,\"1575\":1,\"1576\":1,\"1577\":2,\"1578\":1,\"1617\":1,\"1618\":1,\"1619\":2,\"1620\":1,\"1752\":1,\"1753\":1,\"1754\":2,\"1755\":1,\"1794\":1,\"1795\":1,\"1796\":2,\"1797\":1,\"1929\":1,\"1930\":1,\"1931\":2,\"1932\":1,\"1971\":1,\"1972\":1,\"1973\":2,\"1974\":1,\"2106\":1,\"2107\":1,\"2108\":2,\"2109\":1,\"2148\":1,\"2149\":1,\"2150\":2,\"2151\":1,\"2300\":1,\"2301\":1,\"2302\":2,\"2303\":1,\"2367\":1,\"2368\":1,\"2369\":2,\"2370\":1,\"2519\":1,\"2520\":1,\"2521\":2,\"2522\":1,\"2586\":1,\"2587\":1,\"2588\":2,\"2589\":1,\"2738\":1,\"2739\":1,\"2740\":2,\"2741\":1,\"2805\":1,\"2806\":1,\"2807\":2,\"2808\":1}}],[\"force\",{\"1\":{\"832\":1,\"942\":1,\"1017\":1,\"1108\":1,\"1168\":1,\"1246\":1,\"1340\":1,\"1422\":1,\"1517\":1,\"1599\":1,\"1694\":1,\"1776\":1,\"1871\":1,\"1953\":1,\"2048\":1,\"2130\":1,\"2235\":1,\"2345\":1,\"2454\":1,\"2564\":1,\"2673\":1,\"2783\":1}}],[\"forceunlock\",{\"0\":{\"832\":1,\"942\":1,\"1017\":1,\"1108\":1,\"1168\":1,\"1246\":1,\"1340\":1,\"1422\":1,\"1517\":1,\"1599\":1,\"1694\":1,\"1776\":1,\"1871\":1,\"1953\":1,\"2048\":1,\"2130\":1,\"2235\":1,\"2345\":1,\"2454\":1,\"2564\":1,\"2673\":1,\"2783\":1},\"1\":{\"832\":1,\"942\":1,\"1017\":1,\"1108\":1,\"1168\":1,\"1246\":1,\"1340\":1,\"1422\":1,\"1517\":1,\"1599\":1,\"1694\":1,\"1776\":1,\"1871\":1,\"1953\":1,\"2048\":1,\"2130\":1,\"2235\":1,\"2345\":1,\"2454\":1,\"2564\":1,\"2673\":1,\"2783\":1}}],[\"fork\",{\"1\":{\"410\":1,\"621\":1,\"667\":1,\"713\":1,\"759\":1}}],[\"forget\",{\"1\":{\"141\":1}}],[\"forschungsdaten\",{\"1\":{\"122\":1}}],[\"forschungsdatenportal\",{\"1\":{\"87\":1}}],[\"formalities\",{\"1\":{\"99\":1}}],[\"formatter\",{\"1\":{\"155\":319,\"156\":1,\"403\":1,\"614\":1,\"660\":1,\"706\":1,\"752\":1}}],[\"formatted\",{\"1\":{\"152\":1,\"403\":1,\"614\":1,\"660\":1,\"706\":1,\"752\":1}}],[\"format\",{\"1\":{\"90\":1,\"122\":1,\"152\":1,\"155\":8,\"378\":1,\"403\":1,\"614\":1,\"660\":1,\"706\":1,\"752\":1}}],[\"formats\",{\"1\":{\"9\":1,\"90\":1,\"91\":1}}],[\"forms\",{\"1\":{\"92\":1}}],[\"form\",{\"1\":{\"17\":1,\"342\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1,\"798\":1,\"925\":1,\"932\":1,\"1229\":1,\"1236\":1,\"1405\":1,\"1412\":1,\"1582\":1,\"1589\":1,\"1759\":1,\"1766\":1,\"1936\":1,\"1943\":1,\"2113\":1,\"2120\":1,\"2201\":1,\"2328\":1,\"2335\":1,\"2420\":1,\"2547\":1,\"2554\":1,\"2639\":1,\"2766\":1,\"2773\":1}}],[\"former\",{\"1\":{\"1\":1,\"350\":1}}],[\"for\",{\"0\":{\"5\":1,\"133\":1,\"354\":1,\"380\":1,\"396\":1},\"1\":{\"0\":1,\"1\":3,\"5\":1,\"6\":1,\"9\":1,\"12\":1,\"20\":3,\"26\":1,\"29\":1,\"37\":1,\"39\":1,\"70\":1,\"71\":1,\"72\":1,\"77\":2,\"84\":3,\"85\":2,\"86\":1,\"87\":2,\"90\":2,\"91\":5,\"92\":2,\"93\":2,\"94\":7,\"95\":12,\"96\":1,\"98\":2,\"100\":1,\"105\":2,\"106\":2,\"112\":2,\"113\":6,\"114\":2,\"115\":1,\"116\":2,\"123\":3,\"125\":1,\"126\":1,\"130\":1,\"131\":1,\"133\":2,\"137\":1,\"138\":1,\"141\":2,\"142\":1,\"148\":1,\"149\":1,\"150\":1,\"152\":1,\"153\":2,\"155\":59,\"158\":1,\"159\":1,\"161\":2,\"165\":12,\"166\":1,\"170\":3,\"173\":1,\"174\":1,\"175\":1,\"176\":1,\"180\":1,\"181\":1,\"182\":1,\"183\":1,\"201\":1,\"218\":1,\"227\":3,\"228\":3,\"232\":1,\"234\":3,\"237\":1,\"245\":1,\"249\":1,\"252\":1,\"253\":1,\"254\":1,\"261\":1,\"262\":2,\"267\":2,\"268\":2,\"269\":2,\"270\":2,\"276\":2,\"279\":1,\"281\":2,\"285\":4,\"286\":5,\"287\":2,\"290\":1,\"292\":2,\"296\":4,\"297\":5,\"299\":1,\"300\":7,\"302\":1,\"303\":5,\"305\":1,\"306\":5,\"308\":1,\"309\":3,\"311\":1,\"312\":3,\"314\":2,\"315\":1,\"316\":1,\"317\":1,\"318\":1,\"319\":1,\"320\":1,\"321\":1,\"327\":3,\"328\":8,\"329\":2,\"331\":1,\"334\":4,\"337\":3,\"338\":3,\"342\":2,\"343\":4,\"344\":7,\"348\":2,\"352\":5,\"353\":4,\"354\":2,\"358\":2,\"360\":4,\"363\":4,\"367\":1,\"368\":1,\"369\":1,\"373\":3,\"377\":2,\"378\":1,\"379\":2,\"380\":2,\"384\":2,\"386\":3,\"389\":7,\"391\":1,\"392\":1,\"393\":1,\"395\":1,\"397\":3,\"398\":1,\"400\":1,\"403\":1,\"409\":1,\"411\":7,\"412\":2,\"413\":2,\"414\":1,\"415\":12,\"423\":2,\"424\":1,\"425\":4,\"426\":1,\"427\":3,\"429\":3,\"430\":2,\"433\":1,\"435\":1,\"438\":6,\"439\":2,\"441\":2,\"442\":4,\"444\":1,\"445\":2,\"453\":5,\"454\":1,\"455\":1,\"456\":3,\"459\":1,\"461\":1,\"464\":5,\"465\":2,\"467\":2,\"468\":1,\"476\":5,\"477\":1,\"478\":1,\"479\":3,\"482\":1,\"484\":1,\"487\":6,\"488\":2,\"490\":2,\"491\":1,\"493\":1,\"494\":2,\"502\":5,\"503\":1,\"504\":1,\"505\":3,\"508\":1,\"510\":1,\"513\":6,\"514\":2,\"516\":2,\"517\":1,\"519\":3,\"520\":3,\"528\":3,\"529\":1,\"530\":4,\"535\":2,\"538\":1,\"540\":1,\"543\":6,\"544\":2,\"546\":2,\"547\":4,\"549\":1,\"550\":2,\"558\":2,\"559\":1,\"560\":4,\"565\":2,\"568\":1,\"570\":1,\"573\":6,\"574\":2,\"576\":2,\"577\":4,\"579\":1,\"580\":2,\"588\":2,\"589\":1,\"590\":4,\"595\":2,\"598\":1,\"600\":1,\"603\":6,\"604\":2,\"606\":2,\"607\":4,\"609\":1,\"610\":2,\"611\":1,\"614\":1,\"620\":1,\"622\":7,\"623\":2,\"624\":2,\"625\":1,\"626\":12,\"634\":2,\"635\":1,\"636\":4,\"641\":2,\"644\":1,\"646\":1,\"649\":6,\"650\":2,\"652\":2,\"653\":4,\"655\":1,\"656\":2,\"657\":1,\"660\":1,\"666\":1,\"668\":7,\"669\":2,\"670\":2,\"671\":1,\"672\":12,\"680\":2,\"681\":1,\"682\":4,\"687\":2,\"690\":1,\"692\":1,\"695\":6,\"696\":2,\"698\":2,\"699\":4,\"701\":1,\"702\":2,\"703\":1,\"706\":1,\"712\":1,\"714\":7,\"715\":2,\"716\":2,\"717\":1,\"718\":12,\"726\":2,\"727\":1,\"728\":4,\"733\":2,\"736\":1,\"738\":1,\"741\":6,\"742\":2,\"744\":2,\"745\":4,\"747\":1,\"748\":2,\"749\":1,\"752\":1,\"758\":1,\"760\":7,\"761\":2,\"762\":2,\"763\":1,\"764\":12,\"772\":2,\"773\":1,\"774\":4,\"775\":1,\"776\":3,\"778\":3,\"779\":2,\"782\":1,\"784\":1,\"787\":6,\"788\":2,\"790\":2,\"791\":4,\"793\":1,\"794\":2,\"798\":7,\"817\":1,\"818\":1,\"819\":1,\"822\":1,\"824\":1,\"825\":2,\"826\":2,\"827\":2,\"828\":2,\"829\":1,\"836\":1,\"837\":1,\"838\":1,\"839\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"850\":1,\"859\":1,\"875\":1,\"890\":1,\"895\":1,\"902\":2,\"904\":2,\"911\":2,\"912\":2,\"913\":2,\"914\":2,\"925\":7,\"935\":1,\"940\":1,\"946\":1,\"949\":1,\"950\":1,\"951\":1,\"962\":1,\"977\":1,\"978\":1,\"979\":1,\"982\":1,\"984\":1,\"985\":2,\"986\":2,\"987\":2,\"988\":2,\"989\":1,\"993\":3,\"996\":2,\"1003\":2,\"1004\":2,\"1005\":2,\"1006\":2,\"1016\":1,\"1021\":1,\"1022\":1,\"1023\":1,\"1024\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1031\":1,\"1040\":1,\"1057\":1,\"1069\":1,\"1085\":1,\"1086\":1,\"1087\":1,\"1090\":1,\"1092\":1,\"1093\":2,\"1094\":2,\"1095\":2,\"1096\":2,\"1097\":1,\"1100\":1,\"1101\":1,\"1106\":1,\"1112\":1,\"1115\":1,\"1116\":1,\"1117\":1,\"1124\":1,\"1132\":2,\"1133\":2,\"1134\":2,\"1135\":2,\"1153\":1,\"1154\":1,\"1155\":1,\"1158\":1,\"1160\":1,\"1161\":2,\"1162\":2,\"1163\":2,\"1164\":2,\"1165\":1,\"1172\":1,\"1173\":1,\"1174\":1,\"1175\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1182\":1,\"1191\":1,\"1208\":1,\"1220\":1,\"1229\":6,\"1239\":1,\"1244\":1,\"1250\":1,\"1253\":1,\"1254\":1,\"1255\":1,\"1263\":1,\"1277\":1,\"1278\":1,\"1279\":1,\"1282\":1,\"1284\":1,\"1285\":2,\"1286\":2,\"1287\":2,\"1288\":2,\"1289\":1,\"1293\":3,\"1296\":2,\"1303\":2,\"1304\":2,\"1305\":2,\"1306\":2,\"1325\":1,\"1326\":1,\"1327\":1,\"1330\":1,\"1332\":1,\"1333\":2,\"1334\":2,\"1335\":2,\"1336\":2,\"1337\":1,\"1344\":1,\"1345\":1,\"1346\":1,\"1347\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1355\":1,\"1364\":1,\"1380\":1,\"1395\":1,\"1405\":6,\"1415\":1,\"1420\":1,\"1426\":1,\"1429\":1,\"1430\":1,\"1431\":1,\"1439\":1,\"1453\":1,\"1454\":1,\"1455\":1,\"1458\":1,\"1460\":1,\"1461\":2,\"1462\":2,\"1463\":2,\"1464\":2,\"1465\":1,\"1469\":3,\"1472\":2,\"1479\":2,\"1480\":2,\"1481\":2,\"1482\":2,\"1502\":1,\"1503\":1,\"1504\":1,\"1507\":1,\"1509\":1,\"1510\":2,\"1511\":2,\"1512\":2,\"1513\":2,\"1514\":1,\"1521\":1,\"1522\":1,\"1523\":1,\"1524\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1532\":1,\"1541\":1,\"1557\":1,\"1572\":1,\"1582\":6,\"1592\":1,\"1597\":1,\"1603\":1,\"1606\":1,\"1607\":1,\"1608\":1,\"1616\":1,\"1630\":1,\"1631\":1,\"1632\":1,\"1635\":1,\"1637\":1,\"1638\":2,\"1639\":2,\"1640\":2,\"1641\":2,\"1642\":1,\"1646\":3,\"1649\":2,\"1656\":2,\"1657\":2,\"1658\":2,\"1659\":2,\"1679\":1,\"1680\":1,\"1681\":1,\"1684\":1,\"1686\":1,\"1687\":2,\"1688\":2,\"1689\":2,\"1690\":2,\"1691\":1,\"1698\":1,\"1699\":1,\"1700\":1,\"1701\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1709\":1,\"1718\":1,\"1734\":1,\"1749\":1,\"1759\":6,\"1769\":1,\"1774\":1,\"1780\":1,\"1783\":1,\"1784\":1,\"1785\":1,\"1793\":1,\"1807\":1,\"1808\":1,\"1809\":1,\"1812\":1,\"1814\":1,\"1815\":2,\"1816\":2,\"1817\":2,\"1818\":2,\"1819\":1,\"1823\":3,\"1826\":2,\"1833\":2,\"1834\":2,\"1835\":2,\"1836\":2,\"1856\":1,\"1857\":1,\"1858\":1,\"1861\":1,\"1863\":1,\"1864\":2,\"1865\":2,\"1866\":2,\"1867\":2,\"1868\":1,\"1875\":1,\"1876\":1,\"1877\":1,\"1878\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1886\":1,\"1895\":1,\"1911\":1,\"1926\":1,\"1936\":6,\"1946\":1,\"1951\":1,\"1957\":1,\"1960\":1,\"1961\":1,\"1962\":1,\"1970\":1,\"1984\":1,\"1985\":1,\"1986\":1,\"1989\":1,\"1991\":1,\"1992\":2,\"1993\":2,\"1994\":2,\"1995\":2,\"1996\":1,\"2000\":3,\"2003\":2,\"2010\":2,\"2011\":2,\"2012\":2,\"2013\":2,\"2033\":1,\"2034\":1,\"2035\":1,\"2038\":1,\"2040\":1,\"2041\":2,\"2042\":2,\"2043\":2,\"2044\":2,\"2045\":1,\"2052\":1,\"2053\":1,\"2054\":1,\"2055\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2063\":1,\"2072\":1,\"2088\":1,\"2103\":1,\"2113\":6,\"2123\":1,\"2128\":1,\"2134\":1,\"2137\":1,\"2138\":1,\"2139\":1,\"2147\":1,\"2161\":1,\"2162\":1,\"2163\":1,\"2166\":1,\"2168\":1,\"2169\":2,\"2170\":2,\"2171\":2,\"2172\":2,\"2173\":1,\"2177\":3,\"2180\":2,\"2187\":2,\"2188\":2,\"2189\":2,\"2190\":2,\"2201\":7,\"2220\":1,\"2221\":1,\"2222\":1,\"2225\":1,\"2227\":1,\"2228\":2,\"2229\":2,\"2230\":2,\"2231\":2,\"2232\":1,\"2239\":1,\"2240\":1,\"2241\":1,\"2242\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2253\":1,\"2262\":1,\"2278\":1,\"2293\":1,\"2298\":1,\"2305\":2,\"2307\":2,\"2314\":2,\"2315\":2,\"2316\":2,\"2317\":2,\"2328\":7,\"2338\":1,\"2343\":1,\"2349\":1,\"2352\":1,\"2353\":1,\"2354\":1,\"2365\":1,\"2380\":1,\"2381\":1,\"2382\":1,\"2385\":1,\"2387\":1,\"2388\":2,\"2389\":2,\"2390\":2,\"2391\":2,\"2392\":1,\"2396\":3,\"2399\":2,\"2406\":2,\"2407\":2,\"2408\":2,\"2409\":2,\"2420\":7,\"2439\":1,\"2440\":1,\"2441\":1,\"2444\":1,\"2446\":1,\"2447\":2,\"2448\":2,\"2449\":2,\"2450\":2,\"2451\":1,\"2458\":1,\"2459\":1,\"2460\":1,\"2461\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2472\":1,\"2481\":1,\"2497\":1,\"2512\":1,\"2517\":1,\"2524\":2,\"2526\":2,\"2533\":2,\"2534\":2,\"2535\":2,\"2536\":2,\"2547\":7,\"2557\":1,\"2562\":1,\"2568\":1,\"2571\":1,\"2572\":1,\"2573\":1,\"2584\":1,\"2599\":1,\"2600\":1,\"2601\":1,\"2604\":1,\"2606\":1,\"2607\":2,\"2608\":2,\"2609\":2,\"2610\":2,\"2611\":1,\"2615\":3,\"2618\":2,\"2625\":2,\"2626\":2,\"2627\":2,\"2628\":2,\"2639\":7,\"2658\":1,\"2659\":1,\"2660\":1,\"2663\":1,\"2665\":1,\"2666\":2,\"2667\":2,\"2668\":2,\"2669\":2,\"2670\":1,\"2677\":1,\"2678\":1,\"2679\":1,\"2680\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2691\":1,\"2700\":1,\"2716\":1,\"2731\":1,\"2736\":1,\"2743\":2,\"2745\":2,\"2752\":2,\"2753\":2,\"2754\":2,\"2755\":2,\"2766\":7,\"2776\":1,\"2781\":1,\"2787\":1,\"2790\":1,\"2791\":1,\"2792\":1,\"2803\":1,\"2818\":1,\"2819\":1,\"2820\":1,\"2823\":1,\"2825\":1,\"2826\":2,\"2827\":2,\"2828\":2,\"2829\":2,\"2830\":1,\"2834\":3,\"2837\":2,\"2844\":2,\"2845\":2,\"2846\":2,\"2847\":2}}],[\"fall\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"falls\",{\"1\":{\"22\":1}}],[\"false\",{\"1\":{\"155\":25,\"156\":12,\"180\":1,\"181\":1,\"182\":1,\"191\":1,\"200\":1,\"218\":1,\"219\":1,\"226\":1,\"246\":1,\"345\":1,\"348\":1,\"369\":1,\"811\":1,\"812\":1,\"814\":1,\"832\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"855\":1,\"858\":1,\"875\":1,\"876\":1,\"883\":1,\"895\":2,\"941\":1,\"942\":1,\"953\":1,\"954\":1,\"955\":1,\"962\":2,\"971\":1,\"972\":1,\"974\":1,\"1017\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1036\":1,\"1039\":1,\"1057\":1,\"1058\":1,\"1065\":1,\"1079\":1,\"1080\":1,\"1082\":1,\"1107\":1,\"1108\":1,\"1124\":2,\"1147\":1,\"1148\":1,\"1150\":1,\"1168\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1187\":1,\"1190\":1,\"1208\":1,\"1209\":1,\"1216\":1,\"1245\":1,\"1246\":1,\"1263\":2,\"1271\":1,\"1272\":1,\"1274\":1,\"1319\":1,\"1320\":1,\"1322\":1,\"1340\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1360\":1,\"1363\":1,\"1380\":1,\"1381\":1,\"1388\":1,\"1421\":1,\"1422\":1,\"1439\":2,\"1447\":1,\"1448\":1,\"1450\":1,\"1496\":1,\"1497\":1,\"1499\":1,\"1517\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1537\":1,\"1540\":1,\"1557\":1,\"1558\":1,\"1565\":1,\"1598\":1,\"1599\":1,\"1616\":2,\"1624\":1,\"1625\":1,\"1627\":1,\"1673\":1,\"1674\":1,\"1676\":1,\"1694\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1714\":1,\"1717\":1,\"1734\":1,\"1735\":1,\"1742\":1,\"1775\":1,\"1776\":1,\"1793\":2,\"1801\":1,\"1802\":1,\"1804\":1,\"1850\":1,\"1851\":1,\"1853\":1,\"1871\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1891\":1,\"1894\":1,\"1911\":1,\"1912\":1,\"1919\":1,\"1952\":1,\"1953\":1,\"1970\":2,\"1978\":1,\"1979\":1,\"1981\":1,\"2027\":1,\"2028\":1,\"2030\":1,\"2048\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2068\":1,\"2071\":1,\"2088\":1,\"2089\":1,\"2096\":1,\"2129\":1,\"2130\":1,\"2147\":2,\"2155\":1,\"2156\":1,\"2158\":1,\"2214\":1,\"2215\":1,\"2217\":1,\"2235\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2258\":1,\"2261\":1,\"2278\":1,\"2279\":1,\"2286\":1,\"2298\":2,\"2344\":1,\"2345\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2365\":2,\"2374\":1,\"2375\":1,\"2377\":1,\"2433\":1,\"2434\":1,\"2436\":1,\"2454\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2477\":1,\"2480\":1,\"2497\":1,\"2498\":1,\"2505\":1,\"2517\":2,\"2563\":1,\"2564\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2584\":2,\"2593\":1,\"2594\":1,\"2596\":1,\"2652\":1,\"2653\":1,\"2655\":1,\"2673\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2696\":1,\"2699\":1,\"2716\":1,\"2717\":1,\"2724\":1,\"2736\":2,\"2782\":1,\"2783\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2803\":2,\"2812\":1,\"2813\":1,\"2815\":1}}],[\"factory\",{\"0\":{\"170\":1,\"227\":1,\"228\":1,\"234\":1},\"1\":{\"148\":3,\"149\":3,\"170\":4,\"227\":4,\"228\":4,\"234\":4}}],[\"facilitating\",{\"1\":{\"8\":1}}],[\"facilitate\",{\"1\":{\"6\":1}}],[\"fast\",{\"1\":{\"105\":1}}],[\"failures\",{\"1\":{\"333\":1,\"347\":1,\"362\":1,\"372\":1,\"388\":1}}],[\"failure\",{\"1\":{\"299\":2,\"300\":2,\"302\":2,\"303\":2,\"305\":2,\"306\":2,\"308\":2,\"309\":1,\"311\":2,\"312\":1,\"444\":2,\"445\":1,\"493\":2,\"494\":1,\"519\":2,\"520\":1,\"549\":2,\"550\":1,\"579\":2,\"580\":1,\"609\":2,\"610\":1,\"655\":2,\"656\":1,\"701\":2,\"702\":1,\"747\":2,\"748\":1,\"793\":2,\"794\":1}}],[\"failed\",{\"1\":{\"93\":1}}],[\"faith\",{\"1\":{\"39\":1}}],[\"familiar\",{\"1\":{\"70\":1}}],[\"fifth\",{\"1\":{\"389\":1}}],[\"field\",{\"1\":{\"155\":4,\"344\":2,\"345\":1,\"801\":1,\"928\":1,\"1232\":1,\"1408\":1,\"1585\":1,\"1762\":1,\"1939\":1,\"2116\":1,\"2204\":1,\"2331\":1,\"2423\":1,\"2550\":1,\"2642\":1,\"2769\":1}}],[\"fields\",{\"1\":{\"75\":1,\"155\":2,\"344\":1}}],[\"fixing\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"fixed\",{\"1\":{\"345\":1}}],[\"fixes\",{\"1\":{\"153\":1}}],[\"fix\",{\"1\":{\"154\":2,\"413\":1,\"415\":1,\"624\":1,\"626\":1,\"670\":1,\"672\":1,\"716\":1,\"718\":1,\"762\":1,\"764\":1}}],[\"figure\",{\"1\":{\"100\":1,\"126\":1,\"360\":1,\"386\":2}}],[\"fit\",{\"1\":{\"93\":1}}],[\"fits\",{\"1\":{\"93\":1}}],[\"finishes\",{\"1\":{\"389\":1}}],[\"finished\",{\"1\":{\"334\":1,\"348\":1}}],[\"finish\",{\"1\":{\"377\":3,\"386\":1,\"389\":1}}],[\"fingerprint\",{\"1\":{\"285\":1,\"296\":1,\"438\":1,\"464\":1,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1,\"798\":1,\"925\":1,\"959\":1,\"1229\":1,\"1260\":1,\"1405\":1,\"1436\":1,\"1582\":1,\"1613\":1,\"1759\":1,\"1790\":1,\"1936\":1,\"1967\":1,\"2113\":1,\"2144\":1,\"2201\":1,\"2328\":1,\"2362\":1,\"2420\":1,\"2547\":1,\"2581\":1,\"2639\":1,\"2766\":1,\"2800\":1}}],[\"finally\",{\"1\":{\"113\":1,\"155\":1,\"156\":1}}],[\"final\",{\"0\":{\"137\":1},\"1\":{\"90\":1,\"321\":1,\"375\":1}}],[\"findings\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"find\",{\"1\":{\"30\":1,\"40\":1,\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"70\":1,\"88\":1,\"89\":1,\"396\":1,\"404\":1,\"413\":1,\"415\":1,\"427\":1,\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"531\":1,\"545\":1,\"561\":1,\"575\":1,\"591\":1,\"605\":1,\"615\":1,\"624\":1,\"626\":1,\"637\":1,\"651\":1,\"661\":1,\"670\":1,\"672\":1,\"683\":1,\"697\":1,\"707\":1,\"716\":1,\"718\":1,\"729\":1,\"743\":1,\"753\":1,\"762\":1,\"764\":1,\"776\":1,\"789\":1}}],[\"finden\",{\"1\":{\"17\":1}}],[\"fires\",{\"1\":{\"378\":1}}],[\"fire\",{\"1\":{\"377\":1}}],[\"firewall\",{\"1\":{\"33\":1,\"442\":1,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"791\":1}}],[\"firewallregeln\",{\"1\":{\"16\":1}}],[\"first\",{\"1\":{\"81\":1,\"95\":1,\"155\":4,\"156\":1,\"165\":1,\"298\":1,\"301\":1,\"314\":1,\"316\":1,\"325\":1,\"334\":1,\"338\":1,\"363\":1,\"370\":1,\"377\":1,\"379\":1,\"389\":1,\"404\":1,\"443\":2,\"548\":2,\"578\":2,\"608\":2,\"615\":1,\"654\":2,\"661\":1,\"700\":2,\"707\":1,\"746\":2,\"753\":1,\"792\":2,\"806\":2,\"933\":2,\"1237\":2,\"1413\":2,\"1590\":2,\"1767\":2,\"1944\":2,\"2121\":2,\"2209\":2,\"2336\":2,\"2428\":2,\"2555\":2,\"2647\":2,\"2774\":2}}],[\"fill\",{\"1\":{\"282\":1,\"293\":1}}],[\"filter\",{\"1\":{\"143\":2}}],[\"filters\",{\"1\":{\"95\":1,\"165\":1}}],[\"filtering\",{\"1\":{\"0\":1,\"32\":1}}],[\"files\",{\"1\":{\"137\":1,\"138\":1,\"150\":1,\"258\":1,\"285\":3,\"286\":4,\"296\":3,\"297\":4,\"298\":1,\"299\":1,\"300\":1,\"301\":1,\"303\":1,\"304\":1,\"306\":1,\"307\":1,\"310\":1,\"412\":2,\"438\":3,\"439\":3,\"440\":2,\"442\":1,\"443\":1,\"464\":3,\"465\":3,\"466\":2,\"487\":3,\"488\":3,\"489\":2,\"492\":1,\"513\":3,\"514\":3,\"515\":2,\"518\":1,\"543\":3,\"544\":3,\"545\":2,\"547\":1,\"548\":1,\"573\":3,\"574\":3,\"575\":2,\"577\":1,\"578\":1,\"603\":3,\"604\":3,\"605\":2,\"607\":1,\"608\":1,\"623\":2,\"649\":3,\"650\":3,\"651\":2,\"653\":1,\"654\":1,\"669\":2,\"695\":3,\"696\":3,\"697\":2,\"699\":1,\"700\":1,\"715\":2,\"741\":3,\"742\":3,\"743\":2,\"745\":1,\"746\":1,\"761\":2,\"787\":3,\"788\":3,\"789\":2,\"791\":1,\"792\":1,\"957\":1,\"1120\":1,\"1258\":1,\"1434\":1,\"1611\":1,\"1788\":1,\"1965\":1,\"2142\":1,\"2360\":1,\"2579\":1,\"2798\":1}}],[\"file\",{\"0\":{\"171\":1,\"175\":1,\"178\":1,\"185\":1,\"186\":1,\"192\":1,\"195\":1,\"210\":1,\"215\":1,\"221\":1,\"239\":1,\"240\":1,\"247\":1,\"251\":1,\"253\":1,\"271\":1,\"272\":1,\"273\":1,\"274\":1,\"275\":1,\"819\":1,\"828\":1,\"834\":1,\"838\":1,\"841\":1,\"852\":1,\"867\":1,\"872\":1,\"878\":1,\"898\":1,\"916\":1,\"917\":1,\"918\":1,\"919\":1,\"920\":1,\"937\":1,\"944\":1,\"948\":1,\"950\":1,\"965\":1,\"979\":1,\"988\":1,\"1008\":1,\"1009\":1,\"1010\":1,\"1011\":1,\"1012\":1,\"1019\":1,\"1023\":1,\"1026\":1,\"1033\":1,\"1049\":1,\"1054\":1,\"1060\":1,\"1072\":1,\"1087\":1,\"1096\":1,\"1103\":1,\"1110\":1,\"1114\":1,\"1116\":1,\"1126\":1,\"1136\":1,\"1137\":1,\"1138\":1,\"1139\":1,\"1140\":1,\"1155\":1,\"1164\":1,\"1170\":1,\"1174\":1,\"1177\":1,\"1184\":1,\"1200\":1,\"1205\":1,\"1211\":1,\"1223\":1,\"1241\":1,\"1248\":1,\"1252\":1,\"1254\":1,\"1265\":1,\"1279\":1,\"1288\":1,\"1307\":1,\"1308\":1,\"1309\":1,\"1310\":1,\"1311\":1,\"1327\":1,\"1336\":1,\"1342\":1,\"1346\":1,\"1349\":1,\"1357\":1,\"1372\":1,\"1377\":1,\"1383\":1,\"1399\":1,\"1417\":1,\"1424\":1,\"1428\":1,\"1430\":1,\"1441\":1,\"1455\":1,\"1464\":1,\"1484\":1,\"1485\":1,\"1486\":1,\"1487\":1,\"1488\":1,\"1504\":1,\"1513\":1,\"1519\":1,\"1523\":1,\"1526\":1,\"1534\":1,\"1549\":1,\"1554\":1,\"1560\":1,\"1576\":1,\"1594\":1,\"1601\":1,\"1605\":1,\"1607\":1,\"1618\":1,\"1632\":1,\"1641\":1,\"1661\":1,\"1662\":1,\"1663\":1,\"1664\":1,\"1665\":1,\"1681\":1,\"1690\":1,\"1696\":1,\"1700\":1,\"1703\":1,\"1711\":1,\"1726\":1,\"1731\":1,\"1737\":1,\"1753\":1,\"1771\":1,\"1778\":1,\"1782\":1,\"1784\":1,\"1795\":1,\"1809\":1,\"1818\":1,\"1838\":1,\"1839\":1,\"1840\":1,\"1841\":1,\"1842\":1,\"1858\":1,\"1867\":1,\"1873\":1,\"1877\":1,\"1880\":1,\"1888\":1,\"1903\":1,\"1908\":1,\"1914\":1,\"1930\":1,\"1948\":1,\"1955\":1,\"1959\":1,\"1961\":1,\"1972\":1,\"1986\":1,\"1995\":1,\"2015\":1,\"2016\":1,\"2017\":1,\"2018\":1,\"2019\":1,\"2035\":1,\"2044\":1,\"2050\":1,\"2054\":1,\"2057\":1,\"2065\":1,\"2080\":1,\"2085\":1,\"2091\":1,\"2107\":1,\"2125\":1,\"2132\":1,\"2136\":1,\"2138\":1,\"2149\":1,\"2163\":1,\"2172\":1,\"2192\":1,\"2193\":1,\"2194\":1,\"2195\":1,\"2196\":1,\"2222\":1,\"2231\":1,\"2237\":1,\"2241\":1,\"2244\":1,\"2255\":1,\"2270\":1,\"2275\":1,\"2281\":1,\"2301\":1,\"2319\":1,\"2320\":1,\"2321\":1,\"2322\":1,\"2323\":1,\"2340\":1,\"2347\":1,\"2351\":1,\"2353\":1,\"2368\":1,\"2382\":1,\"2391\":1,\"2411\":1,\"2412\":1,\"2413\":1,\"2414\":1,\"2415\":1,\"2441\":1,\"2450\":1,\"2456\":1,\"2460\":1,\"2463\":1,\"2474\":1,\"2489\":1,\"2494\":1,\"2500\":1,\"2520\":1,\"2538\":1,\"2539\":1,\"2540\":1,\"2541\":1,\"2542\":1,\"2559\":1,\"2566\":1,\"2570\":1,\"2572\":1,\"2587\":1,\"2601\":1,\"2610\":1,\"2630\":1,\"2631\":1,\"2632\":1,\"2633\":1,\"2634\":1,\"2660\":1,\"2669\":1,\"2675\":1,\"2679\":1,\"2682\":1,\"2693\":1,\"2708\":1,\"2713\":1,\"2719\":1,\"2739\":1,\"2757\":1,\"2758\":1,\"2759\":1,\"2760\":1,\"2761\":1,\"2778\":1,\"2785\":1,\"2789\":1,\"2791\":1,\"2806\":1,\"2820\":1,\"2829\":1,\"2849\":1,\"2850\":1,\"2851\":1,\"2852\":1,\"2853\":1},\"1\":{\"37\":1,\"86\":1,\"98\":1,\"130\":1,\"131\":1,\"141\":2,\"148\":1,\"149\":1,\"150\":1,\"155\":1,\"159\":1,\"171\":2,\"175\":2,\"178\":2,\"183\":2,\"184\":3,\"185\":2,\"186\":2,\"192\":2,\"195\":2,\"201\":2,\"208\":2,\"209\":3,\"210\":2,\"214\":1,\"215\":2,\"220\":2,\"221\":3,\"224\":2,\"237\":2,\"238\":3,\"239\":2,\"240\":2,\"245\":2,\"247\":2,\"251\":2,\"253\":2,\"271\":3,\"272\":4,\"273\":5,\"274\":3,\"275\":3,\"284\":4,\"285\":14,\"286\":8,\"295\":4,\"296\":14,\"297\":8,\"298\":1,\"299\":1,\"300\":2,\"302\":1,\"303\":2,\"305\":1,\"306\":2,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"323\":49,\"327\":1,\"328\":1,\"334\":1,\"337\":1,\"348\":2,\"360\":2,\"363\":1,\"373\":1,\"386\":5,\"389\":1,\"396\":2,\"403\":2,\"427\":1,\"429\":4,\"437\":4,\"438\":23,\"439\":8,\"444\":1,\"445\":1,\"463\":4,\"464\":24,\"465\":8,\"486\":4,\"487\":23,\"488\":8,\"493\":1,\"494\":1,\"512\":4,\"513\":23,\"514\":8,\"519\":1,\"520\":3,\"542\":4,\"543\":23,\"544\":8,\"549\":1,\"550\":1,\"572\":4,\"573\":23,\"574\":8,\"579\":1,\"580\":1,\"602\":4,\"603\":23,\"604\":8,\"609\":1,\"610\":1,\"614\":2,\"648\":4,\"649\":23,\"650\":8,\"655\":1,\"656\":1,\"660\":2,\"694\":4,\"695\":23,\"696\":8,\"701\":1,\"702\":1,\"706\":2,\"740\":4,\"741\":23,\"742\":8,\"747\":1,\"748\":1,\"752\":2,\"776\":1,\"778\":4,\"786\":4,\"787\":23,\"788\":8,\"793\":1,\"794\":1,\"817\":2,\"818\":3,\"819\":2,\"822\":2,\"824\":2,\"825\":1,\"826\":1,\"827\":1,\"828\":1,\"834\":2,\"838\":2,\"841\":2,\"850\":2,\"851\":3,\"852\":2,\"859\":2,\"865\":2,\"866\":3,\"867\":2,\"871\":1,\"872\":2,\"877\":2,\"878\":3,\"881\":2,\"898\":2,\"904\":1,\"905\":1,\"916\":3,\"917\":4,\"918\":5,\"919\":3,\"920\":3,\"935\":2,\"936\":3,\"937\":2,\"940\":2,\"944\":2,\"948\":2,\"950\":2,\"965\":2,\"977\":2,\"978\":3,\"979\":2,\"982\":2,\"984\":2,\"985\":1,\"986\":1,\"987\":1,\"988\":1,\"996\":1,\"997\":1,\"1008\":3,\"1009\":4,\"1010\":5,\"1011\":3,\"1012\":3,\"1019\":2,\"1023\":2,\"1026\":2,\"1031\":2,\"1032\":3,\"1033\":2,\"1040\":2,\"1047\":2,\"1048\":3,\"1049\":2,\"1053\":1,\"1054\":2,\"1059\":2,\"1060\":3,\"1063\":2,\"1072\":2,\"1085\":2,\"1086\":3,\"1087\":2,\"1090\":2,\"1092\":2,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":1,\"1101\":2,\"1102\":3,\"1103\":2,\"1106\":2,\"1110\":2,\"1114\":2,\"1116\":2,\"1126\":2,\"1136\":3,\"1137\":4,\"1138\":5,\"1139\":3,\"1140\":3,\"1153\":2,\"1154\":3,\"1155\":2,\"1158\":2,\"1160\":2,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":1,\"1170\":2,\"1174\":2,\"1177\":2,\"1182\":2,\"1183\":3,\"1184\":2,\"1191\":2,\"1198\":2,\"1199\":3,\"1200\":2,\"1204\":1,\"1205\":2,\"1210\":2,\"1211\":3,\"1214\":2,\"1223\":2,\"1239\":2,\"1240\":3,\"1241\":2,\"1244\":2,\"1248\":2,\"1252\":2,\"1254\":2,\"1265\":2,\"1277\":2,\"1278\":3,\"1279\":2,\"1282\":2,\"1284\":2,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":1,\"1296\":1,\"1297\":1,\"1307\":3,\"1308\":4,\"1309\":5,\"1310\":3,\"1311\":3,\"1325\":2,\"1326\":3,\"1327\":2,\"1330\":2,\"1332\":2,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":1,\"1342\":2,\"1346\":2,\"1349\":2,\"1355\":2,\"1356\":3,\"1357\":2,\"1364\":2,\"1370\":2,\"1371\":3,\"1372\":2,\"1376\":1,\"1377\":2,\"1382\":2,\"1383\":3,\"1386\":2,\"1399\":2,\"1415\":2,\"1416\":3,\"1417\":2,\"1420\":2,\"1424\":2,\"1428\":2,\"1430\":2,\"1441\":2,\"1453\":2,\"1454\":3,\"1455\":2,\"1458\":2,\"1460\":2,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":1,\"1472\":1,\"1473\":1,\"1484\":3,\"1485\":4,\"1486\":5,\"1487\":3,\"1488\":3,\"1502\":2,\"1503\":3,\"1504\":2,\"1507\":2,\"1509\":2,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":1,\"1519\":2,\"1523\":2,\"1526\":2,\"1532\":2,\"1533\":3,\"1534\":2,\"1541\":2,\"1547\":2,\"1548\":3,\"1549\":2,\"1553\":1,\"1554\":2,\"1559\":2,\"1560\":3,\"1563\":2,\"1576\":2,\"1592\":2,\"1593\":3,\"1594\":2,\"1597\":2,\"1601\":2,\"1605\":2,\"1607\":2,\"1618\":2,\"1630\":2,\"1631\":3,\"1632\":2,\"1635\":2,\"1637\":2,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":1,\"1649\":1,\"1650\":1,\"1661\":3,\"1662\":4,\"1663\":5,\"1664\":3,\"1665\":3,\"1679\":2,\"1680\":3,\"1681\":2,\"1684\":2,\"1686\":2,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":1,\"1696\":2,\"1700\":2,\"1703\":2,\"1709\":2,\"1710\":3,\"1711\":2,\"1718\":2,\"1724\":2,\"1725\":3,\"1726\":2,\"1730\":1,\"1731\":2,\"1736\":2,\"1737\":3,\"1740\":2,\"1753\":2,\"1769\":2,\"1770\":3,\"1771\":2,\"1774\":2,\"1778\":2,\"1782\":2,\"1784\":2,\"1795\":2,\"1807\":2,\"1808\":3,\"1809\":2,\"1812\":2,\"1814\":2,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":1,\"1826\":1,\"1827\":1,\"1838\":3,\"1839\":4,\"1840\":5,\"1841\":3,\"1842\":3,\"1856\":2,\"1857\":3,\"1858\":2,\"1861\":2,\"1863\":2,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":1,\"1873\":2,\"1877\":2,\"1880\":2,\"1886\":2,\"1887\":3,\"1888\":2,\"1895\":2,\"1901\":2,\"1902\":3,\"1903\":2,\"1907\":1,\"1908\":2,\"1913\":2,\"1914\":3,\"1917\":2,\"1930\":2,\"1946\":2,\"1947\":3,\"1948\":2,\"1951\":2,\"1955\":2,\"1959\":2,\"1961\":2,\"1972\":2,\"1984\":2,\"1985\":3,\"1986\":2,\"1989\":2,\"1991\":2,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":1,\"2003\":1,\"2004\":1,\"2015\":3,\"2016\":4,\"2017\":5,\"2018\":3,\"2019\":3,\"2033\":2,\"2034\":3,\"2035\":2,\"2038\":2,\"2040\":2,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":1,\"2050\":2,\"2054\":2,\"2057\":2,\"2063\":2,\"2064\":3,\"2065\":2,\"2072\":2,\"2078\":2,\"2079\":3,\"2080\":2,\"2084\":1,\"2085\":2,\"2090\":2,\"2091\":3,\"2094\":2,\"2107\":2,\"2123\":2,\"2124\":3,\"2125\":2,\"2128\":2,\"2132\":2,\"2136\":2,\"2138\":2,\"2149\":2,\"2161\":2,\"2162\":3,\"2163\":2,\"2166\":2,\"2168\":2,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":1,\"2180\":1,\"2181\":1,\"2192\":3,\"2193\":4,\"2194\":5,\"2195\":3,\"2196\":3,\"2220\":2,\"2221\":3,\"2222\":2,\"2225\":2,\"2227\":2,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":1,\"2237\":2,\"2241\":2,\"2244\":2,\"2253\":2,\"2254\":3,\"2255\":2,\"2262\":2,\"2268\":2,\"2269\":3,\"2270\":2,\"2274\":1,\"2275\":2,\"2280\":2,\"2281\":3,\"2284\":2,\"2301\":2,\"2307\":1,\"2308\":1,\"2319\":3,\"2320\":4,\"2321\":5,\"2322\":3,\"2323\":3,\"2338\":2,\"2339\":3,\"2340\":2,\"2343\":2,\"2347\":2,\"2351\":2,\"2353\":2,\"2368\":2,\"2380\":2,\"2381\":3,\"2382\":2,\"2385\":2,\"2387\":2,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":1,\"2399\":1,\"2400\":1,\"2411\":3,\"2412\":4,\"2413\":5,\"2414\":3,\"2415\":3,\"2439\":2,\"2440\":3,\"2441\":2,\"2444\":2,\"2446\":2,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":1,\"2456\":2,\"2460\":2,\"2463\":2,\"2472\":2,\"2473\":3,\"2474\":2,\"2481\":2,\"2487\":2,\"2488\":3,\"2489\":2,\"2493\":1,\"2494\":2,\"2499\":2,\"2500\":3,\"2503\":2,\"2520\":2,\"2526\":1,\"2527\":1,\"2538\":3,\"2539\":4,\"2540\":5,\"2541\":3,\"2542\":3,\"2557\":2,\"2558\":3,\"2559\":2,\"2562\":2,\"2566\":2,\"2570\":2,\"2572\":2,\"2587\":2,\"2599\":2,\"2600\":3,\"2601\":2,\"2604\":2,\"2606\":2,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":1,\"2618\":1,\"2619\":1,\"2630\":3,\"2631\":4,\"2632\":5,\"2633\":3,\"2634\":3,\"2658\":2,\"2659\":3,\"2660\":2,\"2663\":2,\"2665\":2,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":1,\"2675\":2,\"2679\":2,\"2682\":2,\"2691\":2,\"2692\":3,\"2693\":2,\"2700\":2,\"2706\":2,\"2707\":3,\"2708\":2,\"2712\":1,\"2713\":2,\"2718\":2,\"2719\":3,\"2722\":2,\"2739\":2,\"2745\":1,\"2746\":1,\"2757\":3,\"2758\":4,\"2759\":5,\"2760\":3,\"2761\":3,\"2776\":2,\"2777\":3,\"2778\":2,\"2781\":2,\"2785\":2,\"2789\":2,\"2791\":2,\"2806\":2,\"2818\":2,\"2819\":3,\"2820\":2,\"2823\":2,\"2825\":2,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":1,\"2837\":1,\"2838\":1,\"2849\":3,\"2850\":4,\"2851\":5,\"2852\":3,\"2853\":3}}],[\"friendly\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"frir\",{\"1\":{\"285\":2,\"286\":1,\"296\":3,\"297\":1,\"300\":2,\"303\":1}}],[\"frontend\",{\"1\":{\"166\":1,\"323\":15}}],[\"fromaddress\",{\"0\":{\"211\":1,\"868\":1,\"1050\":1,\"1201\":1,\"1373\":1,\"1550\":1,\"1727\":1,\"1904\":1,\"2081\":1,\"2271\":1,\"2490\":1,\"2709\":1},\"1\":{\"211\":1,\"868\":1,\"1050\":1,\"1201\":1,\"1373\":1,\"1550\":1,\"1727\":1,\"1904\":1,\"2081\":1,\"2271\":1,\"2490\":1,\"2709\":1}}],[\"from\",{\"0\":{\"298\":1,\"301\":1,\"304\":1,\"307\":1,\"310\":1,\"419\":1,\"442\":1,\"443\":1,\"449\":1,\"468\":1,\"472\":1,\"491\":1,\"492\":1,\"498\":1,\"517\":1,\"518\":1,\"524\":1,\"547\":1,\"548\":1,\"554\":1,\"577\":1,\"578\":1,\"584\":1,\"607\":1,\"608\":1,\"630\":1,\"653\":1,\"654\":1,\"676\":1,\"699\":1,\"700\":1,\"722\":1,\"745\":1,\"746\":1,\"768\":1,\"791\":1,\"792\":1},\"1\":{\"28\":1,\"42\":3,\"44\":2,\"46\":3,\"48\":3,\"50\":3,\"52\":3,\"54\":3,\"56\":3,\"58\":3,\"60\":3,\"62\":3,\"77\":3,\"84\":1,\"87\":1,\"90\":1,\"94\":2,\"95\":1,\"102\":1,\"103\":1,\"105\":1,\"108\":2,\"109\":1,\"112\":1,\"113\":2,\"116\":1,\"123\":2,\"124\":1,\"126\":1,\"130\":4,\"131\":2,\"132\":1,\"137\":3,\"138\":2,\"143\":1,\"148\":1,\"149\":1,\"153\":1,\"155\":1,\"159\":1,\"163\":2,\"164\":1,\"165\":1,\"171\":1,\"172\":1,\"173\":1,\"174\":1,\"175\":1,\"176\":1,\"177\":1,\"178\":1,\"179\":1,\"190\":1,\"191\":1,\"199\":1,\"200\":1,\"202\":1,\"207\":1,\"229\":1,\"232\":1,\"244\":1,\"246\":1,\"247\":1,\"248\":1,\"249\":1,\"250\":1,\"251\":1,\"252\":1,\"253\":1,\"254\":1,\"255\":1,\"257\":1,\"258\":2,\"261\":1,\"262\":1,\"272\":1,\"280\":1,\"285\":2,\"286\":7,\"291\":1,\"296\":2,\"297\":6,\"298\":3,\"299\":1,\"300\":15,\"301\":5,\"302\":1,\"303\":15,\"304\":2,\"305\":1,\"306\":6,\"307\":2,\"308\":1,\"309\":1,\"310\":2,\"311\":1,\"312\":1,\"328\":2,\"331\":1,\"342\":2,\"343\":1,\"345\":4,\"350\":1,\"352\":1,\"357\":1,\"358\":1,\"375\":1,\"377\":2,\"383\":1,\"384\":1,\"386\":2,\"391\":1,\"394\":1,\"415\":1,\"417\":1,\"421\":1,\"423\":1,\"424\":2,\"434\":1,\"438\":2,\"439\":3,\"440\":1,\"442\":2,\"443\":2,\"444\":1,\"445\":1,\"447\":1,\"451\":1,\"453\":1,\"454\":2,\"460\":1,\"464\":3,\"465\":3,\"466\":1,\"468\":3,\"470\":1,\"474\":1,\"476\":1,\"477\":2,\"483\":1,\"487\":2,\"488\":3,\"489\":1,\"491\":3,\"492\":3,\"493\":1,\"494\":1,\"496\":1,\"500\":1,\"502\":1,\"503\":2,\"509\":1,\"513\":2,\"514\":3,\"515\":1,\"517\":3,\"518\":3,\"519\":1,\"520\":1,\"522\":1,\"526\":1,\"528\":1,\"529\":2,\"539\":1,\"543\":2,\"544\":3,\"545\":1,\"547\":2,\"548\":4,\"549\":1,\"550\":1,\"552\":1,\"556\":1,\"558\":1,\"559\":2,\"569\":1,\"573\":2,\"574\":3,\"575\":1,\"577\":2,\"578\":2,\"579\":1,\"580\":1,\"582\":1,\"586\":1,\"588\":1,\"589\":2,\"599\":1,\"603\":2,\"604\":3,\"605\":1,\"607\":2,\"608\":2,\"609\":1,\"610\":1,\"626\":1,\"628\":1,\"632\":1,\"634\":1,\"635\":2,\"645\":1,\"649\":2,\"650\":3,\"651\":1,\"653\":2,\"654\":2,\"655\":1,\"656\":1,\"672\":1,\"674\":1,\"678\":1,\"680\":1,\"681\":2,\"691\":1,\"695\":2,\"696\":3,\"697\":1,\"699\":2,\"700\":2,\"701\":1,\"702\":1,\"718\":1,\"720\":1,\"724\":1,\"726\":1,\"727\":2,\"737\":1,\"741\":2,\"742\":3,\"743\":1,\"745\":2,\"746\":2,\"747\":1,\"748\":1,\"764\":1,\"766\":1,\"770\":1,\"772\":1,\"773\":2,\"783\":1,\"787\":2,\"788\":3,\"789\":1,\"791\":2,\"792\":2,\"793\":1,\"794\":1,\"800\":1,\"801\":1,\"806\":1,\"810\":1,\"824\":1,\"834\":1,\"835\":1,\"836\":1,\"837\":1,\"838\":1,\"839\":1,\"840\":1,\"841\":1,\"842\":1,\"854\":1,\"855\":1,\"857\":1,\"858\":1,\"860\":1,\"864\":1,\"887\":1,\"890\":1,\"917\":1,\"927\":1,\"928\":1,\"932\":1,\"933\":1,\"939\":1,\"941\":1,\"944\":1,\"945\":1,\"946\":1,\"947\":1,\"948\":1,\"949\":1,\"950\":1,\"951\":1,\"952\":1,\"957\":2,\"970\":1,\"984\":1,\"1009\":1,\"1019\":1,\"1020\":1,\"1021\":1,\"1022\":1,\"1023\":1,\"1024\":1,\"1025\":1,\"1026\":1,\"1027\":1,\"1035\":1,\"1036\":1,\"1038\":1,\"1039\":1,\"1041\":1,\"1046\":1,\"1066\":1,\"1069\":1,\"1078\":1,\"1092\":1,\"1105\":1,\"1107\":1,\"1110\":1,\"1111\":1,\"1112\":1,\"1113\":1,\"1114\":1,\"1115\":1,\"1116\":1,\"1117\":1,\"1118\":1,\"1120\":2,\"1137\":1,\"1146\":1,\"1160\":1,\"1170\":1,\"1171\":1,\"1172\":1,\"1173\":1,\"1174\":1,\"1175\":1,\"1176\":1,\"1177\":1,\"1178\":1,\"1186\":1,\"1187\":1,\"1189\":1,\"1190\":1,\"1192\":1,\"1197\":1,\"1217\":1,\"1220\":1,\"1231\":1,\"1232\":1,\"1236\":1,\"1237\":1,\"1243\":1,\"1245\":1,\"1248\":1,\"1249\":1,\"1250\":1,\"1251\":1,\"1252\":1,\"1253\":1,\"1254\":1,\"1255\":1,\"1256\":1,\"1258\":2,\"1270\":1,\"1284\":1,\"1308\":1,\"1318\":1,\"1332\":1,\"1342\":1,\"1343\":1,\"1344\":1,\"1345\":1,\"1346\":1,\"1347\":1,\"1348\":1,\"1349\":1,\"1350\":1,\"1359\":1,\"1360\":1,\"1362\":1,\"1363\":1,\"1365\":1,\"1369\":1,\"1392\":1,\"1395\":1,\"1407\":1,\"1408\":1,\"1412\":1,\"1413\":1,\"1419\":1,\"1421\":1,\"1424\":1,\"1425\":1,\"1426\":1,\"1427\":1,\"1428\":1,\"1429\":1,\"1430\":1,\"1431\":1,\"1432\":1,\"1434\":2,\"1446\":1,\"1460\":1,\"1485\":1,\"1495\":1,\"1509\":1,\"1519\":1,\"1520\":1,\"1521\":1,\"1522\":1,\"1523\":1,\"1524\":1,\"1525\":1,\"1526\":1,\"1527\":1,\"1536\":1,\"1537\":1,\"1539\":1,\"1540\":1,\"1542\":1,\"1546\":1,\"1569\":1,\"1572\":1,\"1584\":1,\"1585\":1,\"1589\":1,\"1590\":1,\"1596\":1,\"1598\":1,\"1601\":1,\"1602\":1,\"1603\":1,\"1604\":1,\"1605\":1,\"1606\":1,\"1607\":1,\"1608\":1,\"1609\":1,\"1611\":2,\"1623\":1,\"1637\":1,\"1662\":1,\"1672\":1,\"1686\":1,\"1696\":1,\"1697\":1,\"1698\":1,\"1699\":1,\"1700\":1,\"1701\":1,\"1702\":1,\"1703\":1,\"1704\":1,\"1713\":1,\"1714\":1,\"1716\":1,\"1717\":1,\"1719\":1,\"1723\":1,\"1746\":1,\"1749\":1,\"1761\":1,\"1762\":1,\"1766\":1,\"1767\":1,\"1773\":1,\"1775\":1,\"1778\":1,\"1779\":1,\"1780\":1,\"1781\":1,\"1782\":1,\"1783\":1,\"1784\":1,\"1785\":1,\"1786\":1,\"1788\":2,\"1800\":1,\"1814\":1,\"1839\":1,\"1849\":1,\"1863\":1,\"1873\":1,\"1874\":1,\"1875\":1,\"1876\":1,\"1877\":1,\"1878\":1,\"1879\":1,\"1880\":1,\"1881\":1,\"1890\":1,\"1891\":1,\"1893\":1,\"1894\":1,\"1896\":1,\"1900\":1,\"1923\":1,\"1926\":1,\"1938\":1,\"1939\":1,\"1943\":1,\"1944\":1,\"1950\":1,\"1952\":1,\"1955\":1,\"1956\":1,\"1957\":1,\"1958\":1,\"1959\":1,\"1960\":1,\"1961\":1,\"1962\":1,\"1963\":1,\"1965\":2,\"1977\":1,\"1991\":1,\"2016\":1,\"2026\":1,\"2040\":1,\"2050\":1,\"2051\":1,\"2052\":1,\"2053\":1,\"2054\":1,\"2055\":1,\"2056\":1,\"2057\":1,\"2058\":1,\"2067\":1,\"2068\":1,\"2070\":1,\"2071\":1,\"2073\":1,\"2077\":1,\"2100\":1,\"2103\":1,\"2115\":1,\"2116\":1,\"2120\":1,\"2121\":1,\"2127\":1,\"2129\":1,\"2132\":1,\"2133\":1,\"2134\":1,\"2135\":1,\"2136\":1,\"2137\":1,\"2138\":1,\"2139\":1,\"2140\":1,\"2142\":2,\"2154\":1,\"2168\":1,\"2193\":1,\"2203\":1,\"2204\":1,\"2209\":1,\"2213\":1,\"2227\":1,\"2237\":1,\"2238\":1,\"2239\":1,\"2240\":1,\"2241\":1,\"2242\":1,\"2243\":1,\"2244\":1,\"2245\":1,\"2257\":1,\"2258\":1,\"2260\":1,\"2261\":1,\"2263\":1,\"2267\":1,\"2290\":1,\"2293\":1,\"2320\":1,\"2330\":1,\"2331\":1,\"2335\":1,\"2336\":1,\"2342\":1,\"2344\":1,\"2347\":1,\"2348\":1,\"2349\":1,\"2350\":1,\"2351\":1,\"2352\":1,\"2353\":1,\"2354\":1,\"2355\":1,\"2360\":2,\"2373\":1,\"2387\":1,\"2412\":1,\"2422\":1,\"2423\":1,\"2428\":1,\"2432\":1,\"2446\":1,\"2456\":1,\"2457\":1,\"2458\":1,\"2459\":1,\"2460\":1,\"2461\":1,\"2462\":1,\"2463\":1,\"2464\":1,\"2476\":1,\"2477\":1,\"2479\":1,\"2480\":1,\"2482\":1,\"2486\":1,\"2509\":1,\"2512\":1,\"2539\":1,\"2549\":1,\"2550\":1,\"2554\":1,\"2555\":1,\"2561\":1,\"2563\":1,\"2566\":1,\"2567\":1,\"2568\":1,\"2569\":1,\"2570\":1,\"2571\":1,\"2572\":1,\"2573\":1,\"2574\":1,\"2579\":2,\"2592\":1,\"2606\":1,\"2631\":1,\"2641\":1,\"2642\":1,\"2647\":1,\"2651\":1,\"2665\":1,\"2675\":1,\"2676\":1,\"2677\":1,\"2678\":1,\"2679\":1,\"2680\":1,\"2681\":1,\"2682\":1,\"2683\":1,\"2695\":1,\"2696\":1,\"2698\":1,\"2699\":1,\"2701\":1,\"2705\":1,\"2728\":1,\"2731\":1,\"2758\":1,\"2768\":1,\"2769\":1,\"2773\":1,\"2774\":1,\"2780\":1,\"2782\":1,\"2785\":1,\"2786\":1,\"2787\":1,\"2788\":1,\"2789\":1,\"2790\":1,\"2791\":1,\"2792\":1,\"2793\":1,\"2798\":2,\"2811\":1,\"2825\":1,\"2850\":1}}],[\"frequently\",{\"1\":{\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1}}],[\"free\",{\"1\":{\"67\":1,\"391\":1,\"392\":1,\"410\":1,\"413\":1,\"425\":1,\"441\":1,\"455\":1,\"467\":1,\"478\":1,\"490\":1,\"504\":1,\"516\":1,\"530\":1,\"546\":1,\"560\":1,\"576\":1,\"590\":1,\"606\":1,\"621\":1,\"624\":1,\"636\":1,\"652\":1,\"667\":1,\"670\":1,\"682\":1,\"698\":1,\"713\":1,\"716\":1,\"728\":1,\"744\":1,\"759\":1,\"762\":1,\"774\":1,\"790\":1}}],[\"freigaben\",{\"1\":{\"16\":1}}],[\"freigabe\",{\"1\":{\"16\":2}}],[\"fragen\",{\"1\":{\"22\":1}}],[\"framework\",{\"0\":{\"0\":1,\"77\":1},\"1\":{\"0\":1,\"1\":1,\"6\":1,\"26\":3,\"28\":1,\"29\":1,\"30\":2,\"32\":1,\"40\":1,\"42\":2,\"44\":2,\"46\":2,\"48\":2,\"50\":2,\"52\":2,\"54\":2,\"56\":2,\"58\":2,\"60\":2,\"62\":2,\"72\":1,\"84\":1,\"94\":1,\"95\":1,\"105\":1,\"112\":1,\"113\":2,\"126\":1,\"148\":1,\"149\":1,\"150\":1,\"165\":1,\"314\":1,\"328\":1,\"342\":1,\"400\":2,\"412\":1,\"413\":2,\"611\":2,\"623\":1,\"624\":2,\"657\":2,\"669\":1,\"670\":2,\"703\":2,\"715\":1,\"716\":2,\"749\":2,\"761\":1,\"762\":2}}],[\"für\",{\"1\":{\"15\":1,\"16\":2,\"17\":1,\"122\":1}}],[\"flp6zsd5qrmakgzmjxqxjmcwrtfa3dn8fa57h92y\",{\"1\":{\"130\":1}}],[\"flyer\",{\"1\":{\"122\":1}}],[\"flexible\",{\"0\":{\"87\":1},\"1\":{\"87\":1}}],[\"flexibility\",{\"0\":{\"9\":1},\"1\":{\"9\":1}}],[\"florian\",{\"1\":{\"79\":1}}],[\"flows\",{\"1\":{\"367\":1,\"370\":1}}],[\"flow\",{\"0\":{\"352\":1,\"811\":1,\"903\":1,\"971\":1,\"994\":1,\"1079\":1,\"1147\":1,\"1271\":1,\"1294\":1,\"1319\":1,\"1447\":1,\"1470\":1,\"1496\":1,\"1624\":1,\"1647\":1,\"1673\":1,\"1801\":1,\"1824\":1,\"1850\":1,\"1978\":1,\"2001\":1,\"2027\":1,\"2155\":1,\"2178\":1,\"2214\":1,\"2306\":1,\"2374\":1,\"2397\":1,\"2433\":1,\"2525\":1,\"2593\":1,\"2616\":1,\"2652\":1,\"2744\":1,\"2812\":1,\"2835\":1},\"1\":{\"70\":1,\"153\":1,\"319\":1,\"321\":1,\"350\":2,\"352\":3,\"367\":2,\"370\":1,\"375\":1,\"404\":1,\"615\":1,\"661\":1,\"707\":1,\"753\":1,\"811\":2,\"812\":1,\"815\":1,\"816\":1,\"902\":1,\"903\":2,\"905\":1,\"971\":2,\"972\":1,\"975\":1,\"976\":1,\"993\":1,\"994\":2,\"997\":1,\"1079\":2,\"1080\":1,\"1083\":1,\"1084\":1,\"1147\":2,\"1148\":1,\"1151\":1,\"1152\":1,\"1271\":2,\"1272\":1,\"1275\":1,\"1276\":1,\"1293\":1,\"1294\":2,\"1297\":1,\"1319\":2,\"1320\":1,\"1323\":1,\"1324\":1,\"1447\":2,\"1448\":1,\"1451\":1,\"1452\":1,\"1469\":1,\"1470\":2,\"1473\":1,\"1496\":2,\"1497\":1,\"1500\":1,\"1501\":1,\"1624\":2,\"1625\":1,\"1628\":1,\"1629\":1,\"1646\":1,\"1647\":2,\"1650\":1,\"1673\":2,\"1674\":1,\"1677\":1,\"1678\":1,\"1801\":2,\"1802\":1,\"1805\":1,\"1806\":1,\"1823\":1,\"1824\":2,\"1827\":1,\"1850\":2,\"1851\":1,\"1854\":1,\"1855\":1,\"1978\":2,\"1979\":1,\"1982\":1,\"1983\":1,\"2000\":1,\"2001\":2,\"2004\":1,\"2027\":2,\"2028\":1,\"2031\":1,\"2032\":1,\"2155\":2,\"2156\":1,\"2159\":1,\"2160\":1,\"2177\":1,\"2178\":2,\"2181\":1,\"2214\":2,\"2215\":1,\"2218\":1,\"2219\":1,\"2305\":1,\"2306\":2,\"2308\":1,\"2374\":2,\"2375\":1,\"2378\":1,\"2379\":1,\"2396\":1,\"2397\":2,\"2400\":1,\"2433\":2,\"2434\":1,\"2437\":1,\"2438\":1,\"2524\":1,\"2525\":2,\"2527\":1,\"2593\":2,\"2594\":1,\"2597\":1,\"2598\":1,\"2615\":1,\"2616\":2,\"2619\":1,\"2652\":2,\"2653\":1,\"2656\":1,\"2657\":1,\"2743\":1,\"2744\":2,\"2746\":1,\"2812\":2,\"2813\":1,\"2816\":1,\"2817\":1,\"2834\":1,\"2835\":2,\"2838\":1}}],[\"flare\",{\"1\":{\"14\":2,\"21\":1}}],[\"fulfilled\",{\"1\":{\"425\":1,\"455\":1,\"478\":1,\"504\":1,\"530\":1,\"560\":1,\"590\":1,\"636\":1,\"682\":1,\"728\":1,\"774\":1}}],[\"fulfill\",{\"1\":{\"330\":1,\"353\":1}}],[\"fully\",{\"1\":{\"328\":1}}],[\"full\",{\"1\":{\"148\":1,\"149\":1,\"885\":1,\"1390\":1,\"1567\":1,\"1744\":1,\"1921\":1,\"2098\":1,\"2288\":1,\"2507\":1,\"2726\":1}}],[\"future\",{\"1\":{\"113\":1,\"401\":1,\"411\":1,\"612\":1,\"622\":1,\"658\":1,\"668\":1,\"704\":1,\"714\":1,\"750\":1,\"760\":1}}],[\"function\",{\"1\":{\"180\":1,\"181\":1,\"182\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"953\":1,\"954\":1,\"955\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2794\":1,\"2795\":1,\"2796\":1}}],[\"functions\",{\"1\":{\"141\":3}}],[\"functionality\",{\"1\":{\"98\":1,\"408\":1,\"415\":1,\"619\":1,\"626\":1,\"665\":1,\"672\":1,\"711\":1,\"718\":1,\"757\":1,\"764\":1}}],[\"funktionstests\",{\"1\":{\"16\":1}}],[\"funktionen\",{\"1\":{\"14\":2}}],[\"fundamental\",{\"1\":{\"112\":1,\"113\":1}}],[\"funding\",{\"0\":{\"76\":1},\"1\":{\"4\":1,\"77\":3,\"78\":2,\"94\":1}}],[\"funded\",{\"1\":{\"0\":1,\"6\":1,\"72\":1,\"79\":1,\"94\":1,\"112\":1,\"122\":1}}],[\"furthermore\",{\"1\":{\"92\":1}}],[\"further\",{\"1\":{\"13\":1,\"72\":1,\"77\":4,\"122\":1}}],[\"fellow\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"feedback\",{\"1\":{\"113\":1,\"410\":1,\"411\":1,\"413\":1,\"415\":4,\"621\":1,\"622\":1,\"624\":1,\"626\":4,\"667\":1,\"668\":1,\"670\":1,\"672\":4,\"713\":1,\"714\":1,\"716\":1,\"718\":4,\"759\":1,\"760\":1,\"762\":1,\"764\":4}}],[\"feeling\",{\"1\":{\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1}}],[\"feel\",{\"1\":{\"67\":1,\"410\":2,\"413\":1,\"425\":1,\"441\":1,\"455\":1,\"467\":1,\"478\":1,\"490\":1,\"504\":1,\"516\":1,\"530\":1,\"546\":1,\"560\":1,\"576\":1,\"590\":1,\"606\":1,\"621\":2,\"624\":1,\"636\":1,\"652\":1,\"667\":2,\"670\":1,\"682\":1,\"698\":1,\"713\":2,\"716\":1,\"728\":1,\"744\":1,\"759\":2,\"762\":1,\"774\":1,\"790\":1}}],[\"fegeler\",{\"1\":{\"26\":9,\"73\":1,\"79\":1}}],[\"feature\",{\"1\":{\"71\":1,\"410\":1,\"415\":5,\"621\":1,\"626\":5,\"667\":1,\"672\":5,\"713\":1,\"718\":5,\"759\":1,\"764\":5}}],[\"features\",{\"0\":{\"7\":1,\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1},\"1\":{\"43\":2,\"45\":2,\"47\":2,\"49\":2,\"51\":2,\"53\":2,\"55\":2,\"57\":2,\"59\":2,\"61\":2,\"63\":2,\"153\":1,\"154\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"feasibility\",{\"0\":{\"121\":1,\"123\":1},\"1\":{\"0\":1,\"8\":1,\"14\":1,\"17\":1,\"20\":1,\"26\":2,\"29\":1,\"32\":1,\"94\":1,\"98\":2,\"113\":1,\"120\":1,\"122\":2,\"123\":2,\"124\":8,\"286\":2,\"300\":4,\"303\":4,\"427\":1,\"533\":2,\"563\":2,\"593\":2,\"639\":2,\"685\":2,\"731\":2,\"776\":1}}],[\"federated\",{\"1\":{\"26\":1,\"29\":1,\"94\":2}}],[\"federation\",{\"1\":{\"1\":1}}],[\"federal\",{\"1\":{\"0\":1,\"6\":1,\"94\":2,\"112\":1,\"122\":1}}],[\"fhirwebserviceclientjersey\",{\"1\":{\"142\":1}}],[\"fhirjettyserverhttps\",{\"1\":{\"130\":1}}],[\"fhir\",{\"0\":{\"17\":1,\"85\":1,\"91\":1,\"93\":1,\"108\":1,\"140\":1,\"163\":1,\"183\":1,\"184\":1,\"185\":2,\"186\":2,\"187\":1,\"188\":1,\"189\":1,\"190\":1,\"191\":1,\"192\":2,\"193\":1,\"194\":1,\"195\":2,\"196\":1,\"197\":1,\"198\":1,\"199\":1,\"200\":1,\"201\":1,\"202\":1,\"203\":1,\"204\":1,\"205\":1,\"206\":1,\"207\":1,\"230\":1,\"231\":1,\"236\":1,\"237\":1,\"238\":1,\"239\":2,\"240\":2,\"241\":1,\"242\":1,\"243\":1,\"244\":1,\"245\":1,\"246\":1,\"247\":2,\"248\":1,\"249\":1,\"250\":1,\"251\":2,\"252\":1,\"253\":2,\"254\":1,\"255\":1,\"256\":1,\"257\":1,\"258\":1,\"259\":1,\"260\":1,\"261\":1,\"262\":1,\"264\":1,\"285\":1,\"296\":1,\"299\":1,\"302\":1,\"305\":1,\"308\":1,\"311\":1,\"329\":1,\"352\":1,\"353\":1,\"438\":1,\"444\":1,\"464\":1,\"487\":1,\"493\":1,\"513\":1,\"519\":1,\"543\":1,\"549\":1,\"573\":1,\"579\":1,\"603\":1,\"609\":1,\"649\":1,\"655\":1,\"695\":1,\"701\":1,\"741\":1,\"747\":1,\"787\":1,\"793\":1,\"850\":1,\"851\":1,\"852\":2,\"853\":1,\"854\":1,\"855\":1,\"856\":1,\"857\":1,\"858\":1,\"859\":1,\"860\":1,\"861\":1,\"862\":1,\"863\":1,\"864\":1,\"888\":1,\"889\":1,\"922\":1,\"935\":1,\"936\":1,\"937\":2,\"938\":1,\"939\":1,\"940\":1,\"941\":1,\"942\":1,\"943\":1,\"944\":2,\"945\":1,\"946\":1,\"947\":1,\"948\":2,\"949\":1,\"950\":2,\"951\":1,\"952\":1,\"953\":1,\"954\":1,\"955\":1,\"956\":1,\"957\":1,\"958\":1,\"959\":1,\"960\":1,\"961\":1,\"962\":1,\"963\":1,\"998\":1,\"1031\":1,\"1032\":1,\"1033\":2,\"1034\":1,\"1035\":1,\"1036\":1,\"1037\":1,\"1038\":1,\"1039\":1,\"1040\":1,\"1041\":1,\"1042\":1,\"1043\":1,\"1044\":1,\"1045\":1,\"1046\":1,\"1067\":1,\"1068\":1,\"1100\":1,\"1101\":1,\"1102\":1,\"1103\":2,\"1104\":1,\"1105\":1,\"1106\":1,\"1107\":1,\"1108\":1,\"1109\":1,\"1110\":2,\"1111\":1,\"1112\":1,\"1113\":1,\"1114\":2,\"1115\":1,\"1116\":2,\"1117\":1,\"1118\":1,\"1119\":1,\"1120\":1,\"1121\":1,\"1122\":1,\"1123\":1,\"1124\":1,\"1129\":1,\"1182\":1,\"1183\":1,\"1184\":2,\"1185\":1,\"1186\":1,\"1187\":1,\"1188\":1,\"1189\":1,\"1190\":1,\"1191\":1,\"1192\":1,\"1193\":1,\"1194\":1,\"1195\":1,\"1196\":1,\"1197\":1,\"1218\":1,\"1219\":1,\"1226\":1,\"1239\":1,\"1240\":1,\"1241\":2,\"1242\":1,\"1243\":1,\"1244\":1,\"1245\":1,\"1246\":1,\"1247\":1,\"1248\":2,\"1249\":1,\"1250\":1,\"1251\":1,\"1252\":2,\"1253\":1,\"1254\":2,\"1255\":1,\"1256\":1,\"1257\":1,\"1258\":1,\"1259\":1,\"1260\":1,\"1261\":1,\"1262\":1,\"1263\":1,\"1298\":1,\"1355\":1,\"1356\":1,\"1357\":2,\"1358\":1,\"1359\":1,\"1360\":1,\"1361\":1,\"1362\":1,\"1363\":1,\"1364\":1,\"1365\":1,\"1366\":1,\"1367\":1,\"1368\":1,\"1369\":1,\"1393\":1,\"1394\":1,\"1402\":1,\"1415\":1,\"1416\":1,\"1417\":2,\"1418\":1,\"1419\":1,\"1420\":1,\"1421\":1,\"1422\":1,\"1423\":1,\"1424\":2,\"1425\":1,\"1426\":1,\"1427\":1,\"1428\":2,\"1429\":1,\"1430\":2,\"1431\":1,\"1432\":1,\"1433\":1,\"1434\":1,\"1435\":1,\"1436\":1,\"1437\":1,\"1438\":1,\"1439\":1,\"1474\":1,\"1532\":1,\"1533\":1,\"1534\":2,\"1535\":1,\"1536\":1,\"1537\":1,\"1538\":1,\"1539\":1,\"1540\":1,\"1541\":1,\"1542\":1,\"1543\":1,\"1544\":1,\"1545\":1,\"1546\":1,\"1570\":1,\"1571\":1,\"1579\":1,\"1592\":1,\"1593\":1,\"1594\":2,\"1595\":1,\"1596\":1,\"1597\":1,\"1598\":1,\"1599\":1,\"1600\":1,\"1601\":2,\"1602\":1,\"1603\":1,\"1604\":1,\"1605\":2,\"1606\":1,\"1607\":2,\"1608\":1,\"1609\":1,\"1610\":1,\"1611\":1,\"1612\":1,\"1613\":1,\"1614\":1,\"1615\":1,\"1616\":1,\"1651\":1,\"1709\":1,\"1710\":1,\"1711\":2,\"1712\":1,\"1713\":1,\"1714\":1,\"1715\":1,\"1716\":1,\"1717\":1,\"1718\":1,\"1719\":1,\"1720\":1,\"1721\":1,\"1722\":1,\"1723\":1,\"1747\":1,\"1748\":1,\"1756\":1,\"1769\":1,\"1770\":1,\"1771\":2,\"1772\":1,\"1773\":1,\"1774\":1,\"1775\":1,\"1776\":1,\"1777\":1,\"1778\":2,\"1779\":1,\"1780\":1,\"1781\":1,\"1782\":2,\"1783\":1,\"1784\":2,\"1785\":1,\"1786\":1,\"1787\":1,\"1788\":1,\"1789\":1,\"1790\":1,\"1791\":1,\"1792\":1,\"1793\":1,\"1828\":1,\"1886\":1,\"1887\":1,\"1888\":2,\"1889\":1,\"1890\":1,\"1891\":1,\"1892\":1,\"1893\":1,\"1894\":1,\"1895\":1,\"1896\":1,\"1897\":1,\"1898\":1,\"1899\":1,\"1900\":1,\"1924\":1,\"1925\":1,\"1933\":1,\"1946\":1,\"1947\":1,\"1948\":2,\"1949\":1,\"1950\":1,\"1951\":1,\"1952\":1,\"1953\":1,\"1954\":1,\"1955\":2,\"1956\":1,\"1957\":1,\"1958\":1,\"1959\":2,\"1960\":1,\"1961\":2,\"1962\":1,\"1963\":1,\"1964\":1,\"1965\":1,\"1966\":1,\"1967\":1,\"1968\":1,\"1969\":1,\"1970\":1,\"2005\":1,\"2063\":1,\"2064\":1,\"2065\":2,\"2066\":1,\"2067\":1,\"2068\":1,\"2069\":1,\"2070\":1,\"2071\":1,\"2072\":1,\"2073\":1,\"2074\":1,\"2075\":1,\"2076\":1,\"2077\":1,\"2101\":1,\"2102\":1,\"2110\":1,\"2123\":1,\"2124\":1,\"2125\":2,\"2126\":1,\"2127\":1,\"2128\":1,\"2129\":1,\"2130\":1,\"2131\":1,\"2132\":2,\"2133\":1,\"2134\":1,\"2135\":1,\"2136\":2,\"2137\":1,\"2138\":2,\"2139\":1,\"2140\":1,\"2141\":1,\"2142\":1,\"2143\":1,\"2144\":1,\"2145\":1,\"2146\":1,\"2147\":1,\"2182\":1,\"2253\":1,\"2254\":1,\"2255\":2,\"2256\":1,\"2257\":1,\"2258\":1,\"2259\":1,\"2260\":1,\"2261\":1,\"2262\":1,\"2263\":1,\"2264\":1,\"2265\":1,\"2266\":1,\"2267\":1,\"2291\":1,\"2292\":1,\"2325\":1,\"2338\":1,\"2339\":1,\"2340\":2,\"2341\":1,\"2342\":1,\"2343\":1,\"2344\":1,\"2345\":1,\"2346\":1,\"2347\":2,\"2348\":1,\"2349\":1,\"2350\":1,\"2351\":2,\"2352\":1,\"2353\":2,\"2354\":1,\"2355\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2359\":1,\"2360\":1,\"2361\":1,\"2362\":1,\"2363\":1,\"2364\":1,\"2365\":1,\"2366\":1,\"2401\":1,\"2472\":1,\"2473\":1,\"2474\":2,\"2475\":1,\"2476\":1,\"2477\":1,\"2478\":1,\"2479\":1,\"2480\":1,\"2481\":1,\"2482\":1,\"2483\":1,\"2484\":1,\"2485\":1,\"2486\":1,\"2510\":1,\"2511\":1,\"2544\":1,\"2557\":1,\"2558\":1,\"2559\":2,\"2560\":1,\"2561\":1,\"2562\":1,\"2563\":1,\"2564\":1,\"2565\":1,\"2566\":2,\"2567\":1,\"2568\":1,\"2569\":1,\"2570\":2,\"2571\":1,\"2572\":2,\"2573\":1,\"2574\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2578\":1,\"2579\":1,\"2580\":1,\"2581\":1,\"2582\":1,\"2583\":1,\"2584\":1,\"2585\":1,\"2620\":1,\"2691\":1,\"2692\":1,\"2693\":2,\"2694\":1,\"2695\":1,\"2696\":1,\"2697\":1,\"2698\":1,\"2699\":1,\"2700\":1,\"2701\":1,\"2702\":1,\"2703\":1,\"2704\":1,\"2705\":1,\"2729\":1,\"2730\":1,\"2763\":1,\"2776\":1,\"2777\":1,\"2778\":2,\"2779\":1,\"2780\":1,\"2781\":1,\"2782\":1,\"2783\":1,\"2784\":1,\"2785\":2,\"2786\":1,\"2787\":1,\"2788\":1,\"2789\":2,\"2790\":1,\"2791\":2,\"2792\":1,\"2793\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2797\":1,\"2798\":1,\"2799\":1,\"2800\":1,\"2801\":1,\"2802\":1,\"2803\":1,\"2804\":1,\"2839\":1},\"1\":{\"0\":2,\"5\":1,\"6\":1,\"8\":1,\"9\":1,\"16\":1,\"17\":6,\"22\":1,\"32\":3,\"81\":1,\"84\":3,\"85\":3,\"86\":7,\"89\":2,\"90\":1,\"91\":5,\"93\":8,\"94\":1,\"95\":13,\"98\":1,\"105\":3,\"106\":1,\"108\":2,\"109\":2,\"112\":1,\"113\":1,\"122\":1,\"123\":1,\"130\":7,\"131\":4,\"134\":2,\"137\":1,\"138\":1,\"140\":1,\"141\":4,\"142\":2,\"143\":9,\"144\":2,\"145\":2,\"146\":6,\"147\":2,\"161\":1,\"163\":1,\"164\":2,\"165\":13,\"166\":7,\"183\":2,\"184\":3,\"185\":2,\"186\":3,\"187\":2,\"188\":2,\"189\":2,\"190\":2,\"191\":2,\"192\":2,\"193\":2,\"194\":2,\"195\":3,\"196\":1,\"197\":1,\"198\":2,\"199\":2,\"200\":2,\"201\":2,\"202\":3,\"203\":4,\"204\":1,\"205\":2,\"206\":2,\"207\":3,\"230\":2,\"231\":2,\"236\":1,\"237\":2,\"238\":3,\"239\":2,\"240\":3,\"241\":2,\"242\":2,\"243\":3,\"244\":2,\"245\":2,\"246\":2,\"247\":3,\"248\":2,\"249\":3,\"250\":3,\"251\":3,\"252\":3,\"253\":3,\"254\":4,\"255\":3,\"256\":4,\"257\":1,\"258\":3,\"259\":1,\"260\":3,\"261\":2,\"262\":2,\"265\":1,\"266\":1,\"278\":1,\"280\":1,\"281\":12,\"284\":2,\"285\":40,\"286\":13,\"289\":1,\"291\":1,\"292\":12,\"295\":2,\"296\":42,\"297\":13,\"299\":33,\"300\":12,\"302\":12,\"303\":9,\"305\":12,\"306\":6,\"308\":12,\"309\":5,\"311\":12,\"312\":5,\"323\":150,\"327\":5,\"328\":1,\"329\":1,\"330\":1,\"334\":17,\"337\":4,\"338\":2,\"343\":2,\"344\":5,\"345\":2,\"348\":5,\"352\":3,\"353\":2,\"354\":3,\"357\":5,\"358\":6,\"359\":6,\"360\":1,\"363\":20,\"373\":7,\"377\":2,\"380\":3,\"383\":5,\"384\":6,\"385\":8,\"386\":1,\"389\":24,\"396\":1,\"421\":2,\"424\":2,\"432\":1,\"434\":1,\"435\":11,\"437\":2,\"438\":39,\"439\":11,\"440\":3,\"442\":5,\"444\":10,\"445\":5,\"454\":2,\"458\":1,\"460\":1,\"461\":11,\"463\":2,\"464\":40,\"465\":13,\"466\":7,\"468\":3,\"474\":2,\"477\":2,\"481\":1,\"483\":1,\"484\":11,\"486\":2,\"487\":39,\"488\":12,\"489\":7,\"491\":3,\"493\":10,\"494\":5,\"500\":2,\"503\":2,\"507\":1,\"509\":1,\"510\":11,\"512\":2,\"513\":39,\"514\":12,\"515\":7,\"517\":3,\"519\":12,\"520\":5,\"526\":2,\"529\":2,\"537\":1,\"539\":1,\"540\":11,\"542\":2,\"543\":39,\"544\":12,\"545\":7,\"547\":5,\"549\":10,\"550\":5,\"556\":2,\"559\":2,\"567\":1,\"569\":1,\"570\":11,\"572\":2,\"573\":39,\"574\":11,\"575\":7,\"577\":5,\"579\":10,\"580\":5,\"586\":2,\"589\":2,\"597\":1,\"599\":1,\"600\":11,\"602\":2,\"603\":39,\"604\":11,\"605\":7,\"607\":5,\"609\":10,\"610\":5,\"632\":2,\"635\":2,\"643\":1,\"645\":1,\"646\":11,\"648\":2,\"649\":39,\"650\":11,\"651\":7,\"653\":5,\"655\":10,\"656\":5,\"678\":2,\"681\":2,\"689\":1,\"691\":1,\"692\":11,\"694\":2,\"695\":39,\"696\":11,\"697\":7,\"699\":5,\"701\":10,\"702\":5,\"724\":2,\"727\":2,\"735\":1,\"737\":1,\"738\":11,\"740\":2,\"741\":39,\"742\":11,\"743\":3,\"745\":5,\"747\":10,\"748\":5,\"770\":2,\"773\":2,\"781\":1,\"783\":1,\"784\":11,\"786\":2,\"787\":39,\"788\":11,\"789\":3,\"791\":5,\"793\":10,\"794\":5,\"829\":2,\"850\":2,\"851\":3,\"852\":2,\"853\":2,\"854\":2,\"855\":2,\"856\":2,\"857\":2,\"858\":2,\"859\":2,\"860\":3,\"861\":4,\"862\":2,\"863\":2,\"864\":3,\"888\":2,\"889\":2,\"894\":1,\"925\":7,\"932\":2,\"933\":5,\"935\":2,\"936\":3,\"937\":2,\"938\":3,\"939\":2,\"940\":2,\"941\":2,\"942\":1,\"943\":1,\"944\":3,\"945\":2,\"946\":3,\"947\":3,\"948\":3,\"949\":3,\"950\":3,\"951\":4,\"952\":3,\"953\":1,\"954\":1,\"955\":1,\"956\":4,\"957\":3,\"958\":1,\"959\":1,\"960\":3,\"961\":2,\"962\":1,\"963\":1,\"989\":2,\"993\":4,\"994\":2,\"996\":1,\"997\":2,\"1001\":1,\"1002\":1,\"1007\":1,\"1015\":2,\"1031\":2,\"1032\":3,\"1033\":2,\"1034\":2,\"1035\":2,\"1036\":2,\"1037\":2,\"1038\":2,\"1039\":2,\"1040\":2,\"1041\":3,\"1042\":4,\"1043\":1,\"1044\":2,\"1045\":2,\"1046\":3,\"1067\":2,\"1068\":2,\"1097\":2,\"1101\":2,\"1102\":3,\"1103\":2,\"1104\":3,\"1105\":2,\"1106\":2,\"1107\":2,\"1108\":1,\"1109\":1,\"1110\":3,\"1111\":2,\"1112\":3,\"1113\":3,\"1114\":3,\"1115\":3,\"1116\":3,\"1117\":4,\"1118\":3,\"1119\":4,\"1120\":3,\"1121\":1,\"1122\":3,\"1123\":1,\"1124\":1,\"1130\":1,\"1131\":1,\"1165\":2,\"1182\":2,\"1183\":3,\"1184\":2,\"1185\":2,\"1186\":2,\"1187\":2,\"1188\":2,\"1189\":2,\"1190\":2,\"1191\":2,\"1192\":3,\"1193\":4,\"1194\":1,\"1195\":2,\"1196\":2,\"1197\":3,\"1218\":2,\"1219\":2,\"1229\":7,\"1236\":2,\"1237\":5,\"1239\":2,\"1240\":3,\"1241\":2,\"1242\":3,\"1243\":2,\"1244\":2,\"1245\":2,\"1246\":1,\"1247\":1,\"1248\":3,\"1249\":2,\"1250\":3,\"1251\":3,\"1252\":3,\"1253\":3,\"1254\":3,\"1255\":4,\"1256\":3,\"1257\":4,\"1258\":3,\"1259\":1,\"1260\":1,\"1261\":3,\"1262\":2,\"1263\":1,\"1289\":2,\"1293\":4,\"1294\":2,\"1296\":1,\"1297\":2,\"1301\":1,\"1302\":1,\"1337\":2,\"1355\":2,\"1356\":3,\"1357\":2,\"1358\":2,\"1359\":2,\"1360\":2,\"1361\":2,\"1362\":2,\"1363\":2,\"1364\":2,\"1365\":3,\"1366\":4,\"1367\":2,\"1368\":2,\"1369\":3,\"1393\":2,\"1394\":2,\"1405\":7,\"1412\":2,\"1413\":5,\"1415\":2,\"1416\":3,\"1417\":2,\"1418\":3,\"1419\":2,\"1420\":2,\"1421\":2,\"1422\":1,\"1423\":1,\"1424\":3,\"1425\":2,\"1426\":3,\"1427\":3,\"1428\":3,\"1429\":3,\"1430\":3,\"1431\":4,\"1432\":3,\"1433\":4,\"1434\":3,\"1435\":1,\"1436\":1,\"1437\":3,\"1438\":2,\"1439\":1,\"1465\":2,\"1469\":4,\"1470\":2,\"1472\":1,\"1473\":2,\"1477\":1,\"1478\":1,\"1483\":1,\"1514\":2,\"1532\":2,\"1533\":3,\"1534\":2,\"1535\":2,\"1536\":2,\"1537\":2,\"1538\":2,\"1539\":2,\"1540\":2,\"1541\":2,\"1542\":3,\"1543\":4,\"1544\":2,\"1545\":2,\"1546\":3,\"1570\":2,\"1571\":2,\"1582\":7,\"1589\":2,\"1590\":5,\"1592\":2,\"1593\":3,\"1594\":2,\"1595\":3,\"1596\":2,\"1597\":2,\"1598\":2,\"1599\":1,\"1600\":1,\"1601\":3,\"1602\":2,\"1603\":3,\"1604\":3,\"1605\":3,\"1606\":3,\"1607\":3,\"1608\":4,\"1609\":3,\"1610\":4,\"1611\":3,\"1612\":1,\"1613\":1,\"1614\":3,\"1615\":2,\"1616\":1,\"1642\":2,\"1646\":4,\"1647\":2,\"1649\":1,\"1650\":2,\"1654\":1,\"1655\":1,\"1660\":1,\"1691\":2,\"1709\":2,\"1710\":3,\"1711\":2,\"1712\":2,\"1713\":2,\"1714\":2,\"1715\":2,\"1716\":2,\"1717\":2,\"1718\":2,\"1719\":3,\"1720\":4,\"1721\":2,\"1722\":2,\"1723\":3,\"1747\":2,\"1748\":2,\"1759\":7,\"1766\":2,\"1767\":5,\"1769\":2,\"1770\":3,\"1771\":2,\"1772\":3,\"1773\":2,\"1774\":2,\"1775\":2,\"1776\":1,\"1777\":1,\"1778\":3,\"1779\":2,\"1780\":3,\"1781\":3,\"1782\":3,\"1783\":3,\"1784\":3,\"1785\":4,\"1786\":3,\"1787\":4,\"1788\":3,\"1789\":1,\"1790\":1,\"1791\":3,\"1792\":2,\"1793\":1,\"1819\":2,\"1823\":4,\"1824\":2,\"1826\":1,\"1827\":2,\"1831\":1,\"1832\":1,\"1837\":1,\"1868\":2,\"1886\":2,\"1887\":3,\"1888\":2,\"1889\":2,\"1890\":2,\"1891\":2,\"1892\":2,\"1893\":2,\"1894\":2,\"1895\":2,\"1896\":3,\"1897\":4,\"1898\":2,\"1899\":2,\"1900\":3,\"1924\":2,\"1925\":2,\"1936\":7,\"1943\":2,\"1944\":5,\"1946\":2,\"1947\":3,\"1948\":2,\"1949\":3,\"1950\":2,\"1951\":2,\"1952\":2,\"1953\":1,\"1954\":1,\"1955\":3,\"1956\":2,\"1957\":3,\"1958\":3,\"1959\":3,\"1960\":3,\"1961\":3,\"1962\":4,\"1963\":3,\"1964\":4,\"1965\":3,\"1966\":1,\"1967\":1,\"1968\":3,\"1969\":2,\"1970\":1,\"1996\":2,\"2000\":4,\"2001\":2,\"2003\":1,\"2004\":2,\"2008\":1,\"2009\":1,\"2014\":1,\"2045\":2,\"2063\":2,\"2064\":3,\"2065\":2,\"2066\":2,\"2067\":2,\"2068\":2,\"2069\":2,\"2070\":2,\"2071\":2,\"2072\":2,\"2073\":3,\"2074\":4,\"2075\":2,\"2076\":2,\"2077\":3,\"2101\":2,\"2102\":2,\"2113\":7,\"2120\":2,\"2121\":5,\"2123\":2,\"2124\":3,\"2125\":2,\"2126\":3,\"2127\":2,\"2128\":2,\"2129\":2,\"2130\":1,\"2131\":1,\"2132\":3,\"2133\":2,\"2134\":3,\"2135\":3,\"2136\":3,\"2137\":3,\"2138\":3,\"2139\":4,\"2140\":3,\"2141\":4,\"2142\":3,\"2143\":1,\"2144\":1,\"2145\":3,\"2146\":2,\"2147\":1,\"2173\":2,\"2177\":4,\"2178\":2,\"2180\":1,\"2181\":2,\"2185\":1,\"2186\":1,\"2191\":1,\"2232\":2,\"2253\":2,\"2254\":3,\"2255\":2,\"2256\":2,\"2257\":2,\"2258\":2,\"2259\":2,\"2260\":2,\"2261\":2,\"2262\":2,\"2263\":3,\"2264\":4,\"2265\":2,\"2266\":2,\"2267\":3,\"2291\":2,\"2292\":2,\"2297\":1,\"2328\":7,\"2335\":2,\"2336\":5,\"2338\":2,\"2339\":3,\"2340\":2,\"2341\":3,\"2342\":2,\"2343\":2,\"2344\":2,\"2345\":1,\"2346\":1,\"2347\":3,\"2348\":2,\"2349\":3,\"2350\":3,\"2351\":3,\"2352\":3,\"2353\":3,\"2354\":4,\"2355\":3,\"2356\":1,\"2357\":1,\"2358\":1,\"2359\":4,\"2360\":3,\"2361\":1,\"2362\":1,\"2363\":3,\"2364\":2,\"2365\":1,\"2366\":1,\"2392\":2,\"2396\":4,\"2397\":2,\"2399\":1,\"2400\":2,\"2404\":1,\"2405\":1,\"2410\":1,\"2451\":2,\"2472\":2,\"2473\":3,\"2474\":2,\"2475\":2,\"2476\":2,\"2477\":2,\"2478\":2,\"2479\":2,\"2480\":2,\"2481\":2,\"2482\":3,\"2483\":4,\"2484\":2,\"2485\":2,\"2486\":3,\"2510\":2,\"2511\":2,\"2516\":1,\"2547\":7,\"2554\":2,\"2555\":5,\"2557\":2,\"2558\":3,\"2559\":2,\"2560\":3,\"2561\":2,\"2562\":2,\"2563\":2,\"2564\":1,\"2565\":1,\"2566\":3,\"2567\":2,\"2568\":3,\"2569\":3,\"2570\":3,\"2571\":3,\"2572\":3,\"2573\":4,\"2574\":3,\"2575\":1,\"2576\":1,\"2577\":1,\"2578\":4,\"2579\":3,\"2580\":1,\"2581\":1,\"2582\":3,\"2583\":2,\"2584\":1,\"2585\":1,\"2611\":2,\"2615\":4,\"2616\":2,\"2618\":1,\"2619\":2,\"2623\":1,\"2624\":1,\"2629\":1,\"2670\":2,\"2691\":2,\"2692\":3,\"2693\":2,\"2694\":2,\"2695\":2,\"2696\":2,\"2697\":2,\"2698\":2,\"2699\":2,\"2700\":2,\"2701\":3,\"2702\":4,\"2703\":2,\"2704\":2,\"2705\":3,\"2729\":2,\"2730\":2,\"2735\":1,\"2766\":7,\"2773\":2,\"2774\":5,\"2776\":2,\"2777\":3,\"2778\":2,\"2779\":3,\"2780\":2,\"2781\":2,\"2782\":2,\"2783\":1,\"2784\":1,\"2785\":3,\"2786\":2,\"2787\":3,\"2788\":3,\"2789\":3,\"2790\":3,\"2791\":3,\"2792\":4,\"2793\":3,\"2794\":1,\"2795\":1,\"2796\":1,\"2797\":4,\"2798\":3,\"2799\":1,\"2800\":1,\"2801\":3,\"2802\":2,\"2803\":1,\"2804\":1,\"2830\":2,\"2834\":4,\"2835\":2,\"2837\":1,\"2838\":2,\"2842\":1,\"2843\":1,\"2848\":1}}],[\"afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d\",{\"1\":{\"806\":1,\"933\":1,\"1237\":1,\"1413\":1,\"1590\":1,\"1767\":1,\"1944\":1,\"2121\":1,\"2209\":1,\"2336\":1,\"2428\":1,\"2555\":1,\"2647\":1,\"2774\":1}}],[\"after\",{\"1\":{\"1\":1,\"93\":1,\"101\":1,\"122\":1,\"124\":1,\"155\":74,\"158\":1,\"377\":1,\"386\":2,\"389\":1,\"394\":1}}],[\"ahead\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"aka\",{\"1\":{\"273\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"438\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1,\"918\":1,\"1010\":1,\"1138\":1,\"1309\":1,\"1486\":1,\"1663\":1,\"1840\":1,\"2017\":1,\"2194\":1,\"2321\":1,\"2413\":1,\"2540\":1,\"2632\":1,\"2759\":1,\"2851\":1}}],[\"aktiver\",{\"1\":{\"15\":1}}],[\"aktualisieren\",{\"1\":{\"15\":1}}],[\"available\",{\"1\":{\"94\":1,\"95\":1,\"106\":1,\"113\":1,\"122\":2,\"161\":1,\"165\":1,\"233\":1,\"314\":1,\"427\":1,\"776\":1,\"891\":1,\"1070\":1,\"1221\":1,\"1396\":1,\"1573\":1,\"1750\":1,\"1927\":1,\"2104\":1,\"2294\":1,\"2513\":1,\"2732\":1}}],[\"avoid\",{\"1\":{\"37\":1,\"344\":1}}],[\"ap1\",{\"1\":{\"286\":2,\"297\":2,\"534\":1,\"564\":1,\"594\":1,\"640\":1,\"686\":1,\"732\":1}}],[\"apt\",{\"1\":{\"279\":6,\"290\":6,\"433\":6,\"459\":6,\"482\":6,\"508\":6,\"538\":6,\"568\":6,\"598\":6,\"644\":6,\"690\":6,\"736\":6,\"782\":6}}],[\"apache\",{\"1\":{\"158\":4,\"159\":1,\"271\":1,\"272\":1,\"273\":1,\"274\":1,\"275\":1,\"394\":3,\"916\":1,\"917\":1,\"918\":1,\"919\":1,\"920\":1,\"921\":1,\"1008\":1,\"1009\":1,\"1010\":1,\"1011\":1,\"1012\":1,\"1013\":1,\"1136\":1,\"1137\":1,\"1138\":1,\"1139\":1,\"1140\":1,\"1307\":1,\"1308\":1,\"1309\":1,\"1310\":1,\"1311\":1,\"1312\":1,\"1484\":1,\"1485\":1,\"1486\":1,\"1487\":1,\"1488\":1,\"1489\":1,\"1661\":1,\"1662\":1,\"1663\":1,\"1664\":1,\"1665\":1,\"1666\":1,\"1838\":1,\"1839\":1,\"1840\":1,\"1841\":1,\"1842\":1,\"1843\":1,\"2015\":1,\"2016\":1,\"2017\":1,\"2018\":1,\"2019\":1,\"2020\":1,\"2192\":1,\"2193\":1,\"2194\":1,\"2195\":1,\"2196\":1,\"2197\":1,\"2319\":1,\"2320\":1,\"2321\":1,\"2322\":1,\"2323\":1,\"2324\":1,\"2411\":1,\"2412\":1,\"2413\":1,\"2414\":1,\"2415\":1,\"2416\":1,\"2538\":1,\"2539\":1,\"2540\":1,\"2541\":1,\"2542\":1,\"2543\":1,\"2630\":1,\"2631\":1,\"2632\":1,\"2633\":1,\"2634\":1,\"2635\":1,\"2757\":1,\"2758\":1,\"2759\":1,\"2760\":1,\"2761\":1,\"2762\":1,\"2849\":1,\"2850\":1,\"2851\":1,\"2852\":1,\"2853\":1,\"2854\":1}}],[\"april\",{\"1\":{\"125\":1}}],[\"api\",{\"0\":{\"808\":1,\"809\":1,\"968\":1,\"969\":1,\"1076\":1,\"1077\":1,\"1144\":1,\"1145\":1,\"1268\":1,\"1269\":1,\"1316\":1,\"1317\":1,\"1444\":1,\"1445\":1,\"1493\":1,\"1494\":1,\"1621\":1,\"1622\":1,\"1670\":1,\"1671\":1,\"1798\":1,\"1799\":1,\"1847\":1,\"1848\":1,\"1975\":1,\"1976\":1,\"2024\":1,\"2025\":1,\"2152\":1,\"2153\":1,\"2211\":1,\"2212\":1,\"2371\":1,\"2372\":1,\"2430\":1,\"2431\":1,\"2590\":1,\"2591\":1,\"2649\":1,\"2650\":1,\"2809\":1,\"2810\":1},\"1\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"86\":1,\"170\":1,\"227\":1,\"228\":1,\"234\":1,\"519\":1,\"808\":2,\"809\":2,\"925\":4,\"931\":1,\"968\":2,\"969\":2,\"993\":2,\"1076\":2,\"1077\":2,\"1144\":2,\"1145\":2,\"1229\":4,\"1235\":1,\"1268\":2,\"1269\":2,\"1293\":2,\"1316\":2,\"1317\":2,\"1405\":4,\"1411\":1,\"1444\":2,\"1445\":2,\"1469\":2,\"1493\":2,\"1494\":2,\"1582\":4,\"1588\":1,\"1621\":2,\"1622\":2,\"1646\":2,\"1670\":2,\"1671\":2,\"1759\":4,\"1765\":1,\"1798\":2,\"1799\":2,\"1823\":2,\"1847\":2,\"1848\":2,\"1936\":4,\"1942\":1,\"1975\":2,\"1976\":2,\"2000\":2,\"2024\":2,\"2025\":2,\"2113\":4,\"2119\":1,\"2152\":2,\"2153\":2,\"2177\":2,\"2211\":2,\"2212\":2,\"2328\":4,\"2334\":1,\"2371\":2,\"2372\":2,\"2396\":2,\"2430\":2,\"2431\":2,\"2547\":4,\"2553\":1,\"2590\":2,\"2591\":2,\"2615\":2,\"2649\":2,\"2650\":2,\"2766\":4,\"2772\":1,\"2809\":2,\"2810\":2,\"2834\":2}}],[\"appear\",{\"1\":{\"455\":1,\"478\":1,\"504\":1,\"530\":1}}],[\"appears\",{\"1\":{\"132\":1}}],[\"apply\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1,\"799\":1,\"926\":1,\"1230\":1,\"1406\":1,\"1583\":1,\"1760\":1,\"1937\":1,\"2114\":1,\"2202\":1,\"2329\":1,\"2421\":1,\"2548\":1,\"2640\":1,\"2767\":1}}],[\"applied\",{\"0\":{\"73\":1},\"1\":{\"73\":1,\"116\":1,\"405\":1,\"616\":1,\"662\":1,\"708\":1,\"754\":1,\"798\":1,\"800\":1,\"803\":1,\"925\":1,\"927\":1,\"930\":1,\"1229\":1,\"1231\":1,\"1234\":1,\"1405\":1,\"1407\":1,\"1410\":1,\"1582\":1,\"1584\":1,\"1587\":1,\"1759\":1,\"1761\":1,\"1764\":1,\"1936\":1,\"1938\":1,\"1941\":1,\"2113\":1,\"2115\":1,\"2118\":1,\"2201\":1,\"2203\":1,\"2206\":1,\"2328\":1,\"2330\":1,\"2333\":1,\"2420\":1,\"2422\":1,\"2425\":1,\"2547\":1,\"2549\":1,\"2552\":1,\"2639\":1,\"2641\":1,\"2644\":1,\"2766\":1,\"2768\":1,\"2771\":1}}],[\"applications\",{\"1\":{\"114\":1,\"337\":1}}],[\"application\",{\"1\":{\"37\":1,\"77\":1,\"90\":2,\"116\":1,\"265\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"430\":1,\"438\":1,\"439\":1,\"456\":1,\"464\":1,\"465\":1,\"479\":1,\"487\":1,\"488\":1,\"505\":1,\"513\":1,\"514\":1,\"535\":1,\"543\":1,\"544\":1,\"565\":1,\"573\":1,\"574\":1,\"595\":1,\"603\":1,\"604\":1,\"641\":1,\"649\":1,\"650\":1,\"687\":1,\"695\":1,\"696\":1,\"733\":1,\"741\":1,\"742\":1,\"779\":1,\"787\":1,\"788\":1,\"829\":1,\"909\":1,\"989\":1,\"1001\":1,\"1097\":1,\"1130\":1,\"1165\":1,\"1289\":1,\"1301\":1,\"1337\":1,\"1465\":1,\"1477\":1,\"1514\":1,\"1642\":1,\"1654\":1,\"1691\":1,\"1819\":1,\"1831\":1,\"1868\":1,\"1996\":1,\"2008\":1,\"2045\":1,\"2173\":1,\"2185\":1,\"2232\":1,\"2312\":1,\"2392\":1,\"2404\":1,\"2451\":1,\"2531\":1,\"2611\":1,\"2623\":1,\"2670\":1,\"2750\":1,\"2830\":1,\"2842\":1}}],[\"applicability\",{\"1\":{\"11\":1}}],[\"approval\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"approved\",{\"1\":{\"105\":1,\"152\":1,\"403\":1,\"614\":1,\"660\":1,\"706\":1,\"752\":1}}],[\"appropriately\",{\"1\":{\"328\":1}}],[\"appropriate\",{\"1\":{\"116\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"330\":1,\"331\":1,\"334\":3,\"348\":3,\"352\":1,\"360\":1,\"363\":1,\"373\":1,\"386\":1,\"389\":1,\"438\":1,\"439\":1,\"456\":1,\"464\":1,\"465\":1,\"479\":1,\"487\":1,\"488\":1,\"505\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"approaches\",{\"1\":{\"341\":1}}],[\"approach\",{\"1\":{\"36\":1,\"411\":2,\"622\":2,\"668\":2,\"714\":2,\"760\":2}}],[\"app\",{\"0\":{\"265\":1,\"909\":1,\"1001\":1,\"1130\":1,\"1301\":1,\"1477\":1,\"1654\":1,\"1831\":1,\"2008\":1,\"2185\":1,\"2312\":1,\"2404\":1,\"2531\":1,\"2623\":1,\"2750\":1,\"2842\":1},\"1\":{\"95\":8,\"165\":8,\"183\":1,\"184\":1,\"185\":1,\"201\":1,\"237\":1,\"238\":1,\"239\":1,\"245\":1,\"265\":1,\"267\":1,\"268\":1,\"269\":1,\"270\":1,\"285\":4,\"286\":4,\"296\":4,\"297\":4,\"299\":2,\"300\":2,\"302\":2,\"303\":2,\"305\":2,\"306\":2,\"308\":2,\"309\":1,\"311\":2,\"312\":1,\"323\":64,\"438\":4,\"439\":4,\"444\":1,\"445\":1,\"464\":4,\"465\":4,\"487\":4,\"488\":4,\"493\":1,\"494\":1,\"513\":4,\"514\":4,\"519\":2,\"520\":1,\"543\":4,\"544\":4,\"549\":1,\"550\":1,\"573\":4,\"574\":4,\"579\":1,\"580\":1,\"603\":4,\"604\":4,\"609\":1,\"610\":1,\"649\":4,\"650\":4,\"655\":1,\"656\":1,\"695\":4,\"696\":4,\"701\":1,\"702\":1,\"741\":4,\"742\":4,\"747\":1,\"748\":1,\"787\":4,\"788\":4,\"793\":1,\"794\":1,\"824\":1,\"850\":1,\"851\":1,\"852\":1,\"859\":1,\"905\":1,\"909\":1,\"911\":1,\"912\":1,\"913\":1,\"914\":1,\"915\":1,\"935\":1,\"936\":1,\"937\":1,\"940\":1,\"984\":1,\"997\":1,\"1001\":1,\"1003\":1,\"1004\":1,\"1005\":1,\"1006\":1,\"1007\":1,\"1031\":1,\"1032\":1,\"1033\":1,\"1040\":1,\"1092\":1,\"1101\":1,\"1102\":1,\"1103\":1,\"1106\":1,\"1130\":1,\"1132\":1,\"1133\":1,\"1134\":1,\"1135\":1,\"1160\":1,\"1182\":1,\"1183\":1,\"1184\":1,\"1191\":1,\"1239\":1,\"1240\":1,\"1241\":1,\"1244\":1,\"1284\":1,\"1297\":1,\"1301\":1,\"1303\":1,\"1304\":1,\"1305\":1,\"1306\":1,\"1332\":1,\"1355\":1,\"1356\":1,\"1357\":1,\"1364\":1,\"1415\":1,\"1416\":1,\"1417\":1,\"1420\":1,\"1460\":1,\"1473\":1,\"1477\":1,\"1479\":1,\"1480\":1,\"1481\":1,\"1482\":1,\"1483\":1,\"1509\":1,\"1532\":1,\"1533\":1,\"1534\":1,\"1541\":1,\"1592\":1,\"1593\":1,\"1594\":1,\"1597\":1,\"1637\":1,\"1650\":1,\"1654\":1,\"1656\":1,\"1657\":1,\"1658\":1,\"1659\":1,\"1660\":1,\"1686\":1,\"1709\":1,\"1710\":1,\"1711\":1,\"1718\":1,\"1769\":1,\"1770\":1,\"1771\":1,\"1774\":1,\"1814\":1,\"1827\":1,\"1831\":1,\"1833\":1,\"1834\":1,\"1835\":1,\"1836\":1,\"1837\":1,\"1863\":1,\"1886\":1,\"1887\":1,\"1888\":1,\"1895\":1,\"1946\":1,\"1947\":1,\"1948\":1,\"1951\":1,\"1991\":1,\"2004\":1,\"2008\":1,\"2010\":1,\"2011\":1,\"2012\":1,\"2013\":1,\"2014\":1,\"2040\":1,\"2063\":1,\"2064\":1,\"2065\":1,\"2072\":1,\"2123\":1,\"2124\":1,\"2125\":1,\"2128\":1,\"2168\":1,\"2181\":1,\"2185\":1,\"2187\":1,\"2188\":1,\"2189\":1,\"2190\":1,\"2191\":1,\"2227\":1,\"2253\":1,\"2254\":1,\"2255\":1,\"2262\":1,\"2308\":1,\"2312\":1,\"2314\":1,\"2315\":1,\"2316\":1,\"2317\":1,\"2318\":1,\"2338\":1,\"2339\":1,\"2340\":1,\"2343\":1,\"2387\":1,\"2400\":1,\"2404\":1,\"2406\":1,\"2407\":1,\"2408\":1,\"2409\":1,\"2410\":1,\"2446\":1,\"2472\":1,\"2473\":1,\"2474\":1,\"2481\":1,\"2527\":1,\"2531\":1,\"2533\":1,\"2534\":1,\"2535\":1,\"2536\":1,\"2537\":1,\"2557\":1,\"2558\":1,\"2559\":1,\"2562\":1,\"2606\":1,\"2619\":1,\"2623\":1,\"2625\":1,\"2626\":1,\"2627\":1,\"2628\":1,\"2629\":1,\"2665\":1,\"2691\":1,\"2692\":1,\"2693\":1,\"2700\":1,\"2746\":1,\"2750\":1,\"2752\":1,\"2753\":1,\"2754\":1,\"2755\":1,\"2756\":1,\"2776\":1,\"2777\":1,\"2778\":1,\"2781\":1,\"2825\":1,\"2838\":1,\"2842\":1,\"2844\":1,\"2845\":1,\"2846\":1,\"2847\":1,\"2848\":1}}],[\"arbitrary\",{\"1\":{\"345\":1}}],[\"arrival\",{\"1\":{\"389\":1}}],[\"arrive\",{\"1\":{\"377\":1}}],[\"arrives\",{\"1\":{\"321\":1,\"375\":1}}],[\"arrow\",{\"1\":{\"155\":2,\"352\":1}}],[\"array\",{\"1\":{\"155\":21,\"156\":3}}],[\"arguments\",{\"1\":{\"155\":19,\"334\":1,\"337\":1}}],[\"args\",{\"1\":{\"134\":2,\"135\":3,\"323\":6,\"337\":2}}],[\"arch=amd64\",{\"1\":{\"279\":1,\"290\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"arch\",{\"1\":{\"137\":1,\"138\":1}}],[\"archive\",{\"1\":{\"98\":1,\"279\":2,\"290\":2,\"433\":2,\"459\":2,\"482\":2,\"508\":2,\"538\":2,\"568\":2,\"598\":2,\"644\":2,\"690\":2,\"736\":2,\"782\":2}}],[\"architecture\",{\"0\":{\"84\":1,\"95\":1,\"165\":1},\"1\":{\"32\":1,\"33\":1,\"81\":1,\"84\":3,\"87\":1,\"89\":1,\"92\":1,\"112\":1,\"113\":1,\"114\":1,\"116\":1,\"281\":1,\"292\":1}}],[\"architectures\",{\"1\":{\"26\":2,\"29\":1,\"91\":1,\"94\":1}}],[\"article\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"artifacts\",{\"1\":{\"409\":1,\"620\":1,\"666\":1,\"712\":1,\"758\":1}}],[\"artifact\",{\"1\":{\"300\":2,\"303\":2,\"306\":2,\"309\":2,\"312\":2,\"445\":2,\"494\":2,\"520\":2,\"550\":2,\"580\":2,\"610\":2,\"656\":2,\"702\":2,\"748\":2,\"794\":2}}],[\"artifactid>\",{\"1\":{\"159\":1}}],[\"art\",{\"1\":{\"33\":1}}],[\"areas\",{\"1\":{\"73\":1,\"413\":1,\"415\":1,\"624\":1,\"626\":1,\"670\":1,\"672\":1,\"716\":1,\"718\":1,\"762\":1,\"764\":1}}],[\"area\",{\"1\":{\"73\":1}}],[\"are\",{\"0\":{\"93\":1},\"1\":{\"1\":1,\"5\":1,\"10\":1,\"71\":1,\"72\":1,\"77\":1,\"86\":4,\"87\":2,\"89\":1,\"90\":2,\"92\":1,\"93\":2,\"95\":2,\"99\":1,\"100\":1,\"105\":2,\"106\":2,\"108\":1,\"109\":2,\"113\":1,\"114\":1,\"122\":1,\"130\":2,\"131\":2,\"141\":2,\"142\":1,\"143\":2,\"145\":1,\"146\":1,\"152\":1,\"161\":2,\"165\":2,\"169\":1,\"233\":1,\"236\":1,\"272\":1,\"276\":1,\"280\":1,\"281\":1,\"282\":1,\"287\":1,\"291\":1,\"292\":1,\"293\":1,\"298\":1,\"300\":5,\"301\":2,\"303\":5,\"304\":1,\"306\":3,\"314\":1,\"318\":1,\"327\":2,\"328\":2,\"329\":1,\"330\":3,\"334\":1,\"337\":2,\"340\":1,\"342\":2,\"343\":3,\"344\":3,\"350\":1,\"352\":2,\"353\":1,\"354\":1,\"379\":1,\"380\":1,\"391\":1,\"392\":2,\"393\":1,\"395\":2,\"396\":1,\"404\":2,\"410\":1,\"411\":1,\"412\":1,\"413\":2,\"414\":2,\"415\":3,\"418\":1,\"419\":1,\"427\":1,\"430\":2,\"434\":3,\"435\":2,\"442\":1,\"448\":1,\"449\":1,\"456\":3,\"460\":3,\"461\":2,\"471\":1,\"472\":1,\"479\":3,\"483\":3,\"484\":2,\"497\":1,\"498\":1,\"505\":3,\"509\":3,\"510\":2,\"523\":1,\"524\":1,\"535\":2,\"539\":3,\"540\":2,\"547\":1,\"553\":1,\"554\":1,\"565\":2,\"569\":3,\"570\":2,\"577\":1,\"583\":1,\"584\":1,\"595\":2,\"599\":3,\"600\":2,\"607\":1,\"615\":2,\"621\":1,\"622\":1,\"623\":1,\"624\":2,\"625\":2,\"626\":3,\"629\":1,\"630\":1,\"641\":2,\"645\":3,\"646\":2,\"653\":1,\"661\":2,\"667\":1,\"668\":1,\"669\":1,\"670\":2,\"671\":2,\"672\":3,\"675\":1,\"676\":1,\"687\":2,\"691\":3,\"692\":2,\"699\":1,\"707\":2,\"713\":1,\"714\":1,\"715\":1,\"716\":2,\"717\":2,\"718\":3,\"721\":1,\"722\":1,\"733\":2,\"737\":3,\"738\":2,\"745\":1,\"753\":2,\"759\":1,\"760\":1,\"761\":1,\"762\":2,\"763\":2,\"764\":3,\"767\":1,\"768\":1,\"776\":1,\"779\":2,\"783\":3,\"784\":2,\"791\":1,\"800\":1,\"804\":1,\"806\":1,\"885\":1,\"886\":2,\"891\":1,\"897\":1,\"902\":1,\"904\":2,\"917\":1,\"927\":1,\"931\":1,\"932\":1,\"933\":2,\"964\":1,\"993\":1,\"996\":2,\"1009\":1,\"1070\":1,\"1071\":1,\"1125\":1,\"1137\":1,\"1221\":1,\"1222\":1,\"1231\":1,\"1235\":1,\"1236\":1,\"1237\":2,\"1264\":1,\"1293\":1,\"1296\":2,\"1308\":1,\"1390\":1,\"1391\":2,\"1396\":1,\"1398\":1,\"1407\":1,\"1411\":1,\"1412\":1,\"1413\":2,\"1440\":1,\"1469\":1,\"1472\":2,\"1485\":1,\"1567\":1,\"1568\":2,\"1573\":1,\"1575\":1,\"1584\":1,\"1588\":1,\"1589\":1,\"1590\":2,\"1617\":1,\"1646\":1,\"1649\":2,\"1662\":1,\"1744\":1,\"1745\":2,\"1750\":1,\"1752\":1,\"1761\":1,\"1765\":1,\"1766\":1,\"1767\":2,\"1794\":1,\"1823\":1,\"1826\":2,\"1839\":1,\"1921\":1,\"1922\":2,\"1927\":1,\"1929\":1,\"1938\":1,\"1942\":1,\"1943\":1,\"1944\":2,\"1971\":1,\"2000\":1,\"2003\":2,\"2016\":1,\"2098\":1,\"2099\":2,\"2104\":1,\"2106\":1,\"2115\":1,\"2119\":1,\"2120\":1,\"2121\":2,\"2148\":1,\"2177\":1,\"2180\":2,\"2193\":1,\"2203\":1,\"2207\":1,\"2209\":1,\"2288\":1,\"2289\":2,\"2294\":1,\"2300\":1,\"2305\":1,\"2307\":2,\"2320\":1,\"2330\":1,\"2334\":1,\"2335\":1,\"2336\":2,\"2367\":1,\"2396\":1,\"2399\":2,\"2412\":1,\"2422\":1,\"2426\":1,\"2428\":1,\"2507\":1,\"2508\":2,\"2513\":1,\"2519\":1,\"2524\":1,\"2526\":2,\"2539\":1,\"2549\":1,\"2553\":1,\"2554\":1,\"2555\":2,\"2586\":1,\"2615\":1,\"2618\":2,\"2631\":1,\"2641\":1,\"2645\":1,\"2647\":1,\"2726\":1,\"2727\":2,\"2732\":1,\"2738\":1,\"2743\":1,\"2745\":2,\"2758\":1,\"2768\":1,\"2772\":1,\"2773\":1,\"2774\":2,\"2805\":1,\"2834\":1,\"2837\":2,\"2850\":1}}],[\"ab12\",{\"1\":{\"285\":2,\"296\":2}}],[\"able\",{\"1\":{\"281\":2,\"286\":3,\"292\":2,\"297\":3,\"315\":1,\"352\":1,\"390\":1,\"395\":1,\"415\":1,\"435\":2,\"439\":3,\"461\":2,\"465\":3,\"484\":2,\"488\":3,\"510\":2,\"514\":3,\"540\":2,\"544\":3,\"570\":2,\"574\":3,\"600\":2,\"604\":3,\"626\":1,\"646\":2,\"650\":3,\"672\":1,\"692\":2,\"696\":3,\"718\":1,\"738\":2,\"742\":3,\"764\":1,\"784\":2,\"788\":3}}],[\"abstractservicedelegate\",{\"1\":{\"328\":1,\"329\":1,\"369\":1}}],[\"abstract\",{\"0\":{\"112\":1},\"1\":{\"143\":1,\"329\":1}}],[\"ability\",{\"1\":{\"90\":1,\"123\":1}}],[\"aborted\",{\"1\":{\"190\":1,\"199\":1,\"244\":1,\"854\":1,\"857\":1,\"939\":1,\"1035\":1,\"1038\":1,\"1105\":1,\"1186\":1,\"1189\":1,\"1243\":1,\"1359\":1,\"1362\":1,\"1419\":1,\"1536\":1,\"1539\":1,\"1596\":1,\"1713\":1,\"1716\":1,\"1773\":1,\"1890\":1,\"1893\":1,\"1950\":1,\"2067\":1,\"2070\":1,\"2127\":1,\"2257\":1,\"2260\":1,\"2342\":1,\"2476\":1,\"2479\":1,\"2561\":1,\"2695\":1,\"2698\":1,\"2780\":1}}],[\"above\",{\"1\":{\"85\":1,\"134\":1,\"146\":1,\"147\":1,\"152\":1,\"286\":1,\"297\":1,\"379\":1,\"403\":1,\"439\":1,\"465\":1,\"488\":1,\"514\":1,\"544\":1,\"574\":1,\"604\":1,\"614\":1,\"650\":1,\"660\":1,\"696\":1,\"706\":1,\"742\":1,\"752\":1,\"788\":1,\"798\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"about\",{\"0\":{\"3\":1},\"1\":{\"13\":1,\"30\":1,\"40\":1,\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"86\":1,\"87\":1,\"88\":1,\"89\":2,\"92\":1,\"105\":1,\"106\":1,\"158\":1,\"159\":1,\"202\":1,\"207\":1,\"422\":1,\"426\":1,\"452\":1,\"475\":1,\"501\":1,\"527\":1,\"557\":1,\"587\":1,\"633\":1,\"679\":1,\"725\":1,\"771\":1,\"775\":1,\"860\":1,\"864\":1,\"1041\":1,\"1046\":1,\"1192\":1,\"1197\":1,\"1365\":1,\"1369\":1,\"1542\":1,\"1546\":1,\"1719\":1,\"1723\":1,\"1896\":1,\"1900\":1,\"2073\":1,\"2077\":1,\"2263\":1,\"2267\":1,\"2482\":1,\"2486\":1,\"2701\":1,\"2705\":1}}],[\"ab\",{\"1\":{\"14\":2}}],[\"agianst\",{\"1\":{\"897\":1,\"964\":1,\"1071\":1,\"1125\":1,\"1222\":1,\"1264\":1,\"1398\":1,\"1440\":1,\"1575\":1,\"1617\":1,\"1752\":1,\"1794\":1,\"1929\":1,\"1971\":1,\"2106\":1,\"2148\":1,\"2300\":1,\"2367\":1,\"2519\":1,\"2586\":1,\"2738\":1,\"2805\":1}}],[\"again\",{\"1\":{\"344\":1,\"442\":1,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"791\":1}}],[\"against\",{\"1\":{\"39\":1,\"86\":1,\"106\":1,\"109\":1,\"135\":1,\"161\":1,\"163\":1,\"164\":1,\"208\":1,\"801\":3,\"802\":1,\"806\":2,\"865\":1,\"928\":3,\"929\":1,\"933\":2,\"1047\":1,\"1198\":1,\"1232\":3,\"1233\":1,\"1237\":2,\"1370\":1,\"1408\":3,\"1409\":1,\"1413\":2,\"1547\":1,\"1585\":3,\"1586\":1,\"1590\":2,\"1724\":1,\"1762\":3,\"1763\":1,\"1767\":2,\"1901\":1,\"1939\":3,\"1940\":1,\"1944\":2,\"2078\":1,\"2116\":3,\"2117\":1,\"2121\":2,\"2204\":3,\"2205\":1,\"2209\":2,\"2268\":1,\"2331\":3,\"2332\":1,\"2336\":2,\"2423\":3,\"2424\":1,\"2428\":2,\"2487\":1,\"2550\":3,\"2551\":1,\"2555\":2,\"2642\":3,\"2643\":1,\"2647\":2,\"2706\":1,\"2769\":3,\"2770\":1,\"2774\":2}}],[\"agentlib\",{\"1\":{\"323\":6}}],[\"agenda\",{\"1\":{\"14\":1}}],[\"agnostic\",{\"1\":{\"5\":1,\"98\":1}}],[\"ams\",{\"1\":{\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"among\",{\"1\":{\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"am\",{\"1\":{\"14\":1}}],[\"audience\",{\"1\":{\"114\":1}}],[\"audimax\",{\"1\":{\"14\":1}}],[\"autostart\",{\"0\":{\"101\":1},\"1\":{\"101\":1}}],[\"automatically\",{\"1\":{\"350\":1,\"352\":1,\"379\":1}}],[\"automatic\",{\"1\":{\"95\":2,\"165\":2}}],[\"automated\",{\"0\":{\"333\":1,\"347\":1,\"362\":1,\"372\":1,\"388\":1},\"1\":{\"94\":1,\"123\":1,\"342\":1}}],[\"auth\",{\"0\":{\"810\":1,\"811\":1,\"812\":1,\"813\":1,\"814\":1,\"815\":1,\"816\":1,\"817\":1,\"818\":1,\"819\":2,\"820\":1,\"821\":1,\"822\":1,\"823\":1,\"824\":1,\"970\":1,\"971\":1,\"972\":1,\"973\":1,\"974\":1,\"975\":1,\"976\":1,\"977\":1,\"978\":1,\"979\":2,\"980\":1,\"981\":1,\"982\":1,\"983\":1,\"984\":1,\"1078\":1,\"1079\":1,\"1080\":1,\"1081\":1,\"1082\":1,\"1083\":1,\"1084\":1,\"1085\":1,\"1086\":1,\"1087\":2,\"1088\":1,\"1089\":1,\"1090\":1,\"1091\":1,\"1092\":1,\"1146\":1,\"1147\":1,\"1148\":1,\"1149\":1,\"1150\":1,\"1151\":1,\"1152\":1,\"1153\":1,\"1154\":1,\"1155\":2,\"1156\":1,\"1157\":1,\"1158\":1,\"1159\":1,\"1160\":1,\"1270\":1,\"1271\":1,\"1272\":1,\"1273\":1,\"1274\":1,\"1275\":1,\"1276\":1,\"1277\":1,\"1278\":1,\"1279\":2,\"1280\":1,\"1281\":1,\"1282\":1,\"1283\":1,\"1284\":1,\"1318\":1,\"1319\":1,\"1320\":1,\"1321\":1,\"1322\":1,\"1323\":1,\"1324\":1,\"1325\":1,\"1326\":1,\"1327\":2,\"1328\":1,\"1329\":1,\"1330\":1,\"1331\":1,\"1332\":1,\"1446\":1,\"1447\":1,\"1448\":1,\"1449\":1,\"1450\":1,\"1451\":1,\"1452\":1,\"1453\":1,\"1454\":1,\"1455\":2,\"1456\":1,\"1457\":1,\"1458\":1,\"1459\":1,\"1460\":1,\"1495\":1,\"1496\":1,\"1497\":1,\"1498\":1,\"1499\":1,\"1500\":1,\"1501\":1,\"1502\":1,\"1503\":1,\"1504\":2,\"1505\":1,\"1506\":1,\"1507\":1,\"1508\":1,\"1509\":1,\"1623\":1,\"1624\":1,\"1625\":1,\"1626\":1,\"1627\":1,\"1628\":1,\"1629\":1,\"1630\":1,\"1631\":1,\"1632\":2,\"1633\":1,\"1634\":1,\"1635\":1,\"1636\":1,\"1637\":1,\"1672\":1,\"1673\":1,\"1674\":1,\"1675\":1,\"1676\":1,\"1677\":1,\"1678\":1,\"1679\":1,\"1680\":1,\"1681\":2,\"1682\":1,\"1683\":1,\"1684\":1,\"1685\":1,\"1686\":1,\"1800\":1,\"1801\":1,\"1802\":1,\"1803\":1,\"1804\":1,\"1805\":1,\"1806\":1,\"1807\":1,\"1808\":1,\"1809\":2,\"1810\":1,\"1811\":1,\"1812\":1,\"1813\":1,\"1814\":1,\"1849\":1,\"1850\":1,\"1851\":1,\"1852\":1,\"1853\":1,\"1854\":1,\"1855\":1,\"1856\":1,\"1857\":1,\"1858\":2,\"1859\":1,\"1860\":1,\"1861\":1,\"1862\":1,\"1863\":1,\"1977\":1,\"1978\":1,\"1979\":1,\"1980\":1,\"1981\":1,\"1982\":1,\"1983\":1,\"1984\":1,\"1985\":1,\"1986\":2,\"1987\":1,\"1988\":1,\"1989\":1,\"1990\":1,\"1991\":1,\"2026\":1,\"2027\":1,\"2028\":1,\"2029\":1,\"2030\":1,\"2031\":1,\"2032\":1,\"2033\":1,\"2034\":1,\"2035\":2,\"2036\":1,\"2037\":1,\"2038\":1,\"2039\":1,\"2040\":1,\"2154\":1,\"2155\":1,\"2156\":1,\"2157\":1,\"2158\":1,\"2159\":1,\"2160\":1,\"2161\":1,\"2162\":1,\"2163\":2,\"2164\":1,\"2165\":1,\"2166\":1,\"2167\":1,\"2168\":1,\"2213\":1,\"2214\":1,\"2215\":1,\"2216\":1,\"2217\":1,\"2218\":1,\"2219\":1,\"2220\":1,\"2221\":1,\"2222\":2,\"2223\":1,\"2224\":1,\"2225\":1,\"2226\":1,\"2227\":1,\"2373\":1,\"2374\":1,\"2375\":1,\"2376\":1,\"2377\":1,\"2378\":1,\"2379\":1,\"2380\":1,\"2381\":1,\"2382\":2,\"2383\":1,\"2384\":1,\"2385\":1,\"2386\":1,\"2387\":1,\"2432\":1,\"2433\":1,\"2434\":1,\"2435\":1,\"2436\":1,\"2437\":1,\"2438\":1,\"2439\":1,\"2440\":1,\"2441\":2,\"2442\":1,\"2443\":1,\"2444\":1,\"2445\":1,\"2446\":1,\"2592\":1,\"2593\":1,\"2594\":1,\"2595\":1,\"2596\":1,\"2597\":1,\"2598\":1,\"2599\":1,\"2600\":1,\"2601\":2,\"2602\":1,\"2603\":1,\"2604\":1,\"2605\":1,\"2606\":1,\"2651\":1,\"2652\":1,\"2653\":1,\"2654\":1,\"2655\":1,\"2656\":1,\"2657\":1,\"2658\":1,\"2659\":1,\"2660\":2,\"2661\":1,\"2662\":1,\"2663\":1,\"2664\":1,\"2665\":1,\"2811\":1,\"2812\":1,\"2813\":1,\"2814\":1,\"2815\":1,\"2816\":1,\"2817\":1,\"2818\":1,\"2819\":1,\"2820\":2,\"2821\":1,\"2822\":1,\"2823\":1,\"2824\":1,\"2825\":1},\"1\":{\"810\":1,\"811\":4,\"812\":4,\"813\":1,\"814\":2,\"815\":2,\"816\":2,\"817\":1,\"818\":3,\"819\":2,\"820\":1,\"821\":1,\"822\":1,\"823\":1,\"824\":1,\"903\":6,\"904\":2,\"905\":7,\"970\":1,\"971\":4,\"972\":4,\"973\":1,\"974\":2,\"975\":2,\"976\":2,\"977\":1,\"978\":3,\"979\":2,\"980\":1,\"981\":1,\"982\":1,\"983\":1,\"984\":1,\"994\":6,\"995\":2,\"996\":2,\"997\":7,\"1078\":1,\"1079\":4,\"1080\":4,\"1081\":1,\"1082\":2,\"1083\":2,\"1084\":2,\"1085\":1,\"1086\":3,\"1087\":2,\"1088\":1,\"1089\":1,\"1090\":1,\"1091\":1,\"1092\":1,\"1146\":1,\"1147\":4,\"1148\":4,\"1149\":1,\"1150\":2,\"1151\":2,\"1152\":2,\"1153\":1,\"1154\":3,\"1155\":2,\"1156\":1,\"1157\":1,\"1158\":1,\"1159\":1,\"1160\":1,\"1270\":1,\"1271\":4,\"1272\":4,\"1273\":1,\"1274\":2,\"1275\":2,\"1276\":2,\"1277\":1,\"1278\":3,\"1279\":2,\"1280\":1,\"1281\":1,\"1282\":1,\"1283\":1,\"1284\":1,\"1294\":6,\"1295\":2,\"1296\":2,\"1297\":7,\"1318\":1,\"1319\":4,\"1320\":4,\"1321\":1,\"1322\":2,\"1323\":2,\"1324\":2,\"1325\":1,\"1326\":3,\"1327\":2,\"1328\":1,\"1329\":1,\"1330\":1,\"1331\":1,\"1332\":1,\"1446\":1,\"1447\":4,\"1448\":4,\"1449\":1,\"1450\":2,\"1451\":2,\"1452\":2,\"1453\":1,\"1454\":3,\"1455\":2,\"1456\":1,\"1457\":1,\"1458\":1,\"1459\":1,\"1460\":1,\"1470\":6,\"1471\":2,\"1472\":2,\"1473\":7,\"1495\":1,\"1496\":4,\"1497\":4,\"1498\":1,\"1499\":2,\"1500\":2,\"1501\":2,\"1502\":1,\"1503\":3,\"1504\":2,\"1505\":1,\"1506\":1,\"1507\":1,\"1508\":1,\"1509\":1,\"1623\":1,\"1624\":4,\"1625\":4,\"1626\":1,\"1627\":2,\"1628\":2,\"1629\":2,\"1630\":1,\"1631\":3,\"1632\":2,\"1633\":1,\"1634\":1,\"1635\":1,\"1636\":1,\"1637\":1,\"1647\":6,\"1648\":2,\"1649\":2,\"1650\":7,\"1672\":1,\"1673\":4,\"1674\":4,\"1675\":1,\"1676\":2,\"1677\":2,\"1678\":2,\"1679\":1,\"1680\":3,\"1681\":2,\"1682\":1,\"1683\":1,\"1684\":1,\"1685\":1,\"1686\":1,\"1800\":1,\"1801\":4,\"1802\":4,\"1803\":1,\"1804\":2,\"1805\":2,\"1806\":2,\"1807\":1,\"1808\":3,\"1809\":2,\"1810\":1,\"1811\":1,\"1812\":1,\"1813\":1,\"1814\":1,\"1824\":6,\"1825\":2,\"1826\":2,\"1827\":7,\"1849\":1,\"1850\":4,\"1851\":4,\"1852\":1,\"1853\":2,\"1854\":2,\"1855\":2,\"1856\":1,\"1857\":3,\"1858\":2,\"1859\":1,\"1860\":1,\"1861\":1,\"1862\":1,\"1863\":1,\"1977\":1,\"1978\":4,\"1979\":4,\"1980\":1,\"1981\":2,\"1982\":2,\"1983\":2,\"1984\":1,\"1985\":3,\"1986\":2,\"1987\":1,\"1988\":1,\"1989\":1,\"1990\":1,\"1991\":1,\"2001\":6,\"2002\":2,\"2003\":2,\"2004\":7,\"2026\":1,\"2027\":4,\"2028\":4,\"2029\":1,\"2030\":2,\"2031\":2,\"2032\":2,\"2033\":1,\"2034\":3,\"2035\":2,\"2036\":1,\"2037\":1,\"2038\":1,\"2039\":1,\"2040\":1,\"2154\":1,\"2155\":4,\"2156\":4,\"2157\":1,\"2158\":2,\"2159\":2,\"2160\":2,\"2161\":1,\"2162\":3,\"2163\":2,\"2164\":1,\"2165\":1,\"2166\":1,\"2167\":1,\"2168\":1,\"2178\":6,\"2179\":2,\"2180\":2,\"2181\":7,\"2213\":1,\"2214\":4,\"2215\":4,\"2216\":1,\"2217\":2,\"2218\":2,\"2219\":2,\"2220\":1,\"2221\":3,\"2222\":2,\"2223\":1,\"2224\":1,\"2225\":1,\"2226\":1,\"2227\":1,\"2306\":6,\"2307\":2,\"2308\":7,\"2373\":1,\"2374\":4,\"2375\":4,\"2376\":1,\"2377\":2,\"2378\":2,\"2379\":2,\"2380\":1,\"2381\":3,\"2382\":2,\"2383\":1,\"2384\":1,\"2385\":1,\"2386\":1,\"2387\":1,\"2397\":6,\"2398\":2,\"2399\":2,\"2400\":7,\"2432\":1,\"2433\":4,\"2434\":4,\"2435\":1,\"2436\":2,\"2437\":2,\"2438\":2,\"2439\":1,\"2440\":3,\"2441\":2,\"2442\":1,\"2443\":1,\"2444\":1,\"2445\":1,\"2446\":1,\"2525\":6,\"2526\":2,\"2527\":7,\"2592\":1,\"2593\":4,\"2594\":4,\"2595\":1,\"2596\":2,\"2597\":2,\"2598\":2,\"2599\":1,\"2600\":3,\"2601\":2,\"2602\":1,\"2603\":1,\"2604\":1,\"2605\":1,\"2606\":1,\"2616\":6,\"2617\":2,\"2618\":2,\"2619\":7,\"2651\":1,\"2652\":4,\"2653\":4,\"2654\":1,\"2655\":2,\"2656\":2,\"2657\":2,\"2658\":1,\"2659\":3,\"2660\":2,\"2661\":1,\"2662\":1,\"2663\":1,\"2664\":1,\"2665\":1,\"2744\":6,\"2745\":2,\"2746\":7,\"2811\":1,\"2812\":4,\"2813\":4,\"2814\":1,\"2815\":2,\"2816\":2,\"2817\":2,\"2818\":1,\"2819\":3,\"2820\":2,\"2821\":1,\"2822\":1,\"2823\":1,\"2824\":1,\"2825\":1,\"2835\":6,\"2836\":2,\"2837\":2,\"2838\":7}}],[\"authority\",{\"1\":{\"285\":1,\"296\":1,\"438\":1,\"464\":1,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1}}],[\"authorities\",{\"1\":{\"106\":1,\"161\":1}}],[\"authorisation\",{\"1\":{\"93\":1}}],[\"authorized\",{\"1\":{\"5\":1,\"10\":1,\"81\":1}}],[\"authorizationruleprovider\",{\"1\":{\"145\":1}}],[\"authorizationconfig\",{\"1\":{\"145\":1}}],[\"authorization\",{\"0\":{\"145\":1,\"359\":1,\"385\":1,\"811\":1,\"903\":1,\"971\":1,\"994\":1,\"1079\":1,\"1147\":1,\"1271\":1,\"1294\":1,\"1319\":1,\"1447\":1,\"1470\":1,\"1496\":1,\"1624\":1,\"1647\":1,\"1673\":1,\"1801\":1,\"1824\":1,\"1850\":1,\"1978\":1,\"2001\":1,\"2027\":1,\"2155\":1,\"2178\":1,\"2214\":1,\"2306\":1,\"2374\":1,\"2397\":1,\"2433\":1,\"2525\":1,\"2593\":1,\"2616\":1,\"2652\":1,\"2744\":1,\"2812\":1,\"2835\":1},\"1\":{\"5\":1,\"10\":1,\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"95\":1,\"112\":1,\"113\":1,\"145\":1,\"165\":1,\"354\":4,\"355\":2,\"356\":2,\"357\":5,\"358\":3,\"359\":5,\"360\":1,\"380\":4,\"381\":2,\"382\":2,\"383\":5,\"384\":3,\"385\":5,\"811\":2,\"812\":1,\"815\":1,\"816\":1,\"902\":1,\"903\":2,\"905\":1,\"971\":2,\"972\":1,\"975\":1,\"976\":1,\"993\":1,\"994\":2,\"997\":1,\"1079\":2,\"1080\":1,\"1083\":1,\"1084\":1,\"1147\":2,\"1148\":1,\"1151\":1,\"1152\":1,\"1271\":2,\"1272\":1,\"1275\":1,\"1276\":1,\"1293\":1,\"1294\":2,\"1297\":1,\"1319\":2,\"1320\":1,\"1323\":1,\"1324\":1,\"1447\":2,\"1448\":1,\"1451\":1,\"1452\":1,\"1469\":1,\"1470\":2,\"1473\":1,\"1496\":2,\"1497\":1,\"1500\":1,\"1501\":1,\"1624\":2,\"1625\":1,\"1628\":1,\"1629\":1,\"1646\":1,\"1647\":2,\"1650\":1,\"1673\":2,\"1674\":1,\"1677\":1,\"1678\":1,\"1801\":2,\"1802\":1,\"1805\":1,\"1806\":1,\"1823\":1,\"1824\":2,\"1827\":1,\"1850\":2,\"1851\":1,\"1854\":1,\"1855\":1,\"1978\":2,\"1979\":1,\"1982\":1,\"1983\":1,\"2000\":1,\"2001\":2,\"2004\":1,\"2027\":2,\"2028\":1,\"2031\":1,\"2032\":1,\"2155\":2,\"2156\":1,\"2159\":1,\"2160\":1,\"2177\":1,\"2178\":2,\"2181\":1,\"2214\":2,\"2215\":1,\"2218\":1,\"2219\":1,\"2305\":1,\"2306\":2,\"2308\":1,\"2374\":2,\"2375\":1,\"2378\":1,\"2379\":1,\"2396\":1,\"2397\":2,\"2400\":1,\"2433\":2,\"2434\":1,\"2437\":1,\"2438\":1,\"2524\":1,\"2525\":2,\"2527\":1,\"2593\":2,\"2594\":1,\"2597\":1,\"2598\":1,\"2615\":1,\"2616\":2,\"2619\":1,\"2652\":2,\"2653\":1,\"2656\":1,\"2657\":1,\"2743\":1,\"2744\":2,\"2746\":1,\"2812\":2,\"2813\":1,\"2816\":1,\"2817\":1,\"2834\":1,\"2835\":2,\"2838\":1}}],[\"authenticates\",{\"1\":{\"801\":1,\"928\":1,\"1232\":1,\"1408\":1,\"1585\":1,\"1762\":1,\"1939\":1,\"2116\":1,\"2204\":1,\"2331\":1,\"2423\":1,\"2550\":1,\"2642\":1,\"2769\":1}}],[\"authenticated\",{\"1\":{\"798\":2,\"902\":1,\"925\":1,\"993\":1,\"1229\":1,\"1293\":1,\"1405\":1,\"1469\":1,\"1582\":1,\"1646\":1,\"1759\":1,\"1823\":1,\"1936\":1,\"2000\":1,\"2113\":1,\"2177\":1,\"2201\":2,\"2305\":1,\"2328\":1,\"2396\":1,\"2420\":2,\"2524\":1,\"2547\":1,\"2615\":1,\"2639\":2,\"2743\":1,\"2766\":1,\"2834\":1}}],[\"authenticate\",{\"1\":{\"106\":1,\"108\":1,\"109\":2,\"161\":1,\"163\":1,\"164\":2,\"208\":1,\"334\":1,\"363\":1,\"389\":1,\"425\":1,\"560\":1,\"590\":1,\"636\":1,\"682\":1,\"728\":1,\"774\":1,\"865\":1,\"1047\":1,\"1198\":1,\"1370\":1,\"1547\":1,\"1724\":1,\"1901\":1,\"2078\":1,\"2268\":1,\"2487\":1,\"2706\":1}}],[\"authenticating\",{\"0\":{\"158\":1},\"1\":{\"87\":1,\"798\":1,\"800\":1,\"925\":1,\"927\":1,\"1229\":1,\"1231\":1,\"1405\":1,\"1407\":1,\"1582\":1,\"1584\":1,\"1759\":1,\"1761\":1,\"1936\":1,\"1938\":1,\"2113\":1,\"2115\":1,\"2201\":1,\"2203\":1,\"2328\":1,\"2330\":1,\"2420\":1,\"2422\":1,\"2547\":1,\"2549\":1,\"2639\":1,\"2641\":1,\"2766\":1,\"2768\":1}}],[\"authentication\",{\"0\":{\"106\":1,\"161\":1,\"995\":1,\"1295\":1,\"1471\":1,\"1648\":1,\"1825\":1,\"2002\":1,\"2179\":1,\"2398\":1,\"2617\":1,\"2836\":1},\"1\":{\"5\":1,\"10\":1,\"32\":1,\"43\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"95\":1,\"106\":1,\"112\":1,\"113\":1,\"148\":1,\"149\":1,\"158\":1,\"161\":1,\"165\":1,\"186\":1,\"188\":1,\"192\":1,\"194\":1,\"195\":1,\"197\":1,\"215\":2,\"225\":2,\"240\":1,\"242\":1,\"280\":1,\"291\":1,\"300\":1,\"303\":1,\"306\":1,\"309\":1,\"312\":1,\"423\":1,\"434\":4,\"445\":1,\"453\":1,\"460\":4,\"476\":1,\"483\":4,\"494\":1,\"502\":1,\"509\":4,\"520\":1,\"528\":1,\"539\":4,\"550\":1,\"558\":1,\"569\":4,\"580\":1,\"588\":1,\"599\":4,\"610\":1,\"634\":1,\"645\":4,\"656\":1,\"680\":1,\"691\":4,\"702\":1,\"726\":1,\"737\":4,\"748\":1,\"772\":1,\"783\":4,\"794\":1,\"798\":1,\"814\":1,\"872\":2,\"882\":2,\"898\":1,\"900\":1,\"902\":2,\"903\":1,\"921\":1,\"925\":1,\"965\":1,\"967\":1,\"974\":1,\"993\":3,\"994\":1,\"995\":1,\"1013\":1,\"1054\":2,\"1064\":2,\"1072\":1,\"1074\":1,\"1082\":1,\"1126\":1,\"1128\":1,\"1150\":1,\"1205\":2,\"1215\":2,\"1223\":1,\"1225\":1,\"1229\":1,\"1265\":1,\"1267\":1,\"1274\":1,\"1293\":3,\"1294\":1,\"1295\":1,\"1312\":1,\"1322\":1,\"1377\":2,\"1387\":2,\"1399\":1,\"1401\":1,\"1405\":1,\"1441\":1,\"1443\":1,\"1450\":1,\"1469\":3,\"1470\":1,\"1471\":1,\"1489\":1,\"1499\":1,\"1554\":2,\"1564\":2,\"1576\":1,\"1578\":1,\"1582\":1,\"1618\":1,\"1620\":1,\"1627\":1,\"1646\":3,\"1647\":1,\"1648\":1,\"1666\":1,\"1676\":1,\"1731\":2,\"1741\":2,\"1753\":1,\"1755\":1,\"1759\":1,\"1795\":1,\"1797\":1,\"1804\":1,\"1823\":3,\"1824\":1,\"1825\":1,\"1843\":1,\"1853\":1,\"1908\":2,\"1918\":2,\"1930\":1,\"1932\":1,\"1936\":1,\"1972\":1,\"1974\":1,\"1981\":1,\"2000\":3,\"2001\":1,\"2002\":1,\"2020\":1,\"2030\":1,\"2085\":2,\"2095\":2,\"2107\":1,\"2109\":1,\"2113\":1,\"2149\":1,\"2151\":1,\"2158\":1,\"2177\":3,\"2178\":1,\"2179\":1,\"2197\":1,\"2201\":1,\"2217\":1,\"2275\":2,\"2285\":2,\"2301\":1,\"2303\":1,\"2305\":2,\"2306\":1,\"2324\":1,\"2328\":1,\"2368\":1,\"2370\":1,\"2377\":1,\"2396\":3,\"2397\":1,\"2398\":1,\"2416\":1,\"2420\":1,\"2436\":1,\"2494\":2,\"2504\":2,\"2520\":1,\"2522\":1,\"2524\":2,\"2525\":1,\"2543\":1,\"2547\":1,\"2587\":1,\"2589\":1,\"2596\":1,\"2615\":3,\"2616\":1,\"2617\":1,\"2635\":1,\"2639\":1,\"2655\":1,\"2713\":2,\"2723\":2,\"2739\":1,\"2741\":1,\"2743\":2,\"2744\":1,\"2762\":1,\"2766\":1,\"2806\":1,\"2808\":1,\"2815\":1,\"2834\":3,\"2835\":1,\"2836\":1,\"2854\":1}}],[\"authenitication\",{\"1\":{\"45\":1}}],[\"auch\",{\"1\":{\"16\":4,\"17\":1}}],[\"ausgewählten\",{\"1\":{\"16\":1}}],[\"aus\",{\"1\":{\"16\":1}}],[\"auf\",{\"1\":{\"14\":2,\"16\":1,\"17\":1}}],[\"adhere\",{\"1\":{\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1}}],[\"admin\",{\"1\":{\"798\":1,\"804\":1,\"806\":5,\"932\":1,\"933\":4,\"1236\":1,\"1237\":4,\"1412\":1,\"1413\":4,\"1589\":1,\"1590\":4,\"1766\":1,\"1767\":4,\"1943\":1,\"1944\":4,\"2120\":1,\"2121\":4,\"2201\":1,\"2207\":1,\"2209\":5,\"2335\":1,\"2336\":4,\"2420\":1,\"2426\":1,\"2428\":5,\"2554\":1,\"2555\":4,\"2639\":1,\"2645\":1,\"2647\":5,\"2773\":1,\"2774\":4}}],[\"admins\",{\"1\":{\"285\":1,\"296\":1,\"438\":1,\"464\":1,\"487\":1,\"513\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1,\"806\":3,\"933\":2,\"1237\":2,\"1413\":2,\"1590\":2,\"1767\":2,\"1944\":2,\"2121\":2,\"2209\":3,\"2336\":2,\"2428\":3,\"2555\":2,\"2647\":3,\"2774\":2}}],[\"administrator\",{\"1\":{\"423\":1,\"453\":1,\"476\":1,\"502\":1,\"528\":1,\"558\":1,\"588\":1,\"634\":1,\"680\":1,\"726\":1,\"772\":1,\"806\":1,\"2209\":1,\"2428\":1,\"2647\":1}}],[\"administrators\",{\"1\":{\"105\":1,\"798\":1,\"806\":2,\"933\":2,\"1237\":2,\"1413\":2,\"1590\":2,\"1767\":2,\"1944\":2,\"2121\":2,\"2201\":1,\"2209\":2,\"2336\":2,\"2420\":1,\"2428\":2,\"2555\":2,\"2639\":1,\"2647\":2,\"2774\":2}}],[\"administration\",{\"1\":{\"261\":1,\"262\":1,\"423\":1,\"453\":1,\"476\":1,\"502\":1,\"528\":1,\"558\":1,\"588\":1,\"634\":1,\"680\":1,\"726\":1,\"772\":1}}],[\"administrative\",{\"1\":{\"113\":1}}],[\"advanced\",{\"1\":{\"108\":1,\"163\":1}}],[\"advancing\",{\"1\":{\"12\":1,\"123\":1}}],[\"adaption\",{\"1\":{\"150\":1}}],[\"adapters\",{\"1\":{\"142\":1}}],[\"adapter\",{\"0\":{\"142\":1},\"1\":{\"142\":2,\"144\":2}}],[\"adapt\",{\"1\":{\"77\":1,\"143\":4,\"345\":2,\"442\":1,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"791\":1}}],[\"adaptable\",{\"1\":{\"5\":1,\"9\":1}}],[\"adds\",{\"1\":{\"896\":1,\"963\":1,\"2299\":1,\"2366\":1,\"2518\":1,\"2585\":1,\"2737\":1,\"2804\":1}}],[\"adduser\",{\"1\":{\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1}}],[\"addgroup\",{\"1\":{\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1}}],[\"adding\",{\"0\":{\"140\":1,\"148\":1,\"149\":1},\"1\":{\"143\":1,\"145\":1,\"146\":1,\"342\":1,\"345\":2}}],[\"addition\",{\"1\":{\"91\":1,\"105\":2,\"109\":1,\"353\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"additional\",{\"0\":{\"88\":1,\"96\":1,\"166\":1,\"904\":1,\"996\":1,\"1296\":1,\"1472\":1,\"1649\":1,\"1826\":1,\"2003\":1,\"2180\":1,\"2307\":1,\"2399\":1,\"2526\":1,\"2618\":1,\"2745\":1,\"2837\":1},\"1\":{\"79\":1,\"87\":1,\"96\":2,\"108\":1,\"163\":1,\"166\":2,\"169\":1,\"236\":1,\"281\":1,\"285\":4,\"286\":1,\"292\":1,\"296\":4,\"297\":1,\"343\":1,\"379\":1,\"438\":3,\"439\":1,\"442\":1,\"464\":4,\"465\":1,\"487\":3,\"488\":1,\"513\":3,\"514\":1,\"543\":3,\"544\":1,\"547\":1,\"573\":3,\"574\":1,\"577\":1,\"603\":3,\"604\":1,\"607\":1,\"649\":3,\"650\":1,\"653\":1,\"695\":3,\"696\":1,\"699\":1,\"741\":3,\"742\":1,\"745\":1,\"787\":3,\"788\":1,\"791\":1,\"798\":1,\"885\":1,\"904\":1,\"925\":2,\"996\":1,\"1016\":1,\"1100\":1,\"1229\":2,\"1296\":1,\"1390\":1,\"1405\":2,\"1472\":1,\"1567\":1,\"1582\":2,\"1649\":1,\"1744\":1,\"1759\":2,\"1826\":1,\"1921\":1,\"1936\":2,\"2003\":1,\"2098\":1,\"2113\":2,\"2180\":1,\"2201\":1,\"2288\":1,\"2307\":1,\"2328\":2,\"2399\":1,\"2420\":1,\"2507\":1,\"2526\":1,\"2547\":2,\"2618\":1,\"2639\":1,\"2726\":1,\"2745\":1,\"2766\":2,\"2837\":1}}],[\"additionally\",{\"1\":{\"70\":1,\"418\":1,\"448\":1,\"471\":1,\"497\":1,\"523\":1,\"553\":1,\"583\":1,\"629\":1,\"675\":1,\"721\":1,\"767\":1}}],[\"add\",{\"1\":{\"130\":1,\"140\":1,\"143\":4,\"144\":1,\"145\":1,\"146\":2,\"148\":1,\"149\":1,\"158\":1,\"261\":1,\"262\":1,\"285\":8,\"286\":7,\"296\":8,\"297\":7,\"300\":2,\"331\":1,\"334\":2,\"345\":4,\"360\":1,\"370\":3,\"375\":1,\"377\":1,\"386\":3,\"394\":1,\"429\":1,\"438\":7,\"439\":5,\"453\":1,\"464\":8,\"465\":5,\"476\":1,\"487\":7,\"488\":5,\"502\":1,\"513\":7,\"514\":5,\"528\":1,\"543\":7,\"544\":5,\"573\":7,\"574\":5,\"603\":7,\"604\":5,\"649\":7,\"650\":5,\"695\":7,\"696\":5,\"741\":7,\"742\":5,\"778\":1,\"787\":7,\"788\":5}}],[\"added\",{\"1\":{\"86\":1,\"334\":1,\"348\":1,\"367\":1,\"423\":1,\"453\":1,\"476\":1,\"502\":1,\"520\":1,\"528\":1,\"558\":1,\"588\":1,\"634\":1,\"680\":1,\"726\":1,\"772\":1,\"886\":1,\"1391\":1,\"1568\":1,\"1745\":1,\"1922\":1,\"2099\":1,\"2289\":1,\"2508\":1,\"2727\":1}}],[\"address=\",{\"1\":{\"323\":6}}],[\"addressing\",{\"1\":{\"116\":1}}],[\"addresses\",{\"1\":{\"113\":1,\"217\":1,\"222\":1,\"223\":1,\"801\":2,\"806\":2,\"874\":1,\"879\":1,\"880\":1,\"928\":2,\"933\":2,\"1056\":1,\"1061\":1,\"1062\":1,\"1207\":1,\"1212\":1,\"1213\":1,\"1232\":2,\"1237\":2,\"1379\":1,\"1384\":1,\"1385\":1,\"1408\":2,\"1413\":2,\"1556\":1,\"1561\":1,\"1562\":1,\"1585\":2,\"1590\":2,\"1733\":1,\"1738\":1,\"1739\":1,\"1762\":2,\"1767\":2,\"1910\":1,\"1915\":1,\"1916\":1,\"1939\":2,\"1944\":2,\"2087\":1,\"2092\":1,\"2093\":1,\"2116\":2,\"2121\":2,\"2204\":2,\"2209\":2,\"2277\":1,\"2282\":1,\"2283\":1,\"2331\":2,\"2336\":2,\"2423\":2,\"2428\":2,\"2496\":1,\"2501\":1,\"2502\":1,\"2550\":2,\"2555\":2,\"2642\":2,\"2647\":2,\"2715\":1,\"2720\":1,\"2721\":1,\"2769\":2,\"2774\":2}}],[\"address\",{\"1\":{\"35\":1,\"37\":3,\"113\":1,\"123\":1,\"173\":1,\"203\":1,\"211\":1,\"249\":1,\"256\":1,\"265\":1,\"323\":6,\"413\":1,\"424\":1,\"454\":1,\"477\":1,\"503\":1,\"529\":1,\"559\":1,\"589\":1,\"624\":1,\"635\":1,\"670\":1,\"681\":1,\"716\":1,\"727\":1,\"762\":1,\"773\":1,\"836\":1,\"861\":1,\"868\":1,\"893\":1,\"909\":1,\"946\":1,\"956\":1,\"1001\":1,\"1021\":1,\"1042\":1,\"1050\":1,\"1112\":1,\"1119\":1,\"1130\":1,\"1172\":1,\"1193\":1,\"1201\":1,\"1250\":1,\"1257\":1,\"1301\":1,\"1344\":1,\"1366\":1,\"1373\":1,\"1426\":1,\"1433\":1,\"1477\":1,\"1521\":1,\"1543\":1,\"1550\":1,\"1603\":1,\"1610\":1,\"1654\":1,\"1698\":1,\"1720\":1,\"1727\":1,\"1780\":1,\"1787\":1,\"1831\":1,\"1875\":1,\"1897\":1,\"1904\":1,\"1957\":1,\"1964\":1,\"2008\":1,\"2052\":1,\"2074\":1,\"2081\":1,\"2134\":1,\"2141\":1,\"2185\":1,\"2239\":1,\"2264\":1,\"2271\":1,\"2296\":1,\"2312\":1,\"2349\":1,\"2359\":1,\"2404\":1,\"2458\":1,\"2483\":1,\"2490\":1,\"2515\":1,\"2531\":1,\"2568\":1,\"2578\":1,\"2623\":1,\"2677\":1,\"2702\":1,\"2709\":1,\"2734\":1,\"2750\":1,\"2787\":1,\"2797\":1,\"2842\":1}}],[\"aliases\",{\"1\":{\"323\":1}}],[\"alignment\",{\"1\":{\"155\":30}}],[\"align\",{\"1\":{\"155\":7,\"156\":2}}],[\"alert\",{\"1\":{\"286\":1,\"297\":1,\"439\":1,\"465\":1,\"488\":1,\"514\":1,\"544\":1,\"574\":1,\"604\":1,\"650\":1,\"696\":1,\"742\":1,\"788\":1}}],[\"alexander\",{\"1\":{\"79\":1}}],[\"alpine\",{\"1\":{\"286\":1,\"297\":1,\"439\":1,\"465\":1,\"488\":1,\"514\":1,\"544\":1,\"574\":1,\"604\":1,\"650\":1,\"696\":1,\"742\":1,\"788\":1}}],[\"alphabetic\",{\"1\":{\"141\":2,\"142\":1,\"143\":2,\"145\":1,\"146\":1}}],[\"alternative\",{\"1\":{\"108\":2,\"163\":2,\"801\":1,\"928\":1,\"1232\":1,\"1408\":1,\"1585\":1,\"1762\":1,\"1939\":1,\"2116\":1,\"2204\":1,\"2331\":1,\"2423\":1,\"2550\":1,\"2642\":1,\"2769\":1}}],[\"almost\",{\"1\":{\"98\":1}}],[\"also\",{\"1\":{\"33\":1,\"77\":1,\"84\":1,\"95\":1,\"148\":1,\"165\":1,\"330\":1,\"334\":1,\"337\":1,\"344\":1,\"348\":1,\"352\":1,\"353\":1,\"363\":1,\"389\":1,\"440\":2,\"466\":2,\"489\":2,\"515\":2,\"545\":2,\"575\":2,\"605\":2,\"651\":2,\"697\":2,\"743\":2,\"789\":2,\"902\":2,\"932\":1,\"993\":2,\"1016\":1,\"1100\":1,\"1236\":1,\"1293\":2,\"1412\":1,\"1469\":2,\"1589\":1,\"1646\":2,\"1766\":1,\"1823\":2,\"1943\":1,\"2000\":2,\"2120\":1,\"2177\":2,\"2305\":2,\"2335\":1,\"2396\":2,\"2524\":2,\"2554\":1,\"2615\":2,\"2743\":2,\"2773\":1,\"2834\":2}}],[\"always\",{\"1\":{\"33\":1,\"342\":1,\"412\":1,\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"623\":1,\"651\":1,\"669\":1,\"697\":1,\"715\":1,\"743\":1,\"761\":1,\"789\":1}}],[\"al\",{\"1\":{\"26\":1}}],[\"algorithm\",{\"1\":{\"26\":1,\"29\":1,\"370\":1,\"373\":1}}],[\"allocation\",{\"1\":{\"155\":8}}],[\"allowed\",{\"1\":{\"93\":1,\"257\":1,\"285\":1,\"296\":1,\"330\":1,\"344\":1,\"353\":1,\"373\":1,\"804\":1,\"931\":1,\"1235\":1,\"1411\":1,\"1588\":1,\"1765\":1,\"1942\":1,\"2119\":1,\"2207\":1,\"2334\":1,\"2426\":1,\"2553\":1,\"2645\":1,\"2772\":1}}],[\"allow\",{\"0\":{\"80\":1,\"82\":1,\"422\":1,\"452\":1,\"475\":1,\"501\":1,\"527\":1,\"557\":1,\"587\":1,\"633\":1,\"679\":1,\"725\":1,\"771\":1},\"1\":{\"33\":1,\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1,\"81\":8,\"82\":1,\"95\":1,\"100\":1,\"102\":2,\"105\":3,\"106\":1,\"124\":1,\"141\":1,\"161\":1,\"165\":1,\"204\":1,\"229\":1,\"257\":1,\"258\":3,\"259\":1,\"286\":3,\"300\":2,\"303\":2,\"331\":1,\"342\":1,\"344\":1,\"360\":1,\"421\":1,\"422\":1,\"423\":4,\"425\":3,\"427\":1,\"438\":1,\"451\":1,\"452\":2,\"453\":5,\"455\":2,\"464\":1,\"474\":1,\"475\":2,\"476\":5,\"478\":2,\"487\":1,\"500\":1,\"501\":2,\"502\":5,\"504\":2,\"513\":1,\"519\":1,\"520\":2,\"526\":1,\"527\":1,\"528\":4,\"530\":5,\"532\":1,\"543\":1,\"556\":1,\"557\":1,\"558\":4,\"560\":3,\"562\":1,\"573\":1,\"586\":1,\"587\":1,\"588\":4,\"590\":3,\"592\":1,\"603\":1,\"632\":1,\"633\":1,\"634\":4,\"636\":3,\"638\":1,\"649\":1,\"678\":1,\"679\":1,\"680\":4,\"682\":3,\"684\":1,\"695\":1,\"724\":1,\"725\":1,\"726\":4,\"728\":3,\"730\":1,\"741\":1,\"770\":1,\"771\":1,\"772\":4,\"774\":3,\"776\":1,\"787\":1,\"887\":1,\"932\":1,\"957\":3,\"958\":1,\"1043\":1,\"1066\":1,\"1120\":3,\"1121\":1,\"1194\":1,\"1217\":1,\"1236\":1,\"1258\":3,\"1259\":1,\"1392\":1,\"1412\":1,\"1434\":3,\"1435\":1,\"1569\":1,\"1589\":1,\"1611\":3,\"1612\":1,\"1746\":1,\"1766\":1,\"1788\":3,\"1789\":1,\"1923\":1,\"1943\":1,\"1965\":3,\"1966\":1,\"2100\":1,\"2120\":1,\"2142\":3,\"2143\":1,\"2290\":1,\"2335\":1,\"2360\":3,\"2361\":1,\"2509\":1,\"2554\":1,\"2579\":3,\"2580\":1,\"2728\":1,\"2773\":1,\"2798\":3,\"2799\":1}}],[\"allowlist\",{\"1\":{\"16\":3,\"20\":1,\"418\":1,\"419\":1,\"448\":1,\"449\":1,\"471\":1,\"472\":1,\"497\":1,\"498\":1,\"523\":1,\"524\":1,\"532\":1,\"553\":1,\"554\":1,\"562\":1,\"583\":1,\"584\":1,\"592\":1,\"629\":1,\"630\":1,\"638\":1,\"675\":1,\"676\":1,\"684\":1,\"721\":1,\"722\":1,\"730\":1,\"767\":1,\"768\":1}}],[\"allows\",{\"1\":{\"9\":1,\"123\":1,\"124\":1,\"343\":1,\"359\":1,\"385\":1,\"395\":1,\"806\":1,\"933\":1,\"1237\":1,\"1413\":1,\"1590\":1,\"1767\":1,\"1944\":1,\"2121\":1,\"2209\":1,\"2336\":1,\"2428\":1,\"2555\":1,\"2647\":1,\"2774\":1}}],[\"all\",{\"1\":{\"82\":1,\"87\":3,\"93\":2,\"106\":1,\"124\":1,\"125\":2,\"126\":1,\"130\":1,\"131\":1,\"161\":1,\"271\":1,\"272\":2,\"273\":1,\"327\":1,\"334\":1,\"337\":1,\"342\":2,\"344\":2,\"345\":1,\"348\":1,\"357\":4,\"358\":2,\"363\":1,\"367\":1,\"368\":1,\"373\":1,\"383\":4,\"384\":2,\"389\":1,\"399\":1,\"400\":1,\"404\":1,\"406\":1,\"412\":1,\"422\":1,\"425\":1,\"452\":1,\"455\":1,\"475\":1,\"478\":1,\"501\":1,\"504\":1,\"527\":1,\"530\":1,\"557\":1,\"560\":1,\"587\":1,\"590\":1,\"611\":1,\"615\":1,\"617\":1,\"623\":1,\"633\":1,\"636\":1,\"657\":1,\"661\":1,\"663\":1,\"669\":1,\"679\":1,\"682\":1,\"703\":1,\"707\":1,\"709\":1,\"715\":1,\"725\":1,\"728\":1,\"749\":1,\"753\":1,\"755\":1,\"761\":1,\"771\":1,\"774\":1,\"798\":2,\"886\":1,\"897\":1,\"916\":1,\"917\":2,\"918\":1,\"925\":2,\"964\":1,\"1008\":1,\"1009\":2,\"1010\":1,\"1071\":1,\"1125\":1,\"1136\":1,\"1137\":2,\"1138\":1,\"1222\":1,\"1229\":2,\"1264\":1,\"1307\":1,\"1308\":2,\"1309\":1,\"1391\":1,\"1398\":1,\"1405\":2,\"1440\":1,\"1484\":1,\"1485\":2,\"1486\":1,\"1568\":1,\"1575\":1,\"1582\":2,\"1617\":1,\"1661\":1,\"1662\":2,\"1663\":1,\"1745\":1,\"1752\":1,\"1759\":2,\"1794\":1,\"1838\":1,\"1839\":2,\"1840\":1,\"1922\":1,\"1929\":1,\"1936\":2,\"1971\":1,\"2015\":1,\"2016\":2,\"2017\":1,\"2099\":1,\"2106\":1,\"2113\":2,\"2148\":1,\"2192\":1,\"2193\":2,\"2194\":1,\"2201\":2,\"2289\":1,\"2300\":1,\"2319\":1,\"2320\":2,\"2321\":1,\"2328\":2,\"2367\":1,\"2411\":1,\"2412\":2,\"2413\":1,\"2420\":2,\"2508\":1,\"2519\":1,\"2538\":1,\"2539\":2,\"2540\":1,\"2547\":2,\"2586\":1,\"2630\":1,\"2631\":2,\"2632\":1,\"2639\":2,\"2727\":1,\"2738\":1,\"2757\":1,\"2758\":2,\"2759\":1,\"2766\":2,\"2805\":1,\"2849\":1,\"2850\":2,\"2851\":1}}],[\"aller\",{\"1\":{\"14\":1}}],[\"already\",{\"1\":{\"11\":1,\"233\":1,\"282\":1,\"293\":1,\"337\":1,\"430\":1,\"442\":1,\"456\":1,\"479\":1,\"505\":1,\"535\":1,\"547\":1,\"565\":1,\"577\":1,\"595\":1,\"607\":1,\"641\":1,\"653\":1,\"687\":1,\"699\":1,\"733\":1,\"745\":1,\"779\":1,\"791\":1,\"891\":1,\"1070\":1,\"1221\":1,\"1396\":1,\"1573\":1,\"1750\":1,\"1927\":1,\"2104\":1,\"2294\":1,\"2513\":1,\"2732\":1}}],[\"attributes\",{\"1\":{\"91\":1}}],[\"at\",{\"1\":{\"1\":2,\"11\":1,\"12\":1,\"37\":2,\"40\":1,\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"73\":1,\"77\":1,\"93\":1,\"94\":1,\"95\":1,\"99\":1,\"125\":1,\"130\":1,\"131\":1,\"155\":7,\"158\":2,\"159\":1,\"165\":1,\"222\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"299\":1,\"314\":1,\"317\":1,\"318\":1,\"319\":2,\"321\":1,\"325\":1,\"327\":4,\"330\":1,\"334\":7,\"336\":1,\"337\":1,\"338\":2,\"340\":1,\"344\":1,\"348\":2,\"350\":3,\"352\":4,\"353\":1,\"354\":2,\"363\":8,\"373\":3,\"375\":1,\"377\":1,\"380\":2,\"389\":10,\"394\":1,\"396\":2,\"413\":2,\"418\":1,\"419\":1,\"423\":1,\"425\":1,\"430\":1,\"438\":1,\"439\":1,\"441\":1,\"442\":1,\"448\":1,\"449\":1,\"453\":1,\"455\":2,\"456\":1,\"464\":1,\"465\":1,\"467\":1,\"468\":1,\"471\":1,\"472\":1,\"476\":1,\"478\":2,\"479\":1,\"487\":1,\"488\":1,\"490\":1,\"491\":1,\"497\":1,\"498\":1,\"502\":1,\"504\":2,\"505\":1,\"513\":1,\"514\":1,\"516\":1,\"517\":1,\"519\":1,\"523\":1,\"524\":1,\"528\":1,\"530\":2,\"535\":1,\"543\":1,\"544\":1,\"546\":1,\"547\":1,\"553\":1,\"554\":1,\"558\":1,\"560\":1,\"565\":1,\"573\":1,\"574\":1,\"576\":1,\"577\":1,\"583\":1,\"584\":1,\"588\":1,\"590\":1,\"595\":1,\"603\":1,\"604\":1,\"606\":1,\"607\":1,\"624\":2,\"629\":1,\"630\":1,\"634\":1,\"636\":1,\"641\":1,\"649\":1,\"650\":1,\"652\":1,\"653\":1,\"670\":2,\"675\":1,\"676\":1,\"680\":1,\"682\":1,\"687\":1,\"695\":1,\"696\":1,\"698\":1,\"699\":1,\"716\":2,\"721\":1,\"722\":1,\"726\":1,\"728\":1,\"733\":1,\"741\":1,\"742\":1,\"744\":1,\"745\":1,\"762\":2,\"767\":1,\"768\":1,\"772\":1,\"774\":1,\"779\":1,\"787\":1,\"788\":1,\"790\":1,\"791\":1,\"879\":1,\"903\":1,\"915\":2,\"994\":1,\"1007\":2,\"1061\":1,\"1212\":1,\"1294\":1,\"1384\":1,\"1470\":1,\"1483\":2,\"1561\":1,\"1647\":1,\"1660\":2,\"1738\":1,\"1824\":1,\"1837\":2,\"1915\":1,\"2001\":1,\"2014\":2,\"2092\":1,\"2178\":1,\"2191\":2,\"2282\":1,\"2306\":1,\"2318\":2,\"2397\":1,\"2410\":2,\"2501\":1,\"2525\":1,\"2537\":2,\"2616\":1,\"2629\":2,\"2720\":1,\"2744\":1,\"2756\":2,\"2835\":1,\"2848\":2}}],[\"award\",{\"1\":{\"1\":2}}],[\"asymmetrically\",{\"1\":{\"286\":1,\"297\":1}}],[\"aspects\",{\"1\":{\"90\":1,\"112\":1,\"113\":1}}],[\"assuming\",{\"1\":{\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"649\":1,\"650\":1,\"695\":1,\"696\":1,\"741\":1,\"742\":1,\"787\":1,\"788\":1}}],[\"assurance\",{\"1\":{\"77\":1}}],[\"assert\",{\"1\":{\"155\":2}}],[\"assign\",{\"1\":{\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"assigning\",{\"1\":{\"798\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"assignment\",{\"1\":{\"155\":5}}],[\"assist\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"assistance\",{\"1\":{\"12\":1}}],[\"asked\",{\"1\":{\"135\":1}}],[\"ask\",{\"1\":{\"36\":1,\"411\":2,\"622\":2,\"668\":2,\"714\":2,\"760\":2}}],[\"as\",{\"0\":{\"2\":2,\"83\":2,\"314\":1},\"1\":{\"0\":1,\"1\":2,\"6\":2,\"35\":1,\"38\":2,\"67\":2,\"77\":2,\"81\":2,\"85\":2,\"86\":1,\"87\":2,\"90\":4,\"91\":4,\"94\":4,\"95\":5,\"96\":1,\"98\":1,\"99\":1,\"106\":1,\"109\":1,\"112\":6,\"113\":5,\"114\":2,\"116\":2,\"122\":1,\"124\":2,\"125\":2,\"134\":1,\"135\":1,\"150\":2,\"153\":1,\"159\":1,\"161\":1,\"164\":1,\"165\":5,\"166\":1,\"184\":1,\"209\":1,\"214\":1,\"238\":1,\"261\":1,\"262\":1,\"281\":2,\"284\":8,\"285\":1,\"286\":1,\"292\":2,\"295\":8,\"296\":1,\"297\":1,\"307\":1,\"310\":1,\"314\":1,\"318\":1,\"321\":2,\"327\":4,\"328\":2,\"330\":1,\"331\":2,\"334\":1,\"337\":1,\"340\":1,\"341\":1,\"343\":2,\"345\":2,\"348\":1,\"360\":6,\"375\":2,\"379\":1,\"386\":1,\"389\":1,\"399\":1,\"404\":1,\"409\":1,\"411\":6,\"413\":1,\"423\":1,\"437\":8,\"438\":2,\"439\":1,\"442\":4,\"453\":1,\"463\":8,\"464\":2,\"465\":1,\"476\":1,\"486\":8,\"487\":2,\"488\":1,\"502\":1,\"512\":8,\"513\":2,\"514\":1,\"519\":1,\"520\":1,\"528\":1,\"542\":8,\"543\":2,\"544\":1,\"547\":4,\"558\":1,\"572\":8,\"573\":2,\"574\":1,\"577\":4,\"588\":1,\"602\":8,\"603\":2,\"604\":1,\"607\":4,\"615\":1,\"620\":1,\"622\":6,\"624\":1,\"634\":1,\"648\":8,\"649\":2,\"650\":1,\"653\":4,\"661\":1,\"666\":1,\"668\":6,\"670\":1,\"680\":1,\"694\":8,\"695\":2,\"696\":1,\"699\":4,\"707\":1,\"712\":1,\"714\":6,\"716\":1,\"726\":1,\"740\":8,\"741\":2,\"742\":1,\"745\":4,\"753\":1,\"758\":1,\"760\":6,\"762\":1,\"772\":1,\"786\":8,\"787\":2,\"788\":1,\"791\":4,\"798\":3,\"818\":1,\"851\":1,\"866\":1,\"871\":1,\"894\":1,\"915\":1,\"925\":3,\"936\":1,\"961\":1,\"978\":1,\"993\":2,\"1007\":1,\"1032\":1,\"1048\":1,\"1053\":1,\"1086\":1,\"1102\":1,\"1154\":1,\"1183\":1,\"1199\":1,\"1204\":1,\"1229\":2,\"1240\":1,\"1262\":1,\"1278\":1,\"1293\":2,\"1326\":1,\"1356\":1,\"1371\":1,\"1376\":1,\"1405\":2,\"1416\":1,\"1438\":1,\"1454\":1,\"1469\":2,\"1483\":1,\"1503\":1,\"1533\":1,\"1548\":1,\"1553\":1,\"1582\":2,\"1593\":1,\"1615\":1,\"1631\":1,\"1646\":2,\"1660\":1,\"1680\":1,\"1710\":1,\"1725\":1,\"1730\":1,\"1759\":2,\"1770\":1,\"1792\":1,\"1808\":1,\"1823\":2,\"1837\":1,\"1857\":1,\"1887\":1,\"1902\":1,\"1907\":1,\"1936\":2,\"1947\":1,\"1969\":1,\"1985\":1,\"2000\":2,\"2014\":1,\"2034\":1,\"2064\":1,\"2079\":1,\"2084\":1,\"2113\":2,\"2124\":1,\"2146\":1,\"2162\":1,\"2177\":2,\"2191\":1,\"2201\":3,\"2221\":1,\"2254\":1,\"2269\":1,\"2274\":1,\"2297\":1,\"2318\":1,\"2328\":3,\"2339\":1,\"2364\":1,\"2381\":1,\"2396\":2,\"2410\":1,\"2420\":3,\"2440\":1,\"2473\":1,\"2488\":1,\"2493\":1,\"2516\":1,\"2537\":1,\"2547\":3,\"2558\":1,\"2583\":1,\"2600\":1,\"2615\":2,\"2629\":1,\"2639\":3,\"2659\":1,\"2692\":1,\"2707\":1,\"2712\":1,\"2735\":1,\"2756\":1,\"2766\":3,\"2777\":1,\"2802\":1,\"2819\":1,\"2834\":2,\"2848\":1}}],[\"acitvitydefinition\",{\"1\":{\"386\":2}}],[\"achieved\",{\"1\":{\"320\":1,\"365\":1}}],[\"actual\",{\"1\":{\"214\":1,\"327\":1,\"404\":1,\"615\":1,\"661\":1,\"707\":1,\"753\":1,\"871\":1,\"1053\":1,\"1204\":1,\"1376\":1,\"1553\":1,\"1730\":1,\"1907\":1,\"2084\":1,\"2274\":1,\"2493\":1,\"2712\":1}}],[\"acting\",{\"1\":{\"164\":1}}],[\"activated\",{\"1\":{\"180\":1,\"181\":1,\"182\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"953\":1,\"954\":1,\"955\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2794\":1,\"2795\":1,\"2796\":1}}],[\"activity\",{\"1\":{\"180\":1,\"181\":1,\"182\":1,\"354\":1,\"380\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1}}],[\"activitydefinitions\",{\"0\":{\"354\":1,\"380\":1}}],[\"activitydefinition\",{\"0\":{\"353\":1},\"1\":{\"93\":4,\"300\":2,\"303\":2,\"306\":2,\"330\":3,\"331\":1,\"334\":3,\"344\":1,\"353\":2,\"354\":2,\"360\":1,\"363\":3,\"380\":2,\"389\":3,\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"activeprofiles>\",{\"1\":{\"158\":1}}],[\"activeprofile>\",{\"1\":{\"158\":1}}],[\"active\",{\"1\":{\"137\":1,\"138\":1}}],[\"actively\",{\"1\":{\"105\":1}}],[\"actions\",{\"1\":{\"81\":1}}],[\"action\",{\"1\":{\"39\":1,\"329\":1}}],[\"acts\",{\"1\":{\"85\":1,\"109\":1}}],[\"acquisition\",{\"1\":{\"74\":1}}],[\"acknowledge\",{\"1\":{\"38\":1}}],[\"acknowledgement\",{\"1\":{\"38\":1}}],[\"accurate\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"accepts\",{\"1\":{\"903\":1,\"994\":1,\"1294\":1,\"1470\":1,\"1647\":1,\"1824\":1,\"2001\":1,\"2178\":1,\"2306\":1,\"2397\":1,\"2525\":1,\"2616\":1,\"2744\":1,\"2835\":1}}],[\"acceptable\",{\"1\":{\"272\":1,\"917\":1,\"1009\":1,\"1137\":1,\"1308\":1,\"1485\":1,\"1662\":1,\"1839\":1,\"2016\":1,\"2193\":1,\"2320\":1,\"2412\":1,\"2539\":1,\"2631\":1,\"2758\":1,\"2850\":1}}],[\"accept\",{\"1\":{\"105\":1,\"166\":1}}],[\"accessing\",{\"1\":{\"37\":1,\"108\":2,\"109\":1,\"163\":2,\"164\":1,\"904\":1,\"925\":1,\"996\":1,\"1229\":1,\"1296\":1,\"1405\":1,\"1472\":1,\"1582\":1,\"1649\":1,\"1759\":1,\"1826\":1,\"1936\":1,\"2003\":1,\"2113\":1,\"2180\":1,\"2307\":1,\"2328\":1,\"2399\":1,\"2526\":1,\"2547\":1,\"2618\":1,\"2745\":1,\"2766\":1,\"2837\":1}}],[\"accessible\",{\"1\":{\"0\":1,\"32\":1,\"84\":2,\"85\":1,\"95\":2,\"113\":1,\"165\":2,\"281\":2,\"292\":2,\"300\":1,\"303\":1,\"306\":1,\"309\":1,\"312\":1,\"435\":2,\"445\":1,\"461\":2,\"484\":2,\"494\":1,\"510\":2,\"520\":1,\"540\":2,\"550\":1,\"570\":2,\"580\":1,\"600\":2,\"610\":1,\"646\":2,\"656\":1,\"692\":2,\"702\":1,\"738\":2,\"748\":1,\"784\":2,\"794\":1,\"798\":1,\"925\":1,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":1,\"2328\":1,\"2420\":1,\"2547\":1,\"2639\":1,\"2766\":1}}],[\"accessed\",{\"1\":{\"5\":1,\"87\":1,\"368\":1,\"396\":1}}],[\"access\",{\"0\":{\"10\":1,\"281\":1,\"292\":1,\"330\":1,\"435\":1,\"461\":1,\"484\":1,\"510\":1,\"540\":1,\"570\":1,\"600\":1,\"646\":1,\"692\":1,\"738\":1,\"784\":1,\"797\":1,\"924\":1,\"1228\":1,\"1404\":1,\"1581\":1,\"1758\":1,\"1935\":1,\"2112\":1,\"2200\":1,\"2327\":1,\"2419\":1,\"2546\":1,\"2638\":1,\"2765\":1},\"1\":{\"0\":2,\"10\":1,\"32\":2,\"39\":1,\"69\":1,\"81\":1,\"86\":1,\"95\":2,\"130\":2,\"131\":2,\"135\":1,\"141\":1,\"158\":2,\"165\":2,\"170\":1,\"171\":1,\"172\":1,\"174\":1,\"175\":1,\"176\":1,\"177\":1,\"178\":1,\"179\":1,\"247\":1,\"248\":1,\"250\":1,\"251\":1,\"252\":1,\"253\":1,\"254\":1,\"255\":1,\"257\":1,\"261\":1,\"262\":1,\"281\":2,\"285\":1,\"292\":2,\"296\":1,\"329\":1,\"334\":2,\"344\":8,\"363\":1,\"389\":1,\"394\":2,\"421\":2,\"424\":1,\"425\":1,\"435\":2,\"438\":3,\"454\":1,\"455\":1,\"461\":2,\"464\":2,\"474\":1,\"477\":1,\"478\":1,\"484\":2,\"487\":3,\"500\":1,\"503\":1,\"504\":1,\"510\":2,\"513\":3,\"519\":1,\"526\":1,\"529\":1,\"530\":1,\"540\":2,\"543\":3,\"556\":1,\"559\":1,\"560\":1,\"570\":2,\"573\":3,\"586\":1,\"589\":1,\"590\":1,\"600\":2,\"603\":3,\"632\":1,\"635\":1,\"636\":1,\"646\":2,\"649\":3,\"678\":2,\"681\":1,\"682\":1,\"692\":2,\"695\":3,\"724\":2,\"727\":1,\"728\":1,\"738\":2,\"741\":3,\"770\":2,\"773\":1,\"774\":1,\"784\":2,\"787\":3,\"796\":1,\"798\":3,\"801\":2,\"802\":1,\"804\":1,\"806\":3,\"834\":1,\"835\":1,\"837\":1,\"838\":1,\"839\":1,\"840\":1,\"841\":1,\"842\":1,\"894\":1,\"902\":2,\"923\":1,\"925\":3,\"928\":2,\"929\":1,\"931\":1,\"933\":3,\"944\":1,\"945\":1,\"947\":1,\"948\":1,\"949\":1,\"950\":1,\"951\":1,\"952\":1,\"961\":1,\"993\":2,\"1019\":1,\"1020\":1,\"1022\":1,\"1023\":1,\"1024\":1,\"1025\":1,\"1026\":1,\"1027\":1,\"1110\":1,\"1111\":1,\"1113\":1,\"1114\":1,\"1115\":1,\"1116\":1,\"1117\":1,\"1118\":1,\"1170\":1,\"1171\":1,\"1173\":1,\"1174\":1,\"1175\":1,\"1176\":1,\"1177\":1,\"1178\":1,\"1227\":1,\"1229\":3,\"1232\":2,\"1233\":1,\"1235\":1,\"1237\":3,\"1248\":1,\"1249\":1,\"1251\":1,\"1252\":1,\"1253\":1,\"1254\":1,\"1255\":1,\"1256\":1,\"1262\":1,\"1293\":2,\"1342\":1,\"1343\":1,\"1345\":1,\"1346\":1,\"1347\":1,\"1348\":1,\"1349\":1,\"1350\":1,\"1403\":1,\"1405\":3,\"1408\":2,\"1409\":1,\"1411\":1,\"1413\":3,\"1424\":1,\"1425\":1,\"1427\":1,\"1428\":1,\"1429\":1,\"1430\":1,\"1431\":1,\"1432\":1,\"1438\":1,\"1469\":2,\"1519\":1,\"1520\":1,\"1522\":1,\"1523\":1,\"1524\":1,\"1525\":1,\"1526\":1,\"1527\":1,\"1580\":1,\"1582\":3,\"1585\":2,\"1586\":1,\"1588\":1,\"1590\":3,\"1601\":1,\"1602\":1,\"1604\":1,\"1605\":1,\"1606\":1,\"1607\":1,\"1608\":1,\"1609\":1,\"1615\":1,\"1646\":2,\"1696\":1,\"1697\":1,\"1699\":1,\"1700\":1,\"1701\":1,\"1702\":1,\"1703\":1,\"1704\":1,\"1757\":1,\"1759\":3,\"1762\":2,\"1763\":1,\"1765\":1,\"1767\":3,\"1778\":1,\"1779\":1,\"1781\":1,\"1782\":1,\"1783\":1,\"1784\":1,\"1785\":1,\"1786\":1,\"1792\":1,\"1823\":2,\"1873\":1,\"1874\":1,\"1876\":1,\"1877\":1,\"1878\":1,\"1879\":1,\"1880\":1,\"1881\":1,\"1934\":1,\"1936\":3,\"1939\":2,\"1940\":1,\"1942\":1,\"1944\":3,\"1955\":1,\"1956\":1,\"1958\":1,\"1959\":1,\"1960\":1,\"1961\":1,\"1962\":1,\"1963\":1,\"1969\":1,\"2000\":2,\"2050\":1,\"2051\":1,\"2053\":1,\"2054\":1,\"2055\":1,\"2056\":1,\"2057\":1,\"2058\":1,\"2111\":1,\"2113\":3,\"2116\":2,\"2117\":1,\"2119\":1,\"2121\":3,\"2132\":1,\"2133\":1,\"2135\":1,\"2136\":1,\"2137\":1,\"2138\":1,\"2139\":1,\"2140\":1,\"2146\":1,\"2177\":2,\"2199\":1,\"2201\":3,\"2204\":2,\"2205\":1,\"2207\":1,\"2209\":3,\"2237\":1,\"2238\":1,\"2240\":1,\"2241\":1,\"2242\":1,\"2243\":1,\"2244\":1,\"2245\":1,\"2297\":1,\"2305\":2,\"2326\":1,\"2328\":3,\"2331\":2,\"2332\":1,\"2334\":1,\"2336\":3,\"2347\":1,\"2348\":1,\"2350\":1,\"2351\":1,\"2352\":1,\"2353\":1,\"2354\":1,\"2355\":1,\"2364\":1,\"2396\":2,\"2418\":1,\"2420\":3,\"2423\":2,\"2424\":1,\"2426\":1,\"2428\":3,\"2456\":1,\"2457\":1,\"2459\":1,\"2460\":1,\"2461\":1,\"2462\":1,\"2463\":1,\"2464\":1,\"2516\":1,\"2524\":2,\"2545\":1,\"2547\":3,\"2550\":2,\"2551\":1,\"2553\":1,\"2555\":3,\"2566\":1,\"2567\":1,\"2569\":1,\"2570\":1,\"2571\":1,\"2572\":1,\"2573\":1,\"2574\":1,\"2583\":1,\"2615\":2,\"2637\":1,\"2639\":3,\"2642\":2,\"2643\":1,\"2645\":1,\"2647\":3,\"2675\":1,\"2676\":1,\"2678\":1,\"2679\":1,\"2680\":1,\"2681\":1,\"2682\":1,\"2683\":1,\"2735\":1,\"2743\":2,\"2764\":1,\"2766\":3,\"2769\":2,\"2770\":1,\"2772\":1,\"2774\":3,\"2785\":1,\"2786\":1,\"2788\":1,\"2789\":1,\"2790\":1,\"2791\":1,\"2792\":1,\"2793\":1,\"2802\":1,\"2834\":2}}],[\"account\",{\"1\":{\"148\":1,\"149\":1}}],[\"accomplished\",{\"1\":{\"96\":1,\"166\":1}}],[\"accordance\",{\"1\":{\"39\":1}}],[\"according\",{\"1\":{\"33\":1,\"77\":1,\"123\":1,\"142\":1,\"143\":3,\"145\":1,\"146\":1,\"152\":1,\"403\":1,\"415\":2,\"442\":3,\"468\":1,\"491\":1,\"517\":1,\"547\":3,\"577\":3,\"607\":3,\"614\":1,\"626\":2,\"653\":3,\"660\":1,\"672\":2,\"699\":3,\"706\":1,\"718\":2,\"745\":3,\"752\":1,\"764\":2,\"791\":3}}],[\"accidental\",{\"1\":{\"39\":1}}],[\"across\",{\"1\":{\"0\":1,\"5\":1,\"6\":2,\"8\":1,\"94\":2,\"95\":1,\"112\":1,\"113\":1,\"123\":2,\"165\":1,\"395\":1}}],[\"aims\",{\"1\":{\"6\":1,\"78\":1}}],[\"aim\",{\"1\":{\"0\":1,\"77\":1,\"94\":2,\"125\":1}}],[\"aiming\",{\"1\":{\"0\":1,\"94\":1}}],[\"anonymized\",{\"1\":{\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1}}],[\"anonymous\",{\"1\":{\"155\":3}}],[\"another\",{\"1\":{\"85\":1,\"90\":1,\"93\":1,\"258\":1,\"319\":1,\"350\":1,\"363\":2,\"377\":1,\"887\":1,\"957\":1,\"1120\":1,\"1258\":1,\"1392\":1,\"1434\":1,\"1569\":1,\"1611\":1,\"1746\":1,\"1788\":1,\"1923\":1,\"1965\":1,\"2100\":1,\"2142\":1,\"2290\":1,\"2360\":1,\"2509\":1,\"2579\":1,\"2728\":1,\"2798\":1}}],[\"angle\",{\"1\":{\"155\":11}}],[\"announce\",{\"1\":{\"330\":1,\"353\":1,\"354\":1,\"380\":1}}],[\"annotations\",{\"1\":{\"342\":1}}],[\"annotation\",{\"1\":{\"155\":24,\"156\":3,\"342\":4}}],[\"annotated\",{\"1\":{\"150\":1}}],[\"annually\",{\"1\":{\"1\":1}}],[\"ansible\",{\"1\":{\"133\":2}}],[\"answering\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"answer\",{\"1\":{\"123\":1}}],[\"analysis\",{\"1\":{\"113\":1}}],[\"analyses\",{\"1\":{\"0\":1,\"8\":1,\"32\":1}}],[\"anwendungen\",{\"0\":{\"21\":1}}],[\"anwendung\",{\"1\":{\"14\":1}}],[\"anymore\",{\"1\":{\"233\":1,\"891\":1,\"1070\":1,\"1221\":1,\"1396\":1,\"1573\":1,\"1750\":1,\"1927\":1,\"2104\":1,\"2294\":1,\"2513\":1,\"2732\":1}}],[\"anyone\",{\"1\":{\"68\":1}}],[\"any\",{\"1\":{\"5\":1,\"12\":1,\"35\":1,\"37\":1,\"40\":1,\"95\":1,\"98\":1,\"102\":1,\"103\":1,\"124\":1,\"165\":1,\"282\":1,\"293\":1,\"307\":1,\"310\":1,\"400\":1,\"410\":1,\"413\":1,\"415\":2,\"440\":2,\"466\":2,\"489\":2,\"515\":2,\"545\":2,\"575\":2,\"605\":2,\"611\":1,\"621\":1,\"624\":1,\"626\":2,\"651\":2,\"657\":1,\"667\":1,\"670\":1,\"672\":2,\"697\":2,\"703\":1,\"713\":1,\"716\":1,\"718\":2,\"743\":2,\"749\":1,\"759\":1,\"762\":1,\"764\":2,\"789\":2,\"798\":3,\"805\":1,\"925\":2,\"1229\":1,\"1405\":1,\"1582\":1,\"1759\":1,\"1936\":1,\"2113\":1,\"2201\":3,\"2208\":1,\"2328\":2,\"2420\":3,\"2427\":1,\"2547\":2,\"2639\":3,\"2646\":1,\"2766\":2}}],[\"an\",{\"1\":{\"1\":2,\"16\":1,\"30\":1,\"37\":1,\"69\":1,\"81\":1,\"82\":1,\"84\":2,\"85\":1,\"91\":2,\"93\":1,\"94\":1,\"95\":3,\"96\":3,\"98\":1,\"99\":1,\"105\":2,\"113\":2,\"114\":1,\"134\":1,\"148\":4,\"149\":7,\"150\":1,\"159\":1,\"165\":3,\"166\":3,\"213\":1,\"214\":1,\"228\":1,\"258\":1,\"334\":1,\"337\":1,\"342\":2,\"345\":2,\"348\":1,\"352\":1,\"359\":1,\"367\":1,\"370\":2,\"377\":4,\"379\":1,\"385\":1,\"386\":4,\"391\":1,\"393\":1,\"395\":2,\"397\":3,\"398\":1,\"410\":2,\"413\":2,\"415\":3,\"423\":1,\"425\":1,\"427\":1,\"428\":1,\"430\":1,\"441\":1,\"452\":2,\"453\":2,\"455\":1,\"456\":2,\"467\":1,\"475\":2,\"476\":2,\"478\":1,\"479\":2,\"490\":1,\"501\":2,\"502\":2,\"504\":1,\"505\":2,\"516\":1,\"528\":1,\"530\":1,\"531\":1,\"535\":1,\"546\":1,\"558\":1,\"560\":1,\"561\":1,\"565\":1,\"576\":1,\"588\":1,\"590\":1,\"591\":1,\"595\":1,\"606\":1,\"621\":2,\"624\":2,\"626\":3,\"634\":1,\"636\":1,\"637\":1,\"641\":1,\"652\":1,\"667\":2,\"670\":2,\"672\":3,\"680\":1,\"682\":1,\"683\":1,\"687\":1,\"698\":1,\"713\":2,\"716\":2,\"718\":3,\"726\":1,\"728\":1,\"729\":1,\"733\":1,\"744\":1,\"759\":2,\"762\":2,\"764\":3,\"772\":1,\"774\":1,\"776\":1,\"777\":1,\"779\":1,\"790\":1,\"798\":2,\"806\":1,\"870\":1,\"871\":1,\"925\":2,\"933\":1,\"957\":1,\"1052\":1,\"1053\":1,\"1120\":1,\"1203\":1,\"1204\":1,\"1229\":2,\"1237\":1,\"1258\":1,\"1262\":1,\"1375\":1,\"1376\":1,\"1405\":2,\"1413\":1,\"1434\":1,\"1552\":1,\"1553\":1,\"1582\":2,\"1590\":1,\"1611\":1,\"1729\":1,\"1730\":1,\"1759\":2,\"1767\":1,\"1788\":1,\"1906\":1,\"1907\":1,\"1936\":2,\"1944\":1,\"1965\":1,\"2083\":1,\"2084\":1,\"2113\":2,\"2121\":1,\"2142\":1,\"2201\":2,\"2209\":1,\"2273\":1,\"2274\":1,\"2328\":2,\"2336\":1,\"2360\":1,\"2420\":2,\"2428\":1,\"2492\":1,\"2493\":1,\"2547\":2,\"2555\":1,\"2579\":1,\"2639\":2,\"2647\":1,\"2711\":1,\"2712\":1,\"2766\":2,\"2774\":1,\"2798\":1}}],[\"and\",{\"0\":{\"2\":1,\"7\":1,\"10\":1,\"25\":1,\"78\":1,\"83\":1,\"89\":1,\"93\":1,\"95\":1,\"127\":1,\"128\":1,\"165\":1,\"167\":1,\"321\":1,\"327\":1,\"329\":1,\"333\":1,\"334\":1,\"344\":1,\"347\":1,\"348\":1,\"352\":1,\"353\":1,\"362\":1,\"363\":1,\"372\":1,\"373\":1,\"374\":1,\"375\":1,\"377\":1,\"388\":1,\"389\":1,\"395\":1,\"802\":1,\"803\":1,\"929\":1,\"930\":1,\"1233\":1,\"1234\":1,\"1409\":1,\"1410\":1,\"1586\":1,\"1587\":1,\"1763\":1,\"1764\":1,\"1940\":1,\"1941\":1,\"2117\":1,\"2118\":1,\"2205\":1,\"2206\":1,\"2332\":1,\"2333\":1,\"2424\":1,\"2425\":1,\"2551\":1,\"2552\":1,\"2643\":1,\"2644\":1,\"2770\":1,\"2771\":1},\"1\":{\"0\":10,\"1\":1,\"5\":5,\"6\":4,\"8\":3,\"9\":1,\"10\":3,\"11\":2,\"12\":1,\"13\":1,\"26\":3,\"29\":2,\"32\":7,\"33\":4,\"35\":2,\"36\":2,\"37\":6,\"38\":4,\"40\":1,\"42\":1,\"43\":2,\"44\":1,\"45\":2,\"46\":1,\"47\":2,\"48\":1,\"49\":2,\"50\":1,\"51\":2,\"52\":1,\"53\":2,\"54\":1,\"55\":2,\"56\":1,\"57\":2,\"58\":1,\"59\":2,\"60\":1,\"61\":2,\"62\":1,\"63\":2,\"67\":1,\"68\":1,\"73\":5,\"74\":3,\"75\":2,\"77\":8,\"78\":4,\"81\":4,\"84\":4,\"85\":2,\"86\":7,\"87\":1,\"89\":3,\"90\":9,\"91\":4,\"92\":4,\"93\":8,\"94\":18,\"95\":9,\"98\":1,\"99\":1,\"102\":1,\"105\":3,\"106\":7,\"108\":1,\"112\":7,\"113\":13,\"114\":2,\"116\":3,\"122\":3,\"123\":1,\"125\":1,\"126\":2,\"130\":5,\"131\":4,\"133\":2,\"134\":1,\"137\":5,\"138\":4,\"141\":2,\"142\":1,\"143\":8,\"145\":3,\"146\":5,\"147\":3,\"148\":2,\"149\":2,\"152\":2,\"153\":4,\"155\":3,\"158\":1,\"161\":6,\"163\":1,\"165\":9,\"183\":1,\"191\":1,\"200\":1,\"201\":1,\"220\":1,\"234\":1,\"243\":1,\"246\":1,\"271\":1,\"273\":1,\"279\":2,\"281\":5,\"282\":3,\"285\":10,\"286\":14,\"290\":2,\"292\":5,\"293\":3,\"296\":10,\"297\":14,\"298\":1,\"299\":1,\"300\":8,\"301\":2,\"303\":8,\"304\":1,\"306\":4,\"307\":1,\"310\":2,\"314\":1,\"315\":1,\"316\":2,\"323\":3,\"325\":3,\"327\":5,\"328\":5,\"329\":1,\"330\":3,\"333\":1,\"334\":9,\"337\":6,\"342\":4,\"343\":3,\"344\":6,\"345\":4,\"347\":1,\"348\":5,\"350\":2,\"352\":6,\"353\":3,\"354\":2,\"357\":2,\"358\":2,\"359\":1,\"360\":8,\"362\":1,\"363\":7,\"369\":2,\"370\":1,\"372\":1,\"373\":5,\"375\":1,\"377\":4,\"379\":2,\"380\":2,\"383\":2,\"384\":2,\"385\":1,\"386\":6,\"388\":1,\"389\":8,\"390\":1,\"391\":3,\"393\":1,\"394\":1,\"395\":3,\"396\":1,\"400\":2,\"401\":2,\"403\":3,\"406\":1,\"408\":1,\"410\":2,\"411\":5,\"412\":3,\"413\":8,\"414\":2,\"415\":20,\"419\":1,\"423\":1,\"425\":1,\"426\":1,\"427\":2,\"430\":1,\"433\":1,\"435\":3,\"438\":14,\"439\":11,\"440\":7,\"442\":10,\"443\":1,\"449\":1,\"453\":1,\"456\":2,\"459\":1,\"461\":3,\"464\":14,\"465\":11,\"466\":7,\"468\":3,\"472\":1,\"476\":1,\"479\":2,\"482\":1,\"484\":3,\"487\":14,\"488\":11,\"489\":7,\"491\":3,\"492\":1,\"498\":1,\"502\":1,\"505\":2,\"508\":1,\"510\":3,\"513\":14,\"514\":11,\"515\":7,\"517\":3,\"518\":1,\"519\":1,\"520\":3,\"524\":1,\"528\":1,\"530\":1,\"535\":1,\"538\":1,\"540\":3,\"543\":14,\"544\":11,\"545\":7,\"547\":10,\"548\":1,\"554\":1,\"558\":1,\"560\":1,\"565\":1,\"568\":1,\"570\":3,\"573\":14,\"574\":11,\"575\":7,\"577\":10,\"578\":1,\"584\":1,\"588\":1,\"590\":1,\"595\":1,\"598\":1,\"600\":3,\"603\":14,\"604\":11,\"605\":7,\"607\":10,\"608\":1,\"611\":2,\"612\":2,\"614\":3,\"617\":1,\"619\":1,\"621\":2,\"622\":5,\"623\":3,\"624\":8,\"625\":2,\"626\":20,\"630\":1,\"634\":1,\"636\":1,\"641\":1,\"644\":1,\"646\":3,\"649\":14,\"650\":11,\"651\":7,\"653\":10,\"654\":1,\"657\":2,\"658\":2,\"660\":3,\"663\":1,\"665\":1,\"667\":2,\"668\":5,\"669\":3,\"670\":8,\"671\":2,\"672\":20,\"676\":1,\"680\":1,\"682\":1,\"687\":1,\"690\":1,\"692\":3,\"695\":14,\"696\":11,\"697\":7,\"699\":10,\"700\":1,\"703\":2,\"704\":2,\"706\":3,\"709\":1,\"711\":1,\"713\":2,\"714\":5,\"715\":3,\"716\":8,\"717\":2,\"718\":20,\"722\":1,\"726\":1,\"728\":1,\"733\":1,\"736\":1,\"738\":3,\"741\":14,\"742\":11,\"743\":7,\"745\":10,\"746\":1,\"749\":2,\"750\":2,\"752\":3,\"755\":1,\"757\":1,\"759\":2,\"760\":5,\"761\":3,\"762\":8,\"763\":2,\"764\":20,\"768\":1,\"772\":1,\"774\":1,\"775\":1,\"776\":2,\"779\":1,\"782\":1,\"784\":3,\"787\":14,\"788\":11,\"789\":7,\"791\":10,\"792\":1,\"798\":3,\"801\":2,\"802\":3,\"806\":2,\"811\":1,\"812\":1,\"824\":1,\"850\":1,\"855\":1,\"858\":1,\"859\":1,\"877\":1,\"896\":2,\"903\":1,\"916\":1,\"918\":1,\"925\":5,\"928\":2,\"929\":3,\"931\":2,\"932\":2,\"933\":1,\"938\":1,\"941\":1,\"963\":2,\"971\":1,\"972\":1,\"984\":1,\"993\":1,\"994\":1,\"995\":1,\"1008\":1,\"1010\":1,\"1031\":1,\"1036\":1,\"1039\":1,\"1040\":1,\"1059\":1,\"1079\":1,\"1080\":1,\"1092\":1,\"1104\":1,\"1107\":1,\"1136\":1,\"1138\":1,\"1147\":1,\"1148\":1,\"1160\":1,\"1182\":1,\"1187\":1,\"1190\":1,\"1191\":1,\"1210\":1,\"1229\":5,\"1232\":2,\"1233\":3,\"1235\":2,\"1236\":2,\"1237\":1,\"1242\":1,\"1245\":1,\"1271\":1,\"1272\":1,\"1284\":1,\"1293\":1,\"1294\":1,\"1295\":1,\"1307\":1,\"1309\":1,\"1319\":1,\"1320\":1,\"1332\":1,\"1355\":1,\"1360\":1,\"1363\":1,\"1364\":1,\"1382\":1,\"1405\":5,\"1408\":2,\"1409\":3,\"1411\":2,\"1412\":2,\"1413\":1,\"1418\":1,\"1421\":1,\"1447\":1,\"1448\":1,\"1460\":1,\"1469\":1,\"1470\":1,\"1471\":1,\"1484\":1,\"1486\":1,\"1496\":1,\"1497\":1,\"1509\":1,\"1532\":1,\"1537\":1,\"1540\":1,\"1541\":1,\"1559\":1,\"1582\":5,\"1585\":2,\"1586\":3,\"1588\":2,\"1589\":2,\"1590\":1,\"1595\":1,\"1598\":1,\"1624\":1,\"1625\":1,\"1637\":1,\"1646\":1,\"1647\":1,\"1648\":1,\"1661\":1,\"1663\":1,\"1673\":1,\"1674\":1,\"1686\":1,\"1709\":1,\"1714\":1,\"1717\":1,\"1718\":1,\"1736\":1,\"1759\":5,\"1762\":2,\"1763\":3,\"1765\":2,\"1766\":2,\"1767\":1,\"1772\":1,\"1775\":1,\"1801\":1,\"1802\":1,\"1814\":1,\"1823\":1,\"1824\":1,\"1825\":1,\"1838\":1,\"1840\":1,\"1850\":1,\"1851\":1,\"1863\":1,\"1886\":1,\"1891\":1,\"1894\":1,\"1895\":1,\"1913\":1,\"1936\":5,\"1939\":2,\"1940\":3,\"1942\":2,\"1943\":2,\"1944\":1,\"1949\":1,\"1952\":1,\"1978\":1,\"1979\":1,\"1991\":1,\"2000\":1,\"2001\":1,\"2002\":1,\"2015\":1,\"2017\":1,\"2027\":1,\"2028\":1,\"2040\":1,\"2063\":1,\"2068\":1,\"2071\":1,\"2072\":1,\"2090\":1,\"2113\":5,\"2116\":2,\"2117\":3,\"2119\":2,\"2120\":2,\"2121\":1,\"2126\":1,\"2129\":1,\"2155\":1,\"2156\":1,\"2168\":1,\"2177\":1,\"2178\":1,\"2179\":1,\"2192\":1,\"2194\":1,\"2201\":3,\"2204\":2,\"2205\":3,\"2209\":2,\"2214\":1,\"2215\":1,\"2227\":1,\"2253\":1,\"2258\":1,\"2261\":1,\"2262\":1,\"2280\":1,\"2299\":2,\"2306\":1,\"2319\":1,\"2321\":1,\"2328\":5,\"2331\":2,\"2332\":3,\"2334\":2,\"2335\":2,\"2336\":1,\"2341\":1,\"2344\":1,\"2366\":2,\"2374\":1,\"2375\":1,\"2387\":1,\"2396\":1,\"2397\":1,\"2398\":1,\"2411\":1,\"2413\":1,\"2420\":3,\"2423\":2,\"2424\":3,\"2428\":2,\"2433\":1,\"2434\":1,\"2446\":1,\"2472\":1,\"2477\":1,\"2480\":1,\"2481\":1,\"2499\":1,\"2518\":2,\"2525\":1,\"2538\":1,\"2540\":1,\"2547\":5,\"2550\":2,\"2551\":3,\"2553\":2,\"2554\":2,\"2555\":1,\"2560\":1,\"2563\":1,\"2585\":2,\"2593\":1,\"2594\":1,\"2606\":1,\"2615\":1,\"2616\":1,\"2617\":1,\"2630\":1,\"2632\":1,\"2639\":3,\"2642\":2,\"2643\":3,\"2647\":2,\"2652\":1,\"2653\":1,\"2665\":1,\"2691\":1,\"2696\":1,\"2699\":1,\"2700\":1,\"2718\":1,\"2737\":2,\"2744\":1,\"2757\":1,\"2759\":1,\"2766\":5,\"2769\":2,\"2770\":3,\"2772\":2,\"2773\":2,\"2774\":1,\"2779\":1,\"2782\":1,\"2804\":2,\"2812\":1,\"2813\":1,\"2825\":1,\"2834\":1,\"2835\":1,\"2836\":1,\"2849\":1,\"2851\":1}}],[\"a\",{\"0\":{\"37\":1,\"136\":1,\"137\":1,\"138\":1,\"159\":1,\"418\":1,\"420\":1,\"448\":1,\"450\":1,\"471\":1,\"473\":1,\"497\":1,\"499\":1,\"523\":1,\"525\":1,\"553\":1,\"555\":1,\"583\":1,\"585\":1,\"629\":1,\"631\":1,\"675\":1,\"677\":1,\"721\":1,\"723\":1,\"767\":1,\"769\":1},\"1\":{\"0\":4,\"1\":2,\"6\":1,\"8\":2,\"9\":1,\"10\":1,\"26\":4,\"28\":1,\"29\":1,\"32\":3,\"33\":2,\"37\":4,\"38\":1,\"42\":2,\"44\":2,\"46\":2,\"48\":2,\"50\":2,\"52\":2,\"54\":2,\"56\":2,\"58\":2,\"60\":2,\"62\":2,\"71\":1,\"73\":1,\"77\":2,\"78\":1,\"81\":4,\"84\":6,\"85\":2,\"86\":1,\"87\":4,\"89\":1,\"90\":1,\"91\":5,\"92\":6,\"93\":9,\"94\":4,\"95\":5,\"96\":1,\"98\":3,\"99\":2,\"100\":1,\"101\":3,\"102\":1,\"103\":1,\"106\":4,\"108\":1,\"112\":2,\"113\":1,\"115\":2,\"122\":2,\"123\":3,\"124\":1,\"125\":1,\"126\":1,\"130\":1,\"131\":1,\"133\":2,\"134\":1,\"135\":1,\"140\":1,\"143\":4,\"144\":1,\"145\":1,\"146\":1,\"148\":5,\"149\":5,\"150\":8,\"153\":3,\"158\":2,\"159\":1,\"161\":4,\"163\":1,\"164\":1,\"165\":5,\"166\":1,\"170\":4,\"176\":1,\"186\":1,\"187\":1,\"188\":1,\"189\":1,\"190\":2,\"192\":1,\"193\":1,\"194\":1,\"195\":1,\"196\":1,\"197\":1,\"198\":2,\"199\":3,\"205\":1,\"206\":1,\"219\":1,\"227\":4,\"228\":3,\"230\":1,\"231\":1,\"234\":4,\"240\":1,\"241\":1,\"242\":1,\"243\":2,\"244\":3,\"254\":1,\"261\":2,\"262\":2,\"267\":1,\"268\":1,\"269\":1,\"270\":1,\"276\":1,\"280\":1,\"281\":1,\"284\":1,\"285\":11,\"286\":9,\"287\":1,\"291\":1,\"292\":1,\"295\":1,\"296\":11,\"297\":9,\"298\":1,\"299\":1,\"300\":7,\"302\":1,\"303\":7,\"305\":1,\"306\":5,\"308\":1,\"309\":5,\"311\":1,\"312\":5,\"314\":4,\"315\":4,\"316\":1,\"317\":1,\"318\":2,\"319\":2,\"320\":1,\"321\":1,\"325\":4,\"327\":4,\"328\":3,\"329\":3,\"330\":3,\"331\":3,\"333\":1,\"334\":14,\"336\":1,\"337\":3,\"338\":2,\"340\":2,\"341\":2,\"342\":2,\"343\":5,\"344\":5,\"345\":5,\"347\":1,\"348\":5,\"350\":3,\"352\":13,\"353\":6,\"354\":1,\"357\":10,\"358\":4,\"359\":3,\"360\":5,\"362\":1,\"363\":10,\"365\":1,\"367\":3,\"368\":4,\"369\":2,\"370\":2,\"372\":1,\"373\":5,\"375\":3,\"377\":5,\"379\":6,\"380\":1,\"383\":10,\"384\":4,\"385\":3,\"386\":4,\"388\":1,\"389\":19,\"390\":4,\"391\":1,\"394\":1,\"395\":1,\"398\":1,\"400\":1,\"401\":1,\"410\":3,\"411\":2,\"413\":7,\"414\":4,\"415\":7,\"417\":1,\"418\":2,\"419\":2,\"423\":2,\"424\":1,\"425\":3,\"428\":1,\"434\":1,\"435\":4,\"437\":1,\"438\":6,\"439\":7,\"440\":1,\"442\":3,\"444\":1,\"445\":4,\"447\":1,\"448\":2,\"449\":2,\"453\":2,\"454\":1,\"455\":1,\"460\":1,\"461\":4,\"463\":1,\"464\":8,\"465\":7,\"466\":1,\"468\":2,\"470\":1,\"471\":2,\"472\":2,\"476\":2,\"477\":1,\"478\":1,\"483\":1,\"484\":4,\"486\":1,\"487\":6,\"488\":7,\"489\":1,\"491\":2,\"493\":1,\"494\":4,\"496\":1,\"497\":2,\"498\":2,\"502\":2,\"503\":1,\"504\":1,\"509\":1,\"510\":4,\"512\":1,\"513\":6,\"514\":7,\"515\":1,\"517\":2,\"519\":1,\"520\":5,\"522\":1,\"523\":2,\"524\":2,\"528\":2,\"529\":1,\"530\":1,\"539\":1,\"540\":4,\"542\":1,\"543\":6,\"544\":7,\"545\":1,\"547\":3,\"549\":1,\"550\":4,\"552\":1,\"553\":2,\"554\":2,\"558\":2,\"559\":1,\"560\":3,\"569\":1,\"570\":4,\"572\":1,\"573\":6,\"574\":7,\"575\":1,\"577\":3,\"579\":1,\"580\":4,\"582\":1,\"583\":2,\"584\":2,\"588\":2,\"589\":1,\"590\":3,\"599\":1,\"600\":4,\"602\":1,\"603\":6,\"604\":7,\"605\":1,\"607\":3,\"609\":1,\"610\":4,\"611\":1,\"612\":1,\"621\":3,\"622\":2,\"624\":7,\"625\":4,\"626\":7,\"628\":1,\"629\":2,\"630\":2,\"634\":2,\"635\":1,\"636\":3,\"645\":1,\"646\":4,\"648\":1,\"649\":6,\"650\":7,\"651\":1,\"653\":3,\"655\":1,\"656\":4,\"657\":1,\"658\":1,\"667\":3,\"668\":2,\"670\":7,\"671\":4,\"672\":7,\"674\":1,\"675\":2,\"676\":2,\"680\":2,\"681\":1,\"682\":3,\"691\":1,\"692\":4,\"694\":1,\"695\":6,\"696\":7,\"697\":1,\"699\":3,\"701\":1,\"702\":4,\"703\":1,\"704\":1,\"713\":3,\"714\":2,\"716\":7,\"717\":4,\"718\":7,\"720\":1,\"721\":2,\"722\":2,\"726\":2,\"727\":1,\"728\":3,\"737\":1,\"738\":4,\"740\":1,\"741\":6,\"742\":7,\"743\":1,\"745\":3,\"747\":1,\"748\":4,\"749\":1,\"750\":1,\"759\":3,\"760\":2,\"762\":7,\"763\":4,\"764\":7,\"766\":1,\"767\":2,\"768\":2,\"772\":2,\"773\":1,\"774\":3,\"777\":1,\"783\":1,\"784\":4,\"786\":1,\"787\":6,\"788\":7,\"789\":1,\"791\":3,\"793\":1,\"794\":4,\"798\":8,\"799\":2,\"806\":2,\"832\":1,\"839\":1,\"853\":1,\"854\":1,\"856\":2,\"857\":3,\"862\":1,\"863\":1,\"876\":1,\"888\":1,\"889\":1,\"892\":1,\"896\":1,\"899\":1,\"904\":2,\"911\":1,\"912\":1,\"913\":1,\"914\":1,\"925\":10,\"926\":2,\"932\":3,\"933\":2,\"938\":2,\"939\":3,\"942\":1,\"951\":1,\"963\":1,\"966\":1,\"996\":2,\"1003\":1,\"1004\":1,\"1005\":1,\"1006\":1,\"1017\":1,\"1024\":1,\"1034\":1,\"1035\":1,\"1037\":2,\"1038\":3,\"1044\":1,\"1045\":1,\"1058\":1,\"1067\":1,\"1068\":1,\"1073\":1,\"1104\":2,\"1105\":3,\"1108\":1,\"1117\":1,\"1127\":1,\"1132\":1,\"1133\":1,\"1134\":1,\"1135\":1,\"1168\":1,\"1175\":1,\"1185\":1,\"1186\":1,\"1188\":2,\"1189\":3,\"1195\":1,\"1196\":1,\"1209\":1,\"1218\":1,\"1219\":1,\"1224\":1,\"1229\":10,\"1230\":2,\"1236\":3,\"1237\":2,\"1242\":2,\"1243\":3,\"1246\":1,\"1255\":1,\"1262\":1,\"1266\":1,\"1296\":2,\"1303\":1,\"1304\":1,\"1305\":1,\"1306\":1,\"1340\":1,\"1347\":1,\"1358\":1,\"1359\":1,\"1361\":2,\"1362\":3,\"1367\":1,\"1368\":1,\"1381\":1,\"1393\":1,\"1394\":1,\"1397\":1,\"1400\":1,\"1405\":10,\"1406\":2,\"1412\":3,\"1413\":2,\"1418\":2,\"1419\":3,\"1422\":1,\"1431\":1,\"1442\":1,\"1472\":2,\"1479\":1,\"1480\":1,\"1481\":1,\"1482\":1,\"1517\":1,\"1524\":1,\"1535\":1,\"1536\":1,\"1538\":2,\"1539\":3,\"1544\":1,\"1545\":1,\"1558\":1,\"1570\":1,\"1571\":1,\"1574\":1,\"1577\":1,\"1582\":10,\"1583\":2,\"1589\":3,\"1590\":2,\"1595\":2,\"1596\":3,\"1599\":1,\"1608\":1,\"1619\":1,\"1649\":2,\"1656\":1,\"1657\":1,\"1658\":1,\"1659\":1,\"1694\":1,\"1701\":1,\"1712\":1,\"1713\":1,\"1715\":2,\"1716\":3,\"1721\":1,\"1722\":1,\"1735\":1,\"1747\":1,\"1748\":1,\"1751\":1,\"1754\":1,\"1759\":10,\"1760\":2,\"1766\":3,\"1767\":2,\"1772\":2,\"1773\":3,\"1776\":1,\"1785\":1,\"1796\":1,\"1826\":2,\"1833\":1,\"1834\":1,\"1835\":1,\"1836\":1,\"1871\":1,\"1878\":1,\"1889\":1,\"1890\":1,\"1892\":2,\"1893\":3,\"1898\":1,\"1899\":1,\"1912\":1,\"1924\":1,\"1925\":1,\"1928\":1,\"1931\":1,\"1936\":10,\"1937\":2,\"1943\":3,\"1944\":2,\"1949\":2,\"1950\":3,\"1953\":1,\"1962\":1,\"1973\":1,\"2003\":2,\"2010\":1,\"2011\":1,\"2012\":1,\"2013\":1,\"2048\":1,\"2055\":1,\"2066\":1,\"2067\":1,\"2069\":2,\"2070\":3,\"2075\":1,\"2076\":1,\"2089\":1,\"2101\":1,\"2102\":1,\"2105\":1,\"2108\":1,\"2113\":10,\"2114\":2,\"2120\":3,\"2121\":2,\"2126\":2,\"2127\":3,\"2130\":1,\"2139\":1,\"2150\":1,\"2180\":2,\"2187\":1,\"2188\":1,\"2189\":1,\"2190\":1,\"2201\":8,\"2202\":2,\"2209\":2,\"2235\":1,\"2242\":1,\"2256\":1,\"2257\":1,\"2259\":2,\"2260\":3,\"2265\":1,\"2266\":1,\"2279\":1,\"2291\":1,\"2292\":1,\"2295\":1,\"2299\":1,\"2302\":1,\"2307\":2,\"2314\":1,\"2315\":1,\"2316\":1,\"2317\":1,\"2328\":10,\"2329\":2,\"2335\":3,\"2336\":2,\"2341\":2,\"2342\":3,\"2345\":1,\"2354\":1,\"2366\":1,\"2369\":1,\"2399\":2,\"2406\":1,\"2407\":1,\"2408\":1,\"2409\":1,\"2420\":8,\"2421\":2,\"2428\":2,\"2454\":1,\"2461\":1,\"2475\":1,\"2476\":1,\"2478\":2,\"2479\":3,\"2484\":1,\"2485\":1,\"2498\":1,\"2510\":1,\"2511\":1,\"2514\":1,\"2518\":1,\"2521\":1,\"2526\":2,\"2533\":1,\"2534\":1,\"2535\":1,\"2536\":1,\"2547\":10,\"2548\":2,\"2554\":3,\"2555\":2,\"2560\":2,\"2561\":3,\"2564\":1,\"2573\":1,\"2585\":1,\"2588\":1,\"2618\":2,\"2625\":1,\"2626\":1,\"2627\":1,\"2628\":1,\"2639\":8,\"2640\":2,\"2647\":2,\"2673\":1,\"2680\":1,\"2694\":1,\"2695\":1,\"2697\":2,\"2698\":3,\"2703\":1,\"2704\":1,\"2717\":1,\"2729\":1,\"2730\":1,\"2733\":1,\"2737\":1,\"2740\":1,\"2745\":2,\"2752\":1,\"2753\":1,\"2754\":1,\"2755\":1,\"2766\":10,\"2767\":2,\"2773\":3,\"2774\":2,\"2779\":2,\"2780\":3,\"2783\":1,\"2792\":1,\"2804\":1,\"2807\":1,\"2837\":2,\"2844\":1,\"2845\":1,\"2846\":1,\"2847\":1}}],[\"dts\",{\"1\":{\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"dth\",{\"1\":{\"87\":1}}],[\"dgpg\",{\"1\":{\"409\":1,\"620\":1,\"666\":1,\"712\":1,\"758\":1}}],[\"d+$\",{\"1\":{\"353\":1}}],[\"d+\",{\"1\":{\"353\":2}}],[\"dynamic\",{\"1\":{\"341\":1,\"343\":1}}],[\"dn\",{\"0\":{\"272\":1,\"917\":1,\"1009\":1,\"1137\":1,\"1308\":1,\"1485\":1,\"1662\":1,\"1839\":1,\"2016\":1,\"2193\":1,\"2320\":1,\"2412\":1,\"2539\":1,\"2631\":1,\"2758\":1,\"2850\":1},\"1\":{\"272\":1,\"801\":1,\"917\":1,\"928\":1,\"1009\":1,\"1137\":1,\"1232\":1,\"1308\":1,\"1408\":1,\"1485\":1,\"1585\":1,\"1662\":1,\"1762\":1,\"1839\":1,\"1939\":1,\"2016\":1,\"2116\":1,\"2193\":1,\"2204\":1,\"2320\":1,\"2331\":1,\"2412\":1,\"2423\":1,\"2539\":1,\"2550\":1,\"2631\":1,\"2642\":1,\"2758\":1,\"2769\":1,\"2850\":1}}],[\"dns\",{\"1\":{\"108\":1,\"163\":1}}],[\"d\",{\"1\":{\"106\":1,\"108\":1,\"109\":1,\"161\":1,\"163\":1,\"164\":1,\"279\":1,\"280\":1,\"285\":1,\"286\":2,\"290\":1,\"291\":1,\"296\":1,\"297\":2,\"299\":1,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"323\":4,\"415\":1,\"433\":1,\"434\":1,\"438\":1,\"439\":1,\"442\":1,\"444\":1,\"445\":1,\"459\":1,\"460\":1,\"464\":1,\"465\":1,\"482\":1,\"483\":1,\"487\":1,\"488\":1,\"493\":1,\"494\":1,\"508\":1,\"509\":1,\"513\":1,\"514\":1,\"519\":1,\"520\":1,\"538\":1,\"539\":1,\"543\":1,\"544\":1,\"547\":1,\"549\":1,\"550\":1,\"568\":1,\"569\":1,\"573\":1,\"574\":1,\"577\":1,\"579\":1,\"580\":1,\"598\":1,\"599\":1,\"603\":1,\"604\":1,\"607\":1,\"609\":1,\"610\":1,\"626\":1,\"644\":1,\"645\":1,\"649\":1,\"650\":1,\"653\":1,\"655\":1,\"656\":1,\"672\":1,\"690\":1,\"691\":1,\"695\":1,\"696\":1,\"699\":1,\"701\":1,\"702\":1,\"718\":1,\"736\":1,\"737\":1,\"741\":1,\"742\":1,\"745\":1,\"747\":1,\"748\":1,\"764\":1,\"782\":1,\"783\":1,\"787\":1,\"788\":1,\"791\":1,\"793\":1,\"794\":1}}],[\"dfn\",{\"1\":{\"106\":3,\"108\":3,\"109\":3,\"161\":3,\"163\":3,\"164\":3,\"280\":5,\"285\":3,\"291\":5,\"296\":3,\"434\":4,\"438\":2,\"460\":4,\"464\":3,\"483\":4,\"487\":2,\"509\":4,\"513\":2,\"539\":4,\"543\":2,\"569\":4,\"573\":2,\"599\":4,\"603\":2,\"645\":4,\"649\":2,\"691\":4,\"695\":2,\"737\":4,\"741\":2,\"783\":4,\"787\":2}}],[\"dbstatement\",{\"0\":{\"844\":1,\"954\":1,\"2247\":1,\"2357\":1,\"2466\":1,\"2576\":1,\"2685\":1,\"2795\":1},\"1\":{\"844\":1,\"954\":1,\"2247\":1,\"2357\":1,\"2466\":1,\"2576\":1,\"2685\":1,\"2795\":1}}],[\"db\",{\"0\":{\"171\":2,\"172\":1,\"173\":1,\"174\":1,\"175\":2,\"176\":1,\"177\":1,\"178\":2,\"179\":1,\"247\":2,\"248\":1,\"249\":1,\"250\":1,\"251\":2,\"252\":1,\"253\":2,\"254\":1,\"255\":1,\"832\":1,\"833\":1,\"834\":2,\"835\":1,\"836\":1,\"837\":1,\"838\":2,\"839\":1,\"840\":1,\"841\":2,\"842\":1,\"942\":1,\"943\":1,\"944\":2,\"945\":1,\"946\":1,\"947\":1,\"948\":2,\"949\":1,\"950\":2,\"951\":1,\"952\":1,\"1017\":1,\"1018\":1,\"1019\":2,\"1020\":1,\"1021\":1,\"1022\":1,\"1023\":2,\"1024\":1,\"1025\":1,\"1026\":2,\"1027\":1,\"1108\":1,\"1109\":1,\"1110\":2,\"1111\":1,\"1112\":1,\"1113\":1,\"1114\":2,\"1115\":1,\"1116\":2,\"1117\":1,\"1118\":1,\"1168\":1,\"1169\":1,\"1170\":2,\"1171\":1,\"1172\":1,\"1173\":1,\"1174\":2,\"1175\":1,\"1176\":1,\"1177\":2,\"1178\":1,\"1246\":1,\"1247\":1,\"1248\":2,\"1249\":1,\"1250\":1,\"1251\":1,\"1252\":2,\"1253\":1,\"1254\":2,\"1255\":1,\"1256\":1,\"1340\":1,\"1341\":1,\"1342\":2,\"1343\":1,\"1344\":1,\"1345\":1,\"1346\":2,\"1347\":1,\"1348\":1,\"1349\":2,\"1350\":1,\"1422\":1,\"1423\":1,\"1424\":2,\"1425\":1,\"1426\":1,\"1427\":1,\"1428\":2,\"1429\":1,\"1430\":2,\"1431\":1,\"1432\":1,\"1517\":1,\"1518\":1,\"1519\":2,\"1520\":1,\"1521\":1,\"1522\":1,\"1523\":2,\"1524\":1,\"1525\":1,\"1526\":2,\"1527\":1,\"1599\":1,\"1600\":1,\"1601\":2,\"1602\":1,\"1603\":1,\"1604\":1,\"1605\":2,\"1606\":1,\"1607\":2,\"1608\":1,\"1609\":1,\"1694\":1,\"1695\":1,\"1696\":2,\"1697\":1,\"1698\":1,\"1699\":1,\"1700\":2,\"1701\":1,\"1702\":1,\"1703\":2,\"1704\":1,\"1776\":1,\"1777\":1,\"1778\":2,\"1779\":1,\"1780\":1,\"1781\":1,\"1782\":2,\"1783\":1,\"1784\":2,\"1785\":1,\"1786\":1,\"1871\":1,\"1872\":1,\"1873\":2,\"1874\":1,\"1875\":1,\"1876\":1,\"1877\":2,\"1878\":1,\"1879\":1,\"1880\":2,\"1881\":1,\"1953\":1,\"1954\":1,\"1955\":2,\"1956\":1,\"1957\":1,\"1958\":1,\"1959\":2,\"1960\":1,\"1961\":2,\"1962\":1,\"1963\":1,\"2048\":1,\"2049\":1,\"2050\":2,\"2051\":1,\"2052\":1,\"2053\":1,\"2054\":2,\"2055\":1,\"2056\":1,\"2057\":2,\"2058\":1,\"2130\":1,\"2131\":1,\"2132\":2,\"2133\":1,\"2134\":1,\"2135\":1,\"2136\":2,\"2137\":1,\"2138\":2,\"2139\":1,\"2140\":1,\"2235\":1,\"2236\":1,\"2237\":2,\"2238\":1,\"2239\":1,\"2240\":1,\"2241\":2,\"2242\":1,\"2243\":1,\"2244\":2,\"2245\":1,\"2345\":1,\"2346\":1,\"2347\":2,\"2348\":1,\"2349\":1,\"2350\":1,\"2351\":2,\"2352\":1,\"2353\":2,\"2354\":1,\"2355\":1,\"2454\":1,\"2455\":1,\"2456\":2,\"2457\":1,\"2458\":1,\"2459\":1,\"2460\":2,\"2461\":1,\"2462\":1,\"2463\":2,\"2464\":1,\"2564\":1,\"2565\":1,\"2566\":2,\"2567\":1,\"2568\":1,\"2569\":1,\"2570\":2,\"2571\":1,\"2572\":2,\"2573\":1,\"2574\":1,\"2673\":1,\"2674\":1,\"2675\":2,\"2676\":1,\"2677\":1,\"2678\":1,\"2679\":2,\"2680\":1,\"2681\":1,\"2682\":2,\"2683\":1,\"2783\":1,\"2784\":1,\"2785\":2,\"2786\":1,\"2787\":1,\"2788\":1,\"2789\":2,\"2790\":1,\"2791\":2,\"2792\":1,\"2793\":1},\"1\":{\"95\":3,\"130\":1,\"132\":1,\"141\":8,\"165\":3,\"171\":3,\"172\":1,\"173\":2,\"174\":1,\"175\":3,\"176\":2,\"177\":1,\"178\":3,\"179\":1,\"247\":3,\"248\":1,\"249\":2,\"250\":1,\"251\":3,\"252\":1,\"253\":3,\"254\":2,\"255\":1,\"285\":3,\"286\":3,\"296\":3,\"297\":3,\"323\":132,\"438\":3,\"439\":3,\"464\":3,\"465\":3,\"487\":3,\"488\":3,\"513\":3,\"514\":3,\"543\":3,\"544\":3,\"573\":3,\"574\":3,\"603\":3,\"604\":3,\"649\":3,\"650\":3,\"695\":3,\"696\":3,\"741\":3,\"742\":3,\"787\":3,\"788\":3,\"832\":2,\"833\":1,\"834\":3,\"835\":1,\"836\":2,\"837\":1,\"838\":3,\"839\":2,\"840\":1,\"841\":3,\"842\":1,\"844\":1,\"942\":2,\"943\":1,\"944\":3,\"945\":1,\"946\":2,\"947\":1,\"948\":3,\"949\":1,\"950\":3,\"951\":2,\"952\":1,\"954\":1,\"1017\":2,\"1018\":1,\"1019\":3,\"1020\":1,\"1021\":2,\"1022\":1,\"1023\":3,\"1024\":2,\"1025\":1,\"1026\":3,\"1027\":1,\"1108\":2,\"1109\":1,\"1110\":3,\"1111\":1,\"1112\":2,\"1113\":1,\"1114\":3,\"1115\":1,\"1116\":3,\"1117\":2,\"1118\":1,\"1168\":2,\"1169\":1,\"1170\":3,\"1171\":1,\"1172\":2,\"1173\":1,\"1174\":3,\"1175\":2,\"1176\":1,\"1177\":3,\"1178\":1,\"1246\":2,\"1247\":1,\"1248\":3,\"1249\":1,\"1250\":2,\"1251\":1,\"1252\":3,\"1253\":1,\"1254\":3,\"1255\":2,\"1256\":1,\"1340\":2,\"1341\":1,\"1342\":3,\"1343\":1,\"1344\":2,\"1345\":1,\"1346\":3,\"1347\":2,\"1348\":1,\"1349\":3,\"1350\":1,\"1422\":2,\"1423\":1,\"1424\":3,\"1425\":1,\"1426\":2,\"1427\":1,\"1428\":3,\"1429\":1,\"1430\":3,\"1431\":2,\"1432\":1,\"1517\":2,\"1518\":1,\"1519\":3,\"1520\":1,\"1521\":2,\"1522\":1,\"1523\":3,\"1524\":2,\"1525\":1,\"1526\":3,\"1527\":1,\"1599\":2,\"1600\":1,\"1601\":3,\"1602\":1,\"1603\":2,\"1604\":1,\"1605\":3,\"1606\":1,\"1607\":3,\"1608\":2,\"1609\":1,\"1694\":2,\"1695\":1,\"1696\":3,\"1697\":1,\"1698\":2,\"1699\":1,\"1700\":3,\"1701\":2,\"1702\":1,\"1703\":3,\"1704\":1,\"1776\":2,\"1777\":1,\"1778\":3,\"1779\":1,\"1780\":2,\"1781\":1,\"1782\":3,\"1783\":1,\"1784\":3,\"1785\":2,\"1786\":1,\"1871\":2,\"1872\":1,\"1873\":3,\"1874\":1,\"1875\":2,\"1876\":1,\"1877\":3,\"1878\":2,\"1879\":1,\"1880\":3,\"1881\":1,\"1953\":2,\"1954\":1,\"1955\":3,\"1956\":1,\"1957\":2,\"1958\":1,\"1959\":3,\"1960\":1,\"1961\":3,\"1962\":2,\"1963\":1,\"2048\":2,\"2049\":1,\"2050\":3,\"2051\":1,\"2052\":2,\"2053\":1,\"2054\":3,\"2055\":2,\"2056\":1,\"2057\":3,\"2058\":1,\"2130\":2,\"2131\":1,\"2132\":3,\"2133\":1,\"2134\":2,\"2135\":1,\"2136\":3,\"2137\":1,\"2138\":3,\"2139\":2,\"2140\":1,\"2235\":2,\"2236\":1,\"2237\":3,\"2238\":1,\"2239\":2,\"2240\":1,\"2241\":3,\"2242\":2,\"2243\":1,\"2244\":3,\"2245\":1,\"2247\":1,\"2345\":2,\"2346\":1,\"2347\":3,\"2348\":1,\"2349\":2,\"2350\":1,\"2351\":3,\"2352\":1,\"2353\":3,\"2354\":2,\"2355\":1,\"2357\":1,\"2454\":2,\"2455\":1,\"2456\":3,\"2457\":1,\"2458\":2,\"2459\":1,\"2460\":3,\"2461\":2,\"2462\":1,\"2463\":3,\"2464\":1,\"2466\":1,\"2564\":2,\"2565\":1,\"2566\":3,\"2567\":1,\"2568\":2,\"2569\":1,\"2570\":3,\"2571\":1,\"2572\":3,\"2573\":2,\"2574\":1,\"2576\":1,\"2673\":2,\"2674\":1,\"2675\":3,\"2676\":1,\"2677\":2,\"2678\":1,\"2679\":3,\"2680\":2,\"2681\":1,\"2682\":3,\"2683\":1,\"2685\":1,\"2783\":2,\"2784\":1,\"2785\":3,\"2786\":1,\"2787\":2,\"2788\":1,\"2789\":3,\"2790\":1,\"2791\":3,\"2792\":2,\"2793\":1,\"2795\":1}}],[\"dmu=data\",{\"1\":{\"94\":1}}],[\"dmz\",{\"0\":{\"88\":1,\"96\":1,\"166\":1},\"1\":{\"84\":1,\"96\":1,\"105\":1,\"166\":1}}],[\"dmsen\",{\"1\":{\"16\":2}}],[\"dms\",{\"1\":{\"16\":1,\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"drives\",{\"1\":{\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"drivers\",{\"1\":{\"396\":1}}],[\"driver\",{\"1\":{\"323\":6}}],[\"draft\",{\"1\":{\"137\":1,\"138\":1}}],[\"drug\",{\"1\":{\"122\":1}}],[\"drops\",{\"1\":{\"85\":1}}],[\"dr\",{\"1\":{\"79\":1}}],[\"durations\",{\"1\":{\"378\":1}}],[\"duration\",{\"1\":{\"378\":1}}],[\"during\",{\"1\":{\"103\":1,\"130\":1,\"131\":1,\"180\":1,\"181\":1,\"182\":1,\"229\":1,\"230\":1,\"231\":1,\"233\":1,\"272\":1,\"286\":3,\"297\":3,\"327\":1,\"334\":1,\"341\":1,\"342\":2,\"344\":1,\"363\":1,\"367\":1,\"389\":1,\"412\":1,\"439\":3,\"465\":3,\"488\":3,\"514\":3,\"544\":3,\"574\":3,\"604\":3,\"623\":1,\"650\":3,\"669\":1,\"696\":3,\"715\":1,\"742\":3,\"761\":1,\"788\":3,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"887\":1,\"888\":1,\"889\":1,\"891\":1,\"917\":1,\"953\":1,\"954\":1,\"955\":1,\"1009\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1066\":1,\"1067\":1,\"1068\":1,\"1070\":1,\"1137\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1217\":1,\"1218\":1,\"1219\":1,\"1221\":1,\"1308\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1392\":1,\"1393\":1,\"1394\":1,\"1396\":1,\"1485\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1569\":1,\"1570\":1,\"1571\":1,\"1573\":1,\"1662\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1746\":1,\"1747\":1,\"1748\":1,\"1750\":1,\"1839\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1923\":1,\"1924\":1,\"1925\":1,\"1927\":1,\"2016\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2100\":1,\"2101\":1,\"2102\":1,\"2104\":1,\"2193\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2290\":1,\"2291\":1,\"2292\":1,\"2294\":1,\"2320\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2412\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2509\":1,\"2510\":1,\"2511\":1,\"2513\":1,\"2539\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2631\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2728\":1,\"2729\":1,\"2730\":1,\"2732\":1,\"2758\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2850\":1}}],[\"durchgeführt\",{\"1\":{\"17\":1}}],[\"durchzuführen\",{\"1\":{\"16\":1}}],[\"dugas\",{\"1\":{\"26\":1}}],[\"daoproviderimpl\",{\"1\":{\"143\":1}}],[\"daoprovider\",{\"1\":{\"143\":1}}],[\"daoconfig\",{\"1\":{\"143\":2}}],[\"dao\",{\"0\":{\"143\":1},\"1\":{\"143\":7,\"147\":1}}],[\"dabei\",{\"1\":{\"17\":1}}],[\"dates\",{\"1\":{\"137\":1,\"138\":1}}],[\"date\",{\"0\":{\"69\":1,\"344\":1},\"1\":{\"33\":1,\"95\":2,\"137\":1,\"138\":1,\"165\":2,\"344\":2}}],[\"datenausleitung\",{\"1\":{\"17\":1}}],[\"datasharingframework\",{\"1\":{\"444\":4,\"445\":2,\"493\":4,\"494\":2,\"519\":4,\"520\":2,\"532\":2,\"549\":4,\"550\":2,\"562\":2,\"579\":4,\"580\":2,\"592\":2,\"609\":4,\"610\":2,\"638\":2,\"655\":4,\"656\":2,\"684\":2,\"701\":4,\"702\":2,\"730\":2,\"747\":4,\"748\":2,\"793\":4,\"794\":2,\"905\":1,\"997\":1,\"1297\":1,\"1473\":1,\"1650\":1,\"1827\":1,\"2004\":1,\"2181\":1,\"2308\":1,\"2400\":1,\"2527\":1,\"2619\":1,\"2746\":1,\"2838\":1}}],[\"datasets\",{\"1\":{\"125\":1}}],[\"datareceive\",{\"1\":{\"300\":4,\"303\":1}}],[\"datatranslate\",{\"1\":{\"300\":4,\"303\":1}}],[\"databases\",{\"1\":{\"130\":1}}],[\"database\",{\"0\":{\"141\":1},\"1\":{\"95\":2,\"130\":2,\"165\":2,\"171\":2,\"172\":2,\"173\":2,\"174\":1,\"175\":1,\"176\":1,\"177\":1,\"178\":1,\"179\":1,\"247\":2,\"248\":2,\"249\":2,\"250\":1,\"251\":1,\"252\":1,\"253\":1,\"254\":1,\"255\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"327\":1,\"408\":1,\"438\":1,\"439\":1,\"464\":1,\"465\":1,\"487\":1,\"488\":1,\"513\":1,\"514\":1,\"543\":1,\"544\":1,\"573\":1,\"574\":1,\"603\":1,\"604\":1,\"619\":1,\"649\":1,\"650\":1,\"665\":1,\"695\":1,\"696\":1,\"711\":1,\"741\":1,\"742\":1,\"757\":1,\"787\":1,\"788\":1,\"834\":2,\"835\":2,\"836\":2,\"837\":1,\"838\":1,\"839\":1,\"840\":1,\"841\":1,\"842\":1,\"944\":2,\"945\":2,\"946\":2,\"947\":1,\"948\":1,\"949\":1,\"950\":1,\"951\":1,\"952\":1,\"1019\":2,\"1020\":2,\"1021\":2,\"1022\":1,\"1023\":1,\"1024\":1,\"1025\":1,\"1026\":1,\"1027\":1,\"1110\":2,\"1111\":2,\"1112\":2,\"1113\":1,\"1114\":1,\"1115\":1,\"1116\":1,\"1117\":1,\"1118\":1,\"1170\":2,\"1171\":2,\"1172\":2,\"1173\":1,\"1174\":1,\"1175\":1,\"1176\":1,\"1177\":1,\"1178\":1,\"1248\":2,\"1249\":2,\"1250\":2,\"1251\":1,\"1252\":1,\"1253\":1,\"1254\":1,\"1255\":1,\"1256\":1,\"1342\":2,\"1343\":2,\"1344\":2,\"1345\":1,\"1346\":1,\"1347\":1,\"1348\":1,\"1349\":1,\"1350\":1,\"1424\":2,\"1425\":2,\"1426\":2,\"1427\":1,\"1428\":1,\"1429\":1,\"1430\":1,\"1431\":1,\"1432\":1,\"1519\":2,\"1520\":2,\"1521\":2,\"1522\":1,\"1523\":1,\"1524\":1,\"1525\":1,\"1526\":1,\"1527\":1,\"1601\":2,\"1602\":2,\"1603\":2,\"1604\":1,\"1605\":1,\"1606\":1,\"1607\":1,\"1608\":1,\"1609\":1,\"1696\":2,\"1697\":2,\"1698\":2,\"1699\":1,\"1700\":1,\"1701\":1,\"1702\":1,\"1703\":1,\"1704\":1,\"1778\":2,\"1779\":2,\"1780\":2,\"1781\":1,\"1782\":1,\"1783\":1,\"1784\":1,\"1785\":1,\"1786\":1,\"1873\":2,\"1874\":2,\"1875\":2,\"1876\":1,\"1877\":1,\"1878\":1,\"1879\":1,\"1880\":1,\"1881\":1,\"1955\":2,\"1956\":2,\"1957\":2,\"1958\":1,\"1959\":1,\"1960\":1,\"1961\":1,\"1962\":1,\"1963\":1,\"2050\":2,\"2051\":2,\"2052\":2,\"2053\":1,\"2054\":1,\"2055\":1,\"2056\":1,\"2057\":1,\"2058\":1,\"2132\":2,\"2133\":2,\"2134\":2,\"2135\":1,\"2136\":1,\"2137\":1,\"2138\":1,\"2139\":1,\"2140\":1,\"2237\":2,\"2238\":2,\"2239\":2,\"2240\":1,\"2241\":1,\"2242\":1,\"2243\":1,\"2244\":1,\"2245\":1,\"2347\":2,\"2348\":2,\"2349\":2,\"2350\":1,\"2351\":1,\"2352\":1,\"2353\":1,\"2354\":1,\"2355\":1,\"2456\":2,\"2457\":2,\"2458\":2,\"2459\":1,\"2460\":1,\"2461\":1,\"2462\":1,\"2463\":1,\"2464\":1,\"2566\":2,\"2567\":2,\"2568\":2,\"2569\":1,\"2570\":1,\"2571\":1,\"2572\":1,\"2573\":1,\"2574\":1,\"2675\":2,\"2676\":2,\"2677\":2,\"2678\":1,\"2679\":1,\"2680\":1,\"2681\":1,\"2682\":1,\"2683\":1,\"2785\":2,\"2786\":2,\"2787\":2,\"2788\":1,\"2789\":1,\"2790\":1,\"2791\":1,\"2792\":1,\"2793\":1}}],[\"data\",{\"0\":{\"0\":1,\"8\":1,\"9\":1,\"22\":1,\"77\":1,\"126\":1,\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1},\"1\":{\"0\":7,\"1\":1,\"5\":3,\"6\":4,\"8\":3,\"9\":3,\"10\":2,\"11\":1,\"12\":2,\"14\":4,\"15\":1,\"17\":3,\"20\":2,\"22\":1,\"26\":6,\"28\":1,\"29\":2,\"30\":2,\"32\":4,\"35\":1,\"36\":1,\"37\":1,\"39\":1,\"40\":1,\"42\":2,\"44\":2,\"46\":2,\"48\":2,\"50\":2,\"52\":2,\"54\":2,\"56\":2,\"58\":2,\"60\":2,\"62\":2,\"72\":1,\"74\":4,\"77\":3,\"78\":1,\"81\":1,\"84\":1,\"85\":1,\"86\":2,\"87\":6,\"90\":6,\"91\":3,\"93\":1,\"94\":11,\"95\":2,\"105\":1,\"112\":1,\"113\":6,\"114\":2,\"122\":4,\"123\":7,\"124\":3,\"125\":2,\"126\":4,\"130\":2,\"131\":2,\"132\":1,\"134\":1,\"165\":2,\"170\":1,\"227\":1,\"228\":1,\"234\":1,\"286\":1,\"300\":6,\"303\":6,\"314\":1,\"323\":3,\"327\":1,\"334\":3,\"363\":1,\"389\":1,\"400\":2,\"401\":1,\"412\":8,\"413\":2,\"427\":2,\"429\":4,\"593\":2,\"611\":2,\"612\":1,\"623\":8,\"624\":2,\"639\":2,\"657\":2,\"658\":1,\"669\":8,\"670\":2,\"685\":2,\"703\":2,\"704\":1,\"715\":8,\"716\":2,\"731\":4,\"749\":2,\"750\":1,\"761\":8,\"762\":2,\"776\":2,\"778\":4}}],[\"dazu\",{\"1\":{\"16\":1}}],[\"dafür\",{\"1\":{\"16\":1}}],[\"dashed\",{\"1\":{\"352\":1}}],[\"dass\",{\"1\":{\"16\":1}}],[\"das\",{\"1\":{\"15\":2}}],[\"d37q\",{\"1\":{\"14\":1}}],[\"domains\",{\"1\":{\"897\":1,\"899\":1,\"964\":1,\"966\":1,\"1071\":1,\"1073\":1,\"1125\":1,\"1127\":1,\"1222\":1,\"1224\":1,\"1264\":1,\"1266\":1,\"1398\":1,\"1400\":1,\"1440\":1,\"1442\":1,\"1575\":1,\"1577\":1,\"1617\":1,\"1619\":1,\"1752\":1,\"1754\":1,\"1794\":1,\"1796\":1,\"1929\":1,\"1931\":1,\"1971\":1,\"1973\":1,\"2106\":1,\"2108\":1,\"2148\":1,\"2150\":1,\"2300\":1,\"2302\":1,\"2367\":1,\"2369\":1,\"2519\":1,\"2521\":1,\"2586\":1,\"2588\":1,\"2738\":1,\"2740\":1,\"2805\":1,\"2807\":1}}],[\"domain\",{\"1\":{\"353\":1}}],[\"domainorg\",{\"1\":{\"353\":1}}],[\"dot\",{\"1\":{\"342\":1}}],[\"doexecute\",{\"1\":{\"150\":1,\"331\":1,\"338\":2,\"369\":1}}],[\"does\",{\"1\":{\"95\":1,\"165\":1,\"214\":1,\"307\":1,\"310\":1,\"409\":1,\"620\":1,\"666\":1,\"712\":1,\"758\":1,\"805\":1,\"871\":1,\"1053\":1,\"1204\":1,\"1376\":1,\"1553\":1,\"1730\":1,\"1907\":1,\"2084\":1,\"2208\":1,\"2274\":1,\"2427\":1,\"2493\":1,\"2646\":1,\"2712\":1}}],[\"docs\",{\"1\":{\"279\":2,\"290\":2,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"docker\",{\"0\":{\"130\":1,\"131\":1,\"133\":1,\"279\":2,\"290\":2,\"323\":1,\"327\":1,\"395\":2,\"408\":1,\"433\":2,\"459\":2,\"482\":2,\"508\":2,\"538\":2,\"568\":2,\"598\":2,\"619\":1,\"644\":2,\"665\":1,\"690\":2,\"711\":1,\"736\":2,\"757\":1,\"782\":2},\"1\":{\"95\":1,\"129\":1,\"131\":17,\"132\":4,\"133\":2,\"137\":4,\"138\":4,\"165\":1,\"171\":1,\"173\":2,\"175\":1,\"178\":1,\"183\":1,\"184\":1,\"185\":1,\"186\":1,\"192\":1,\"195\":1,\"201\":1,\"208\":1,\"209\":1,\"210\":1,\"215\":1,\"220\":1,\"221\":1,\"224\":1,\"237\":1,\"238\":1,\"239\":1,\"240\":1,\"245\":1,\"247\":1,\"249\":2,\"251\":1,\"253\":1,\"271\":1,\"272\":1,\"273\":1,\"274\":1,\"275\":1,\"276\":1,\"279\":17,\"285\":10,\"286\":12,\"287\":1,\"290\":17,\"296\":10,\"297\":12,\"298\":1,\"299\":3,\"300\":3,\"301\":1,\"302\":3,\"303\":3,\"304\":1,\"305\":3,\"306\":3,\"307\":1,\"308\":3,\"309\":3,\"310\":1,\"311\":3,\"312\":3,\"315\":2,\"323\":1,\"327\":2,\"334\":3,\"337\":4,\"338\":2,\"345\":1,\"348\":5,\"350\":1,\"363\":5,\"373\":4,\"389\":7,\"390\":2,\"395\":8,\"399\":1,\"408\":1,\"429\":2,\"433\":14,\"438\":13,\"439\":8,\"440\":2,\"443\":1,\"444\":3,\"445\":3,\"459\":14,\"464\":14,\"465\":8,\"466\":2,\"482\":14,\"487\":13,\"488\":8,\"489\":2,\"492\":1,\"493\":3,\"494\":3,\"508\":14,\"513\":13,\"514\":8,\"515\":2,\"518\":1,\"519\":4,\"520\":4,\"538\":14,\"543\":13,\"544\":8,\"545\":2,\"548\":1,\"549\":3,\"550\":3,\"568\":14,\"573\":13,\"574\":8,\"575\":2,\"578\":1,\"579\":3,\"580\":3,\"598\":14,\"603\":13,\"604\":8,\"605\":2,\"608\":1,\"609\":3,\"610\":3,\"619\":1,\"644\":14,\"649\":13,\"650\":8,\"651\":2,\"654\":1,\"655\":3,\"656\":3,\"665\":1,\"690\":14,\"695\":13,\"696\":8,\"697\":2,\"700\":1,\"701\":3,\"702\":3,\"711\":1,\"736\":14,\"741\":13,\"742\":8,\"743\":2,\"746\":1,\"747\":3,\"748\":3,\"757\":1,\"778\":2,\"782\":14,\"787\":13,\"788\":8,\"789\":2,\"792\":1,\"793\":3,\"794\":3,\"808\":1,\"809\":1,\"817\":1,\"818\":1,\"819\":1,\"822\":1,\"824\":1,\"829\":2,\"831\":1,\"834\":1,\"836\":2,\"838\":1,\"841\":1,\"850\":1,\"851\":1,\"852\":1,\"859\":1,\"865\":1,\"866\":1,\"867\":1,\"872\":1,\"877\":1,\"878\":1,\"881\":1,\"898\":1,\"916\":1,\"917\":1,\"918\":1,\"919\":1,\"920\":1,\"935\":1,\"936\":1,\"937\":1,\"940\":1,\"944\":1,\"946\":2,\"948\":1,\"950\":1,\"965\":1,\"968\":1,\"969\":1,\"977\":1,\"978\":1,\"979\":1,\"982\":1,\"984\":1,\"989\":2,\"991\":1,\"1008\":1,\"1009\":1,\"1010\":1,\"1011\":1,\"1012\":1,\"1019\":1,\"1021\":2,\"1023\":1,\"1026\":1,\"1031\":1,\"1032\":1,\"1033\":1,\"1040\":1,\"1047\":1,\"1048\":1,\"1049\":1,\"1054\":1,\"1059\":1,\"1060\":1,\"1063\":1,\"1072\":1,\"1076\":1,\"1077\":1,\"1085\":1,\"1086\":1,\"1087\":1,\"1090\":1,\"1092\":1,\"1097\":2,\"1099\":1,\"1101\":1,\"1102\":1,\"1103\":1,\"1106\":1,\"1110\":1,\"1112\":2,\"1114\":1,\"1116\":1,\"1126\":1,\"1136\":1,\"1137\":1,\"1138\":1,\"1139\":1,\"1140\":1,\"1144\":1,\"1145\":1,\"1153\":1,\"1154\":1,\"1155\":1,\"1158\":1,\"1160\":1,\"1165\":2,\"1167\":1,\"1170\":1,\"1172\":2,\"1174\":1,\"1177\":1,\"1182\":1,\"1183\":1,\"1184\":1,\"1191\":1,\"1198\":1,\"1199\":1,\"1200\":1,\"1205\":1,\"1210\":1,\"1211\":1,\"1214\":1,\"1223\":1,\"1239\":1,\"1240\":1,\"1241\":1,\"1244\":1,\"1248\":1,\"1250\":2,\"1252\":1,\"1254\":1,\"1265\":1,\"1268\":1,\"1269\":1,\"1277\":1,\"1278\":1,\"1279\":1,\"1282\":1,\"1284\":1,\"1289\":2,\"1291\":1,\"1307\":1,\"1308\":1,\"1309\":1,\"1310\":1,\"1311\":1,\"1316\":1,\"1317\":1,\"1325\":1,\"1326\":1,\"1327\":1,\"1330\":1,\"1332\":1,\"1337\":2,\"1339\":1,\"1342\":1,\"1344\":2,\"1346\":1,\"1349\":1,\"1355\":1,\"1356\":1,\"1357\":1,\"1364\":1,\"1370\":1,\"1371\":1,\"1372\":1,\"1377\":1,\"1382\":1,\"1383\":1,\"1386\":1,\"1399\":1,\"1415\":1,\"1416\":1,\"1417\":1,\"1420\":1,\"1424\":1,\"1426\":2,\"1428\":1,\"1430\":1,\"1441\":1,\"1444\":1,\"1445\":1,\"1453\":1,\"1454\":1,\"1455\":1,\"1458\":1,\"1460\":1,\"1465\":2,\"1467\":1,\"1484\":1,\"1485\":1,\"1486\":1,\"1487\":1,\"1488\":1,\"1493\":1,\"1494\":1,\"1502\":1,\"1503\":1,\"1504\":1,\"1507\":1,\"1509\":1,\"1514\":2,\"1516\":1,\"1519\":1,\"1521\":2,\"1523\":1,\"1526\":1,\"1532\":1,\"1533\":1,\"1534\":1,\"1541\":1,\"1547\":1,\"1548\":1,\"1549\":1,\"1554\":1,\"1559\":1,\"1560\":1,\"1563\":1,\"1576\":1,\"1592\":1,\"1593\":1,\"1594\":1,\"1597\":1,\"1601\":1,\"1603\":2,\"1605\":1,\"1607\":1,\"1618\":1,\"1621\":1,\"1622\":1,\"1630\":1,\"1631\":1,\"1632\":1,\"1635\":1,\"1637\":1,\"1642\":2,\"1644\":1,\"1661\":1,\"1662\":1,\"1663\":1,\"1664\":1,\"1665\":1,\"1670\":1,\"1671\":1,\"1679\":1,\"1680\":1,\"1681\":1,\"1684\":1,\"1686\":1,\"1691\":2,\"1693\":1,\"1696\":1,\"1698\":2,\"1700\":1,\"1703\":1,\"1709\":1,\"1710\":1,\"1711\":1,\"1718\":1,\"1724\":1,\"1725\":1,\"1726\":1,\"1731\":1,\"1736\":1,\"1737\":1,\"1740\":1,\"1753\":1,\"1769\":1,\"1770\":1,\"1771\":1,\"1774\":1,\"1778\":1,\"1780\":2,\"1782\":1,\"1784\":1,\"1795\":1,\"1798\":1,\"1799\":1,\"1807\":1,\"1808\":1,\"1809\":1,\"1812\":1,\"1814\":1,\"1819\":2,\"1821\":1,\"1838\":1,\"1839\":1,\"1840\":1,\"1841\":1,\"1842\":1,\"1847\":1,\"1848\":1,\"1856\":1,\"1857\":1,\"1858\":1,\"1861\":1,\"1863\":1,\"1868\":2,\"1870\":1,\"1873\":1,\"1875\":2,\"1877\":1,\"1880\":1,\"1886\":1,\"1887\":1,\"1888\":1,\"1895\":1,\"1901\":1,\"1902\":1,\"1903\":1,\"1908\":1,\"1913\":1,\"1914\":1,\"1917\":1,\"1930\":1,\"1946\":1,\"1947\":1,\"1948\":1,\"1951\":1,\"1955\":1,\"1957\":2,\"1959\":1,\"1961\":1,\"1972\":1,\"1975\":1,\"1976\":1,\"1984\":1,\"1985\":1,\"1986\":1,\"1989\":1,\"1991\":1,\"1996\":2,\"1998\":1,\"2015\":1,\"2016\":1,\"2017\":1,\"2018\":1,\"2019\":1,\"2024\":1,\"2025\":1,\"2033\":1,\"2034\":1,\"2035\":1,\"2038\":1,\"2040\":1,\"2045\":2,\"2047\":1,\"2050\":1,\"2052\":2,\"2054\":1,\"2057\":1,\"2063\":1,\"2064\":1,\"2065\":1,\"2072\":1,\"2078\":1,\"2079\":1,\"2080\":1,\"2085\":1,\"2090\":1,\"2091\":1,\"2094\":1,\"2107\":1,\"2123\":1,\"2124\":1,\"2125\":1,\"2128\":1,\"2132\":1,\"2134\":2,\"2136\":1,\"2138\":1,\"2149\":1,\"2152\":1,\"2153\":1,\"2161\":1,\"2162\":1,\"2163\":1,\"2166\":1,\"2168\":1,\"2173\":2,\"2175\":1,\"2192\":1,\"2193\":1,\"2194\":1,\"2195\":1,\"2196\":1,\"2211\":1,\"2212\":1,\"2220\":1,\"2221\":1,\"2222\":1,\"2225\":1,\"2227\":1,\"2232\":2,\"2234\":1,\"2237\":1,\"2239\":2,\"2241\":1,\"2244\":1,\"2253\":1,\"2254\":1,\"2255\":1,\"2262\":1,\"2268\":1,\"2269\":1,\"2270\":1,\"2275\":1,\"2280\":1,\"2281\":1,\"2284\":1,\"2301\":1,\"2319\":1,\"2320\":1,\"2321\":1,\"2322\":1,\"2323\":1,\"2338\":1,\"2339\":1,\"2340\":1,\"2343\":1,\"2347\":1,\"2349\":2,\"2351\":1,\"2353\":1,\"2368\":1,\"2371\":1,\"2372\":1,\"2380\":1,\"2381\":1,\"2382\":1,\"2385\":1,\"2387\":1,\"2392\":2,\"2394\":1,\"2411\":1,\"2412\":1,\"2413\":1,\"2414\":1,\"2415\":1,\"2430\":1,\"2431\":1,\"2439\":1,\"2440\":1,\"2441\":1,\"2444\":1,\"2446\":1,\"2451\":2,\"2453\":1,\"2456\":1,\"2458\":2,\"2460\":1,\"2463\":1,\"2472\":1,\"2473\":1,\"2474\":1,\"2481\":1,\"2487\":1,\"2488\":1,\"2489\":1,\"2494\":1,\"2499\":1,\"2500\":1,\"2503\":1,\"2520\":1,\"2538\":1,\"2539\":1,\"2540\":1,\"2541\":1,\"2542\":1,\"2557\":1,\"2558\":1,\"2559\":1,\"2562\":1,\"2566\":1,\"2568\":2,\"2570\":1,\"2572\":1,\"2587\":1,\"2590\":1,\"2591\":1,\"2599\":1,\"2600\":1,\"2601\":1,\"2604\":1,\"2606\":1,\"2611\":2,\"2613\":1,\"2630\":1,\"2631\":1,\"2632\":1,\"2633\":1,\"2634\":1,\"2649\":1,\"2650\":1,\"2658\":1,\"2659\":1,\"2660\":1,\"2663\":1,\"2665\":1,\"2670\":2,\"2672\":1,\"2675\":1,\"2677\":2,\"2679\":1,\"2682\":1,\"2691\":1,\"2692\":1,\"2693\":1,\"2700\":1,\"2706\":1,\"2707\":1,\"2708\":1,\"2713\":1,\"2718\":1,\"2719\":1,\"2722\":1,\"2739\":1,\"2757\":1,\"2758\":1,\"2759\":1,\"2760\":1,\"2761\":1,\"2776\":1,\"2777\":1,\"2778\":1,\"2781\":1,\"2785\":1,\"2787\":2,\"2789\":1,\"2791\":1,\"2806\":1,\"2809\":1,\"2810\":1,\"2818\":1,\"2819\":1,\"2820\":1,\"2823\":1,\"2825\":1,\"2830\":2,\"2832\":1,\"2849\":1,\"2850\":1,\"2851\":1,\"2852\":1,\"2853\":1}}],[\"documented\",{\"1\":{\"430\":1,\"456\":1,\"479\":1,\"505\":1,\"535\":1,\"565\":1,\"595\":1,\"641\":1,\"687\":1,\"733\":1,\"779\":1}}],[\"documentgenerator\",{\"1\":{\"342\":1}}],[\"documentreference\",{\"1\":{\"93\":1}}],[\"documentation\",{\"0\":{\"23\":1,\"413\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1},\"1\":{\"24\":1,\"70\":1,\"92\":1,\"158\":2,\"159\":1,\"300\":2,\"342\":2,\"369\":1,\"378\":1,\"393\":1,\"394\":1,\"413\":7,\"415\":6,\"418\":1,\"419\":1,\"430\":1,\"435\":1,\"442\":1,\"448\":1,\"449\":1,\"452\":1,\"456\":1,\"461\":1,\"471\":1,\"472\":1,\"475\":1,\"479\":1,\"484\":1,\"497\":1,\"498\":1,\"501\":1,\"505\":1,\"510\":1,\"519\":1,\"523\":1,\"524\":1,\"535\":1,\"540\":1,\"547\":1,\"553\":1,\"554\":1,\"565\":1,\"570\":1,\"577\":1,\"583\":1,\"584\":1,\"595\":1,\"600\":1,\"607\":1,\"624\":7,\"626\":6,\"629\":1,\"630\":1,\"641\":1,\"646\":1,\"653\":1,\"670\":7,\"672\":6,\"675\":1,\"676\":1,\"687\":1,\"692\":1,\"699\":1,\"716\":7,\"718\":6,\"721\":1,\"722\":1,\"733\":1,\"738\":1,\"745\":1,\"762\":7,\"764\":6,\"767\":1,\"768\":1,\"779\":1,\"784\":1,\"791\":1}}],[\"down\",{\"1\":{\"132\":1,\"153\":1,\"442\":1,\"468\":1,\"491\":1,\"517\":1,\"547\":1,\"577\":1,\"607\":1,\"653\":1,\"699\":1,\"745\":1,\"791\":1}}],[\"downwards\",{\"1\":{\"43\":1,\"45\":1,\"47\":1,\"49\":1,\"51\":1,\"53\":1,\"55\":1,\"57\":1,\"59\":1,\"61\":1,\"63\":1}}],[\"downloaded\",{\"1\":{\"403\":2,\"614\":2,\"660\":2,\"706\":2,\"752\":2}}],[\"download\",{\"1\":{\"16\":1,\"95\":2,\"165\":2,\"279\":3,\"285\":2,\"286\":5,\"290\":3,\"296\":2,\"297\":5,\"299\":1,\"314\":1,\"394\":1,\"429\":2,\"433\":2,\"438\":3,\"439\":5,\"459\":2,\"464\":3,\"465\":5,\"482\":2,\"487\":3,\"488\":5,\"508\":2,\"513\":3,\"514\":5,\"532\":1,\"538\":2,\"543\":3,\"544\":5,\"562\":1,\"568\":2,\"573\":3,\"574\":5,\"592\":1,\"598\":2,\"603\":3,\"604\":5,\"638\":1,\"644\":2,\"649\":3,\"650\":5,\"684\":1,\"690\":2,\"695\":3,\"696\":5,\"730\":1,\"736\":2,\"741\":3,\"742\":5,\"778\":2,\"782\":2,\"787\":3,\"788\":5}}],[\"do\",{\"1\":{\"37\":3,\"81\":2,\"93\":4,\"150\":1,\"155\":103,\"282\":1,\"293\":1,\"442\":3,\"468\":4,\"491\":4,\"517\":4,\"547\":3,\"577\":3,\"607\":3,\"653\":3,\"699\":3,\"745\":3,\"791\":3,\"899\":1,\"966\":1,\"1073\":1,\"1127\":1,\"1224\":1,\"1266\":1,\"1400\":1,\"1442\":1,\"1577\":1,\"1619\":1,\"1754\":1,\"1796\":1,\"1931\":1,\"1973\":1,\"2108\":1,\"2150\":1,\"2302\":1,\"2369\":1,\"2521\":1,\"2588\":1,\"2740\":1,\"2807\":1}}],[\"done\",{\"1\":{\"93\":2,\"153\":1,\"343\":1}}],[\"don\",{\"1\":{\"12\":1,\"93\":1,\"141\":1,\"173\":1,\"232\":1,\"249\":1,\"258\":1,\"413\":1,\"464\":1,\"519\":1,\"624\":1,\"670\":1,\"716\":1,\"762\":1,\"836\":1,\"890\":1,\"946\":1,\"957\":1,\"1021\":1,\"1069\":1,\"1112\":1,\"1120\":1,\"1172\":1,\"1220\":1,\"1250\":1,\"1258\":1,\"1344\":1,\"1395\":1,\"1426\":1,\"1434\":1,\"1521\":1,\"1572\":1,\"1603\":1,\"1611\":1,\"1698\":1,\"1749\":1,\"1780\":1,\"1788\":1,\"1875\":1,\"1926\":1,\"1957\":1,\"1965\":1,\"2052\":1,\"2103\":1,\"2134\":1,\"2142\":1,\"2239\":1,\"2293\":1,\"2349\":1,\"2360\":1,\"2458\":1,\"2512\":1,\"2568\":1,\"2579\":1,\"2677\":1,\"2731\":1,\"2787\":1,\"2798\":1}}],[\"doi\",{\"1\":{\"1\":1,\"26\":9}}],[\"dialog\",{\"1\":{\"425\":1,\"560\":1,\"590\":1,\"636\":1,\"682\":1,\"728\":1,\"774\":1}}],[\"diagnoses\",{\"1\":{\"122\":1}}],[\"diagramm\",{\"1\":{\"95\":1,\"96\":1,\"165\":1,\"166\":1}}],[\"diagram\",{\"1\":{\"84\":1,\"352\":1,\"377\":1}}],[\"diversification\",{\"1\":{\"401\":1,\"612\":1,\"658\":1,\"704\":1,\"750\":1}}],[\"divided\",{\"1\":{\"314\":1}}],[\"divide\",{\"1\":{\"90\":1}}],[\"directories\",{\"1\":{\"440\":1,\"442\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"547\":1,\"575\":1,\"577\":1,\"605\":1,\"607\":1,\"651\":1,\"653\":1,\"697\":1,\"699\":1,\"743\":1,\"745\":1,\"789\":1,\"791\":1}}],[\"directory\",{\"1\":{\"130\":1,\"131\":1,\"232\":2,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"299\":1,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"438\":1,\"439\":1,\"440\":1,\"444\":1,\"445\":1,\"464\":1,\"465\":1,\"466\":1,\"487\":1,\"488\":1,\"489\":1,\"493\":1,\"494\":1,\"513\":1,\"514\":1,\"515\":1,\"519\":1,\"520\":1,\"543\":1,\"544\":1,\"545\":1,\"549\":1,\"550\":1,\"573\":1,\"574\":1,\"575\":1,\"579\":1,\"580\":1,\"603\":1,\"604\":1,\"605\":1,\"609\":1,\"610\":1,\"649\":1,\"650\":1,\"651\":1,\"655\":1,\"656\":1,\"695\":1,\"696\":1,\"697\":1,\"701\":1,\"702\":1,\"741\":1,\"742\":1,\"743\":1,\"747\":1,\"748\":1,\"787\":1,\"788\":1,\"789\":1,\"793\":1,\"794\":1,\"890\":2,\"1069\":2,\"1220\":2,\"1395\":2,\"1572\":2,\"1749\":2,\"1926\":2,\"2103\":2,\"2293\":2,\"2512\":2,\"2731\":2}}],[\"direct\",{\"1\":{\"413\":1,\"442\":1,\"468\":1,\"491\":1,\"517\":1,\"547\":1,\"577\":1,\"607\":1,\"624\":1,\"653\":1,\"670\":1,\"699\":1,\"716\":1,\"745\":1,\"762\":1,\"791\":1}}],[\"directroy\",{\"0\":{\"232\":1,\"890\":1,\"1069\":1,\"1220\":1,\"1395\":1,\"1572\":1,\"1749\":1,\"1926\":1,\"2103\":1,\"2293\":1,\"2512\":1,\"2731\":1},\"1\":{\"232\":1,\"890\":1,\"1069\":1,\"1220\":1,\"1395\":1,\"1572\":1,\"1749\":1,\"1926\":1,\"2103\":1,\"2293\":1,\"2512\":1,\"2731\":1}}],[\"directly\",{\"1\":{\"12\":1,\"87\":1,\"307\":1,\"310\":1,\"401\":1,\"413\":1,\"612\":1,\"624\":1,\"658\":1,\"670\":1,\"704\":1,\"716\":1,\"750\":1,\"762\":1}}],[\"difference\",{\"1\":{\"400\":1,\"611\":1,\"657\":1,\"703\":1,\"749\":1}}],[\"differentiation\",{\"1\":{\"329\":1}}],[\"different\",{\"1\":{\"6\":1,\"8\":1,\"81\":2,\"86\":1,\"90\":2,\"92\":1,\"93\":1,\"94\":1,\"98\":1,\"100\":1,\"108\":1,\"112\":1,\"113\":1,\"163\":1,\"176\":1,\"254\":1,\"320\":1,\"327\":1,\"337\":1,\"341\":1,\"352\":3,\"365\":1,\"367\":1,\"377\":1,\"395\":1,\"425\":1,\"430\":1,\"456\":1,\"479\":1,\"505\":1,\"530\":1,\"535\":1,\"560\":1,\"565\":1,\"590\":1,\"595\":1,\"636\":1,\"641\":1,\"682\":1,\"687\":1,\"728\":1,\"733\":1,\"774\":1,\"779\":1,\"839\":1,\"951\":1,\"1024\":1,\"1117\":1,\"1175\":1,\"1255\":1,\"1347\":1,\"1431\":1,\"1524\":1,\"1608\":1,\"1701\":1,\"1785\":1,\"1878\":1,\"1962\":1,\"2055\":1,\"2139\":1,\"2242\":1,\"2354\":1,\"2461\":1,\"2573\":1,\"2680\":1,\"2792\":1}}],[\"difficulties\",{\"1\":{\"116\":1}}],[\"dics\",{\"1\":{\"94\":4}}],[\"dic\",{\"1\":{\"77\":1,\"87\":3,\"94\":1,\"126\":1,\"323\":65,\"331\":1,\"334\":8,\"338\":4,\"345\":2,\"348\":5,\"350\":2,\"360\":2,\"363\":7,\"373\":5,\"375\":2,\"389\":8,\"396\":1,\"932\":1,\"1236\":1,\"1412\":1,\"1589\":1,\"1766\":1,\"1943\":1,\"2120\":1,\"2335\":1,\"2554\":1,\"2773\":1}}],[\"dic1fhirstore\",{\"1\":{\"22\":1}}],[\"digitally\",{\"1\":{\"94\":1}}],[\"digital\",{\"1\":{\"73\":1,\"77\":1}}],[\"diligently\",{\"1\":{\"38\":1}}],[\"distinguish\",{\"1\":{\"896\":1,\"963\":1,\"2299\":1,\"2366\":1,\"2518\":1,\"2585\":1,\"2737\":1,\"2804\":1}}],[\"distributed\",{\"0\":{\"8\":1},\"1\":{\"0\":1,\"5\":1,\"8\":1,\"26\":5,\"29\":2,\"32\":1,\"84\":1,\"93\":1,\"94\":2,\"106\":1,\"112\":2,\"113\":3,\"116\":2,\"123\":1,\"161\":1,\"391\":1,\"423\":2,\"453\":2,\"476\":2,\"502\":2,\"528\":2,\"558\":2,\"588\":2,\"634\":2,\"680\":2,\"726\":2,\"772\":2}}],[\"distribute\",{\"1\":{\"0\":1,\"94\":1}}],[\"disable\",{\"1\":{\"345\":1,\"348\":1,\"895\":1,\"962\":1,\"1124\":1,\"1263\":1,\"1439\":1,\"1616\":1,\"1793\":1,\"1970\":1,\"2147\":1,\"2298\":1,\"2365\":1,\"2517\":1,\"2584\":1,\"2736\":1,\"2803\":1}}],[\"disabling\",{\"1\":{\"155\":1}}],[\"displayed\",{\"1\":{\"214\":1,\"871\":1,\"1053\":1,\"1204\":1,\"1376\":1,\"1553\":1,\"1730\":1,\"1907\":1,\"2084\":1,\"2274\":1,\"2493\":1,\"2712\":1}}],[\"discussions\",{\"1\":{\"415\":2,\"626\":2,\"672\":2,\"718\":2,\"764\":2}}],[\"disclose\",{\"1\":{\"37\":1}}],[\"disclosure\",{\"0\":{\"34\":1,\"36\":1},\"1\":{\"36\":2}}],[\"discovered\",{\"1\":{\"35\":1}}],[\"dizen\",{\"1\":{\"16\":1}}],[\"diz\",{\"1\":{\"14\":1}}],[\"die\",{\"1\":{\"14\":3,\"16\":4,\"17\":1}}],[\"diesem\",{\"1\":{\"15\":1,\"16\":1}}],[\"diese\",{\"1\":{\"14\":1}}],[\"deb\",{\"1\":{\"279\":1,\"290\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"debugger\",{\"1\":{\"317\":1,\"336\":1,\"338\":2}}],[\"debugging\",{\"0\":{\"317\":1,\"322\":1,\"335\":1,\"336\":1},\"1\":{\"337\":1,\"338\":1,\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"651\":1,\"697\":1,\"743\":1,\"789\":1}}],[\"debug\",{\"0\":{\"180\":1,\"181\":1,\"182\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"953\":1,\"954\":1,\"955\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2794\":1,\"2795\":1,\"2796\":1},\"1\":{\"180\":3,\"181\":3,\"182\":3,\"214\":2,\"286\":1,\"297\":1,\"317\":1,\"336\":1,\"338\":1,\"439\":1,\"465\":1,\"488\":1,\"514\":1,\"544\":1,\"574\":1,\"604\":1,\"650\":1,\"696\":1,\"742\":1,\"788\":1,\"843\":3,\"844\":3,\"845\":3,\"846\":3,\"847\":3,\"848\":3,\"849\":3,\"871\":2,\"953\":3,\"954\":3,\"955\":3,\"1028\":3,\"1029\":3,\"1030\":3,\"1053\":2,\"1179\":3,\"1180\":3,\"1181\":3,\"1204\":2,\"1351\":3,\"1352\":3,\"1353\":3,\"1354\":3,\"1376\":2,\"1528\":3,\"1529\":3,\"1530\":3,\"1531\":3,\"1553\":2,\"1705\":3,\"1706\":3,\"1707\":3,\"1708\":3,\"1730\":2,\"1882\":3,\"1883\":3,\"1884\":3,\"1885\":3,\"1907\":2,\"2059\":3,\"2060\":3,\"2061\":3,\"2062\":3,\"2084\":2,\"2246\":3,\"2247\":3,\"2248\":3,\"2249\":3,\"2250\":3,\"2251\":3,\"2252\":3,\"2274\":2,\"2356\":3,\"2357\":3,\"2358\":3,\"2465\":3,\"2466\":3,\"2467\":3,\"2468\":3,\"2469\":3,\"2470\":3,\"2471\":3,\"2493\":2,\"2575\":3,\"2576\":3,\"2577\":3,\"2684\":3,\"2685\":3,\"2686\":3,\"2687\":3,\"2688\":3,\"2689\":3,\"2690\":3,\"2712\":2,\"2794\":3,\"2795\":3,\"2796\":3}}],[\"dearmor\",{\"1\":{\"279\":1,\"290\":1,\"433\":1,\"459\":1,\"482\":1,\"508\":1,\"538\":1,\"568\":1,\"598\":1,\"644\":1,\"690\":1,\"736\":1,\"782\":1}}],[\"decrypt\",{\"1\":{\"185\":1,\"210\":1,\"221\":1,\"239\":1,\"819\":1,\"852\":1,\"867\":1,\"878\":1,\"937\":1,\"979\":1,\"1033\":1,\"1049\":1,\"1060\":1,\"1087\":1,\"1103\":1,\"1155\":1,\"1184\":1,\"1200\":1,\"1211\":1,\"1241\":1,\"1279\":1,\"1327\":1,\"1357\":1,\"1372\":1,\"1383\":1,\"1417\":1,\"1455\":1,\"1504\":1,\"1534\":1,\"1549\":1,\"1560\":1,\"1594\":1,\"1632\":1,\"1681\":1,\"1711\":1,\"1726\":1,\"1737\":1,\"1771\":1,\"1809\":1,\"1858\":1,\"1888\":1,\"1903\":1,\"1914\":1,\"1948\":1,\"1986\":1,\"2035\":1,\"2065\":1,\"2080\":1,\"2091\":1,\"2125\":1,\"2163\":1,\"2222\":1,\"2255\":1,\"2270\":1,\"2281\":1,\"2340\":1,\"2382\":1,\"2441\":1,\"2474\":1,\"2489\":1,\"2500\":1,\"2559\":1,\"2601\":1,\"2660\":1,\"2693\":1,\"2708\":1,\"2719\":1,\"2778\":1,\"2820\":1}}],[\"declaration\",{\"1\":{\"155\":50}}],[\"declarations\",{\"1\":{\"155\":12,\"156\":1}}],[\"decides\",{\"1\":{\"377\":1}}],[\"decide\",{\"1\":{\"345\":1}}],[\"deciding\",{\"1\":{\"95\":1,\"165\":1,\"367\":1,\"370\":1}}],[\"decisions\",{\"1\":{\"367\":1}}],[\"decision\",{\"1\":{\"0\":1,\"32\":1,\"95\":1,\"114\":1,\"165\":1,\"370\":1,\"373\":1}}],[\"depends\",{\"1\":{\"323\":6}}],[\"depending\",{\"1\":{\"229\":1,\"373\":1,\"887\":1,\"1066\":1,\"1217\":1,\"1392\":1,\"1569\":1,\"1746\":1,\"1923\":1,\"2100\":1,\"2290\":1,\"2509\":1,\"2728\":1}}],[\"dependencies\",{\"1\":{\"159\":1}}],[\"dependency>\",{\"1\":{\"159\":1}}],[\"dependency\",{\"1\":{\"150\":1}}],[\"deprecated\",{\"1\":{\"150\":1}}],[\"deploying\",{\"1\":{\"334\":1,\"363\":1,\"389\":1,\"427\":1,\"776\":1}}],[\"deploy\",{\"1\":{\"98\":1,\"229\":1,\"286\":1,\"297\":2,\"334\":1,\"348\":1,\"363\":1,\"373\":1,\"389\":1,\"887\":1,\"1066\":1,\"1217\":1,\"1392\":1,\"1569\":1,\"1746\":1,\"1923\":1,\"2100\":1,\"2290\":1,\"2509\":1,\"2728\":1}}],[\"deployment\",{\"0\":{\"11\":1,\"87\":1,\"167\":1,\"429\":1,\"778\":1},\"1\":{\"87\":1,\"126\":1,\"229\":1,\"230\":1,\"231\":1,\"232\":1,\"286\":2,\"297\":2,\"341\":1,\"344\":1,\"887\":1,\"888\":1,\"889\":1,\"890\":1,\"1066\":1,\"1067\":1,\"1068\":1,\"1069\":1,\"1217\":1,\"1218\":1,\"1219\":1,\"1220\":1,\"1392\":1,\"1393\":1,\"1394\":1,\"1395\":1,\"1569\":1,\"1570\":1,\"1571\":1,\"1572\":1,\"1746\":1,\"1747\":1,\"1748\":1,\"1749\":1,\"1923\":1,\"1924\":1,\"1925\":1,\"1926\":1,\"2100\":1,\"2101\":1,\"2102\":1,\"2103\":1,\"2290\":1,\"2291\":1,\"2292\":1,\"2293\":1,\"2509\":1,\"2510\":1,\"2511\":1,\"2512\":1,\"2728\":1,\"2729\":1,\"2730\":1,\"2731\":1}}],[\"deployed\",{\"1\":{\"5\":1,\"11\":1,\"86\":1,\"87\":1,\"98\":1,\"135\":1,\"233\":2,\"328\":1,\"334\":2,\"348\":1,\"363\":3,\"373\":1,\"389\":4,\"424\":1,\"454\":1,\"477\":1,\"503\":1,\"529\":1,\"559\":1,\"589\":1,\"635\":1,\"681\":1,\"727\":1,\"773\":1,\"891\":2,\"1070\":2,\"1221\":2,\"1396\":2,\"1573\":2,\"1750\":2,\"1927\":2,\"2104\":2,\"2294\":2,\"2513\":2,\"2732\":2}}],[\"determine\",{\"1\":{\"409\":1,\"620\":1,\"666\":1,\"712\":1,\"758\":1}}],[\"determined\",{\"1\":{\"148\":1,\"149\":1}}],[\"detailled\",{\"1\":{\"440\":1,\"466\":1,\"489\":1,\"515\":1,\"545\":1,\"575\":1,\"605\":1,\"651\":1,\"697\":1,\"743\":1,\"789\":1}}],[\"detail\",{\"1\":{\"85\":1,\"343\":1}}],[\"detailed\",{\"1\":{\"37\":1,\"112\":1,\"415\":2,\"626\":2,\"672\":2,\"718\":2,\"764\":2}}],[\"details\",{\"1\":{\"16\":1,\"17\":1,\"89\":1,\"315\":1,\"316\":1,\"317\":1,\"318\":1,\"319\":1,\"320\":1,\"321\":1,\"369\":1,\"424\":1,\"427\":1,\"454\":1,\"477\":1,\"503\":1,\"529\":1,\"559\":1,\"589\":1,\"635\":1,\"681\":1,\"727\":1,\"773\":1,\"776\":1}}],[\"delay\",{\"1\":{\"166\":1}}],[\"delcaration\",{\"1\":{\"155\":1}}],[\"delve\",{\"1\":{\"113\":1}}],[\"delivery\",{\"1\":{\"112\":1,\"113\":1}}],[\"delete\",{\"0\":{\"252\":1,\"253\":2,\"254\":1,\"262\":1,\"949\":1,\"950\":2,\"951\":1,\"1115\":1,\"1116\":2,\"1117\":1,\"1253\":1,\"1254\":2,\"1255\":1,\"1429\":1,\"1430\":2,\"1431\":1,\"1606\":1,\"1607\":2,\"1608\":1,\"1783\":1,\"1784\":2,\"1785\":1,\"1960\":1,\"1961\":2,\"1962\":1,\"2137\":1,\"2138\":2,\"2139\":1,\"2352\":1,\"2353\":2,\"2354\":1,\"2571\":1,\"2572\":2,\"2573\":1,\"2790\":1,\"2791\":2,\"2792\":1},\"1\":{\"252\":2,\"253\":3,\"254\":2,\"262\":1,\"285\":3,\"296\":3,\"323\":33,\"438\":1,\"464\":1,\"487\":1,\"513\":1,\"520\":1,\"543\":1,\"573\":1,\"603\":1,\"649\":1,\"695\":1,\"741\":1,\"787\":1,\"931\":2,\"933\":2,\"949\":2,\"950\":3,\"951\":2,\"1115\":2,\"1116\":3,\"1117\":2,\"1235\":2,\"1237\":2,\"1253\":2,\"1254\":3,\"1255\":2,\"1411\":2,\"1413\":2,\"1429\":2,\"1430\":3,\"1431\":2,\"1588\":2,\"1590\":2,\"1606\":2,\"1607\":3,\"1608\":2,\"1765\":2,\"1767\":2,\"1783\":2,\"1784\":3,\"1785\":2,\"1942\":2,\"1944\":2,\"1960\":2,\"1961\":3,\"1962\":2,\"2119\":2,\"2121\":2,\"2137\":2,\"2138\":3,\"2139\":2,\"2334\":2,\"2336\":2,\"2352\":2,\"2353\":3,\"2354\":2,\"2553\":2,\"2555\":2,\"2571\":2,\"2572\":3,\"2573\":2,\"2772\":2,\"2774\":2,\"2790\":2,\"2791\":3,\"2792\":2}}],[\"deletes\",{\"1\":{\"141\":1,\"252\":1,\"253\":1,\"254\":1,\"262\":1,\"949\":1,\"950\":1,\"951\":1,\"1115\":1,\"1116\":1,\"1117\":1,\"1253\":1,\"1254\":1,\"1255\":1,\"1429\":1,\"1430\":1,\"1431\":1,\"1606\":1,\"1607\":1,\"1608\":1,\"1783\":1,\"1784\":1,\"1785\":1,\"1960\":1,\"1961\":1,\"1962\":1,\"2137\":1,\"2138\":1,\"2139\":1,\"2352\":1,\"2353\":1,\"2354\":1,\"2571\":1,\"2572\":1,\"2573\":1,\"2790\":1,\"2791\":1,\"2792\":1}}],[\"deleted\",{\"1\":{\"86\":1,\"300\":1,\"303\":1,\"306\":1}}],[\"delegates\",{\"1\":{\"915\":1,\"1007\":1,\"1483\":1,\"1660\":1,\"1837\":1,\"2014\":1,\"2191\":1,\"2318\":1,\"2410\":1,\"2537\":1,\"2629\":1,\"2756\":1,\"2848\":1}}],[\"delegateexecution\",{\"1\":{\"150\":1,\"369\":1}}],[\"delegate\",{\"1\":{\"95\":1,\"165\":1,\"328\":1,\"329\":1}}],[\"definition\",{\"0\":{\"353\":1},\"1\":{\"353\":1,\"354\":1,\"360\":1,\"380\":1,\"386\":1,\"519\":1,\"520\":1}}],[\"define\",{\"1\":{\"236\":1,\"328\":1,\"343\":1,\"379\":1,\"804\":1,\"931\":1,\"1235\":1,\"1411\":1,\"1588\":1,\"1765\":1,\"1942\":1,\"2119\":1,\"2207\":1,\"2334\":1,\"2426\":1,\"2553\":1,\"2645\":1,\"2772\":1}}],[\"defines\",{\"1\":{\"81\":1,\"90\":2,\"148\":1,\"149\":1,\"330\":1,\"343\":1,\"806\":2,\"933\":2,\"1237\":2,\"1413\":2,\"1590\":2,\"1767\":2,\"1944\":2,\"2121\":2,\"2209\":2,\"2336\":2,\"2428\":2,\"2555\":2,\"2647\":2,\"2774\":2}}],[\"defined\",{\"1\":{\"78\":1,\"105\":1,\"328\":1,\"338\":1,\"342\":1,\"343\":1,\"344\":3,\"357\":2,\"358\":1,\"377\":1,\"383\":2,\"384\":1,\"519\":1,\"520\":1,\"894\":1,\"932\":1,\"961\":1,\"1236\":1,\"1262\":1,\"1412\":1,\"1438\":1,\"1589\":1,\"1615\":1,\"1766\":1,\"1792\":1,\"1943\":1,\"1969\":1,\"2120\":1,\"2146\":1,\"2297\":1,\"2335\":1,\"2364\":1,\"2516\":1,\"2554\":1,\"2583\":1,\"2735\":1,\"2773\":1,\"2802\":1}}],[\"defaultvalue\",{\"1\":{\"342\":1}}],[\"defaults\",{\"1\":{\"166\":1}}],[\"default\",{\"1\":{\"101\":1,\"155\":1,\"170\":2,\"172\":1,\"174\":1,\"176\":1,\"177\":1,\"179\":1,\"180\":1,\"181\":1,\"182\":1,\"189\":2,\"190\":2,\"191\":1,\"198\":2,\"199\":2,\"200\":1,\"202\":1,\"205\":1,\"206\":1,\"207\":1,\"213\":1,\"214\":1,\"216\":1,\"218\":1,\"219\":1,\"226\":1,\"227\":2,\"228\":2,\"230\":1,\"231\":1,\"232\":1,\"234\":2,\"243\":2,\"244\":2,\"246\":1,\"248\":1,\"250\":1,\"252\":1,\"254\":1,\"255\":1,\"258\":1,\"260\":1,\"267\":1,\"268\":1,\"269\":1,\"270\":1,\"323\":3,\"343\":2,\"345\":1,\"434\":1,\"440\":1,\"460\":1,\"466\":1,\"483\":1,\"489\":1,\"509\":1,\"515\":1,\"519\":1,\"539\":1,\"545\":1,\"569\":1,\"575\":1,\"599\":1,\"605\":1,\"645\":1,\"651\":1,\"691\":1,\"697\":1,\"737\":1,\"743\":1,\"783\":1,\"789\":1,\"808\":2,\"809\":1,\"810\":1,\"811\":1,\"812\":1,\"813\":1,\"814\":1,\"820\":1,\"821\":1,\"829\":2,\"830\":1,\"831\":1,\"832\":1,\"833\":2,\"835\":1,\"837\":1,\"839\":1,\"840\":1,\"842\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"853\":2,\"854\":2,\"855\":1,\"856\":2,\"857\":2,\"858\":1,\"860\":1,\"862\":1,\"863\":1,\"864\":1,\"870\":1,\"871\":1,\"873\":1,\"875\":1,\"876\":1,\"883\":1,\"884\":1,\"885\":1,\"886\":1,\"888\":1,\"889\":1,\"890\":1,\"892\":1,\"893\":1,\"895\":1,\"902\":2,\"904\":1,\"911\":1,\"912\":1,\"913\":1,\"914\":1,\"915\":1,\"921\":1,\"938\":2,\"939\":2,\"941\":1,\"942\":1,\"943\":2,\"945\":1,\"947\":1,\"949\":1,\"951\":1,\"952\":1,\"953\":1,\"954\":1,\"955\":1,\"957\":1,\"960\":1,\"962\":1,\"968\":2,\"969\":1,\"970\":1,\"971\":1,\"972\":1,\"973\":1,\"974\":1,\"980\":1,\"981\":1,\"989\":2,\"990\":1,\"991\":1,\"993\":2,\"996\":1,\"1003\":1,\"1004\":1,\"1005\":1,\"1006\":1,\"1007\":1,\"1013\":1,\"1017\":1,\"1018\":2,\"1020\":1,\"1022\":1,\"1024\":1,\"1025\":1,\"1027\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1034\":2,\"1035\":2,\"1036\":1,\"1037\":2,\"1038\":2,\"1039\":1,\"1041\":1,\"1044\":1,\"1045\":1,\"1046\":1,\"1052\":1,\"1053\":1,\"1055\":1,\"1057\":1,\"1058\":1,\"1065\":1,\"1067\":1,\"1068\":1,\"1069\":1,\"1076\":2,\"1077\":1,\"1078\":1,\"1079\":1,\"1080\":1,\"1081\":1,\"1082\":1,\"1088\":1,\"1089\":1,\"1097\":2,\"1098\":1,\"1099\":1,\"1104\":2,\"1105\":2,\"1107\":1,\"1108\":1,\"1109\":2,\"1111\":1,\"1113\":1,\"1115\":1,\"1117\":1,\"1118\":1,\"1120\":1,\"1122\":1,\"1124\":1,\"1132\":1,\"1133\":1,\"1134\":1,\"1135\":1,\"1144\":2,\"1145\":1,\"1146\":1,\"1147\":1,\"1148\":1,\"1149\":1,\"1150\":1,\"1156\":1,\"1157\":1,\"1165\":2,\"1166\":1,\"1167\":1,\"1168\":1,\"1169\":2,\"1171\":1,\"1173\":1,\"1175\":1,\"1176\":1,\"1178\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1185\":2,\"1186\":2,\"1187\":1,\"1188\":2,\"1189\":2,\"1190\":1,\"1192\":1,\"1195\":1,\"1196\":1,\"1197\":1,\"1203\":1,\"1204\":1,\"1206\":1,\"1208\":1,\"1209\":1,\"1216\":1,\"1218\":1,\"1219\":1,\"1220\":1,\"1242\":2,\"1243\":2,\"1245\":1,\"1246\":1,\"1247\":2,\"1249\":1,\"1251\":1,\"1253\":1,\"1255\":1,\"1256\":1,\"1258\":1,\"1261\":1,\"1263\":1,\"1268\":2,\"1269\":1,\"1270\":1,\"1271\":1,\"1272\":1,\"1273\":1,\"1274\":1,\"1280\":1,\"1281\":1,\"1289\":2,\"1290\":1,\"1291\":1,\"1293\":2,\"1296\":1,\"1303\":1,\"1304\":1,\"1305\":1,\"1306\":1,\"1312\":1,\"1316\":2,\"1317\":1,\"1318\":1,\"1319\":1,\"1320\":1,\"1321\":1,\"1322\":1,\"1328\":1,\"1329\":1,\"1337\":2,\"1338\":1,\"1339\":1,\"1340\":1,\"1341\":2,\"1343\":1,\"1345\":1,\"1347\":1,\"1348\":1,\"1350\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1358\":2,\"1359\":2,\"1360\":1,\"1361\":2,\"1362\":2,\"1363\":1,\"1365\":1,\"1367\":1,\"1368\":1,\"1369\":1,\"1375\":1,\"1376\":1,\"1378\":1,\"1380\":1,\"1381\":1,\"1388\":1,\"1389\":1,\"1390\":1,\"1391\":1,\"1393\":1,\"1394\":1,\"1395\":1,\"1397\":1,\"1418\":2,\"1419\":2,\"1421\":1,\"1422\":1,\"1423\":2,\"1425\":1,\"1427\":1,\"1429\":1,\"1431\":1,\"1432\":1,\"1434\":1,\"1437\":1,\"1439\":1,\"1444\":2,\"1445\":1,\"1446\":1,\"1447\":1,\"1448\":1,\"1449\":1,\"1450\":1,\"1456\":1,\"1457\":1,\"1465\":2,\"1466\":1,\"1467\":1,\"1469\":2,\"1472\":1,\"1479\":1,\"1480\":1,\"1481\":1,\"1482\":1,\"1483\":1,\"1489\":1,\"1493\":2,\"1494\":1,\"1495\":1,\"1496\":1,\"1497\":1,\"1498\":1,\"1499\":1,\"1505\":1,\"1506\":1,\"1514\":2,\"1515\":1,\"1516\":1,\"1517\":1,\"1518\":2,\"1520\":1,\"1522\":1,\"1524\":1,\"1525\":1,\"1527\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1535\":2,\"1536\":2,\"1537\":1,\"1538\":2,\"1539\":2,\"1540\":1,\"1542\":1,\"1544\":1,\"1545\":1,\"1546\":1,\"1552\":1,\"1553\":1,\"1555\":1,\"1557\":1,\"1558\":1,\"1565\":1,\"1566\":1,\"1567\":1,\"1568\":1,\"1570\":1,\"1571\":1,\"1572\":1,\"1574\":1,\"1595\":2,\"1596\":2,\"1598\":1,\"1599\":1,\"1600\":2,\"1602\":1,\"1604\":1,\"1606\":1,\"1608\":1,\"1609\":1,\"1611\":1,\"1614\":1,\"1616\":1,\"1621\":2,\"1622\":1,\"1623\":1,\"1624\":1,\"1625\":1,\"1626\":1,\"1627\":1,\"1633\":1,\"1634\":1,\"1642\":2,\"1643\":1,\"1644\":1,\"1646\":2,\"1649\":1,\"1656\":1,\"1657\":1,\"1658\":1,\"1659\":1,\"1660\":1,\"1666\":1,\"1670\":2,\"1671\":1,\"1672\":1,\"1673\":1,\"1674\":1,\"1675\":1,\"1676\":1,\"1682\":1,\"1683\":1,\"1691\":2,\"1692\":1,\"1693\":1,\"1694\":1,\"1695\":2,\"1697\":1,\"1699\":1,\"1701\":1,\"1702\":1,\"1704\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1712\":2,\"1713\":2,\"1714\":1,\"1715\":2,\"1716\":2,\"1717\":1,\"1719\":1,\"1721\":1,\"1722\":1,\"1723\":1,\"1729\":1,\"1730\":1,\"1732\":1,\"1734\":1,\"1735\":1,\"1742\":1,\"1743\":1,\"1744\":1,\"1745\":1,\"1747\":1,\"1748\":1,\"1749\":1,\"1751\":1,\"1772\":2,\"1773\":2,\"1775\":1,\"1776\":1,\"1777\":2,\"1779\":1,\"1781\":1,\"1783\":1,\"1785\":1,\"1786\":1,\"1788\":1,\"1791\":1,\"1793\":1,\"1798\":2,\"1799\":1,\"1800\":1,\"1801\":1,\"1802\":1,\"1803\":1,\"1804\":1,\"1810\":1,\"1811\":1,\"1819\":2,\"1820\":1,\"1821\":1,\"1823\":2,\"1826\":1,\"1833\":1,\"1834\":1,\"1835\":1,\"1836\":1,\"1837\":1,\"1843\":1,\"1847\":2,\"1848\":1,\"1849\":1,\"1850\":1,\"1851\":1,\"1852\":1,\"1853\":1,\"1859\":1,\"1860\":1,\"1868\":2,\"1869\":1,\"1870\":1,\"1871\":1,\"1872\":2,\"1874\":1,\"1876\":1,\"1878\":1,\"1879\":1,\"1881\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1889\":2,\"1890\":2,\"1891\":1,\"1892\":2,\"1893\":2,\"1894\":1,\"1896\":1,\"1898\":1,\"1899\":1,\"1900\":1,\"1906\":1,\"1907\":1,\"1909\":1,\"1911\":1,\"1912\":1,\"1919\":1,\"1920\":1,\"1921\":1,\"1922\":1,\"1924\":1,\"1925\":1,\"1926\":1,\"1928\":1,\"1949\":2,\"1950\":2,\"1952\":1,\"1953\":1,\"1954\":2,\"1956\":1,\"1958\":1,\"1960\":1,\"1962\":1,\"1963\":1,\"1965\":1,\"1968\":1,\"1970\":1,\"1975\":2,\"1976\":1,\"1977\":1,\"1978\":1,\"1979\":1,\"1980\":1,\"1981\":1,\"1987\":1,\"1988\":1,\"1996\":2,\"1997\":1,\"1998\":1,\"2000\":2,\"2003\":1,\"2010\":1,\"2011\":1,\"2012\":1,\"2013\":1,\"2014\":1,\"2020\":1,\"2024\":2,\"2025\":1,\"2026\":1,\"2027\":1,\"2028\":1,\"2029\":1,\"2030\":1,\"2036\":1,\"2037\":1,\"2045\":2,\"2046\":1,\"2047\":1,\"2048\":1,\"2049\":2,\"2051\":1,\"2053\":1,\"2055\":1,\"2056\":1,\"2058\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2066\":2,\"2067\":2,\"2068\":1,\"2069\":2,\"2070\":2,\"2071\":1,\"2073\":1,\"2075\":1,\"2076\":1,\"2077\":1,\"2083\":1,\"2084\":1,\"2086\":1,\"2088\":1,\"2089\":1,\"2096\":1,\"2097\":1,\"2098\":1,\"2099\":1,\"2101\":1,\"2102\":1,\"2103\":1,\"2105\":1,\"2126\":2,\"2127\":2,\"2129\":1,\"2130\":1,\"2131\":2,\"2133\":1,\"2135\":1,\"2137\":1,\"2139\":1,\"2140\":1,\"2142\":1,\"2145\":1,\"2147\":1,\"2152\":2,\"2153\":1,\"2154\":1,\"2155\":1,\"2156\":1,\"2157\":1,\"2158\":1,\"2164\":1,\"2165\":1,\"2173\":2,\"2174\":1,\"2175\":1,\"2177\":2,\"2180\":1,\"2187\":1,\"2188\":1,\"2189\":1,\"2190\":1,\"2191\":1,\"2197\":1,\"2211\":2,\"2212\":1,\"2213\":1,\"2214\":1,\"2215\":1,\"2216\":1,\"2217\":1,\"2223\":1,\"2224\":1,\"2232\":2,\"2233\":1,\"2234\":1,\"2235\":1,\"2236\":2,\"2238\":1,\"2240\":1,\"2242\":1,\"2243\":1,\"2245\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2256\":2,\"2257\":2,\"2258\":1,\"2259\":2,\"2260\":2,\"2261\":1,\"2263\":1,\"2265\":1,\"2266\":1,\"2267\":1,\"2273\":1,\"2274\":1,\"2276\":1,\"2278\":1,\"2279\":1,\"2286\":1,\"2287\":1,\"2288\":1,\"2289\":1,\"2291\":1,\"2292\":1,\"2293\":1,\"2295\":1,\"2296\":1,\"2298\":1,\"2305\":2,\"2307\":1,\"2314\":1,\"2315\":1,\"2316\":1,\"2317\":1,\"2318\":1,\"2324\":1,\"2341\":2,\"2342\":2,\"2344\":1,\"2345\":1,\"2346\":2,\"2348\":1,\"2350\":1,\"2352\":1,\"2354\":1,\"2355\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2360\":1,\"2363\":1,\"2365\":1,\"2371\":2,\"2372\":1,\"2373\":1,\"2374\":1,\"2375\":1,\"2376\":1,\"2377\":1,\"2383\":1,\"2384\":1,\"2392\":2,\"2393\":1,\"2394\":1,\"2396\":2,\"2399\":1,\"2406\":1,\"2407\":1,\"2408\":1,\"2409\":1,\"2410\":1,\"2416\":1,\"2430\":2,\"2431\":1,\"2432\":1,\"2433\":1,\"2434\":1,\"2435\":1,\"2436\":1,\"2442\":1,\"2443\":1,\"2451\":2,\"2452\":1,\"2453\":1,\"2454\":1,\"2455\":2,\"2457\":1,\"2459\":1,\"2461\":1,\"2462\":1,\"2464\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2475\":2,\"2476\":2,\"2477\":1,\"2478\":2,\"2479\":2,\"2480\":1,\"2482\":1,\"2484\":1,\"2485\":1,\"2486\":1,\"2492\":1,\"2493\":1,\"2495\":1,\"2497\":1,\"2498\":1,\"2505\":1,\"2506\":1,\"2507\":1,\"2508\":1,\"2510\":1,\"2511\":1,\"2512\":1,\"2514\":1,\"2515\":1,\"2517\":1,\"2524\":2,\"2526\":1,\"2533\":1,\"2534\":1,\"2535\":1,\"2536\":1,\"2537\":1,\"2543\":1,\"2560\":2,\"2561\":2,\"2563\":1,\"2564\":1,\"2565\":2,\"2567\":1,\"2569\":1,\"2571\":1,\"2573\":1,\"2574\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2579\":1,\"2582\":1,\"2584\":1,\"2590\":2,\"2591\":1,\"2592\":1,\"2593\":1,\"2594\":1,\"2595\":1,\"2596\":1,\"2602\":1,\"2603\":1,\"2611\":2,\"2612\":1,\"2613\":1,\"2615\":2,\"2618\":1,\"2625\":1,\"2626\":1,\"2627\":1,\"2628\":1,\"2629\":1,\"2635\":1,\"2649\":2,\"2650\":1,\"2651\":1,\"2652\":1,\"2653\":1,\"2654\":1,\"2655\":1,\"2661\":1,\"2662\":1,\"2670\":2,\"2671\":1,\"2672\":1,\"2673\":1,\"2674\":2,\"2676\":1,\"2678\":1,\"2680\":1,\"2681\":1,\"2683\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2694\":2,\"2695\":2,\"2696\":1,\"2697\":2,\"2698\":2,\"2699\":1,\"2701\":1,\"2703\":1,\"2704\":1,\"2705\":1,\"2711\":1,\"2712\":1,\"2714\":1,\"2716\":1,\"2717\":1,\"2724\":1,\"2725\":1,\"2726\":1,\"2727\":1,\"2729\":1,\"2730\":1,\"2731\":1,\"2733\":1,\"2734\":1,\"2736\":1,\"2743\":2,\"2745\":1,\"2752\":1,\"2753\":1,\"2754\":1,\"2755\":1,\"2756\":1,\"2762\":1,\"2779\":2,\"2780\":2,\"2782\":1,\"2783\":1,\"2784\":2,\"2786\":1,\"2788\":1,\"2790\":1,\"2792\":1,\"2793\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2798\":1,\"2801\":1,\"2803\":1,\"2809\":2,\"2810\":1,\"2811\":1,\"2812\":1,\"2813\":1,\"2814\":1,\"2815\":1,\"2821\":1,\"2822\":1,\"2830\":2,\"2831\":1,\"2832\":1,\"2834\":2,\"2837\":1,\"2844\":1,\"2845\":1,\"2846\":1,\"2847\":1,\"2848\":1,\"2854\":1}}],[\"dedicated\",{\"1\":{\"95\":1,\"165\":1}}],[\"deeper\",{\"1\":{\"89\":1}}],[\"demand\",{\"1\":{\"156\":3}}],[\"demilitarised\",{\"1\":{\"84\":1}}],[\"demographic\",{\"1\":{\"227\":1,\"234\":1}}],[\"demonstrate\",{\"1\":{\"112\":1,\"350\":1,\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"demonstrating\",{\"1\":{\"11\":1}}],[\"demo\",{\"1\":{\"22\":1,\"325\":1}}],[\"demodaten\",{\"0\":{\"22\":1}}],[\"dem\",{\"1\":{\"15\":1,\"16\":1}}],[\"deny\",{\"1\":{\"438\":2,\"464\":2,\"487\":2,\"513\":2,\"543\":2,\"573\":2,\"603\":2,\"649\":2,\"695\":2,\"741\":2,\"787\":2}}],[\"den\",{\"1\":{\"14\":2,\"16\":1,\"22\":1}}],[\"developer\",{\"1\":{\"392\":1,\"414\":1,\"625\":1,\"671\":1,\"717\":1,\"763\":1}}],[\"developers\",{\"1\":{\"91\":1,\"112\":1,\"113\":1,\"114\":1,\"411\":1,\"622\":1,\"668\":1,\"714\":1,\"760\":1}}],[\"developed\",{\"1\":{\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"78\":1,\"94\":1,\"105\":1,\"113\":1}}],[\"developments\",{\"1\":{\"113\":1}}],[\"development\",{\"0\":{\"78\":1,\"110\":1,\"412\":1,\"623\":1,\"669\":1,\"715\":1,\"761\":1},\"1\":{\"35\":1,\"70\":1,\"72\":1,\"73\":1,\"77\":3,\"78\":2,\"137\":2,\"153\":1,\"180\":1,\"181\":1,\"182\":1,\"315\":1,\"390\":1,\"397\":1,\"411\":1,\"412\":3,\"415\":2,\"622\":1,\"623\":3,\"626\":2,\"668\":1,\"669\":3,\"672\":2,\"714\":1,\"715\":3,\"718\":2,\"760\":1,\"761\":3,\"764\":2,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"895\":1,\"953\":1,\"954\":1,\"955\":1,\"962\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1124\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1263\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1439\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1616\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1793\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1970\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2147\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2298\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2365\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2517\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2584\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2736\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2803\":1}}],[\"develop\",{\"0\":{\"416\":1,\"446\":1,\"469\":1,\"495\":1,\"521\":1,\"551\":1,\"581\":1,\"627\":1,\"673\":1,\"719\":1,\"765\":1},\"1\":{\"22\":1,\"70\":1,\"77\":1,\"137\":2,\"138\":1,\"153\":4,\"404\":1,\"415\":2,\"615\":1,\"626\":2,\"661\":1,\"672\":2,\"707\":1,\"718\":2,\"753\":1,\"764\":2}}],[\"dev\",{\"0\":{\"808\":1,\"809\":1,\"810\":1,\"811\":1,\"812\":1,\"813\":1,\"814\":1,\"815\":1,\"816\":1,\"817\":1,\"818\":1,\"819\":2,\"820\":1,\"821\":1,\"822\":1,\"823\":1,\"824\":1,\"825\":1,\"826\":1,\"827\":1,\"828\":2,\"829\":1,\"830\":1,\"831\":1,\"832\":1,\"833\":1,\"834\":2,\"835\":1,\"836\":1,\"837\":1,\"838\":2,\"839\":1,\"840\":1,\"841\":2,\"842\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"850\":1,\"851\":1,\"852\":2,\"853\":1,\"854\":1,\"855\":1,\"856\":1,\"857\":1,\"858\":1,\"859\":1,\"860\":1,\"861\":1,\"862\":1,\"863\":1,\"864\":1,\"865\":1,\"866\":1,\"867\":2,\"868\":1,\"869\":1,\"870\":1,\"871\":1,\"872\":2,\"873\":1,\"874\":1,\"875\":1,\"876\":1,\"877\":1,\"878\":2,\"879\":1,\"880\":1,\"881\":1,\"882\":1,\"883\":1,\"884\":1,\"885\":1,\"886\":1,\"887\":1,\"888\":1,\"889\":1,\"890\":1,\"891\":1,\"892\":1,\"893\":1,\"894\":1,\"895\":1,\"896\":1,\"897\":1,\"898\":2,\"899\":1,\"900\":1,\"935\":1,\"936\":1,\"937\":2,\"938\":1,\"939\":1,\"940\":1,\"941\":1,\"942\":1,\"943\":1,\"944\":2,\"945\":1,\"946\":1,\"947\":1,\"948\":2,\"949\":1,\"950\":2,\"951\":1,\"952\":1,\"953\":1,\"954\":1,\"955\":1,\"956\":1,\"957\":1,\"958\":1,\"959\":1,\"960\":1,\"961\":1,\"962\":1,\"963\":1,\"964\":1,\"965\":2,\"966\":1,\"967\":1,\"968\":1,\"969\":1,\"970\":1,\"971\":1,\"972\":1,\"973\":1,\"974\":1,\"975\":1,\"976\":1,\"977\":1,\"978\":1,\"979\":2,\"980\":1,\"981\":1,\"982\":1,\"983\":1,\"984\":1,\"985\":1,\"986\":1,\"987\":1,\"988\":2,\"989\":1,\"990\":1,\"991\":1,\"1017\":1,\"1018\":1,\"1019\":2,\"1020\":1,\"1021\":1,\"1022\":1,\"1023\":2,\"1024\":1,\"1025\":1,\"1026\":2,\"1027\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1031\":1,\"1032\":1,\"1033\":2,\"1034\":1,\"1035\":1,\"1036\":1,\"1037\":1,\"1038\":1,\"1039\":1,\"1040\":1,\"1041\":1,\"1042\":1,\"1043\":1,\"1044\":1,\"1045\":1,\"1046\":1,\"1047\":1,\"1048\":1,\"1049\":2,\"1050\":1,\"1051\":1,\"1052\":1,\"1053\":1,\"1054\":2,\"1055\":1,\"1056\":1,\"1057\":1,\"1058\":1,\"1059\":1,\"1060\":2,\"1061\":1,\"1062\":1,\"1063\":1,\"1064\":1,\"1065\":1,\"1066\":1,\"1067\":1,\"1068\":1,\"1069\":1,\"1070\":1,\"1071\":1,\"1072\":2,\"1073\":1,\"1074\":1,\"1076\":1,\"1077\":1,\"1078\":1,\"1079\":1,\"1080\":1,\"1081\":1,\"1082\":1,\"1083\":1,\"1084\":1,\"1085\":1,\"1086\":1,\"1087\":2,\"1088\":1,\"1089\":1,\"1090\":1,\"1091\":1,\"1092\":1,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":2,\"1097\":1,\"1098\":1,\"1099\":1,\"1101\":1,\"1102\":1,\"1103\":2,\"1104\":1,\"1105\":1,\"1106\":1,\"1107\":1,\"1108\":1,\"1109\":1,\"1110\":2,\"1111\":1,\"1112\":1,\"1113\":1,\"1114\":2,\"1115\":1,\"1116\":2,\"1117\":1,\"1118\":1,\"1119\":1,\"1120\":1,\"1121\":1,\"1122\":1,\"1123\":1,\"1124\":1,\"1125\":1,\"1126\":2,\"1127\":1,\"1128\":1,\"1144\":1,\"1145\":1,\"1146\":1,\"1147\":1,\"1148\":1,\"1149\":1,\"1150\":1,\"1151\":1,\"1152\":1,\"1153\":1,\"1154\":1,\"1155\":2,\"1156\":1,\"1157\":1,\"1158\":1,\"1159\":1,\"1160\":1,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":2,\"1165\":1,\"1166\":1,\"1167\":1,\"1168\":1,\"1169\":1,\"1170\":2,\"1171\":1,\"1172\":1,\"1173\":1,\"1174\":2,\"1175\":1,\"1176\":1,\"1177\":2,\"1178\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1182\":1,\"1183\":1,\"1184\":2,\"1185\":1,\"1186\":1,\"1187\":1,\"1188\":1,\"1189\":1,\"1190\":1,\"1191\":1,\"1192\":1,\"1193\":1,\"1194\":1,\"1195\":1,\"1196\":1,\"1197\":1,\"1198\":1,\"1199\":1,\"1200\":2,\"1201\":1,\"1202\":1,\"1203\":1,\"1204\":1,\"1205\":2,\"1206\":1,\"1207\":1,\"1208\":1,\"1209\":1,\"1210\":1,\"1211\":2,\"1212\":1,\"1213\":1,\"1214\":1,\"1215\":1,\"1216\":1,\"1217\":1,\"1218\":1,\"1219\":1,\"1220\":1,\"1221\":1,\"1222\":1,\"1223\":2,\"1224\":1,\"1225\":1,\"1239\":1,\"1240\":1,\"1241\":2,\"1242\":1,\"1243\":1,\"1244\":1,\"1245\":1,\"1246\":1,\"1247\":1,\"1248\":2,\"1249\":1,\"1250\":1,\"1251\":1,\"1252\":2,\"1253\":1,\"1254\":2,\"1255\":1,\"1256\":1,\"1257\":1,\"1258\":1,\"1259\":1,\"1260\":1,\"1261\":1,\"1262\":1,\"1263\":1,\"1264\":1,\"1265\":2,\"1266\":1,\"1267\":1,\"1268\":1,\"1269\":1,\"1270\":1,\"1271\":1,\"1272\":1,\"1273\":1,\"1274\":1,\"1275\":1,\"1276\":1,\"1277\":1,\"1278\":1,\"1279\":2,\"1280\":1,\"1281\":1,\"1282\":1,\"1283\":1,\"1284\":1,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":2,\"1289\":1,\"1290\":1,\"1291\":1,\"1316\":1,\"1317\":1,\"1318\":1,\"1319\":1,\"1320\":1,\"1321\":1,\"1322\":1,\"1323\":1,\"1324\":1,\"1325\":1,\"1326\":1,\"1327\":2,\"1328\":1,\"1329\":1,\"1330\":1,\"1331\":1,\"1332\":1,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":2,\"1337\":1,\"1338\":1,\"1339\":1,\"1340\":1,\"1341\":1,\"1342\":2,\"1343\":1,\"1344\":1,\"1345\":1,\"1346\":2,\"1347\":1,\"1348\":1,\"1349\":2,\"1350\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1355\":1,\"1356\":1,\"1357\":2,\"1358\":1,\"1359\":1,\"1360\":1,\"1361\":1,\"1362\":1,\"1363\":1,\"1364\":1,\"1365\":1,\"1366\":1,\"1367\":1,\"1368\":1,\"1369\":1,\"1370\":1,\"1371\":1,\"1372\":2,\"1373\":1,\"1374\":1,\"1375\":1,\"1376\":1,\"1377\":2,\"1378\":1,\"1379\":1,\"1380\":1,\"1381\":1,\"1382\":1,\"1383\":2,\"1384\":1,\"1385\":1,\"1386\":1,\"1387\":1,\"1388\":1,\"1389\":1,\"1390\":1,\"1391\":1,\"1392\":1,\"1393\":1,\"1394\":1,\"1395\":1,\"1396\":1,\"1397\":1,\"1398\":1,\"1399\":2,\"1400\":1,\"1401\":1,\"1415\":1,\"1416\":1,\"1417\":2,\"1418\":1,\"1419\":1,\"1420\":1,\"1421\":1,\"1422\":1,\"1423\":1,\"1424\":2,\"1425\":1,\"1426\":1,\"1427\":1,\"1428\":2,\"1429\":1,\"1430\":2,\"1431\":1,\"1432\":1,\"1433\":1,\"1434\":1,\"1435\":1,\"1436\":1,\"1437\":1,\"1438\":1,\"1439\":1,\"1440\":1,\"1441\":2,\"1442\":1,\"1443\":1,\"1444\":1,\"1445\":1,\"1446\":1,\"1447\":1,\"1448\":1,\"1449\":1,\"1450\":1,\"1451\":1,\"1452\":1,\"1453\":1,\"1454\":1,\"1455\":2,\"1456\":1,\"1457\":1,\"1458\":1,\"1459\":1,\"1460\":1,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":2,\"1465\":1,\"1466\":1,\"1467\":1,\"1493\":1,\"1494\":1,\"1495\":1,\"1496\":1,\"1497\":1,\"1498\":1,\"1499\":1,\"1500\":1,\"1501\":1,\"1502\":1,\"1503\":1,\"1504\":2,\"1505\":1,\"1506\":1,\"1507\":1,\"1508\":1,\"1509\":1,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":2,\"1514\":1,\"1515\":1,\"1516\":1,\"1517\":1,\"1518\":1,\"1519\":2,\"1520\":1,\"1521\":1,\"1522\":1,\"1523\":2,\"1524\":1,\"1525\":1,\"1526\":2,\"1527\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1532\":1,\"1533\":1,\"1534\":2,\"1535\":1,\"1536\":1,\"1537\":1,\"1538\":1,\"1539\":1,\"1540\":1,\"1541\":1,\"1542\":1,\"1543\":1,\"1544\":1,\"1545\":1,\"1546\":1,\"1547\":1,\"1548\":1,\"1549\":2,\"1550\":1,\"1551\":1,\"1552\":1,\"1553\":1,\"1554\":2,\"1555\":1,\"1556\":1,\"1557\":1,\"1558\":1,\"1559\":1,\"1560\":2,\"1561\":1,\"1562\":1,\"1563\":1,\"1564\":1,\"1565\":1,\"1566\":1,\"1567\":1,\"1568\":1,\"1569\":1,\"1570\":1,\"1571\":1,\"1572\":1,\"1573\":1,\"1574\":1,\"1575\":1,\"1576\":2,\"1577\":1,\"1578\":1,\"1592\":1,\"1593\":1,\"1594\":2,\"1595\":1,\"1596\":1,\"1597\":1,\"1598\":1,\"1599\":1,\"1600\":1,\"1601\":2,\"1602\":1,\"1603\":1,\"1604\":1,\"1605\":2,\"1606\":1,\"1607\":2,\"1608\":1,\"1609\":1,\"1610\":1,\"1611\":1,\"1612\":1,\"1613\":1,\"1614\":1,\"1615\":1,\"1616\":1,\"1617\":1,\"1618\":2,\"1619\":1,\"1620\":1,\"1621\":1,\"1622\":1,\"1623\":1,\"1624\":1,\"1625\":1,\"1626\":1,\"1627\":1,\"1628\":1,\"1629\":1,\"1630\":1,\"1631\":1,\"1632\":2,\"1633\":1,\"1634\":1,\"1635\":1,\"1636\":1,\"1637\":1,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":2,\"1642\":1,\"1643\":1,\"1644\":1,\"1670\":1,\"1671\":1,\"1672\":1,\"1673\":1,\"1674\":1,\"1675\":1,\"1676\":1,\"1677\":1,\"1678\":1,\"1679\":1,\"1680\":1,\"1681\":2,\"1682\":1,\"1683\":1,\"1684\":1,\"1685\":1,\"1686\":1,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":2,\"1691\":1,\"1692\":1,\"1693\":1,\"1694\":1,\"1695\":1,\"1696\":2,\"1697\":1,\"1698\":1,\"1699\":1,\"1700\":2,\"1701\":1,\"1702\":1,\"1703\":2,\"1704\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1709\":1,\"1710\":1,\"1711\":2,\"1712\":1,\"1713\":1,\"1714\":1,\"1715\":1,\"1716\":1,\"1717\":1,\"1718\":1,\"1719\":1,\"1720\":1,\"1721\":1,\"1722\":1,\"1723\":1,\"1724\":1,\"1725\":1,\"1726\":2,\"1727\":1,\"1728\":1,\"1729\":1,\"1730\":1,\"1731\":2,\"1732\":1,\"1733\":1,\"1734\":1,\"1735\":1,\"1736\":1,\"1737\":2,\"1738\":1,\"1739\":1,\"1740\":1,\"1741\":1,\"1742\":1,\"1743\":1,\"1744\":1,\"1745\":1,\"1746\":1,\"1747\":1,\"1748\":1,\"1749\":1,\"1750\":1,\"1751\":1,\"1752\":1,\"1753\":2,\"1754\":1,\"1755\":1,\"1769\":1,\"1770\":1,\"1771\":2,\"1772\":1,\"1773\":1,\"1774\":1,\"1775\":1,\"1776\":1,\"1777\":1,\"1778\":2,\"1779\":1,\"1780\":1,\"1781\":1,\"1782\":2,\"1783\":1,\"1784\":2,\"1785\":1,\"1786\":1,\"1787\":1,\"1788\":1,\"1789\":1,\"1790\":1,\"1791\":1,\"1792\":1,\"1793\":1,\"1794\":1,\"1795\":2,\"1796\":1,\"1797\":1,\"1798\":1,\"1799\":1,\"1800\":1,\"1801\":1,\"1802\":1,\"1803\":1,\"1804\":1,\"1805\":1,\"1806\":1,\"1807\":1,\"1808\":1,\"1809\":2,\"1810\":1,\"1811\":1,\"1812\":1,\"1813\":1,\"1814\":1,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":2,\"1819\":1,\"1820\":1,\"1821\":1,\"1847\":1,\"1848\":1,\"1849\":1,\"1850\":1,\"1851\":1,\"1852\":1,\"1853\":1,\"1854\":1,\"1855\":1,\"1856\":1,\"1857\":1,\"1858\":2,\"1859\":1,\"1860\":1,\"1861\":1,\"1862\":1,\"1863\":1,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":2,\"1868\":1,\"1869\":1,\"1870\":1,\"1871\":1,\"1872\":1,\"1873\":2,\"1874\":1,\"1875\":1,\"1876\":1,\"1877\":2,\"1878\":1,\"1879\":1,\"1880\":2,\"1881\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1886\":1,\"1887\":1,\"1888\":2,\"1889\":1,\"1890\":1,\"1891\":1,\"1892\":1,\"1893\":1,\"1894\":1,\"1895\":1,\"1896\":1,\"1897\":1,\"1898\":1,\"1899\":1,\"1900\":1,\"1901\":1,\"1902\":1,\"1903\":2,\"1904\":1,\"1905\":1,\"1906\":1,\"1907\":1,\"1908\":2,\"1909\":1,\"1910\":1,\"1911\":1,\"1912\":1,\"1913\":1,\"1914\":2,\"1915\":1,\"1916\":1,\"1917\":1,\"1918\":1,\"1919\":1,\"1920\":1,\"1921\":1,\"1922\":1,\"1923\":1,\"1924\":1,\"1925\":1,\"1926\":1,\"1927\":1,\"1928\":1,\"1929\":1,\"1930\":2,\"1931\":1,\"1932\":1,\"1946\":1,\"1947\":1,\"1948\":2,\"1949\":1,\"1950\":1,\"1951\":1,\"1952\":1,\"1953\":1,\"1954\":1,\"1955\":2,\"1956\":1,\"1957\":1,\"1958\":1,\"1959\":2,\"1960\":1,\"1961\":2,\"1962\":1,\"1963\":1,\"1964\":1,\"1965\":1,\"1966\":1,\"1967\":1,\"1968\":1,\"1969\":1,\"1970\":1,\"1971\":1,\"1972\":2,\"1973\":1,\"1974\":1,\"1975\":1,\"1976\":1,\"1977\":1,\"1978\":1,\"1979\":1,\"1980\":1,\"1981\":1,\"1982\":1,\"1983\":1,\"1984\":1,\"1985\":1,\"1986\":2,\"1987\":1,\"1988\":1,\"1989\":1,\"1990\":1,\"1991\":1,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":2,\"1996\":1,\"1997\":1,\"1998\":1,\"2024\":1,\"2025\":1,\"2026\":1,\"2027\":1,\"2028\":1,\"2029\":1,\"2030\":1,\"2031\":1,\"2032\":1,\"2033\":1,\"2034\":1,\"2035\":2,\"2036\":1,\"2037\":1,\"2038\":1,\"2039\":1,\"2040\":1,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":2,\"2045\":1,\"2046\":1,\"2047\":1,\"2048\":1,\"2049\":1,\"2050\":2,\"2051\":1,\"2052\":1,\"2053\":1,\"2054\":2,\"2055\":1,\"2056\":1,\"2057\":2,\"2058\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2063\":1,\"2064\":1,\"2065\":2,\"2066\":1,\"2067\":1,\"2068\":1,\"2069\":1,\"2070\":1,\"2071\":1,\"2072\":1,\"2073\":1,\"2074\":1,\"2075\":1,\"2076\":1,\"2077\":1,\"2078\":1,\"2079\":1,\"2080\":2,\"2081\":1,\"2082\":1,\"2083\":1,\"2084\":1,\"2085\":2,\"2086\":1,\"2087\":1,\"2088\":1,\"2089\":1,\"2090\":1,\"2091\":2,\"2092\":1,\"2093\":1,\"2094\":1,\"2095\":1,\"2096\":1,\"2097\":1,\"2098\":1,\"2099\":1,\"2100\":1,\"2101\":1,\"2102\":1,\"2103\":1,\"2104\":1,\"2105\":1,\"2106\":1,\"2107\":2,\"2108\":1,\"2109\":1,\"2123\":1,\"2124\":1,\"2125\":2,\"2126\":1,\"2127\":1,\"2128\":1,\"2129\":1,\"2130\":1,\"2131\":1,\"2132\":2,\"2133\":1,\"2134\":1,\"2135\":1,\"2136\":2,\"2137\":1,\"2138\":2,\"2139\":1,\"2140\":1,\"2141\":1,\"2142\":1,\"2143\":1,\"2144\":1,\"2145\":1,\"2146\":1,\"2147\":1,\"2148\":1,\"2149\":2,\"2150\":1,\"2151\":1,\"2152\":1,\"2153\":1,\"2154\":1,\"2155\":1,\"2156\":1,\"2157\":1,\"2158\":1,\"2159\":1,\"2160\":1,\"2161\":1,\"2162\":1,\"2163\":2,\"2164\":1,\"2165\":1,\"2166\":1,\"2167\":1,\"2168\":1,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":2,\"2173\":1,\"2174\":1,\"2175\":1,\"2211\":1,\"2212\":1,\"2213\":1,\"2214\":1,\"2215\":1,\"2216\":1,\"2217\":1,\"2218\":1,\"2219\":1,\"2220\":1,\"2221\":1,\"2222\":2,\"2223\":1,\"2224\":1,\"2225\":1,\"2226\":1,\"2227\":1,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":2,\"2232\":1,\"2233\":1,\"2234\":1,\"2235\":1,\"2236\":1,\"2237\":2,\"2238\":1,\"2239\":1,\"2240\":1,\"2241\":2,\"2242\":1,\"2243\":1,\"2244\":2,\"2245\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2253\":1,\"2254\":1,\"2255\":2,\"2256\":1,\"2257\":1,\"2258\":1,\"2259\":1,\"2260\":1,\"2261\":1,\"2262\":1,\"2263\":1,\"2264\":1,\"2265\":1,\"2266\":1,\"2267\":1,\"2268\":1,\"2269\":1,\"2270\":2,\"2271\":1,\"2272\":1,\"2273\":1,\"2274\":1,\"2275\":2,\"2276\":1,\"2277\":1,\"2278\":1,\"2279\":1,\"2280\":1,\"2281\":2,\"2282\":1,\"2283\":1,\"2284\":1,\"2285\":1,\"2286\":1,\"2287\":1,\"2288\":1,\"2289\":1,\"2290\":1,\"2291\":1,\"2292\":1,\"2293\":1,\"2294\":1,\"2295\":1,\"2296\":1,\"2297\":1,\"2298\":1,\"2299\":1,\"2300\":1,\"2301\":2,\"2302\":1,\"2303\":1,\"2338\":1,\"2339\":1,\"2340\":2,\"2341\":1,\"2342\":1,\"2343\":1,\"2344\":1,\"2345\":1,\"2346\":1,\"2347\":2,\"2348\":1,\"2349\":1,\"2350\":1,\"2351\":2,\"2352\":1,\"2353\":2,\"2354\":1,\"2355\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2359\":1,\"2360\":1,\"2361\":1,\"2362\":1,\"2363\":1,\"2364\":1,\"2365\":1,\"2366\":1,\"2367\":1,\"2368\":2,\"2369\":1,\"2370\":1,\"2371\":1,\"2372\":1,\"2373\":1,\"2374\":1,\"2375\":1,\"2376\":1,\"2377\":1,\"2378\":1,\"2379\":1,\"2380\":1,\"2381\":1,\"2382\":2,\"2383\":1,\"2384\":1,\"2385\":1,\"2386\":1,\"2387\":1,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":2,\"2392\":1,\"2393\":1,\"2394\":1,\"2430\":1,\"2431\":1,\"2432\":1,\"2433\":1,\"2434\":1,\"2435\":1,\"2436\":1,\"2437\":1,\"2438\":1,\"2439\":1,\"2440\":1,\"2441\":2,\"2442\":1,\"2443\":1,\"2444\":1,\"2445\":1,\"2446\":1,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":2,\"2451\":1,\"2452\":1,\"2453\":1,\"2454\":1,\"2455\":1,\"2456\":2,\"2457\":1,\"2458\":1,\"2459\":1,\"2460\":2,\"2461\":1,\"2462\":1,\"2463\":2,\"2464\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2472\":1,\"2473\":1,\"2474\":2,\"2475\":1,\"2476\":1,\"2477\":1,\"2478\":1,\"2479\":1,\"2480\":1,\"2481\":1,\"2482\":1,\"2483\":1,\"2484\":1,\"2485\":1,\"2486\":1,\"2487\":1,\"2488\":1,\"2489\":2,\"2490\":1,\"2491\":1,\"2492\":1,\"2493\":1,\"2494\":2,\"2495\":1,\"2496\":1,\"2497\":1,\"2498\":1,\"2499\":1,\"2500\":2,\"2501\":1,\"2502\":1,\"2503\":1,\"2504\":1,\"2505\":1,\"2506\":1,\"2507\":1,\"2508\":1,\"2509\":1,\"2510\":1,\"2511\":1,\"2512\":1,\"2513\":1,\"2514\":1,\"2515\":1,\"2516\":1,\"2517\":1,\"2518\":1,\"2519\":1,\"2520\":2,\"2521\":1,\"2522\":1,\"2557\":1,\"2558\":1,\"2559\":2,\"2560\":1,\"2561\":1,\"2562\":1,\"2563\":1,\"2564\":1,\"2565\":1,\"2566\":2,\"2567\":1,\"2568\":1,\"2569\":1,\"2570\":2,\"2571\":1,\"2572\":2,\"2573\":1,\"2574\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2578\":1,\"2579\":1,\"2580\":1,\"2581\":1,\"2582\":1,\"2583\":1,\"2584\":1,\"2585\":1,\"2586\":1,\"2587\":2,\"2588\":1,\"2589\":1,\"2590\":1,\"2591\":1,\"2592\":1,\"2593\":1,\"2594\":1,\"2595\":1,\"2596\":1,\"2597\":1,\"2598\":1,\"2599\":1,\"2600\":1,\"2601\":2,\"2602\":1,\"2603\":1,\"2604\":1,\"2605\":1,\"2606\":1,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":2,\"2611\":1,\"2612\":1,\"2613\":1,\"2649\":1,\"2650\":1,\"2651\":1,\"2652\":1,\"2653\":1,\"2654\":1,\"2655\":1,\"2656\":1,\"2657\":1,\"2658\":1,\"2659\":1,\"2660\":2,\"2661\":1,\"2662\":1,\"2663\":1,\"2664\":1,\"2665\":1,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":2,\"2670\":1,\"2671\":1,\"2672\":1,\"2673\":1,\"2674\":1,\"2675\":2,\"2676\":1,\"2677\":1,\"2678\":1,\"2679\":2,\"2680\":1,\"2681\":1,\"2682\":2,\"2683\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2691\":1,\"2692\":1,\"2693\":2,\"2694\":1,\"2695\":1,\"2696\":1,\"2697\":1,\"2698\":1,\"2699\":1,\"2700\":1,\"2701\":1,\"2702\":1,\"2703\":1,\"2704\":1,\"2705\":1,\"2706\":1,\"2707\":1,\"2708\":2,\"2709\":1,\"2710\":1,\"2711\":1,\"2712\":1,\"2713\":2,\"2714\":1,\"2715\":1,\"2716\":1,\"2717\":1,\"2718\":1,\"2719\":2,\"2720\":1,\"2721\":1,\"2722\":1,\"2723\":1,\"2724\":1,\"2725\":1,\"2726\":1,\"2727\":1,\"2728\":1,\"2729\":1,\"2730\":1,\"2731\":1,\"2732\":1,\"2733\":1,\"2734\":1,\"2735\":1,\"2736\":1,\"2737\":1,\"2738\":1,\"2739\":2,\"2740\":1,\"2741\":1,\"2776\":1,\"2777\":1,\"2778\":2,\"2779\":1,\"2780\":1,\"2781\":1,\"2782\":1,\"2783\":1,\"2784\":1,\"2785\":2,\"2786\":1,\"2787\":1,\"2788\":1,\"2789\":2,\"2790\":1,\"2791\":2,\"2792\":1,\"2793\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2797\":1,\"2798\":1,\"2799\":1,\"2800\":1,\"2801\":1,\"2802\":1,\"2803\":1,\"2804\":1,\"2805\":1,\"2806\":2,\"2807\":1,\"2808\":1,\"2809\":1,\"2810\":1,\"2811\":1,\"2812\":1,\"2813\":1,\"2814\":1,\"2815\":1,\"2816\":1,\"2817\":1,\"2818\":1,\"2819\":1,\"2820\":2,\"2821\":1,\"2822\":1,\"2823\":1,\"2824\":1,\"2825\":1,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":2,\"2830\":1,\"2831\":1,\"2832\":1},\"1\":{\"14\":1,\"41\":1,\"131\":2,\"279\":1,\"290\":1,\"433\":1,\"438\":6,\"439\":3,\"442\":1,\"459\":1,\"464\":7,\"465\":4,\"482\":1,\"487\":6,\"488\":4,\"508\":1,\"513\":6,\"514\":4,\"519\":3,\"520\":1,\"538\":1,\"543\":6,\"544\":4,\"547\":1,\"568\":1,\"573\":6,\"574\":3,\"577\":1,\"598\":1,\"603\":6,\"604\":3,\"607\":1,\"644\":1,\"649\":6,\"650\":3,\"653\":1,\"690\":1,\"695\":6,\"696\":3,\"699\":1,\"736\":1,\"741\":6,\"742\":3,\"745\":1,\"782\":1,\"787\":6,\"788\":3,\"791\":1,\"798\":3,\"806\":3,\"808\":1,\"809\":1,\"810\":1,\"811\":4,\"812\":4,\"813\":1,\"814\":2,\"815\":2,\"816\":2,\"817\":1,\"818\":3,\"819\":2,\"820\":1,\"821\":1,\"822\":1,\"823\":1,\"824\":1,\"825\":1,\"826\":1,\"827\":1,\"828\":1,\"829\":1,\"830\":1,\"831\":1,\"832\":1,\"833\":1,\"834\":2,\"835\":1,\"836\":1,\"837\":1,\"838\":2,\"839\":2,\"840\":1,\"841\":2,\"842\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"850\":1,\"851\":3,\"852\":2,\"853\":1,\"854\":1,\"855\":1,\"856\":1,\"857\":1,\"858\":1,\"859\":1,\"860\":1,\"861\":1,\"862\":1,\"863\":1,\"864\":1,\"865\":2,\"866\":4,\"867\":2,\"868\":1,\"869\":1,\"870\":1,\"871\":1,\"872\":3,\"873\":1,\"874\":1,\"875\":1,\"876\":1,\"877\":1,\"878\":2,\"879\":1,\"880\":1,\"881\":2,\"882\":2,\"883\":1,\"884\":1,\"885\":1,\"886\":1,\"887\":1,\"888\":1,\"889\":1,\"890\":1,\"891\":1,\"892\":1,\"893\":1,\"894\":1,\"895\":1,\"896\":3,\"897\":1,\"898\":2,\"899\":2,\"900\":1,\"903\":7,\"904\":2,\"905\":7,\"925\":4,\"932\":1,\"933\":5,\"935\":1,\"936\":3,\"937\":2,\"938\":1,\"939\":1,\"940\":1,\"941\":1,\"942\":1,\"943\":1,\"944\":2,\"945\":1,\"946\":1,\"947\":1,\"948\":2,\"949\":1,\"950\":2,\"951\":2,\"952\":1,\"953\":1,\"954\":1,\"955\":1,\"956\":1,\"957\":1,\"958\":1,\"959\":1,\"960\":1,\"961\":1,\"962\":1,\"963\":3,\"964\":1,\"965\":2,\"966\":2,\"967\":1,\"968\":1,\"969\":1,\"970\":1,\"971\":4,\"972\":4,\"973\":1,\"974\":2,\"975\":2,\"976\":2,\"977\":1,\"978\":3,\"979\":2,\"980\":1,\"981\":1,\"982\":1,\"983\":1,\"984\":1,\"985\":1,\"986\":1,\"987\":1,\"988\":1,\"989\":1,\"990\":1,\"991\":1,\"994\":7,\"995\":2,\"996\":2,\"997\":7,\"1017\":1,\"1018\":1,\"1019\":2,\"1020\":1,\"1021\":1,\"1022\":1,\"1023\":2,\"1024\":2,\"1025\":1,\"1026\":2,\"1027\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1031\":1,\"1032\":3,\"1033\":2,\"1034\":1,\"1035\":1,\"1036\":1,\"1037\":1,\"1038\":1,\"1039\":1,\"1040\":1,\"1041\":1,\"1042\":1,\"1043\":1,\"1044\":1,\"1045\":1,\"1046\":1,\"1047\":2,\"1048\":4,\"1049\":2,\"1050\":1,\"1051\":1,\"1052\":1,\"1053\":1,\"1054\":3,\"1055\":1,\"1056\":1,\"1057\":1,\"1058\":1,\"1059\":1,\"1060\":2,\"1061\":1,\"1062\":1,\"1063\":2,\"1064\":2,\"1065\":1,\"1066\":1,\"1067\":1,\"1068\":1,\"1069\":1,\"1070\":1,\"1071\":1,\"1072\":2,\"1073\":2,\"1074\":1,\"1076\":1,\"1077\":1,\"1078\":1,\"1079\":4,\"1080\":4,\"1081\":1,\"1082\":2,\"1083\":2,\"1084\":2,\"1085\":1,\"1086\":3,\"1087\":2,\"1088\":1,\"1089\":1,\"1090\":1,\"1091\":1,\"1092\":1,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":1,\"1097\":1,\"1098\":1,\"1099\":1,\"1101\":1,\"1102\":3,\"1103\":2,\"1104\":1,\"1105\":1,\"1106\":1,\"1107\":1,\"1108\":1,\"1109\":1,\"1110\":2,\"1111\":1,\"1112\":1,\"1113\":1,\"1114\":2,\"1115\":1,\"1116\":2,\"1117\":2,\"1118\":1,\"1119\":1,\"1120\":1,\"1121\":1,\"1122\":1,\"1123\":1,\"1124\":1,\"1125\":1,\"1126\":2,\"1127\":2,\"1128\":1,\"1144\":1,\"1145\":1,\"1146\":1,\"1147\":4,\"1148\":4,\"1149\":1,\"1150\":2,\"1151\":2,\"1152\":2,\"1153\":1,\"1154\":3,\"1155\":2,\"1156\":1,\"1157\":1,\"1158\":1,\"1159\":1,\"1160\":1,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":1,\"1165\":1,\"1166\":1,\"1167\":1,\"1168\":1,\"1169\":1,\"1170\":2,\"1171\":1,\"1172\":1,\"1173\":1,\"1174\":2,\"1175\":2,\"1176\":1,\"1177\":2,\"1178\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1182\":1,\"1183\":3,\"1184\":2,\"1185\":1,\"1186\":1,\"1187\":1,\"1188\":1,\"1189\":1,\"1190\":1,\"1191\":1,\"1192\":1,\"1193\":1,\"1194\":1,\"1195\":1,\"1196\":1,\"1197\":1,\"1198\":2,\"1199\":4,\"1200\":2,\"1201\":1,\"1202\":1,\"1203\":1,\"1204\":1,\"1205\":3,\"1206\":1,\"1207\":1,\"1208\":1,\"1209\":1,\"1210\":1,\"1211\":2,\"1212\":1,\"1213\":1,\"1214\":2,\"1215\":2,\"1216\":1,\"1217\":1,\"1218\":1,\"1219\":1,\"1220\":1,\"1221\":1,\"1222\":1,\"1223\":2,\"1224\":2,\"1225\":1,\"1229\":4,\"1236\":1,\"1237\":5,\"1239\":1,\"1240\":3,\"1241\":2,\"1242\":1,\"1243\":1,\"1244\":1,\"1245\":1,\"1246\":1,\"1247\":1,\"1248\":2,\"1249\":1,\"1250\":1,\"1251\":1,\"1252\":2,\"1253\":1,\"1254\":2,\"1255\":2,\"1256\":1,\"1257\":1,\"1258\":1,\"1259\":1,\"1260\":1,\"1261\":1,\"1262\":1,\"1263\":1,\"1264\":1,\"1265\":2,\"1266\":2,\"1267\":1,\"1268\":1,\"1269\":1,\"1270\":1,\"1271\":4,\"1272\":4,\"1273\":1,\"1274\":2,\"1275\":2,\"1276\":2,\"1277\":1,\"1278\":3,\"1279\":2,\"1280\":1,\"1281\":1,\"1282\":1,\"1283\":1,\"1284\":1,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":1,\"1289\":1,\"1290\":1,\"1291\":1,\"1294\":7,\"1295\":2,\"1296\":2,\"1297\":7,\"1316\":1,\"1317\":1,\"1318\":1,\"1319\":4,\"1320\":4,\"1321\":1,\"1322\":2,\"1323\":2,\"1324\":2,\"1325\":1,\"1326\":3,\"1327\":2,\"1328\":1,\"1329\":1,\"1330\":1,\"1331\":1,\"1332\":1,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":1,\"1337\":1,\"1338\":1,\"1339\":1,\"1340\":1,\"1341\":1,\"1342\":2,\"1343\":1,\"1344\":1,\"1345\":1,\"1346\":2,\"1347\":2,\"1348\":1,\"1349\":2,\"1350\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1355\":1,\"1356\":3,\"1357\":2,\"1358\":1,\"1359\":1,\"1360\":1,\"1361\":1,\"1362\":1,\"1363\":1,\"1364\":1,\"1365\":1,\"1366\":1,\"1367\":1,\"1368\":1,\"1369\":1,\"1370\":2,\"1371\":4,\"1372\":2,\"1373\":1,\"1374\":1,\"1375\":1,\"1376\":1,\"1377\":3,\"1378\":1,\"1379\":1,\"1380\":1,\"1381\":1,\"1382\":1,\"1383\":2,\"1384\":1,\"1385\":1,\"1386\":2,\"1387\":2,\"1388\":1,\"1389\":1,\"1390\":1,\"1391\":1,\"1392\":1,\"1393\":1,\"1394\":1,\"1395\":1,\"1396\":1,\"1397\":1,\"1398\":1,\"1399\":2,\"1400\":2,\"1401\":1,\"1405\":4,\"1412\":1,\"1413\":5,\"1415\":1,\"1416\":3,\"1417\":2,\"1418\":1,\"1419\":1,\"1420\":1,\"1421\":1,\"1422\":1,\"1423\":1,\"1424\":2,\"1425\":1,\"1426\":1,\"1427\":1,\"1428\":2,\"1429\":1,\"1430\":2,\"1431\":2,\"1432\":1,\"1433\":1,\"1434\":1,\"1435\":1,\"1436\":1,\"1437\":1,\"1438\":1,\"1439\":1,\"1440\":1,\"1441\":2,\"1442\":2,\"1443\":1,\"1444\":1,\"1445\":1,\"1446\":1,\"1447\":4,\"1448\":4,\"1449\":1,\"1450\":2,\"1451\":2,\"1452\":2,\"1453\":1,\"1454\":3,\"1455\":2,\"1456\":1,\"1457\":1,\"1458\":1,\"1459\":1,\"1460\":1,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":1,\"1465\":1,\"1466\":1,\"1467\":1,\"1470\":7,\"1471\":2,\"1472\":2,\"1473\":7,\"1493\":1,\"1494\":1,\"1495\":1,\"1496\":4,\"1497\":4,\"1498\":1,\"1499\":2,\"1500\":2,\"1501\":2,\"1502\":1,\"1503\":3,\"1504\":2,\"1505\":1,\"1506\":1,\"1507\":1,\"1508\":1,\"1509\":1,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":1,\"1514\":1,\"1515\":1,\"1516\":1,\"1517\":1,\"1518\":1,\"1519\":2,\"1520\":1,\"1521\":1,\"1522\":1,\"1523\":2,\"1524\":2,\"1525\":1,\"1526\":2,\"1527\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1532\":1,\"1533\":3,\"1534\":2,\"1535\":1,\"1536\":1,\"1537\":1,\"1538\":1,\"1539\":1,\"1540\":1,\"1541\":1,\"1542\":1,\"1543\":1,\"1544\":1,\"1545\":1,\"1546\":1,\"1547\":2,\"1548\":4,\"1549\":2,\"1550\":1,\"1551\":1,\"1552\":1,\"1553\":1,\"1554\":3,\"1555\":1,\"1556\":1,\"1557\":1,\"1558\":1,\"1559\":1,\"1560\":2,\"1561\":1,\"1562\":1,\"1563\":2,\"1564\":2,\"1565\":1,\"1566\":1,\"1567\":1,\"1568\":1,\"1569\":1,\"1570\":1,\"1571\":1,\"1572\":1,\"1573\":1,\"1574\":1,\"1575\":1,\"1576\":2,\"1577\":2,\"1578\":1,\"1582\":4,\"1589\":1,\"1590\":5,\"1592\":1,\"1593\":3,\"1594\":2,\"1595\":1,\"1596\":1,\"1597\":1,\"1598\":1,\"1599\":1,\"1600\":1,\"1601\":2,\"1602\":1,\"1603\":1,\"1604\":1,\"1605\":2,\"1606\":1,\"1607\":2,\"1608\":2,\"1609\":1,\"1610\":1,\"1611\":1,\"1612\":1,\"1613\":1,\"1614\":1,\"1615\":1,\"1616\":1,\"1617\":1,\"1618\":2,\"1619\":2,\"1620\":1,\"1621\":1,\"1622\":1,\"1623\":1,\"1624\":4,\"1625\":4,\"1626\":1,\"1627\":2,\"1628\":2,\"1629\":2,\"1630\":1,\"1631\":3,\"1632\":2,\"1633\":1,\"1634\":1,\"1635\":1,\"1636\":1,\"1637\":1,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":1,\"1642\":1,\"1643\":1,\"1644\":1,\"1647\":7,\"1648\":2,\"1649\":2,\"1650\":7,\"1670\":1,\"1671\":1,\"1672\":1,\"1673\":4,\"1674\":4,\"1675\":1,\"1676\":2,\"1677\":2,\"1678\":2,\"1679\":1,\"1680\":3,\"1681\":2,\"1682\":1,\"1683\":1,\"1684\":1,\"1685\":1,\"1686\":1,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":1,\"1691\":1,\"1692\":1,\"1693\":1,\"1694\":1,\"1695\":1,\"1696\":2,\"1697\":1,\"1698\":1,\"1699\":1,\"1700\":2,\"1701\":2,\"1702\":1,\"1703\":2,\"1704\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1709\":1,\"1710\":3,\"1711\":2,\"1712\":1,\"1713\":1,\"1714\":1,\"1715\":1,\"1716\":1,\"1717\":1,\"1718\":1,\"1719\":1,\"1720\":1,\"1721\":1,\"1722\":1,\"1723\":1,\"1724\":2,\"1725\":4,\"1726\":2,\"1727\":1,\"1728\":1,\"1729\":1,\"1730\":1,\"1731\":3,\"1732\":1,\"1733\":1,\"1734\":1,\"1735\":1,\"1736\":1,\"1737\":2,\"1738\":1,\"1739\":1,\"1740\":2,\"1741\":2,\"1742\":1,\"1743\":1,\"1744\":1,\"1745\":1,\"1746\":1,\"1747\":1,\"1748\":1,\"1749\":1,\"1750\":1,\"1751\":1,\"1752\":1,\"1753\":2,\"1754\":2,\"1755\":1,\"1759\":4,\"1766\":1,\"1767\":5,\"1769\":1,\"1770\":3,\"1771\":2,\"1772\":1,\"1773\":1,\"1774\":1,\"1775\":1,\"1776\":1,\"1777\":1,\"1778\":2,\"1779\":1,\"1780\":1,\"1781\":1,\"1782\":2,\"1783\":1,\"1784\":2,\"1785\":2,\"1786\":1,\"1787\":1,\"1788\":1,\"1789\":1,\"1790\":1,\"1791\":1,\"1792\":1,\"1793\":1,\"1794\":1,\"1795\":2,\"1796\":2,\"1797\":1,\"1798\":1,\"1799\":1,\"1800\":1,\"1801\":4,\"1802\":4,\"1803\":1,\"1804\":2,\"1805\":2,\"1806\":2,\"1807\":1,\"1808\":3,\"1809\":2,\"1810\":1,\"1811\":1,\"1812\":1,\"1813\":1,\"1814\":1,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":1,\"1819\":1,\"1820\":1,\"1821\":1,\"1824\":7,\"1825\":2,\"1826\":2,\"1827\":7,\"1847\":1,\"1848\":1,\"1849\":1,\"1850\":4,\"1851\":4,\"1852\":1,\"1853\":2,\"1854\":2,\"1855\":2,\"1856\":1,\"1857\":3,\"1858\":2,\"1859\":1,\"1860\":1,\"1861\":1,\"1862\":1,\"1863\":1,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":1,\"1868\":1,\"1869\":1,\"1870\":1,\"1871\":1,\"1872\":1,\"1873\":2,\"1874\":1,\"1875\":1,\"1876\":1,\"1877\":2,\"1878\":2,\"1879\":1,\"1880\":2,\"1881\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1886\":1,\"1887\":3,\"1888\":2,\"1889\":1,\"1890\":1,\"1891\":1,\"1892\":1,\"1893\":1,\"1894\":1,\"1895\":1,\"1896\":1,\"1897\":1,\"1898\":1,\"1899\":1,\"1900\":1,\"1901\":2,\"1902\":4,\"1903\":2,\"1904\":1,\"1905\":1,\"1906\":1,\"1907\":1,\"1908\":3,\"1909\":1,\"1910\":1,\"1911\":1,\"1912\":1,\"1913\":1,\"1914\":2,\"1915\":1,\"1916\":1,\"1917\":2,\"1918\":2,\"1919\":1,\"1920\":1,\"1921\":1,\"1922\":1,\"1923\":1,\"1924\":1,\"1925\":1,\"1926\":1,\"1927\":1,\"1928\":1,\"1929\":1,\"1930\":2,\"1931\":2,\"1932\":1,\"1936\":4,\"1943\":1,\"1944\":5,\"1946\":1,\"1947\":3,\"1948\":2,\"1949\":1,\"1950\":1,\"1951\":1,\"1952\":1,\"1953\":1,\"1954\":1,\"1955\":2,\"1956\":1,\"1957\":1,\"1958\":1,\"1959\":2,\"1960\":1,\"1961\":2,\"1962\":2,\"1963\":1,\"1964\":1,\"1965\":1,\"1966\":1,\"1967\":1,\"1968\":1,\"1969\":1,\"1970\":1,\"1971\":1,\"1972\":2,\"1973\":2,\"1974\":1,\"1975\":1,\"1976\":1,\"1977\":1,\"1978\":4,\"1979\":4,\"1980\":1,\"1981\":2,\"1982\":2,\"1983\":2,\"1984\":1,\"1985\":3,\"1986\":2,\"1987\":1,\"1988\":1,\"1989\":1,\"1990\":1,\"1991\":1,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":1,\"1996\":1,\"1997\":1,\"1998\":1,\"2001\":7,\"2002\":2,\"2003\":2,\"2004\":7,\"2024\":1,\"2025\":1,\"2026\":1,\"2027\":4,\"2028\":4,\"2029\":1,\"2030\":2,\"2031\":2,\"2032\":2,\"2033\":1,\"2034\":3,\"2035\":2,\"2036\":1,\"2037\":1,\"2038\":1,\"2039\":1,\"2040\":1,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":1,\"2045\":1,\"2046\":1,\"2047\":1,\"2048\":1,\"2049\":1,\"2050\":2,\"2051\":1,\"2052\":1,\"2053\":1,\"2054\":2,\"2055\":2,\"2056\":1,\"2057\":2,\"2058\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2063\":1,\"2064\":3,\"2065\":2,\"2066\":1,\"2067\":1,\"2068\":1,\"2069\":1,\"2070\":1,\"2071\":1,\"2072\":1,\"2073\":1,\"2074\":1,\"2075\":1,\"2076\":1,\"2077\":1,\"2078\":2,\"2079\":4,\"2080\":2,\"2081\":1,\"2082\":1,\"2083\":1,\"2084\":1,\"2085\":3,\"2086\":1,\"2087\":1,\"2088\":1,\"2089\":1,\"2090\":1,\"2091\":2,\"2092\":1,\"2093\":1,\"2094\":2,\"2095\":2,\"2096\":1,\"2097\":1,\"2098\":1,\"2099\":1,\"2100\":1,\"2101\":1,\"2102\":1,\"2103\":1,\"2104\":1,\"2105\":1,\"2106\":1,\"2107\":2,\"2108\":2,\"2109\":1,\"2113\":4,\"2120\":1,\"2121\":5,\"2123\":1,\"2124\":3,\"2125\":2,\"2126\":1,\"2127\":1,\"2128\":1,\"2129\":1,\"2130\":1,\"2131\":1,\"2132\":2,\"2133\":1,\"2134\":1,\"2135\":1,\"2136\":2,\"2137\":1,\"2138\":2,\"2139\":2,\"2140\":1,\"2141\":1,\"2142\":1,\"2143\":1,\"2144\":1,\"2145\":1,\"2146\":1,\"2147\":1,\"2148\":1,\"2149\":2,\"2150\":2,\"2151\":1,\"2152\":1,\"2153\":1,\"2154\":1,\"2155\":4,\"2156\":4,\"2157\":1,\"2158\":2,\"2159\":2,\"2160\":2,\"2161\":1,\"2162\":3,\"2163\":2,\"2164\":1,\"2165\":1,\"2166\":1,\"2167\":1,\"2168\":1,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":1,\"2173\":1,\"2174\":1,\"2175\":1,\"2178\":7,\"2179\":2,\"2180\":2,\"2181\":7,\"2201\":3,\"2209\":3,\"2211\":1,\"2212\":1,\"2213\":1,\"2214\":4,\"2215\":4,\"2216\":1,\"2217\":2,\"2218\":2,\"2219\":2,\"2220\":1,\"2221\":3,\"2222\":2,\"2223\":1,\"2224\":1,\"2225\":1,\"2226\":1,\"2227\":1,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":1,\"2232\":1,\"2233\":1,\"2234\":1,\"2235\":1,\"2236\":1,\"2237\":2,\"2238\":1,\"2239\":1,\"2240\":1,\"2241\":2,\"2242\":2,\"2243\":1,\"2244\":2,\"2245\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2253\":1,\"2254\":3,\"2255\":2,\"2256\":1,\"2257\":1,\"2258\":1,\"2259\":1,\"2260\":1,\"2261\":1,\"2262\":1,\"2263\":1,\"2264\":1,\"2265\":1,\"2266\":1,\"2267\":1,\"2268\":2,\"2269\":4,\"2270\":2,\"2271\":1,\"2272\":1,\"2273\":1,\"2274\":1,\"2275\":3,\"2276\":1,\"2277\":1,\"2278\":1,\"2279\":1,\"2280\":1,\"2281\":2,\"2282\":1,\"2283\":1,\"2284\":2,\"2285\":2,\"2286\":1,\"2287\":1,\"2288\":1,\"2289\":1,\"2290\":1,\"2291\":1,\"2292\":1,\"2293\":1,\"2294\":1,\"2295\":1,\"2296\":1,\"2297\":1,\"2298\":1,\"2299\":3,\"2300\":1,\"2301\":2,\"2302\":2,\"2303\":1,\"2306\":7,\"2307\":2,\"2308\":7,\"2328\":4,\"2335\":1,\"2336\":5,\"2338\":1,\"2339\":3,\"2340\":2,\"2341\":1,\"2342\":1,\"2343\":1,\"2344\":1,\"2345\":1,\"2346\":1,\"2347\":2,\"2348\":1,\"2349\":1,\"2350\":1,\"2351\":2,\"2352\":1,\"2353\":2,\"2354\":2,\"2355\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2359\":1,\"2360\":1,\"2361\":1,\"2362\":1,\"2363\":1,\"2364\":1,\"2365\":1,\"2366\":3,\"2367\":1,\"2368\":2,\"2369\":2,\"2370\":1,\"2371\":1,\"2372\":1,\"2373\":1,\"2374\":4,\"2375\":4,\"2376\":1,\"2377\":2,\"2378\":2,\"2379\":2,\"2380\":1,\"2381\":3,\"2382\":2,\"2383\":1,\"2384\":1,\"2385\":1,\"2386\":1,\"2387\":1,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":1,\"2392\":1,\"2393\":1,\"2394\":1,\"2397\":7,\"2398\":2,\"2399\":2,\"2400\":7,\"2420\":3,\"2428\":3,\"2430\":1,\"2431\":1,\"2432\":1,\"2433\":4,\"2434\":4,\"2435\":1,\"2436\":2,\"2437\":2,\"2438\":2,\"2439\":1,\"2440\":3,\"2441\":2,\"2442\":1,\"2443\":1,\"2444\":1,\"2445\":1,\"2446\":1,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":1,\"2451\":1,\"2452\":1,\"2453\":1,\"2454\":1,\"2455\":1,\"2456\":2,\"2457\":1,\"2458\":1,\"2459\":1,\"2460\":2,\"2461\":2,\"2462\":1,\"2463\":2,\"2464\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2472\":1,\"2473\":3,\"2474\":2,\"2475\":1,\"2476\":1,\"2477\":1,\"2478\":1,\"2479\":1,\"2480\":1,\"2481\":1,\"2482\":1,\"2483\":1,\"2484\":1,\"2485\":1,\"2486\":1,\"2487\":2,\"2488\":4,\"2489\":2,\"2490\":1,\"2491\":1,\"2492\":1,\"2493\":1,\"2494\":3,\"2495\":1,\"2496\":1,\"2497\":1,\"2498\":1,\"2499\":1,\"2500\":2,\"2501\":1,\"2502\":1,\"2503\":2,\"2504\":2,\"2505\":1,\"2506\":1,\"2507\":1,\"2508\":1,\"2509\":1,\"2510\":1,\"2511\":1,\"2512\":1,\"2513\":1,\"2514\":1,\"2515\":1,\"2516\":1,\"2517\":1,\"2518\":3,\"2519\":1,\"2520\":2,\"2521\":2,\"2522\":1,\"2525\":7,\"2526\":2,\"2527\":7,\"2547\":4,\"2554\":1,\"2555\":5,\"2557\":1,\"2558\":3,\"2559\":2,\"2560\":1,\"2561\":1,\"2562\":1,\"2563\":1,\"2564\":1,\"2565\":1,\"2566\":2,\"2567\":1,\"2568\":1,\"2569\":1,\"2570\":2,\"2571\":1,\"2572\":2,\"2573\":2,\"2574\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2578\":1,\"2579\":1,\"2580\":1,\"2581\":1,\"2582\":1,\"2583\":1,\"2584\":1,\"2585\":3,\"2586\":1,\"2587\":2,\"2588\":2,\"2589\":1,\"2590\":1,\"2591\":1,\"2592\":1,\"2593\":4,\"2594\":4,\"2595\":1,\"2596\":2,\"2597\":2,\"2598\":2,\"2599\":1,\"2600\":3,\"2601\":2,\"2602\":1,\"2603\":1,\"2604\":1,\"2605\":1,\"2606\":1,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":1,\"2611\":1,\"2612\":1,\"2613\":1,\"2616\":7,\"2617\":2,\"2618\":2,\"2619\":7,\"2639\":3,\"2647\":3,\"2649\":1,\"2650\":1,\"2651\":1,\"2652\":4,\"2653\":4,\"2654\":1,\"2655\":2,\"2656\":2,\"2657\":2,\"2658\":1,\"2659\":3,\"2660\":2,\"2661\":1,\"2662\":1,\"2663\":1,\"2664\":1,\"2665\":1,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":1,\"2670\":1,\"2671\":1,\"2672\":1,\"2673\":1,\"2674\":1,\"2675\":2,\"2676\":1,\"2677\":1,\"2678\":1,\"2679\":2,\"2680\":2,\"2681\":1,\"2682\":2,\"2683\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2691\":1,\"2692\":3,\"2693\":2,\"2694\":1,\"2695\":1,\"2696\":1,\"2697\":1,\"2698\":1,\"2699\":1,\"2700\":1,\"2701\":1,\"2702\":1,\"2703\":1,\"2704\":1,\"2705\":1,\"2706\":2,\"2707\":4,\"2708\":2,\"2709\":1,\"2710\":1,\"2711\":1,\"2712\":1,\"2713\":3,\"2714\":1,\"2715\":1,\"2716\":1,\"2717\":1,\"2718\":1,\"2719\":2,\"2720\":1,\"2721\":1,\"2722\":2,\"2723\":2,\"2724\":1,\"2725\":1,\"2726\":1,\"2727\":1,\"2728\":1,\"2729\":1,\"2730\":1,\"2731\":1,\"2732\":1,\"2733\":1,\"2734\":1,\"2735\":1,\"2736\":1,\"2737\":3,\"2738\":1,\"2739\":2,\"2740\":2,\"2741\":1,\"2744\":7,\"2745\":2,\"2746\":7,\"2766\":4,\"2773\":1,\"2774\":5,\"2776\":1,\"2777\":3,\"2778\":2,\"2779\":1,\"2780\":1,\"2781\":1,\"2782\":1,\"2783\":1,\"2784\":1,\"2785\":2,\"2786\":1,\"2787\":1,\"2788\":1,\"2789\":2,\"2790\":1,\"2791\":2,\"2792\":2,\"2793\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2797\":1,\"2798\":1,\"2799\":1,\"2800\":1,\"2801\":1,\"2802\":1,\"2803\":1,\"2804\":3,\"2805\":1,\"2806\":2,\"2807\":2,\"2808\":1,\"2809\":1,\"2810\":1,\"2811\":1,\"2812\":4,\"2813\":4,\"2814\":1,\"2815\":2,\"2816\":2,\"2817\":2,\"2818\":1,\"2819\":3,\"2820\":2,\"2821\":1,\"2822\":1,\"2823\":1,\"2824\":1,\"2825\":1,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":1,\"2830\":1,\"2831\":1,\"2832\":1,\"2835\":7,\"2836\":2,\"2837\":2,\"2838\":7}}],[\"desire\",{\"1\":{\"410\":1,\"621\":1,\"667\":1,\"713\":1,\"759\":1}}],[\"desired\",{\"1\":{\"38\":1}}],[\"designated\",{\"1\":{\"134\":1}}],[\"design\",{\"0\":{\"104\":1},\"1\":{\"92\":1,\"105\":1,\"116\":1}}],[\"designed\",{\"1\":{\"6\":1,\"9\":1,\"112\":1,\"391\":1}}],[\"descriptions\",{\"1\":{\"155\":2}}],[\"description\",{\"1\":{\"37\":1,\"93\":1,\"155\":1,\"170\":1,\"171\":1,\"172\":1,\"173\":1,\"174\":1,\"175\":1,\"176\":1,\"177\":1,\"178\":1,\"179\":1,\"180\":1,\"181\":1,\"182\":1,\"183\":1,\"184\":1,\"185\":1,\"186\":1,\"187\":1,\"188\":1,\"189\":1,\"190\":1,\"191\":1,\"192\":1,\"193\":1,\"194\":1,\"195\":1,\"196\":1,\"197\":1,\"198\":1,\"199\":1,\"200\":1,\"201\":1,\"202\":1,\"203\":1,\"204\":1,\"205\":1,\"206\":1,\"207\":1,\"208\":1,\"209\":1,\"210\":1,\"211\":1,\"212\":1,\"213\":1,\"214\":1,\"215\":1,\"216\":1,\"217\":1,\"218\":1,\"219\":1,\"220\":1,\"221\":1,\"222\":1,\"223\":1,\"224\":1,\"225\":1,\"226\":1,\"227\":1,\"228\":1,\"229\":1,\"230\":1,\"231\":1,\"232\":1,\"233\":1,\"234\":1,\"237\":1,\"238\":1,\"239\":1,\"240\":1,\"241\":1,\"242\":1,\"243\":1,\"244\":1,\"245\":1,\"246\":1,\"247\":1,\"248\":1,\"249\":1,\"250\":1,\"251\":1,\"252\":1,\"253\":1,\"254\":1,\"255\":1,\"256\":1,\"257\":1,\"258\":1,\"259\":1,\"260\":1,\"261\":1,\"262\":1,\"265\":1,\"266\":1,\"267\":1,\"268\":1,\"269\":1,\"270\":1,\"271\":1,\"272\":1,\"273\":1,\"274\":1,\"275\":1,\"808\":1,\"809\":1,\"810\":1,\"811\":1,\"812\":1,\"813\":1,\"814\":1,\"815\":1,\"816\":1,\"817\":1,\"818\":1,\"819\":1,\"820\":1,\"821\":1,\"822\":1,\"823\":1,\"824\":1,\"825\":1,\"826\":1,\"827\":1,\"828\":1,\"829\":1,\"830\":1,\"831\":1,\"832\":1,\"833\":1,\"834\":1,\"835\":1,\"836\":1,\"837\":1,\"838\":1,\"839\":1,\"840\":1,\"841\":1,\"842\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"850\":1,\"851\":1,\"852\":1,\"853\":1,\"854\":1,\"855\":1,\"856\":1,\"857\":1,\"858\":1,\"859\":1,\"860\":1,\"861\":1,\"862\":1,\"863\":1,\"864\":1,\"865\":1,\"866\":1,\"867\":1,\"868\":1,\"869\":1,\"870\":1,\"871\":1,\"872\":1,\"873\":1,\"874\":1,\"875\":1,\"876\":1,\"877\":1,\"878\":1,\"879\":1,\"880\":1,\"881\":1,\"882\":1,\"883\":1,\"884\":1,\"885\":1,\"886\":1,\"887\":1,\"888\":1,\"889\":1,\"890\":1,\"891\":1,\"892\":1,\"893\":1,\"894\":1,\"895\":1,\"896\":1,\"897\":1,\"898\":1,\"899\":1,\"900\":1,\"909\":1,\"910\":1,\"911\":1,\"912\":1,\"913\":1,\"914\":1,\"915\":1,\"916\":1,\"917\":1,\"918\":1,\"919\":1,\"920\":1,\"921\":1,\"935\":1,\"936\":1,\"937\":1,\"938\":1,\"939\":1,\"940\":1,\"941\":1,\"942\":1,\"943\":1,\"944\":1,\"945\":1,\"946\":1,\"947\":1,\"948\":1,\"949\":1,\"950\":1,\"951\":1,\"952\":1,\"953\":1,\"954\":1,\"955\":1,\"956\":1,\"957\":1,\"958\":1,\"959\":1,\"960\":1,\"961\":1,\"962\":1,\"963\":1,\"964\":1,\"965\":1,\"966\":1,\"967\":1,\"968\":1,\"969\":1,\"970\":1,\"971\":1,\"972\":1,\"973\":1,\"974\":1,\"975\":1,\"976\":1,\"977\":1,\"978\":1,\"979\":1,\"980\":1,\"981\":1,\"982\":1,\"983\":1,\"984\":1,\"985\":1,\"986\":1,\"987\":1,\"988\":1,\"989\":1,\"990\":1,\"991\":1,\"1001\":1,\"1002\":1,\"1003\":1,\"1004\":1,\"1005\":1,\"1006\":1,\"1007\":1,\"1008\":1,\"1009\":1,\"1010\":1,\"1011\":1,\"1012\":1,\"1013\":1,\"1017\":1,\"1018\":1,\"1019\":1,\"1020\":1,\"1021\":1,\"1022\":1,\"1023\":1,\"1024\":1,\"1025\":1,\"1026\":1,\"1027\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1031\":1,\"1032\":1,\"1033\":1,\"1034\":1,\"1035\":1,\"1036\":1,\"1037\":1,\"1038\":1,\"1039\":1,\"1040\":1,\"1041\":1,\"1042\":1,\"1043\":1,\"1044\":1,\"1045\":1,\"1046\":1,\"1047\":1,\"1048\":1,\"1049\":1,\"1050\":1,\"1051\":1,\"1052\":1,\"1053\":1,\"1054\":1,\"1055\":1,\"1056\":1,\"1057\":1,\"1058\":1,\"1059\":1,\"1060\":1,\"1061\":1,\"1062\":1,\"1063\":1,\"1064\":1,\"1065\":1,\"1066\":1,\"1067\":1,\"1068\":1,\"1069\":1,\"1070\":1,\"1071\":1,\"1072\":1,\"1073\":1,\"1074\":1,\"1076\":1,\"1077\":1,\"1078\":1,\"1079\":1,\"1080\":1,\"1081\":1,\"1082\":1,\"1083\":1,\"1084\":1,\"1085\":1,\"1086\":1,\"1087\":1,\"1088\":1,\"1089\":1,\"1090\":1,\"1091\":1,\"1092\":1,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":1,\"1097\":1,\"1098\":1,\"1099\":1,\"1101\":1,\"1102\":1,\"1103\":1,\"1104\":1,\"1105\":1,\"1106\":1,\"1107\":1,\"1108\":1,\"1109\":1,\"1110\":1,\"1111\":1,\"1112\":1,\"1113\":1,\"1114\":1,\"1115\":1,\"1116\":1,\"1117\":1,\"1118\":1,\"1119\":1,\"1120\":1,\"1121\":1,\"1122\":1,\"1123\":1,\"1124\":1,\"1125\":1,\"1126\":1,\"1127\":1,\"1128\":1,\"1130\":1,\"1131\":1,\"1132\":1,\"1133\":1,\"1134\":1,\"1135\":1,\"1136\":1,\"1137\":1,\"1138\":1,\"1139\":1,\"1140\":1,\"1144\":1,\"1145\":1,\"1146\":1,\"1147\":1,\"1148\":1,\"1149\":1,\"1150\":1,\"1151\":1,\"1152\":1,\"1153\":1,\"1154\":1,\"1155\":1,\"1156\":1,\"1157\":1,\"1158\":1,\"1159\":1,\"1160\":1,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":1,\"1165\":1,\"1166\":1,\"1167\":1,\"1168\":1,\"1169\":1,\"1170\":1,\"1171\":1,\"1172\":1,\"1173\":1,\"1174\":1,\"1175\":1,\"1176\":1,\"1177\":1,\"1178\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1182\":1,\"1183\":1,\"1184\":1,\"1185\":1,\"1186\":1,\"1187\":1,\"1188\":1,\"1189\":1,\"1190\":1,\"1191\":1,\"1192\":1,\"1193\":1,\"1194\":1,\"1195\":1,\"1196\":1,\"1197\":1,\"1198\":1,\"1199\":1,\"1200\":1,\"1201\":1,\"1202\":1,\"1203\":1,\"1204\":1,\"1205\":1,\"1206\":1,\"1207\":1,\"1208\":1,\"1209\":1,\"1210\":1,\"1211\":1,\"1212\":1,\"1213\":1,\"1214\":1,\"1215\":1,\"1216\":1,\"1217\":1,\"1218\":1,\"1219\":1,\"1220\":1,\"1221\":1,\"1222\":1,\"1223\":1,\"1224\":1,\"1225\":1,\"1239\":1,\"1240\":1,\"1241\":1,\"1242\":1,\"1243\":1,\"1244\":1,\"1245\":1,\"1246\":1,\"1247\":1,\"1248\":1,\"1249\":1,\"1250\":1,\"1251\":1,\"1252\":1,\"1253\":1,\"1254\":1,\"1255\":1,\"1256\":1,\"1257\":1,\"1258\":1,\"1259\":1,\"1260\":1,\"1261\":1,\"1262\":1,\"1263\":1,\"1264\":1,\"1265\":1,\"1266\":1,\"1267\":1,\"1268\":1,\"1269\":1,\"1270\":1,\"1271\":1,\"1272\":1,\"1273\":1,\"1274\":1,\"1275\":1,\"1276\":1,\"1277\":1,\"1278\":1,\"1279\":1,\"1280\":1,\"1281\":1,\"1282\":1,\"1283\":1,\"1284\":1,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":1,\"1289\":1,\"1290\":1,\"1291\":1,\"1301\":1,\"1302\":1,\"1303\":1,\"1304\":1,\"1305\":1,\"1306\":1,\"1307\":1,\"1308\":1,\"1309\":1,\"1310\":1,\"1311\":1,\"1312\":1,\"1316\":1,\"1317\":1,\"1318\":1,\"1319\":1,\"1320\":1,\"1321\":1,\"1322\":1,\"1323\":1,\"1324\":1,\"1325\":1,\"1326\":1,\"1327\":1,\"1328\":1,\"1329\":1,\"1330\":1,\"1331\":1,\"1332\":1,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":1,\"1337\":1,\"1338\":1,\"1339\":1,\"1340\":1,\"1341\":1,\"1342\":1,\"1343\":1,\"1344\":1,\"1345\":1,\"1346\":1,\"1347\":1,\"1348\":1,\"1349\":1,\"1350\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1355\":1,\"1356\":1,\"1357\":1,\"1358\":1,\"1359\":1,\"1360\":1,\"1361\":1,\"1362\":1,\"1363\":1,\"1364\":1,\"1365\":1,\"1366\":1,\"1367\":1,\"1368\":1,\"1369\":1,\"1370\":1,\"1371\":1,\"1372\":1,\"1373\":1,\"1374\":1,\"1375\":1,\"1376\":1,\"1377\":1,\"1378\":1,\"1379\":1,\"1380\":1,\"1381\":1,\"1382\":1,\"1383\":1,\"1384\":1,\"1385\":1,\"1386\":1,\"1387\":1,\"1388\":1,\"1389\":1,\"1390\":1,\"1391\":1,\"1392\":1,\"1393\":1,\"1394\":1,\"1395\":1,\"1396\":1,\"1397\":1,\"1398\":1,\"1399\":1,\"1400\":1,\"1401\":1,\"1415\":1,\"1416\":1,\"1417\":1,\"1418\":1,\"1419\":1,\"1420\":1,\"1421\":1,\"1422\":1,\"1423\":1,\"1424\":1,\"1425\":1,\"1426\":1,\"1427\":1,\"1428\":1,\"1429\":1,\"1430\":1,\"1431\":1,\"1432\":1,\"1433\":1,\"1434\":1,\"1435\":1,\"1436\":1,\"1437\":1,\"1438\":1,\"1439\":1,\"1440\":1,\"1441\":1,\"1442\":1,\"1443\":1,\"1444\":1,\"1445\":1,\"1446\":1,\"1447\":1,\"1448\":1,\"1449\":1,\"1450\":1,\"1451\":1,\"1452\":1,\"1453\":1,\"1454\":1,\"1455\":1,\"1456\":1,\"1457\":1,\"1458\":1,\"1459\":1,\"1460\":1,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":1,\"1465\":1,\"1466\":1,\"1467\":1,\"1477\":1,\"1478\":1,\"1479\":1,\"1480\":1,\"1481\":1,\"1482\":1,\"1483\":1,\"1484\":1,\"1485\":1,\"1486\":1,\"1487\":1,\"1488\":1,\"1489\":1,\"1493\":1,\"1494\":1,\"1495\":1,\"1496\":1,\"1497\":1,\"1498\":1,\"1499\":1,\"1500\":1,\"1501\":1,\"1502\":1,\"1503\":1,\"1504\":1,\"1505\":1,\"1506\":1,\"1507\":1,\"1508\":1,\"1509\":1,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":1,\"1514\":1,\"1515\":1,\"1516\":1,\"1517\":1,\"1518\":1,\"1519\":1,\"1520\":1,\"1521\":1,\"1522\":1,\"1523\":1,\"1524\":1,\"1525\":1,\"1526\":1,\"1527\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1532\":1,\"1533\":1,\"1534\":1,\"1535\":1,\"1536\":1,\"1537\":1,\"1538\":1,\"1539\":1,\"1540\":1,\"1541\":1,\"1542\":1,\"1543\":1,\"1544\":1,\"1545\":1,\"1546\":1,\"1547\":1,\"1548\":1,\"1549\":1,\"1550\":1,\"1551\":1,\"1552\":1,\"1553\":1,\"1554\":1,\"1555\":1,\"1556\":1,\"1557\":1,\"1558\":1,\"1559\":1,\"1560\":1,\"1561\":1,\"1562\":1,\"1563\":1,\"1564\":1,\"1565\":1,\"1566\":1,\"1567\":1,\"1568\":1,\"1569\":1,\"1570\":1,\"1571\":1,\"1572\":1,\"1573\":1,\"1574\":1,\"1575\":1,\"1576\":1,\"1577\":1,\"1578\":1,\"1592\":1,\"1593\":1,\"1594\":1,\"1595\":1,\"1596\":1,\"1597\":1,\"1598\":1,\"1599\":1,\"1600\":1,\"1601\":1,\"1602\":1,\"1603\":1,\"1604\":1,\"1605\":1,\"1606\":1,\"1607\":1,\"1608\":1,\"1609\":1,\"1610\":1,\"1611\":1,\"1612\":1,\"1613\":1,\"1614\":1,\"1615\":1,\"1616\":1,\"1617\":1,\"1618\":1,\"1619\":1,\"1620\":1,\"1621\":1,\"1622\":1,\"1623\":1,\"1624\":1,\"1625\":1,\"1626\":1,\"1627\":1,\"1628\":1,\"1629\":1,\"1630\":1,\"1631\":1,\"1632\":1,\"1633\":1,\"1634\":1,\"1635\":1,\"1636\":1,\"1637\":1,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":1,\"1642\":1,\"1643\":1,\"1644\":1,\"1654\":1,\"1655\":1,\"1656\":1,\"1657\":1,\"1658\":1,\"1659\":1,\"1660\":1,\"1661\":1,\"1662\":1,\"1663\":1,\"1664\":1,\"1665\":1,\"1666\":1,\"1670\":1,\"1671\":1,\"1672\":1,\"1673\":1,\"1674\":1,\"1675\":1,\"1676\":1,\"1677\":1,\"1678\":1,\"1679\":1,\"1680\":1,\"1681\":1,\"1682\":1,\"1683\":1,\"1684\":1,\"1685\":1,\"1686\":1,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":1,\"1691\":1,\"1692\":1,\"1693\":1,\"1694\":1,\"1695\":1,\"1696\":1,\"1697\":1,\"1698\":1,\"1699\":1,\"1700\":1,\"1701\":1,\"1702\":1,\"1703\":1,\"1704\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1709\":1,\"1710\":1,\"1711\":1,\"1712\":1,\"1713\":1,\"1714\":1,\"1715\":1,\"1716\":1,\"1717\":1,\"1718\":1,\"1719\":1,\"1720\":1,\"1721\":1,\"1722\":1,\"1723\":1,\"1724\":1,\"1725\":1,\"1726\":1,\"1727\":1,\"1728\":1,\"1729\":1,\"1730\":1,\"1731\":1,\"1732\":1,\"1733\":1,\"1734\":1,\"1735\":1,\"1736\":1,\"1737\":1,\"1738\":1,\"1739\":1,\"1740\":1,\"1741\":1,\"1742\":1,\"1743\":1,\"1744\":1,\"1745\":1,\"1746\":1,\"1747\":1,\"1748\":1,\"1749\":1,\"1750\":1,\"1751\":1,\"1752\":1,\"1753\":1,\"1754\":1,\"1755\":1,\"1769\":1,\"1770\":1,\"1771\":1,\"1772\":1,\"1773\":1,\"1774\":1,\"1775\":1,\"1776\":1,\"1777\":1,\"1778\":1,\"1779\":1,\"1780\":1,\"1781\":1,\"1782\":1,\"1783\":1,\"1784\":1,\"1785\":1,\"1786\":1,\"1787\":1,\"1788\":1,\"1789\":1,\"1790\":1,\"1791\":1,\"1792\":1,\"1793\":1,\"1794\":1,\"1795\":1,\"1796\":1,\"1797\":1,\"1798\":1,\"1799\":1,\"1800\":1,\"1801\":1,\"1802\":1,\"1803\":1,\"1804\":1,\"1805\":1,\"1806\":1,\"1807\":1,\"1808\":1,\"1809\":1,\"1810\":1,\"1811\":1,\"1812\":1,\"1813\":1,\"1814\":1,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":1,\"1819\":1,\"1820\":1,\"1821\":1,\"1831\":1,\"1832\":1,\"1833\":1,\"1834\":1,\"1835\":1,\"1836\":1,\"1837\":1,\"1838\":1,\"1839\":1,\"1840\":1,\"1841\":1,\"1842\":1,\"1843\":1,\"1847\":1,\"1848\":1,\"1849\":1,\"1850\":1,\"1851\":1,\"1852\":1,\"1853\":1,\"1854\":1,\"1855\":1,\"1856\":1,\"1857\":1,\"1858\":1,\"1859\":1,\"1860\":1,\"1861\":1,\"1862\":1,\"1863\":1,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":1,\"1868\":1,\"1869\":1,\"1870\":1,\"1871\":1,\"1872\":1,\"1873\":1,\"1874\":1,\"1875\":1,\"1876\":1,\"1877\":1,\"1878\":1,\"1879\":1,\"1880\":1,\"1881\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1886\":1,\"1887\":1,\"1888\":1,\"1889\":1,\"1890\":1,\"1891\":1,\"1892\":1,\"1893\":1,\"1894\":1,\"1895\":1,\"1896\":1,\"1897\":1,\"1898\":1,\"1899\":1,\"1900\":1,\"1901\":1,\"1902\":1,\"1903\":1,\"1904\":1,\"1905\":1,\"1906\":1,\"1907\":1,\"1908\":1,\"1909\":1,\"1910\":1,\"1911\":1,\"1912\":1,\"1913\":1,\"1914\":1,\"1915\":1,\"1916\":1,\"1917\":1,\"1918\":1,\"1919\":1,\"1920\":1,\"1921\":1,\"1922\":1,\"1923\":1,\"1924\":1,\"1925\":1,\"1926\":1,\"1927\":1,\"1928\":1,\"1929\":1,\"1930\":1,\"1931\":1,\"1932\":1,\"1946\":1,\"1947\":1,\"1948\":1,\"1949\":1,\"1950\":1,\"1951\":1,\"1952\":1,\"1953\":1,\"1954\":1,\"1955\":1,\"1956\":1,\"1957\":1,\"1958\":1,\"1959\":1,\"1960\":1,\"1961\":1,\"1962\":1,\"1963\":1,\"1964\":1,\"1965\":1,\"1966\":1,\"1967\":1,\"1968\":1,\"1969\":1,\"1970\":1,\"1971\":1,\"1972\":1,\"1973\":1,\"1974\":1,\"1975\":1,\"1976\":1,\"1977\":1,\"1978\":1,\"1979\":1,\"1980\":1,\"1981\":1,\"1982\":1,\"1983\":1,\"1984\":1,\"1985\":1,\"1986\":1,\"1987\":1,\"1988\":1,\"1989\":1,\"1990\":1,\"1991\":1,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":1,\"1996\":1,\"1997\":1,\"1998\":1,\"2008\":1,\"2009\":1,\"2010\":1,\"2011\":1,\"2012\":1,\"2013\":1,\"2014\":1,\"2015\":1,\"2016\":1,\"2017\":1,\"2018\":1,\"2019\":1,\"2020\":1,\"2024\":1,\"2025\":1,\"2026\":1,\"2027\":1,\"2028\":1,\"2029\":1,\"2030\":1,\"2031\":1,\"2032\":1,\"2033\":1,\"2034\":1,\"2035\":1,\"2036\":1,\"2037\":1,\"2038\":1,\"2039\":1,\"2040\":1,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":1,\"2045\":1,\"2046\":1,\"2047\":1,\"2048\":1,\"2049\":1,\"2050\":1,\"2051\":1,\"2052\":1,\"2053\":1,\"2054\":1,\"2055\":1,\"2056\":1,\"2057\":1,\"2058\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2063\":1,\"2064\":1,\"2065\":1,\"2066\":1,\"2067\":1,\"2068\":1,\"2069\":1,\"2070\":1,\"2071\":1,\"2072\":1,\"2073\":1,\"2074\":1,\"2075\":1,\"2076\":1,\"2077\":1,\"2078\":1,\"2079\":1,\"2080\":1,\"2081\":1,\"2082\":1,\"2083\":1,\"2084\":1,\"2085\":1,\"2086\":1,\"2087\":1,\"2088\":1,\"2089\":1,\"2090\":1,\"2091\":1,\"2092\":1,\"2093\":1,\"2094\":1,\"2095\":1,\"2096\":1,\"2097\":1,\"2098\":1,\"2099\":1,\"2100\":1,\"2101\":1,\"2102\":1,\"2103\":1,\"2104\":1,\"2105\":1,\"2106\":1,\"2107\":1,\"2108\":1,\"2109\":1,\"2123\":1,\"2124\":1,\"2125\":1,\"2126\":1,\"2127\":1,\"2128\":1,\"2129\":1,\"2130\":1,\"2131\":1,\"2132\":1,\"2133\":1,\"2134\":1,\"2135\":1,\"2136\":1,\"2137\":1,\"2138\":1,\"2139\":1,\"2140\":1,\"2141\":1,\"2142\":1,\"2143\":1,\"2144\":1,\"2145\":1,\"2146\":1,\"2147\":1,\"2148\":1,\"2149\":1,\"2150\":1,\"2151\":1,\"2152\":1,\"2153\":1,\"2154\":1,\"2155\":1,\"2156\":1,\"2157\":1,\"2158\":1,\"2159\":1,\"2160\":1,\"2161\":1,\"2162\":1,\"2163\":1,\"2164\":1,\"2165\":1,\"2166\":1,\"2167\":1,\"2168\":1,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":1,\"2173\":1,\"2174\":1,\"2175\":1,\"2185\":1,\"2186\":1,\"2187\":1,\"2188\":1,\"2189\":1,\"2190\":1,\"2191\":1,\"2192\":1,\"2193\":1,\"2194\":1,\"2195\":1,\"2196\":1,\"2197\":1,\"2211\":1,\"2212\":1,\"2213\":1,\"2214\":1,\"2215\":1,\"2216\":1,\"2217\":1,\"2218\":1,\"2219\":1,\"2220\":1,\"2221\":1,\"2222\":1,\"2223\":1,\"2224\":1,\"2225\":1,\"2226\":1,\"2227\":1,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":1,\"2232\":1,\"2233\":1,\"2234\":1,\"2235\":1,\"2236\":1,\"2237\":1,\"2238\":1,\"2239\":1,\"2240\":1,\"2241\":1,\"2242\":1,\"2243\":1,\"2244\":1,\"2245\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2253\":1,\"2254\":1,\"2255\":1,\"2256\":1,\"2257\":1,\"2258\":1,\"2259\":1,\"2260\":1,\"2261\":1,\"2262\":1,\"2263\":1,\"2264\":1,\"2265\":1,\"2266\":1,\"2267\":1,\"2268\":1,\"2269\":1,\"2270\":1,\"2271\":1,\"2272\":1,\"2273\":1,\"2274\":1,\"2275\":1,\"2276\":1,\"2277\":1,\"2278\":1,\"2279\":1,\"2280\":1,\"2281\":1,\"2282\":1,\"2283\":1,\"2284\":1,\"2285\":1,\"2286\":1,\"2287\":1,\"2288\":1,\"2289\":1,\"2290\":1,\"2291\":1,\"2292\":1,\"2293\":1,\"2294\":1,\"2295\":1,\"2296\":1,\"2297\":1,\"2298\":1,\"2299\":1,\"2300\":1,\"2301\":1,\"2302\":1,\"2303\":1,\"2312\":1,\"2313\":1,\"2314\":1,\"2315\":1,\"2316\":1,\"2317\":1,\"2318\":1,\"2319\":1,\"2320\":1,\"2321\":1,\"2322\":1,\"2323\":1,\"2324\":1,\"2338\":1,\"2339\":1,\"2340\":1,\"2341\":1,\"2342\":1,\"2343\":1,\"2344\":1,\"2345\":1,\"2346\":1,\"2347\":1,\"2348\":1,\"2349\":1,\"2350\":1,\"2351\":1,\"2352\":1,\"2353\":1,\"2354\":1,\"2355\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2359\":1,\"2360\":1,\"2361\":1,\"2362\":1,\"2363\":1,\"2364\":1,\"2365\":1,\"2366\":1,\"2367\":1,\"2368\":1,\"2369\":1,\"2370\":1,\"2371\":1,\"2372\":1,\"2373\":1,\"2374\":1,\"2375\":1,\"2376\":1,\"2377\":1,\"2378\":1,\"2379\":1,\"2380\":1,\"2381\":1,\"2382\":1,\"2383\":1,\"2384\":1,\"2385\":1,\"2386\":1,\"2387\":1,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":1,\"2392\":1,\"2393\":1,\"2394\":1,\"2404\":1,\"2405\":1,\"2406\":1,\"2407\":1,\"2408\":1,\"2409\":1,\"2410\":1,\"2411\":1,\"2412\":1,\"2413\":1,\"2414\":1,\"2415\":1,\"2416\":1,\"2430\":1,\"2431\":1,\"2432\":1,\"2433\":1,\"2434\":1,\"2435\":1,\"2436\":1,\"2437\":1,\"2438\":1,\"2439\":1,\"2440\":1,\"2441\":1,\"2442\":1,\"2443\":1,\"2444\":1,\"2445\":1,\"2446\":1,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":1,\"2451\":1,\"2452\":1,\"2453\":1,\"2454\":1,\"2455\":1,\"2456\":1,\"2457\":1,\"2458\":1,\"2459\":1,\"2460\":1,\"2461\":1,\"2462\":1,\"2463\":1,\"2464\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2472\":1,\"2473\":1,\"2474\":1,\"2475\":1,\"2476\":1,\"2477\":1,\"2478\":1,\"2479\":1,\"2480\":1,\"2481\":1,\"2482\":1,\"2483\":1,\"2484\":1,\"2485\":1,\"2486\":1,\"2487\":1,\"2488\":1,\"2489\":1,\"2490\":1,\"2491\":1,\"2492\":1,\"2493\":1,\"2494\":1,\"2495\":1,\"2496\":1,\"2497\":1,\"2498\":1,\"2499\":1,\"2500\":1,\"2501\":1,\"2502\":1,\"2503\":1,\"2504\":1,\"2505\":1,\"2506\":1,\"2507\":1,\"2508\":1,\"2509\":1,\"2510\":1,\"2511\":1,\"2512\":1,\"2513\":1,\"2514\":1,\"2515\":1,\"2516\":1,\"2517\":1,\"2518\":1,\"2519\":1,\"2520\":1,\"2521\":1,\"2522\":1,\"2531\":1,\"2532\":1,\"2533\":1,\"2534\":1,\"2535\":1,\"2536\":1,\"2537\":1,\"2538\":1,\"2539\":1,\"2540\":1,\"2541\":1,\"2542\":1,\"2543\":1,\"2557\":1,\"2558\":1,\"2559\":1,\"2560\":1,\"2561\":1,\"2562\":1,\"2563\":1,\"2564\":1,\"2565\":1,\"2566\":1,\"2567\":1,\"2568\":1,\"2569\":1,\"2570\":1,\"2571\":1,\"2572\":1,\"2573\":1,\"2574\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2578\":1,\"2579\":1,\"2580\":1,\"2581\":1,\"2582\":1,\"2583\":1,\"2584\":1,\"2585\":1,\"2586\":1,\"2587\":1,\"2588\":1,\"2589\":1,\"2590\":1,\"2591\":1,\"2592\":1,\"2593\":1,\"2594\":1,\"2595\":1,\"2596\":1,\"2597\":1,\"2598\":1,\"2599\":1,\"2600\":1,\"2601\":1,\"2602\":1,\"2603\":1,\"2604\":1,\"2605\":1,\"2606\":1,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":1,\"2611\":1,\"2612\":1,\"2613\":1,\"2623\":1,\"2624\":1,\"2625\":1,\"2626\":1,\"2627\":1,\"2628\":1,\"2629\":1,\"2630\":1,\"2631\":1,\"2632\":1,\"2633\":1,\"2634\":1,\"2635\":1,\"2649\":1,\"2650\":1,\"2651\":1,\"2652\":1,\"2653\":1,\"2654\":1,\"2655\":1,\"2656\":1,\"2657\":1,\"2658\":1,\"2659\":1,\"2660\":1,\"2661\":1,\"2662\":1,\"2663\":1,\"2664\":1,\"2665\":1,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":1,\"2670\":1,\"2671\":1,\"2672\":1,\"2673\":1,\"2674\":1,\"2675\":1,\"2676\":1,\"2677\":1,\"2678\":1,\"2679\":1,\"2680\":1,\"2681\":1,\"2682\":1,\"2683\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2691\":1,\"2692\":1,\"2693\":1,\"2694\":1,\"2695\":1,\"2696\":1,\"2697\":1,\"2698\":1,\"2699\":1,\"2700\":1,\"2701\":1,\"2702\":1,\"2703\":1,\"2704\":1,\"2705\":1,\"2706\":1,\"2707\":1,\"2708\":1,\"2709\":1,\"2710\":1,\"2711\":1,\"2712\":1,\"2713\":1,\"2714\":1,\"2715\":1,\"2716\":1,\"2717\":1,\"2718\":1,\"2719\":1,\"2720\":1,\"2721\":1,\"2722\":1,\"2723\":1,\"2724\":1,\"2725\":1,\"2726\":1,\"2727\":1,\"2728\":1,\"2729\":1,\"2730\":1,\"2731\":1,\"2732\":1,\"2733\":1,\"2734\":1,\"2735\":1,\"2736\":1,\"2737\":1,\"2738\":1,\"2739\":1,\"2740\":1,\"2741\":1,\"2750\":1,\"2751\":1,\"2752\":1,\"2753\":1,\"2754\":1,\"2755\":1,\"2756\":1,\"2757\":1,\"2758\":1,\"2759\":1,\"2760\":1,\"2761\":1,\"2762\":1,\"2776\":1,\"2777\":1,\"2778\":1,\"2779\":1,\"2780\":1,\"2781\":1,\"2782\":1,\"2783\":1,\"2784\":1,\"2785\":1,\"2786\":1,\"2787\":1,\"2788\":1,\"2789\":1,\"2790\":1,\"2791\":1,\"2792\":1,\"2793\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2797\":1,\"2798\":1,\"2799\":1,\"2800\":1,\"2801\":1,\"2802\":1,\"2803\":1,\"2804\":1,\"2805\":1,\"2806\":1,\"2807\":1,\"2808\":1,\"2809\":1,\"2810\":1,\"2811\":1,\"2812\":1,\"2813\":1,\"2814\":1,\"2815\":1,\"2816\":1,\"2817\":1,\"2818\":1,\"2819\":1,\"2820\":1,\"2821\":1,\"2822\":1,\"2823\":1,\"2824\":1,\"2825\":1,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":1,\"2830\":1,\"2831\":1,\"2832\":1,\"2842\":1,\"2843\":1,\"2844\":1,\"2845\":1,\"2846\":1,\"2847\":1,\"2848\":1,\"2849\":1,\"2850\":1,\"2851\":1,\"2852\":1,\"2853\":1,\"2854\":1}}],[\"described\",{\"1\":{\"33\":1,\"153\":1,\"315\":1,\"390\":1,\"391\":1,\"393\":1,\"395\":2}}],[\"describe\",{\"1\":{\"33\":1,\"89\":1,\"91\":1,\"415\":1,\"626\":1,\"672\":1,\"718\":1,\"764\":1}}],[\"despite\",{\"1\":{\"35\":1}}],[\"des\",{\"1\":{\"14\":4,\"16\":1,\"17\":2,\"22\":1,\"41\":1}}],[\"der\",{\"1\":{\"14\":4,\"15\":2,\"16\":5,\"17\":2,\"22\":1,\"41\":2}}],[\"de\",{\"1\":{\"12\":1,\"14\":1,\"16\":2,\"22\":1,\"37\":1,\"40\":1,\"67\":1,\"112\":1,\"135\":2,\"156\":1,\"212\":1,\"285\":5,\"286\":5,\"296\":6,\"297\":5,\"300\":1,\"303\":1,\"306\":1,\"309\":1,\"312\":1,\"424\":2,\"425\":1,\"438\":5,\"439\":2,\"441\":1,\"445\":1,\"454\":2,\"455\":1,\"464\":5,\"465\":3,\"467\":1,\"477\":2,\"478\":1,\"487\":5,\"488\":3,\"490\":1,\"494\":1,\"503\":2,\"504\":1,\"513\":5,\"514\":3,\"516\":1,\"520\":1,\"529\":2,\"530\":1,\"543\":5,\"544\":3,\"546\":1,\"550\":1,\"559\":2,\"560\":1,\"573\":5,\"574\":2,\"576\":1,\"580\":1,\"589\":2,\"590\":1,\"603\":5,\"604\":2,\"606\":1,\"610\":1,\"635\":2,\"636\":1,\"649\":5,\"650\":2,\"652\":1,\"656\":1,\"681\":2,\"682\":1,\"695\":5,\"696\":2,\"698\":1,\"702\":1,\"727\":2,\"728\":1,\"741\":5,\"742\":2,\"744\":1,\"748\":1,\"773\":2,\"774\":1,\"787\":5,\"788\":2,\"790\":1,\"794\":1,\"869\":1,\"1051\":1,\"1202\":1,\"1374\":1,\"1551\":1,\"1728\":1,\"1905\":1,\"2082\":1,\"2272\":1,\"2491\":1,\"2710\":1}}],[\"dsfdev\",{\"1\":{\"887\":1,\"1392\":1,\"1569\":1,\"1746\":1,\"1923\":1,\"2100\":1,\"2290\":1,\"2509\":1,\"2728\":1}}],[\"dsf<\",{\"1\":{\"158\":1,\"159\":1}}],[\"dsfs\",{\"1\":{\"14\":1,\"112\":1,\"113\":1}}],[\"dsf\",{\"0\":{\"5\":1,\"6\":1,\"12\":1,\"19\":1,\"42\":1,\"44\":1,\"46\":1,\"48\":1,\"50\":1,\"52\":1,\"54\":1,\"56\":1,\"58\":1,\"60\":1,\"62\":1,\"77\":1,\"78\":1,\"85\":1,\"169\":1,\"170\":1,\"171\":2,\"172\":1,\"173\":1,\"174\":1,\"175\":2,\"176\":1,\"177\":1,\"178\":2,\"179\":1,\"180\":1,\"181\":1,\"182\":1,\"183\":1,\"184\":1,\"185\":2,\"186\":2,\"187\":1,\"188\":1,\"189\":1,\"190\":1,\"191\":1,\"192\":2,\"193\":1,\"194\":1,\"195\":2,\"196\":1,\"197\":1,\"198\":1,\"199\":1,\"200\":1,\"201\":1,\"202\":1,\"203\":1,\"204\":1,\"205\":1,\"206\":1,\"207\":1,\"208\":1,\"209\":1,\"210\":2,\"211\":1,\"212\":1,\"213\":1,\"214\":1,\"215\":2,\"216\":1,\"217\":1,\"218\":1,\"219\":1,\"220\":1,\"221\":2,\"222\":1,\"223\":1,\"224\":1,\"225\":1,\"226\":1,\"227\":1,\"228\":1,\"229\":1,\"230\":1,\"231\":1,\"232\":1,\"233\":1,\"234\":1,\"236\":1,\"237\":1,\"238\":1,\"239\":2,\"240\":2,\"241\":1,\"242\":1,\"243\":1,\"244\":1,\"245\":1,\"246\":1,\"247\":2,\"248\":1,\"249\":1,\"250\":1,\"251\":2,\"252\":1,\"253\":2,\"254\":1,\"255\":1,\"256\":1,\"257\":1,\"258\":1,\"259\":1,\"260\":1,\"261\":1,\"262\":1,\"264\":1,\"285\":1,\"286\":1,\"296\":1,\"297\":1,\"299\":1,\"300\":1,\"302\":1,\"303\":1,\"305\":1,\"306\":1,\"308\":1,\"309\":1,\"311\":1,\"312\":1,\"313\":1,\"314\":1,\"354\":1,\"380\":1,\"412\":1,\"420\":1,\"430\":1,\"438\":1,\"439\":1,\"442\":1,\"443\":1,\"444\":1,\"445\":1,\"450\":1,\"456\":1,\"464\":1,\"465\":1,\"468\":1,\"473\":1,\"479\":1,\"487\":1,\"488\":1,\"491\":1,\"492\":1,\"493\":1,\"494\":1,\"499\":1,\"505\":1,\"513\":1,\"514\":1,\"517\":1,\"518\":1,\"519\":1,\"520\":1,\"525\":1,\"535\":1,\"543\":1,\"544\":1,\"547\":1,\"548\":1,\"549\":1,\"550\":1,\"555\":1,\"565\":1,\"573\":1,\"574\":1,\"577\":1,\"578\":1,\"579\":1,\"580\":1,\"585\":1,\"595\":1,\"603\":1,\"604\":1,\"607\":1,\"608\":1,\"609\":1,\"610\":1,\"623\":1,\"631\":1,\"641\":1,\"649\":1,\"650\":1,\"653\":1,\"654\":1,\"655\":1,\"656\":1,\"669\":1,\"677\":1,\"687\":1,\"695\":1,\"696\":1,\"699\":1,\"700\":1,\"701\":1,\"702\":1,\"715\":1,\"723\":1,\"733\":1,\"741\":1,\"742\":1,\"745\":1,\"746\":1,\"747\":1,\"748\":1,\"761\":1,\"769\":1,\"779\":1,\"787\":1,\"788\":1,\"791\":1,\"792\":1,\"793\":1,\"794\":1,\"803\":1,\"804\":1,\"808\":1,\"809\":1,\"810\":1,\"811\":1,\"812\":1,\"813\":1,\"814\":1,\"815\":1,\"816\":1,\"817\":1,\"818\":1,\"819\":2,\"820\":1,\"821\":1,\"822\":1,\"823\":1,\"824\":1,\"825\":1,\"826\":1,\"827\":1,\"828\":2,\"829\":1,\"830\":1,\"831\":1,\"832\":1,\"833\":1,\"834\":2,\"835\":1,\"836\":1,\"837\":1,\"838\":2,\"839\":1,\"840\":1,\"841\":2,\"842\":1,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"850\":1,\"851\":1,\"852\":2,\"853\":1,\"854\":1,\"855\":1,\"856\":1,\"857\":1,\"858\":1,\"859\":1,\"860\":1,\"861\":1,\"862\":1,\"863\":1,\"864\":1,\"865\":1,\"866\":1,\"867\":2,\"868\":1,\"869\":1,\"870\":1,\"871\":1,\"872\":2,\"873\":1,\"874\":1,\"875\":1,\"876\":1,\"877\":1,\"878\":2,\"879\":1,\"880\":1,\"881\":1,\"882\":1,\"883\":1,\"884\":1,\"885\":1,\"886\":1,\"887\":1,\"888\":1,\"889\":1,\"890\":1,\"891\":1,\"892\":1,\"893\":1,\"894\":1,\"895\":1,\"896\":1,\"897\":1,\"898\":2,\"899\":1,\"900\":1,\"930\":1,\"931\":1,\"935\":1,\"936\":1,\"937\":2,\"938\":1,\"939\":1,\"940\":1,\"941\":1,\"942\":1,\"943\":1,\"944\":2,\"945\":1,\"946\":1,\"947\":1,\"948\":2,\"949\":1,\"950\":2,\"951\":1,\"952\":1,\"953\":1,\"954\":1,\"955\":1,\"956\":1,\"957\":1,\"958\":1,\"959\":1,\"960\":1,\"961\":1,\"962\":1,\"963\":1,\"964\":1,\"965\":2,\"966\":1,\"967\":1,\"968\":1,\"969\":1,\"970\":1,\"971\":1,\"972\":1,\"973\":1,\"974\":1,\"975\":1,\"976\":1,\"977\":1,\"978\":1,\"979\":2,\"980\":1,\"981\":1,\"982\":1,\"983\":1,\"984\":1,\"985\":1,\"986\":1,\"987\":1,\"988\":2,\"989\":1,\"990\":1,\"991\":1,\"1017\":1,\"1018\":1,\"1019\":2,\"1020\":1,\"1021\":1,\"1022\":1,\"1023\":2,\"1024\":1,\"1025\":1,\"1026\":2,\"1027\":1,\"1028\":1,\"1029\":1,\"1030\":1,\"1031\":1,\"1032\":1,\"1033\":2,\"1034\":1,\"1035\":1,\"1036\":1,\"1037\":1,\"1038\":1,\"1039\":1,\"1040\":1,\"1041\":1,\"1042\":1,\"1043\":1,\"1044\":1,\"1045\":1,\"1046\":1,\"1047\":1,\"1048\":1,\"1049\":2,\"1050\":1,\"1051\":1,\"1052\":1,\"1053\":1,\"1054\":2,\"1055\":1,\"1056\":1,\"1057\":1,\"1058\":1,\"1059\":1,\"1060\":2,\"1061\":1,\"1062\":1,\"1063\":1,\"1064\":1,\"1065\":1,\"1066\":1,\"1067\":1,\"1068\":1,\"1069\":1,\"1070\":1,\"1071\":1,\"1072\":2,\"1073\":1,\"1074\":1,\"1076\":1,\"1077\":1,\"1078\":1,\"1079\":1,\"1080\":1,\"1081\":1,\"1082\":1,\"1083\":1,\"1084\":1,\"1085\":1,\"1086\":1,\"1087\":2,\"1088\":1,\"1089\":1,\"1090\":1,\"1091\":1,\"1092\":1,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":2,\"1097\":1,\"1098\":1,\"1099\":1,\"1101\":1,\"1102\":1,\"1103\":2,\"1104\":1,\"1105\":1,\"1106\":1,\"1107\":1,\"1108\":1,\"1109\":1,\"1110\":2,\"1111\":1,\"1112\":1,\"1113\":1,\"1114\":2,\"1115\":1,\"1116\":2,\"1117\":1,\"1118\":1,\"1119\":1,\"1120\":1,\"1121\":1,\"1122\":1,\"1123\":1,\"1124\":1,\"1125\":1,\"1126\":2,\"1127\":1,\"1128\":1,\"1144\":1,\"1145\":1,\"1146\":1,\"1147\":1,\"1148\":1,\"1149\":1,\"1150\":1,\"1151\":1,\"1152\":1,\"1153\":1,\"1154\":1,\"1155\":2,\"1156\":1,\"1157\":1,\"1158\":1,\"1159\":1,\"1160\":1,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":2,\"1165\":1,\"1166\":1,\"1167\":1,\"1168\":1,\"1169\":1,\"1170\":2,\"1171\":1,\"1172\":1,\"1173\":1,\"1174\":2,\"1175\":1,\"1176\":1,\"1177\":2,\"1178\":1,\"1179\":1,\"1180\":1,\"1181\":1,\"1182\":1,\"1183\":1,\"1184\":2,\"1185\":1,\"1186\":1,\"1187\":1,\"1188\":1,\"1189\":1,\"1190\":1,\"1191\":1,\"1192\":1,\"1193\":1,\"1194\":1,\"1195\":1,\"1196\":1,\"1197\":1,\"1198\":1,\"1199\":1,\"1200\":2,\"1201\":1,\"1202\":1,\"1203\":1,\"1204\":1,\"1205\":2,\"1206\":1,\"1207\":1,\"1208\":1,\"1209\":1,\"1210\":1,\"1211\":2,\"1212\":1,\"1213\":1,\"1214\":1,\"1215\":1,\"1216\":1,\"1217\":1,\"1218\":1,\"1219\":1,\"1220\":1,\"1221\":1,\"1222\":1,\"1223\":2,\"1224\":1,\"1225\":1,\"1234\":1,\"1235\":1,\"1239\":1,\"1240\":1,\"1241\":2,\"1242\":1,\"1243\":1,\"1244\":1,\"1245\":1,\"1246\":1,\"1247\":1,\"1248\":2,\"1249\":1,\"1250\":1,\"1251\":1,\"1252\":2,\"1253\":1,\"1254\":2,\"1255\":1,\"1256\":1,\"1257\":1,\"1258\":1,\"1259\":1,\"1260\":1,\"1261\":1,\"1262\":1,\"1263\":1,\"1264\":1,\"1265\":2,\"1266\":1,\"1267\":1,\"1268\":1,\"1269\":1,\"1270\":1,\"1271\":1,\"1272\":1,\"1273\":1,\"1274\":1,\"1275\":1,\"1276\":1,\"1277\":1,\"1278\":1,\"1279\":2,\"1280\":1,\"1281\":1,\"1282\":1,\"1283\":1,\"1284\":1,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":2,\"1289\":1,\"1290\":1,\"1291\":1,\"1316\":1,\"1317\":1,\"1318\":1,\"1319\":1,\"1320\":1,\"1321\":1,\"1322\":1,\"1323\":1,\"1324\":1,\"1325\":1,\"1326\":1,\"1327\":2,\"1328\":1,\"1329\":1,\"1330\":1,\"1331\":1,\"1332\":1,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":2,\"1337\":1,\"1338\":1,\"1339\":1,\"1340\":1,\"1341\":1,\"1342\":2,\"1343\":1,\"1344\":1,\"1345\":1,\"1346\":2,\"1347\":1,\"1348\":1,\"1349\":2,\"1350\":1,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1355\":1,\"1356\":1,\"1357\":2,\"1358\":1,\"1359\":1,\"1360\":1,\"1361\":1,\"1362\":1,\"1363\":1,\"1364\":1,\"1365\":1,\"1366\":1,\"1367\":1,\"1368\":1,\"1369\":1,\"1370\":1,\"1371\":1,\"1372\":2,\"1373\":1,\"1374\":1,\"1375\":1,\"1376\":1,\"1377\":2,\"1378\":1,\"1379\":1,\"1380\":1,\"1381\":1,\"1382\":1,\"1383\":2,\"1384\":1,\"1385\":1,\"1386\":1,\"1387\":1,\"1388\":1,\"1389\":1,\"1390\":1,\"1391\":1,\"1392\":1,\"1393\":1,\"1394\":1,\"1395\":1,\"1396\":1,\"1397\":1,\"1398\":1,\"1399\":2,\"1400\":1,\"1401\":1,\"1410\":1,\"1411\":1,\"1415\":1,\"1416\":1,\"1417\":2,\"1418\":1,\"1419\":1,\"1420\":1,\"1421\":1,\"1422\":1,\"1423\":1,\"1424\":2,\"1425\":1,\"1426\":1,\"1427\":1,\"1428\":2,\"1429\":1,\"1430\":2,\"1431\":1,\"1432\":1,\"1433\":1,\"1434\":1,\"1435\":1,\"1436\":1,\"1437\":1,\"1438\":1,\"1439\":1,\"1440\":1,\"1441\":2,\"1442\":1,\"1443\":1,\"1444\":1,\"1445\":1,\"1446\":1,\"1447\":1,\"1448\":1,\"1449\":1,\"1450\":1,\"1451\":1,\"1452\":1,\"1453\":1,\"1454\":1,\"1455\":2,\"1456\":1,\"1457\":1,\"1458\":1,\"1459\":1,\"1460\":1,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":2,\"1465\":1,\"1466\":1,\"1467\":1,\"1493\":1,\"1494\":1,\"1495\":1,\"1496\":1,\"1497\":1,\"1498\":1,\"1499\":1,\"1500\":1,\"1501\":1,\"1502\":1,\"1503\":1,\"1504\":2,\"1505\":1,\"1506\":1,\"1507\":1,\"1508\":1,\"1509\":1,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":2,\"1514\":1,\"1515\":1,\"1516\":1,\"1517\":1,\"1518\":1,\"1519\":2,\"1520\":1,\"1521\":1,\"1522\":1,\"1523\":2,\"1524\":1,\"1525\":1,\"1526\":2,\"1527\":1,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1532\":1,\"1533\":1,\"1534\":2,\"1535\":1,\"1536\":1,\"1537\":1,\"1538\":1,\"1539\":1,\"1540\":1,\"1541\":1,\"1542\":1,\"1543\":1,\"1544\":1,\"1545\":1,\"1546\":1,\"1547\":1,\"1548\":1,\"1549\":2,\"1550\":1,\"1551\":1,\"1552\":1,\"1553\":1,\"1554\":2,\"1555\":1,\"1556\":1,\"1557\":1,\"1558\":1,\"1559\":1,\"1560\":2,\"1561\":1,\"1562\":1,\"1563\":1,\"1564\":1,\"1565\":1,\"1566\":1,\"1567\":1,\"1568\":1,\"1569\":1,\"1570\":1,\"1571\":1,\"1572\":1,\"1573\":1,\"1574\":1,\"1575\":1,\"1576\":2,\"1577\":1,\"1578\":1,\"1587\":1,\"1588\":1,\"1592\":1,\"1593\":1,\"1594\":2,\"1595\":1,\"1596\":1,\"1597\":1,\"1598\":1,\"1599\":1,\"1600\":1,\"1601\":2,\"1602\":1,\"1603\":1,\"1604\":1,\"1605\":2,\"1606\":1,\"1607\":2,\"1608\":1,\"1609\":1,\"1610\":1,\"1611\":1,\"1612\":1,\"1613\":1,\"1614\":1,\"1615\":1,\"1616\":1,\"1617\":1,\"1618\":2,\"1619\":1,\"1620\":1,\"1621\":1,\"1622\":1,\"1623\":1,\"1624\":1,\"1625\":1,\"1626\":1,\"1627\":1,\"1628\":1,\"1629\":1,\"1630\":1,\"1631\":1,\"1632\":2,\"1633\":1,\"1634\":1,\"1635\":1,\"1636\":1,\"1637\":1,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":2,\"1642\":1,\"1643\":1,\"1644\":1,\"1670\":1,\"1671\":1,\"1672\":1,\"1673\":1,\"1674\":1,\"1675\":1,\"1676\":1,\"1677\":1,\"1678\":1,\"1679\":1,\"1680\":1,\"1681\":2,\"1682\":1,\"1683\":1,\"1684\":1,\"1685\":1,\"1686\":1,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":2,\"1691\":1,\"1692\":1,\"1693\":1,\"1694\":1,\"1695\":1,\"1696\":2,\"1697\":1,\"1698\":1,\"1699\":1,\"1700\":2,\"1701\":1,\"1702\":1,\"1703\":2,\"1704\":1,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1709\":1,\"1710\":1,\"1711\":2,\"1712\":1,\"1713\":1,\"1714\":1,\"1715\":1,\"1716\":1,\"1717\":1,\"1718\":1,\"1719\":1,\"1720\":1,\"1721\":1,\"1722\":1,\"1723\":1,\"1724\":1,\"1725\":1,\"1726\":2,\"1727\":1,\"1728\":1,\"1729\":1,\"1730\":1,\"1731\":2,\"1732\":1,\"1733\":1,\"1734\":1,\"1735\":1,\"1736\":1,\"1737\":2,\"1738\":1,\"1739\":1,\"1740\":1,\"1741\":1,\"1742\":1,\"1743\":1,\"1744\":1,\"1745\":1,\"1746\":1,\"1747\":1,\"1748\":1,\"1749\":1,\"1750\":1,\"1751\":1,\"1752\":1,\"1753\":2,\"1754\":1,\"1755\":1,\"1764\":1,\"1765\":1,\"1769\":1,\"1770\":1,\"1771\":2,\"1772\":1,\"1773\":1,\"1774\":1,\"1775\":1,\"1776\":1,\"1777\":1,\"1778\":2,\"1779\":1,\"1780\":1,\"1781\":1,\"1782\":2,\"1783\":1,\"1784\":2,\"1785\":1,\"1786\":1,\"1787\":1,\"1788\":1,\"1789\":1,\"1790\":1,\"1791\":1,\"1792\":1,\"1793\":1,\"1794\":1,\"1795\":2,\"1796\":1,\"1797\":1,\"1798\":1,\"1799\":1,\"1800\":1,\"1801\":1,\"1802\":1,\"1803\":1,\"1804\":1,\"1805\":1,\"1806\":1,\"1807\":1,\"1808\":1,\"1809\":2,\"1810\":1,\"1811\":1,\"1812\":1,\"1813\":1,\"1814\":1,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":2,\"1819\":1,\"1820\":1,\"1821\":1,\"1847\":1,\"1848\":1,\"1849\":1,\"1850\":1,\"1851\":1,\"1852\":1,\"1853\":1,\"1854\":1,\"1855\":1,\"1856\":1,\"1857\":1,\"1858\":2,\"1859\":1,\"1860\":1,\"1861\":1,\"1862\":1,\"1863\":1,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":2,\"1868\":1,\"1869\":1,\"1870\":1,\"1871\":1,\"1872\":1,\"1873\":2,\"1874\":1,\"1875\":1,\"1876\":1,\"1877\":2,\"1878\":1,\"1879\":1,\"1880\":2,\"1881\":1,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1886\":1,\"1887\":1,\"1888\":2,\"1889\":1,\"1890\":1,\"1891\":1,\"1892\":1,\"1893\":1,\"1894\":1,\"1895\":1,\"1896\":1,\"1897\":1,\"1898\":1,\"1899\":1,\"1900\":1,\"1901\":1,\"1902\":1,\"1903\":2,\"1904\":1,\"1905\":1,\"1906\":1,\"1907\":1,\"1908\":2,\"1909\":1,\"1910\":1,\"1911\":1,\"1912\":1,\"1913\":1,\"1914\":2,\"1915\":1,\"1916\":1,\"1917\":1,\"1918\":1,\"1919\":1,\"1920\":1,\"1921\":1,\"1922\":1,\"1923\":1,\"1924\":1,\"1925\":1,\"1926\":1,\"1927\":1,\"1928\":1,\"1929\":1,\"1930\":2,\"1931\":1,\"1932\":1,\"1941\":1,\"1942\":1,\"1946\":1,\"1947\":1,\"1948\":2,\"1949\":1,\"1950\":1,\"1951\":1,\"1952\":1,\"1953\":1,\"1954\":1,\"1955\":2,\"1956\":1,\"1957\":1,\"1958\":1,\"1959\":2,\"1960\":1,\"1961\":2,\"1962\":1,\"1963\":1,\"1964\":1,\"1965\":1,\"1966\":1,\"1967\":1,\"1968\":1,\"1969\":1,\"1970\":1,\"1971\":1,\"1972\":2,\"1973\":1,\"1974\":1,\"1975\":1,\"1976\":1,\"1977\":1,\"1978\":1,\"1979\":1,\"1980\":1,\"1981\":1,\"1982\":1,\"1983\":1,\"1984\":1,\"1985\":1,\"1986\":2,\"1987\":1,\"1988\":1,\"1989\":1,\"1990\":1,\"1991\":1,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":2,\"1996\":1,\"1997\":1,\"1998\":1,\"2024\":1,\"2025\":1,\"2026\":1,\"2027\":1,\"2028\":1,\"2029\":1,\"2030\":1,\"2031\":1,\"2032\":1,\"2033\":1,\"2034\":1,\"2035\":2,\"2036\":1,\"2037\":1,\"2038\":1,\"2039\":1,\"2040\":1,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":2,\"2045\":1,\"2046\":1,\"2047\":1,\"2048\":1,\"2049\":1,\"2050\":2,\"2051\":1,\"2052\":1,\"2053\":1,\"2054\":2,\"2055\":1,\"2056\":1,\"2057\":2,\"2058\":1,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2063\":1,\"2064\":1,\"2065\":2,\"2066\":1,\"2067\":1,\"2068\":1,\"2069\":1,\"2070\":1,\"2071\":1,\"2072\":1,\"2073\":1,\"2074\":1,\"2075\":1,\"2076\":1,\"2077\":1,\"2078\":1,\"2079\":1,\"2080\":2,\"2081\":1,\"2082\":1,\"2083\":1,\"2084\":1,\"2085\":2,\"2086\":1,\"2087\":1,\"2088\":1,\"2089\":1,\"2090\":1,\"2091\":2,\"2092\":1,\"2093\":1,\"2094\":1,\"2095\":1,\"2096\":1,\"2097\":1,\"2098\":1,\"2099\":1,\"2100\":1,\"2101\":1,\"2102\":1,\"2103\":1,\"2104\":1,\"2105\":1,\"2106\":1,\"2107\":2,\"2108\":1,\"2109\":1,\"2118\":1,\"2119\":1,\"2123\":1,\"2124\":1,\"2125\":2,\"2126\":1,\"2127\":1,\"2128\":1,\"2129\":1,\"2130\":1,\"2131\":1,\"2132\":2,\"2133\":1,\"2134\":1,\"2135\":1,\"2136\":2,\"2137\":1,\"2138\":2,\"2139\":1,\"2140\":1,\"2141\":1,\"2142\":1,\"2143\":1,\"2144\":1,\"2145\":1,\"2146\":1,\"2147\":1,\"2148\":1,\"2149\":2,\"2150\":1,\"2151\":1,\"2152\":1,\"2153\":1,\"2154\":1,\"2155\":1,\"2156\":1,\"2157\":1,\"2158\":1,\"2159\":1,\"2160\":1,\"2161\":1,\"2162\":1,\"2163\":2,\"2164\":1,\"2165\":1,\"2166\":1,\"2167\":1,\"2168\":1,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":2,\"2173\":1,\"2174\":1,\"2175\":1,\"2206\":1,\"2207\":1,\"2211\":1,\"2212\":1,\"2213\":1,\"2214\":1,\"2215\":1,\"2216\":1,\"2217\":1,\"2218\":1,\"2219\":1,\"2220\":1,\"2221\":1,\"2222\":2,\"2223\":1,\"2224\":1,\"2225\":1,\"2226\":1,\"2227\":1,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":2,\"2232\":1,\"2233\":1,\"2234\":1,\"2235\":1,\"2236\":1,\"2237\":2,\"2238\":1,\"2239\":1,\"2240\":1,\"2241\":2,\"2242\":1,\"2243\":1,\"2244\":2,\"2245\":1,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2253\":1,\"2254\":1,\"2255\":2,\"2256\":1,\"2257\":1,\"2258\":1,\"2259\":1,\"2260\":1,\"2261\":1,\"2262\":1,\"2263\":1,\"2264\":1,\"2265\":1,\"2266\":1,\"2267\":1,\"2268\":1,\"2269\":1,\"2270\":2,\"2271\":1,\"2272\":1,\"2273\":1,\"2274\":1,\"2275\":2,\"2276\":1,\"2277\":1,\"2278\":1,\"2279\":1,\"2280\":1,\"2281\":2,\"2282\":1,\"2283\":1,\"2284\":1,\"2285\":1,\"2286\":1,\"2287\":1,\"2288\":1,\"2289\":1,\"2290\":1,\"2291\":1,\"2292\":1,\"2293\":1,\"2294\":1,\"2295\":1,\"2296\":1,\"2297\":1,\"2298\":1,\"2299\":1,\"2300\":1,\"2301\":2,\"2302\":1,\"2303\":1,\"2333\":1,\"2334\":1,\"2338\":1,\"2339\":1,\"2340\":2,\"2341\":1,\"2342\":1,\"2343\":1,\"2344\":1,\"2345\":1,\"2346\":1,\"2347\":2,\"2348\":1,\"2349\":1,\"2350\":1,\"2351\":2,\"2352\":1,\"2353\":2,\"2354\":1,\"2355\":1,\"2356\":1,\"2357\":1,\"2358\":1,\"2359\":1,\"2360\":1,\"2361\":1,\"2362\":1,\"2363\":1,\"2364\":1,\"2365\":1,\"2366\":1,\"2367\":1,\"2368\":2,\"2369\":1,\"2370\":1,\"2371\":1,\"2372\":1,\"2373\":1,\"2374\":1,\"2375\":1,\"2376\":1,\"2377\":1,\"2378\":1,\"2379\":1,\"2380\":1,\"2381\":1,\"2382\":2,\"2383\":1,\"2384\":1,\"2385\":1,\"2386\":1,\"2387\":1,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":2,\"2392\":1,\"2393\":1,\"2394\":1,\"2425\":1,\"2426\":1,\"2430\":1,\"2431\":1,\"2432\":1,\"2433\":1,\"2434\":1,\"2435\":1,\"2436\":1,\"2437\":1,\"2438\":1,\"2439\":1,\"2440\":1,\"2441\":2,\"2442\":1,\"2443\":1,\"2444\":1,\"2445\":1,\"2446\":1,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":2,\"2451\":1,\"2452\":1,\"2453\":1,\"2454\":1,\"2455\":1,\"2456\":2,\"2457\":1,\"2458\":1,\"2459\":1,\"2460\":2,\"2461\":1,\"2462\":1,\"2463\":2,\"2464\":1,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2472\":1,\"2473\":1,\"2474\":2,\"2475\":1,\"2476\":1,\"2477\":1,\"2478\":1,\"2479\":1,\"2480\":1,\"2481\":1,\"2482\":1,\"2483\":1,\"2484\":1,\"2485\":1,\"2486\":1,\"2487\":1,\"2488\":1,\"2489\":2,\"2490\":1,\"2491\":1,\"2492\":1,\"2493\":1,\"2494\":2,\"2495\":1,\"2496\":1,\"2497\":1,\"2498\":1,\"2499\":1,\"2500\":2,\"2501\":1,\"2502\":1,\"2503\":1,\"2504\":1,\"2505\":1,\"2506\":1,\"2507\":1,\"2508\":1,\"2509\":1,\"2510\":1,\"2511\":1,\"2512\":1,\"2513\":1,\"2514\":1,\"2515\":1,\"2516\":1,\"2517\":1,\"2518\":1,\"2519\":1,\"2520\":2,\"2521\":1,\"2522\":1,\"2552\":1,\"2553\":1,\"2557\":1,\"2558\":1,\"2559\":2,\"2560\":1,\"2561\":1,\"2562\":1,\"2563\":1,\"2564\":1,\"2565\":1,\"2566\":2,\"2567\":1,\"2568\":1,\"2569\":1,\"2570\":2,\"2571\":1,\"2572\":2,\"2573\":1,\"2574\":1,\"2575\":1,\"2576\":1,\"2577\":1,\"2578\":1,\"2579\":1,\"2580\":1,\"2581\":1,\"2582\":1,\"2583\":1,\"2584\":1,\"2585\":1,\"2586\":1,\"2587\":2,\"2588\":1,\"2589\":1,\"2590\":1,\"2591\":1,\"2592\":1,\"2593\":1,\"2594\":1,\"2595\":1,\"2596\":1,\"2597\":1,\"2598\":1,\"2599\":1,\"2600\":1,\"2601\":2,\"2602\":1,\"2603\":1,\"2604\":1,\"2605\":1,\"2606\":1,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":2,\"2611\":1,\"2612\":1,\"2613\":1,\"2644\":1,\"2645\":1,\"2649\":1,\"2650\":1,\"2651\":1,\"2652\":1,\"2653\":1,\"2654\":1,\"2655\":1,\"2656\":1,\"2657\":1,\"2658\":1,\"2659\":1,\"2660\":2,\"2661\":1,\"2662\":1,\"2663\":1,\"2664\":1,\"2665\":1,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":2,\"2670\":1,\"2671\":1,\"2672\":1,\"2673\":1,\"2674\":1,\"2675\":2,\"2676\":1,\"2677\":1,\"2678\":1,\"2679\":2,\"2680\":1,\"2681\":1,\"2682\":2,\"2683\":1,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2691\":1,\"2692\":1,\"2693\":2,\"2694\":1,\"2695\":1,\"2696\":1,\"2697\":1,\"2698\":1,\"2699\":1,\"2700\":1,\"2701\":1,\"2702\":1,\"2703\":1,\"2704\":1,\"2705\":1,\"2706\":1,\"2707\":1,\"2708\":2,\"2709\":1,\"2710\":1,\"2711\":1,\"2712\":1,\"2713\":2,\"2714\":1,\"2715\":1,\"2716\":1,\"2717\":1,\"2718\":1,\"2719\":2,\"2720\":1,\"2721\":1,\"2722\":1,\"2723\":1,\"2724\":1,\"2725\":1,\"2726\":1,\"2727\":1,\"2728\":1,\"2729\":1,\"2730\":1,\"2731\":1,\"2732\":1,\"2733\":1,\"2734\":1,\"2735\":1,\"2736\":1,\"2737\":1,\"2738\":1,\"2739\":2,\"2740\":1,\"2741\":1,\"2771\":1,\"2772\":1,\"2776\":1,\"2777\":1,\"2778\":2,\"2779\":1,\"2780\":1,\"2781\":1,\"2782\":1,\"2783\":1,\"2784\":1,\"2785\":2,\"2786\":1,\"2787\":1,\"2788\":1,\"2789\":2,\"2790\":1,\"2791\":2,\"2792\":1,\"2793\":1,\"2794\":1,\"2795\":1,\"2796\":1,\"2797\":1,\"2798\":1,\"2799\":1,\"2800\":1,\"2801\":1,\"2802\":1,\"2803\":1,\"2804\":1,\"2805\":1,\"2806\":2,\"2807\":1,\"2808\":1,\"2809\":1,\"2810\":1,\"2811\":1,\"2812\":1,\"2813\":1,\"2814\":1,\"2815\":1,\"2816\":1,\"2817\":1,\"2818\":1,\"2819\":1,\"2820\":2,\"2821\":1,\"2822\":1,\"2823\":1,\"2824\":1,\"2825\":1,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":2,\"2830\":1,\"2831\":1,\"2832\":1},\"1\":{\"0\":4,\"5\":4,\"6\":2,\"8\":1,\"9\":1,\"10\":1,\"11\":1,\"12\":5,\"13\":1,\"14\":4,\"16\":1,\"20\":2,\"22\":3,\"30\":1,\"32\":4,\"33\":5,\"35\":1,\"37\":1,\"40\":1,\"41\":2,\"42\":7,\"44\":6,\"46\":7,\"48\":7,\"50\":7,\"52\":7,\"54\":7,\"56\":7,\"58\":7,\"60\":7,\"62\":7,\"67\":1,\"68\":1,\"70\":1,\"73\":1,\"77\":10,\"78\":2,\"81\":1,\"84\":4,\"85\":4,\"86\":3,\"89\":2,\"92\":1,\"94\":6,\"98\":3,\"100\":1,\"105\":3,\"106\":1,\"112\":5,\"113\":6,\"116\":3,\"122\":1,\"124\":2,\"125\":1,\"126\":1,\"130\":14,\"131\":10,\"134\":5,\"135\":2,\"141\":4,\"142\":2,\"143\":9,\"144\":2,\"145\":2,\"146\":6,\"147\":2,\"148\":4,\"149\":4,\"150\":3,\"152\":1,\"155\":1,\"156\":1,\"158\":1,\"159\":1,\"161\":1,\"170\":1,\"171\":3,\"172\":2,\"173\":2,\"174\":2,\"175\":3,\"176\":3,\"177\":2,\"178\":3,\"179\":2,\"180\":1,\"181\":1,\"182\":1,\"183\":2,\"184\":3,\"185\":2,\"186\":4,\"187\":3,\"188\":3,\"189\":2,\"190\":2,\"191\":2,\"192\":3,\"193\":3,\"194\":3,\"195\":3,\"196\":2,\"197\":2,\"198\":2,\"199\":2,\"200\":2,\"201\":2,\"202\":2,\"203\":2,\"204\":1,\"205\":2,\"206\":2,\"207\":2,\"208\":2,\"209\":4,\"210\":2,\"211\":1,\"212\":1,\"213\":1,\"214\":1,\"215\":3,\"216\":1,\"217\":1,\"218\":1,\"219\":1,\"220\":1,\"221\":2,\"222\":1,\"223\":1,\"224\":2,\"225\":2,\"226\":1,\"227\":1,\"228\":1,\"229\":2,\"230\":2,\"231\":2,\"232\":3,\"233\":2,\"234\":1,\"237\":2,\"238\":3,\"239\":2,\"240\":3,\"241\":2,\"242\":2,\"243\":3,\"244\":2,\"245\":2,\"246\":2,\"247\":3,\"248\":2,\"249\":2,\"250\":2,\"251\":3,\"252\":2,\"253\":3,\"254\":3,\"255\":2,\"256\":2,\"257\":1,\"258\":2,\"259\":1,\"260\":2,\"261\":3,\"262\":3,\"265\":1,\"266\":1,\"276\":1,\"278\":2,\"280\":2,\"281\":12,\"284\":3,\"285\":27,\"286\":28,\"287\":1,\"289\":2,\"291\":2,\"292\":12,\"295\":3,\"296\":29,\"297\":28,\"298\":1,\"299\":25,\"300\":47,\"301\":1,\"302\":4,\"303\":41,\"304\":1,\"305\":4,\"306\":23,\"307\":1,\"308\":4,\"309\":12,\"310\":1,\"311\":4,\"312\":12,\"314\":1,\"323\":91,\"327\":5,\"328\":10,\"329\":1,\"330\":2,\"333\":1,\"334\":23,\"337\":6,\"338\":4,\"341\":1,\"342\":3,\"343\":2,\"344\":2,\"347\":1,\"348\":10,\"352\":5,\"353\":1,\"354\":2,\"358\":5,\"359\":1,\"362\":1,\"363\":25,\"372\":1,\"373\":14,\"377\":1,\"379\":3,\"380\":2,\"384\":5,\"385\":1,\"388\":1,\"389\":32,\"392\":1,\"393\":1,\"394\":1,\"400\":2,\"401\":2,\"412\":1,\"415\":3,\"418\":2,\"419\":3,\"421\":2,\"423\":4,\"424\":2,\"425\":1,\"427\":1,\"428\":1,\"429\":1,\"430\":3,\"432\":2,\"434\":2,\"435\":16,\"437\":3,\"438\":17,\"439\":15,\"442\":14,\"443\":3,\"444\":2,\"445\":10,\"448\":2,\"449\":3,\"451\":2,\"452\":1,\"453\":5,\"454\":1,\"455\":1,\"456\":5,\"458\":2,\"460\":2,\"461\":16,\"463\":3,\"464\":20,\"465\":18,\"468\":12,\"471\":2,\"472\":3,\"474\":2,\"475\":1,\"476\":5,\"477\":1,\"478\":1,\"479\":5,\"481\":2,\"483\":2,\"484\":16,\"486\":3,\"487\":17,\"488\":17,\"491\":12,\"492\":2,\"493\":2,\"494\":10,\"497\":2,\"498\":3,\"500\":2,\"501\":1,\"502\":5,\"503\":1,\"504\":1,\"505\":5,\"507\":2,\"509\":2,\"510\":16,\"512\":3,\"513\":17,\"514\":17,\"517\":12,\"518\":2,\"519\":6,\"520\":13,\"523\":2,\"524\":3,\"526\":2,\"528\":4,\"529\":1,\"530\":3,\"532\":2,\"533\":1,\"535\":3,\"537\":2,\"539\":2,\"540\":16,\"542\":3,\"543\":17,\"544\":17,\"547\":14,\"548\":4,\"549\":2,\"550\":10,\"553\":2,\"554\":3,\"556\":2,\"558\":4,\"559\":2,\"560\":1,\"562\":2,\"563\":1,\"565\":3,\"567\":2,\"569\":2,\"570\":16,\"572\":3,\"573\":17,\"574\":15,\"577\":14,\"578\":3,\"579\":2,\"580\":10,\"583\":2,\"584\":3,\"586\":2,\"588\":4,\"589\":2,\"590\":1,\"592\":2,\"593\":1,\"595\":3,\"597\":2,\"599\":2,\"600\":16,\"602\":3,\"603\":17,\"604\":15,\"607\":14,\"608\":3,\"609\":2,\"610\":10,\"611\":2,\"612\":2,\"623\":1,\"626\":3,\"629\":2,\"630\":3,\"632\":2,\"634\":4,\"635\":2,\"636\":1,\"638\":2,\"641\":3,\"643\":2,\"645\":2,\"646\":16,\"648\":3,\"649\":17,\"650\":15,\"653\":14,\"654\":3,\"655\":2,\"656\":10,\"657\":2,\"658\":2,\"669\":1,\"672\":3,\"675\":2,\"676\":3,\"678\":2,\"680\":4,\"681\":2,\"682\":1,\"684\":2,\"687\":3,\"689\":2,\"691\":2,\"692\":16,\"694\":3,\"695\":17,\"696\":15,\"699\":14,\"700\":3,\"701\":2,\"702\":10,\"703\":2,\"704\":2,\"715\":1,\"718\":3,\"721\":2,\"722\":3,\"724\":2,\"726\":4,\"727\":2,\"728\":1,\"730\":2,\"733\":3,\"735\":2,\"737\":2,\"738\":16,\"740\":3,\"741\":17,\"742\":15,\"745\":14,\"746\":3,\"747\":2,\"748\":10,\"749\":2,\"750\":2,\"761\":1,\"764\":3,\"767\":2,\"768\":3,\"770\":2,\"772\":4,\"773\":2,\"774\":1,\"776\":1,\"777\":1,\"778\":1,\"779\":3,\"781\":2,\"783\":2,\"784\":16,\"786\":3,\"787\":17,\"788\":15,\"791\":14,\"792\":3,\"793\":2,\"794\":10,\"798\":7,\"804\":2,\"806\":8,\"808\":1,\"809\":1,\"810\":1,\"811\":4,\"812\":4,\"813\":1,\"814\":2,\"815\":2,\"816\":2,\"817\":1,\"818\":3,\"819\":2,\"820\":1,\"821\":1,\"822\":1,\"823\":1,\"824\":1,\"825\":1,\"826\":1,\"827\":1,\"828\":1,\"829\":1,\"830\":1,\"831\":1,\"832\":1,\"833\":1,\"834\":3,\"835\":2,\"836\":2,\"837\":2,\"838\":3,\"839\":3,\"840\":2,\"841\":3,\"842\":2,\"843\":1,\"844\":1,\"845\":1,\"846\":1,\"847\":1,\"848\":1,\"849\":1,\"850\":2,\"851\":3,\"852\":2,\"853\":2,\"854\":2,\"855\":2,\"856\":2,\"857\":2,\"858\":2,\"859\":2,\"860\":2,\"861\":2,\"862\":2,\"863\":2,\"864\":2,\"865\":2,\"866\":4,\"867\":2,\"868\":1,\"869\":1,\"870\":1,\"871\":1,\"872\":3,\"873\":1,\"874\":1,\"875\":1,\"876\":1,\"877\":1,\"878\":2,\"879\":1,\"880\":1,\"881\":2,\"882\":2,\"883\":1,\"884\":1,\"885\":1,\"886\":1,\"887\":2,\"888\":2,\"889\":2,\"890\":3,\"891\":2,\"892\":1,\"893\":1,\"894\":1,\"895\":1,\"896\":1,\"897\":1,\"898\":2,\"899\":2,\"900\":1,\"902\":3,\"903\":8,\"904\":3,\"905\":9,\"909\":1,\"910\":1,\"925\":8,\"931\":2,\"932\":4,\"933\":10,\"935\":2,\"936\":3,\"937\":2,\"938\":3,\"939\":2,\"940\":2,\"941\":2,\"942\":1,\"943\":1,\"944\":3,\"945\":2,\"946\":2,\"947\":2,\"948\":3,\"949\":2,\"950\":3,\"951\":3,\"952\":2,\"953\":1,\"954\":1,\"955\":1,\"956\":2,\"957\":2,\"958\":1,\"959\":1,\"960\":2,\"961\":1,\"962\":1,\"963\":1,\"964\":1,\"965\":2,\"966\":2,\"967\":1,\"968\":1,\"969\":1,\"970\":1,\"971\":4,\"972\":4,\"973\":1,\"974\":2,\"975\":2,\"976\":2,\"977\":1,\"978\":3,\"979\":2,\"980\":1,\"981\":1,\"982\":1,\"983\":1,\"984\":1,\"985\":1,\"986\":1,\"987\":1,\"988\":1,\"989\":1,\"990\":1,\"991\":1,\"993\":3,\"994\":8,\"995\":2,\"996\":3,\"997\":9,\"1001\":1,\"1002\":1,\"1017\":1,\"1018\":1,\"1019\":3,\"1020\":2,\"1021\":2,\"1022\":2,\"1023\":3,\"1024\":3,\"1025\":2,\"1026\":3,\"1027\":2,\"1028\":1,\"1029\":1,\"1030\":1,\"1031\":2,\"1032\":3,\"1033\":2,\"1034\":2,\"1035\":2,\"1036\":2,\"1037\":2,\"1038\":2,\"1039\":2,\"1040\":2,\"1041\":2,\"1042\":2,\"1043\":1,\"1044\":2,\"1045\":2,\"1046\":2,\"1047\":2,\"1048\":4,\"1049\":2,\"1050\":1,\"1051\":1,\"1052\":1,\"1053\":1,\"1054\":3,\"1055\":1,\"1056\":1,\"1057\":1,\"1058\":1,\"1059\":1,\"1060\":2,\"1061\":1,\"1062\":1,\"1063\":2,\"1064\":2,\"1065\":1,\"1066\":2,\"1067\":2,\"1068\":2,\"1069\":3,\"1070\":2,\"1071\":1,\"1072\":2,\"1073\":2,\"1074\":1,\"1076\":1,\"1077\":1,\"1078\":1,\"1079\":4,\"1080\":4,\"1081\":1,\"1082\":2,\"1083\":2,\"1084\":2,\"1085\":1,\"1086\":3,\"1087\":2,\"1088\":1,\"1089\":1,\"1090\":1,\"1091\":1,\"1092\":1,\"1093\":1,\"1094\":1,\"1095\":1,\"1096\":1,\"1097\":1,\"1098\":1,\"1099\":1,\"1101\":2,\"1102\":3,\"1103\":2,\"1104\":3,\"1105\":2,\"1106\":2,\"1107\":2,\"1108\":1,\"1109\":1,\"1110\":3,\"1111\":2,\"1112\":2,\"1113\":2,\"1114\":3,\"1115\":2,\"1116\":3,\"1117\":3,\"1118\":2,\"1119\":2,\"1120\":2,\"1121\":1,\"1122\":2,\"1123\":1,\"1124\":1,\"1125\":1,\"1126\":2,\"1127\":2,\"1128\":1,\"1130\":1,\"1131\":1,\"1144\":1,\"1145\":1,\"1146\":1,\"1147\":4,\"1148\":4,\"1149\":1,\"1150\":2,\"1151\":2,\"1152\":2,\"1153\":1,\"1154\":3,\"1155\":2,\"1156\":1,\"1157\":1,\"1158\":1,\"1159\":1,\"1160\":1,\"1161\":1,\"1162\":1,\"1163\":1,\"1164\":1,\"1165\":1,\"1166\":1,\"1167\":1,\"1168\":1,\"1169\":1,\"1170\":3,\"1171\":2,\"1172\":2,\"1173\":2,\"1174\":3,\"1175\":3,\"1176\":2,\"1177\":3,\"1178\":2,\"1179\":1,\"1180\":1,\"1181\":1,\"1182\":2,\"1183\":3,\"1184\":2,\"1185\":2,\"1186\":2,\"1187\":2,\"1188\":2,\"1189\":2,\"1190\":2,\"1191\":2,\"1192\":2,\"1193\":2,\"1194\":1,\"1195\":2,\"1196\":2,\"1197\":2,\"1198\":2,\"1199\":4,\"1200\":2,\"1201\":1,\"1202\":1,\"1203\":1,\"1204\":1,\"1205\":3,\"1206\":1,\"1207\":1,\"1208\":1,\"1209\":1,\"1210\":1,\"1211\":2,\"1212\":1,\"1213\":1,\"1214\":2,\"1215\":2,\"1216\":1,\"1217\":2,\"1218\":2,\"1219\":2,\"1220\":3,\"1221\":2,\"1222\":1,\"1223\":2,\"1224\":2,\"1225\":1,\"1229\":8,\"1235\":2,\"1236\":4,\"1237\":10,\"1239\":2,\"1240\":3,\"1241\":2,\"1242\":3,\"1243\":2,\"1244\":2,\"1245\":2,\"1246\":1,\"1247\":1,\"1248\":3,\"1249\":2,\"1250\":2,\"1251\":2,\"1252\":3,\"1253\":2,\"1254\":3,\"1255\":3,\"1256\":2,\"1257\":2,\"1258\":2,\"1259\":1,\"1260\":1,\"1261\":2,\"1262\":1,\"1263\":1,\"1264\":1,\"1265\":2,\"1266\":2,\"1267\":1,\"1268\":1,\"1269\":1,\"1270\":1,\"1271\":4,\"1272\":4,\"1273\":1,\"1274\":2,\"1275\":2,\"1276\":2,\"1277\":1,\"1278\":3,\"1279\":2,\"1280\":1,\"1281\":1,\"1282\":1,\"1283\":1,\"1284\":1,\"1285\":1,\"1286\":1,\"1287\":1,\"1288\":1,\"1289\":1,\"1290\":1,\"1291\":1,\"1293\":3,\"1294\":8,\"1295\":2,\"1296\":3,\"1297\":9,\"1301\":1,\"1302\":1,\"1316\":1,\"1317\":1,\"1318\":1,\"1319\":4,\"1320\":4,\"1321\":1,\"1322\":2,\"1323\":2,\"1324\":2,\"1325\":1,\"1326\":3,\"1327\":2,\"1328\":1,\"1329\":1,\"1330\":1,\"1331\":1,\"1332\":1,\"1333\":1,\"1334\":1,\"1335\":1,\"1336\":1,\"1337\":1,\"1338\":1,\"1339\":1,\"1340\":1,\"1341\":1,\"1342\":3,\"1343\":2,\"1344\":2,\"1345\":2,\"1346\":3,\"1347\":3,\"1348\":2,\"1349\":3,\"1350\":2,\"1351\":1,\"1352\":1,\"1353\":1,\"1354\":1,\"1355\":2,\"1356\":3,\"1357\":2,\"1358\":2,\"1359\":2,\"1360\":2,\"1361\":2,\"1362\":2,\"1363\":2,\"1364\":2,\"1365\":2,\"1366\":2,\"1367\":2,\"1368\":2,\"1369\":2,\"1370\":2,\"1371\":4,\"1372\":2,\"1373\":1,\"1374\":1,\"1375\":1,\"1376\":1,\"1377\":3,\"1378\":1,\"1379\":1,\"1380\":1,\"1381\":1,\"1382\":1,\"1383\":2,\"1384\":1,\"1385\":1,\"1386\":2,\"1387\":2,\"1388\":1,\"1389\":1,\"1390\":1,\"1391\":1,\"1392\":2,\"1393\":2,\"1394\":2,\"1395\":3,\"1396\":2,\"1397\":1,\"1398\":1,\"1399\":2,\"1400\":2,\"1401\":1,\"1405\":8,\"1411\":2,\"1412\":4,\"1413\":10,\"1415\":2,\"1416\":3,\"1417\":2,\"1418\":3,\"1419\":2,\"1420\":2,\"1421\":2,\"1422\":1,\"1423\":1,\"1424\":3,\"1425\":2,\"1426\":2,\"1427\":2,\"1428\":3,\"1429\":2,\"1430\":3,\"1431\":3,\"1432\":2,\"1433\":2,\"1434\":2,\"1435\":1,\"1436\":1,\"1437\":2,\"1438\":1,\"1439\":1,\"1440\":1,\"1441\":2,\"1442\":2,\"1443\":1,\"1444\":1,\"1445\":1,\"1446\":1,\"1447\":4,\"1448\":4,\"1449\":1,\"1450\":2,\"1451\":2,\"1452\":2,\"1453\":1,\"1454\":3,\"1455\":2,\"1456\":1,\"1457\":1,\"1458\":1,\"1459\":1,\"1460\":1,\"1461\":1,\"1462\":1,\"1463\":1,\"1464\":1,\"1465\":1,\"1466\":1,\"1467\":1,\"1469\":3,\"1470\":8,\"1471\":2,\"1472\":3,\"1473\":9,\"1477\":1,\"1478\":1,\"1493\":1,\"1494\":1,\"1495\":1,\"1496\":4,\"1497\":4,\"1498\":1,\"1499\":2,\"1500\":2,\"1501\":2,\"1502\":1,\"1503\":3,\"1504\":2,\"1505\":1,\"1506\":1,\"1507\":1,\"1508\":1,\"1509\":1,\"1510\":1,\"1511\":1,\"1512\":1,\"1513\":1,\"1514\":1,\"1515\":1,\"1516\":1,\"1517\":1,\"1518\":1,\"1519\":3,\"1520\":2,\"1521\":2,\"1522\":2,\"1523\":3,\"1524\":3,\"1525\":2,\"1526\":3,\"1527\":2,\"1528\":1,\"1529\":1,\"1530\":1,\"1531\":1,\"1532\":2,\"1533\":3,\"1534\":2,\"1535\":2,\"1536\":2,\"1537\":2,\"1538\":2,\"1539\":2,\"1540\":2,\"1541\":2,\"1542\":2,\"1543\":2,\"1544\":2,\"1545\":2,\"1546\":2,\"1547\":2,\"1548\":4,\"1549\":2,\"1550\":1,\"1551\":1,\"1552\":1,\"1553\":1,\"1554\":3,\"1555\":1,\"1556\":1,\"1557\":1,\"1558\":1,\"1559\":1,\"1560\":2,\"1561\":1,\"1562\":1,\"1563\":2,\"1564\":2,\"1565\":1,\"1566\":1,\"1567\":1,\"1568\":1,\"1569\":2,\"1570\":2,\"1571\":2,\"1572\":3,\"1573\":2,\"1574\":1,\"1575\":1,\"1576\":2,\"1577\":2,\"1578\":1,\"1582\":8,\"1588\":2,\"1589\":4,\"1590\":10,\"1592\":2,\"1593\":3,\"1594\":2,\"1595\":3,\"1596\":2,\"1597\":2,\"1598\":2,\"1599\":1,\"1600\":1,\"1601\":3,\"1602\":2,\"1603\":2,\"1604\":2,\"1605\":3,\"1606\":2,\"1607\":3,\"1608\":3,\"1609\":2,\"1610\":2,\"1611\":2,\"1612\":1,\"1613\":1,\"1614\":2,\"1615\":1,\"1616\":1,\"1617\":1,\"1618\":2,\"1619\":2,\"1620\":1,\"1621\":1,\"1622\":1,\"1623\":1,\"1624\":4,\"1625\":4,\"1626\":1,\"1627\":2,\"1628\":2,\"1629\":2,\"1630\":1,\"1631\":3,\"1632\":2,\"1633\":1,\"1634\":1,\"1635\":1,\"1636\":1,\"1637\":1,\"1638\":1,\"1639\":1,\"1640\":1,\"1641\":1,\"1642\":1,\"1643\":1,\"1644\":1,\"1646\":3,\"1647\":8,\"1648\":2,\"1649\":3,\"1650\":9,\"1654\":1,\"1655\":1,\"1670\":1,\"1671\":1,\"1672\":1,\"1673\":4,\"1674\":4,\"1675\":1,\"1676\":2,\"1677\":2,\"1678\":2,\"1679\":1,\"1680\":3,\"1681\":2,\"1682\":1,\"1683\":1,\"1684\":1,\"1685\":1,\"1686\":1,\"1687\":1,\"1688\":1,\"1689\":1,\"1690\":1,\"1691\":1,\"1692\":1,\"1693\":1,\"1694\":1,\"1695\":1,\"1696\":3,\"1697\":2,\"1698\":2,\"1699\":2,\"1700\":3,\"1701\":3,\"1702\":2,\"1703\":3,\"1704\":2,\"1705\":1,\"1706\":1,\"1707\":1,\"1708\":1,\"1709\":2,\"1710\":3,\"1711\":2,\"1712\":2,\"1713\":2,\"1714\":2,\"1715\":2,\"1716\":2,\"1717\":2,\"1718\":2,\"1719\":2,\"1720\":2,\"1721\":2,\"1722\":2,\"1723\":2,\"1724\":2,\"1725\":4,\"1726\":2,\"1727\":1,\"1728\":1,\"1729\":1,\"1730\":1,\"1731\":3,\"1732\":1,\"1733\":1,\"1734\":1,\"1735\":1,\"1736\":1,\"1737\":2,\"1738\":1,\"1739\":1,\"1740\":2,\"1741\":2,\"1742\":1,\"1743\":1,\"1744\":1,\"1745\":1,\"1746\":2,\"1747\":2,\"1748\":2,\"1749\":3,\"1750\":2,\"1751\":1,\"1752\":1,\"1753\":2,\"1754\":2,\"1755\":1,\"1759\":8,\"1765\":2,\"1766\":4,\"1767\":10,\"1769\":2,\"1770\":3,\"1771\":2,\"1772\":3,\"1773\":2,\"1774\":2,\"1775\":2,\"1776\":1,\"1777\":1,\"1778\":3,\"1779\":2,\"1780\":2,\"1781\":2,\"1782\":3,\"1783\":2,\"1784\":3,\"1785\":3,\"1786\":2,\"1787\":2,\"1788\":2,\"1789\":1,\"1790\":1,\"1791\":2,\"1792\":1,\"1793\":1,\"1794\":1,\"1795\":2,\"1796\":2,\"1797\":1,\"1798\":1,\"1799\":1,\"1800\":1,\"1801\":4,\"1802\":4,\"1803\":1,\"1804\":2,\"1805\":2,\"1806\":2,\"1807\":1,\"1808\":3,\"1809\":2,\"1810\":1,\"1811\":1,\"1812\":1,\"1813\":1,\"1814\":1,\"1815\":1,\"1816\":1,\"1817\":1,\"1818\":1,\"1819\":1,\"1820\":1,\"1821\":1,\"1823\":3,\"1824\":8,\"1825\":2,\"1826\":3,\"1827\":9,\"1831\":1,\"1832\":1,\"1847\":1,\"1848\":1,\"1849\":1,\"1850\":4,\"1851\":4,\"1852\":1,\"1853\":2,\"1854\":2,\"1855\":2,\"1856\":1,\"1857\":3,\"1858\":2,\"1859\":1,\"1860\":1,\"1861\":1,\"1862\":1,\"1863\":1,\"1864\":1,\"1865\":1,\"1866\":1,\"1867\":1,\"1868\":1,\"1869\":1,\"1870\":1,\"1871\":1,\"1872\":1,\"1873\":3,\"1874\":2,\"1875\":2,\"1876\":2,\"1877\":3,\"1878\":3,\"1879\":2,\"1880\":3,\"1881\":2,\"1882\":1,\"1883\":1,\"1884\":1,\"1885\":1,\"1886\":2,\"1887\":3,\"1888\":2,\"1889\":2,\"1890\":2,\"1891\":2,\"1892\":2,\"1893\":2,\"1894\":2,\"1895\":2,\"1896\":2,\"1897\":2,\"1898\":2,\"1899\":2,\"1900\":2,\"1901\":2,\"1902\":4,\"1903\":2,\"1904\":1,\"1905\":1,\"1906\":1,\"1907\":1,\"1908\":3,\"1909\":1,\"1910\":1,\"1911\":1,\"1912\":1,\"1913\":1,\"1914\":2,\"1915\":1,\"1916\":1,\"1917\":2,\"1918\":2,\"1919\":1,\"1920\":1,\"1921\":1,\"1922\":1,\"1923\":2,\"1924\":2,\"1925\":2,\"1926\":3,\"1927\":2,\"1928\":1,\"1929\":1,\"1930\":2,\"1931\":2,\"1932\":1,\"1936\":8,\"1942\":2,\"1943\":4,\"1944\":10,\"1946\":2,\"1947\":3,\"1948\":2,\"1949\":3,\"1950\":2,\"1951\":2,\"1952\":2,\"1953\":1,\"1954\":1,\"1955\":3,\"1956\":2,\"1957\":2,\"1958\":2,\"1959\":3,\"1960\":2,\"1961\":3,\"1962\":3,\"1963\":2,\"1964\":2,\"1965\":2,\"1966\":1,\"1967\":1,\"1968\":2,\"1969\":1,\"1970\":1,\"1971\":1,\"1972\":2,\"1973\":2,\"1974\":1,\"1975\":1,\"1976\":1,\"1977\":1,\"1978\":4,\"1979\":4,\"1980\":1,\"1981\":2,\"1982\":2,\"1983\":2,\"1984\":1,\"1985\":3,\"1986\":2,\"1987\":1,\"1988\":1,\"1989\":1,\"1990\":1,\"1991\":1,\"1992\":1,\"1993\":1,\"1994\":1,\"1995\":1,\"1996\":1,\"1997\":1,\"1998\":1,\"2000\":3,\"2001\":8,\"2002\":2,\"2003\":3,\"2004\":9,\"2008\":1,\"2009\":1,\"2024\":1,\"2025\":1,\"2026\":1,\"2027\":4,\"2028\":4,\"2029\":1,\"2030\":2,\"2031\":2,\"2032\":2,\"2033\":1,\"2034\":3,\"2035\":2,\"2036\":1,\"2037\":1,\"2038\":1,\"2039\":1,\"2040\":1,\"2041\":1,\"2042\":1,\"2043\":1,\"2044\":1,\"2045\":1,\"2046\":1,\"2047\":1,\"2048\":1,\"2049\":1,\"2050\":3,\"2051\":2,\"2052\":2,\"2053\":2,\"2054\":3,\"2055\":3,\"2056\":2,\"2057\":3,\"2058\":2,\"2059\":1,\"2060\":1,\"2061\":1,\"2062\":1,\"2063\":2,\"2064\":3,\"2065\":2,\"2066\":2,\"2067\":2,\"2068\":2,\"2069\":2,\"2070\":2,\"2071\":2,\"2072\":2,\"2073\":2,\"2074\":2,\"2075\":2,\"2076\":2,\"2077\":2,\"2078\":2,\"2079\":4,\"2080\":2,\"2081\":1,\"2082\":1,\"2083\":1,\"2084\":1,\"2085\":3,\"2086\":1,\"2087\":1,\"2088\":1,\"2089\":1,\"2090\":1,\"2091\":2,\"2092\":1,\"2093\":1,\"2094\":2,\"2095\":2,\"2096\":1,\"2097\":1,\"2098\":1,\"2099\":1,\"2100\":2,\"2101\":2,\"2102\":2,\"2103\":3,\"2104\":2,\"2105\":1,\"2106\":1,\"2107\":2,\"2108\":2,\"2109\":1,\"2113\":8,\"2119\":2,\"2120\":4,\"2121\":10,\"2123\":2,\"2124\":3,\"2125\":2,\"2126\":3,\"2127\":2,\"2128\":2,\"2129\":2,\"2130\":1,\"2131\":1,\"2132\":3,\"2133\":2,\"2134\":2,\"2135\":2,\"2136\":3,\"2137\":2,\"2138\":3,\"2139\":3,\"2140\":2,\"2141\":2,\"2142\":2,\"2143\":1,\"2144\":1,\"2145\":2,\"2146\":1,\"2147\":1,\"2148\":1,\"2149\":2,\"2150\":2,\"2151\":1,\"2152\":1,\"2153\":1,\"2154\":1,\"2155\":4,\"2156\":4,\"2157\":1,\"2158\":2,\"2159\":2,\"2160\":2,\"2161\":1,\"2162\":3,\"2163\":2,\"2164\":1,\"2165\":1,\"2166\":1,\"2167\":1,\"2168\":1,\"2169\":1,\"2170\":1,\"2171\":1,\"2172\":1,\"2173\":1,\"2174\":1,\"2175\":1,\"2177\":3,\"2178\":8,\"2179\":2,\"2180\":3,\"2181\":9,\"2185\":1,\"2186\":1,\"2201\":7,\"2207\":2,\"2209\":8,\"2211\":1,\"2212\":1,\"2213\":1,\"2214\":4,\"2215\":4,\"2216\":1,\"2217\":2,\"2218\":2,\"2219\":2,\"2220\":1,\"2221\":3,\"2222\":2,\"2223\":1,\"2224\":1,\"2225\":1,\"2226\":1,\"2227\":1,\"2228\":1,\"2229\":1,\"2230\":1,\"2231\":1,\"2232\":1,\"2233\":1,\"2234\":1,\"2235\":1,\"2236\":1,\"2237\":3,\"2238\":2,\"2239\":2,\"2240\":2,\"2241\":3,\"2242\":3,\"2243\":2,\"2244\":3,\"2245\":2,\"2246\":1,\"2247\":1,\"2248\":1,\"2249\":1,\"2250\":1,\"2251\":1,\"2252\":1,\"2253\":2,\"2254\":3,\"2255\":2,\"2256\":2,\"2257\":2,\"2258\":2,\"2259\":2,\"2260\":2,\"2261\":2,\"2262\":2,\"2263\":2,\"2264\":2,\"2265\":2,\"2266\":2,\"2267\":2,\"2268\":2,\"2269\":4,\"2270\":2,\"2271\":1,\"2272\":1,\"2273\":1,\"2274\":1,\"2275\":3,\"2276\":1,\"2277\":1,\"2278\":1,\"2279\":1,\"2280\":1,\"2281\":2,\"2282\":1,\"2283\":1,\"2284\":2,\"2285\":2,\"2286\":1,\"2287\":1,\"2288\":1,\"2289\":1,\"2290\":2,\"2291\":2,\"2292\":2,\"2293\":3,\"2294\":2,\"2295\":1,\"2296\":1,\"2297\":1,\"2298\":1,\"2299\":1,\"2300\":1,\"2301\":2,\"2302\":2,\"2303\":1,\"2305\":3,\"2306\":8,\"2307\":3,\"2308\":9,\"2312\":1,\"2313\":1,\"2328\":8,\"2334\":2,\"2335\":4,\"2336\":10,\"2338\":2,\"2339\":3,\"2340\":2,\"2341\":3,\"2342\":2,\"2343\":2,\"2344\":2,\"2345\":1,\"2346\":1,\"2347\":3,\"2348\":2,\"2349\":2,\"2350\":2,\"2351\":3,\"2352\":2,\"2353\":3,\"2354\":3,\"2355\":2,\"2356\":1,\"2357\":1,\"2358\":1,\"2359\":2,\"2360\":2,\"2361\":1,\"2362\":1,\"2363\":2,\"2364\":1,\"2365\":1,\"2366\":1,\"2367\":1,\"2368\":2,\"2369\":2,\"2370\":1,\"2371\":1,\"2372\":1,\"2373\":1,\"2374\":4,\"2375\":4,\"2376\":1,\"2377\":2,\"2378\":2,\"2379\":2,\"2380\":1,\"2381\":3,\"2382\":2,\"2383\":1,\"2384\":1,\"2385\":1,\"2386\":1,\"2387\":1,\"2388\":1,\"2389\":1,\"2390\":1,\"2391\":1,\"2392\":1,\"2393\":1,\"2394\":1,\"2396\":3,\"2397\":8,\"2398\":2,\"2399\":3,\"2400\":9,\"2404\":1,\"2405\":1,\"2420\":7,\"2426\":2,\"2428\":8,\"2430\":1,\"2431\":1,\"2432\":1,\"2433\":4,\"2434\":4,\"2435\":1,\"2436\":2,\"2437\":2,\"2438\":2,\"2439\":1,\"2440\":3,\"2441\":2,\"2442\":1,\"2443\":1,\"2444\":1,\"2445\":1,\"2446\":1,\"2447\":1,\"2448\":1,\"2449\":1,\"2450\":1,\"2451\":1,\"2452\":1,\"2453\":1,\"2454\":1,\"2455\":1,\"2456\":3,\"2457\":2,\"2458\":2,\"2459\":2,\"2460\":3,\"2461\":3,\"2462\":2,\"2463\":3,\"2464\":2,\"2465\":1,\"2466\":1,\"2467\":1,\"2468\":1,\"2469\":1,\"2470\":1,\"2471\":1,\"2472\":2,\"2473\":3,\"2474\":2,\"2475\":2,\"2476\":2,\"2477\":2,\"2478\":2,\"2479\":2,\"2480\":2,\"2481\":2,\"2482\":2,\"2483\":2,\"2484\":2,\"2485\":2,\"2486\":2,\"2487\":2,\"2488\":4,\"2489\":2,\"2490\":1,\"2491\":1,\"2492\":1,\"2493\":1,\"2494\":3,\"2495\":1,\"2496\":1,\"2497\":1,\"2498\":1,\"2499\":1,\"2500\":2,\"2501\":1,\"2502\":1,\"2503\":2,\"2504\":2,\"2505\":1,\"2506\":1,\"2507\":1,\"2508\":1,\"2509\":2,\"2510\":2,\"2511\":2,\"2512\":3,\"2513\":2,\"2514\":1,\"2515\":1,\"2516\":1,\"2517\":1,\"2518\":1,\"2519\":1,\"2520\":2,\"2521\":2,\"2522\":1,\"2524\":3,\"2525\":8,\"2526\":3,\"2527\":9,\"2531\":1,\"2532\":1,\"2547\":8,\"2553\":2,\"2554\":4,\"2555\":10,\"2557\":2,\"2558\":3,\"2559\":2,\"2560\":3,\"2561\":2,\"2562\":2,\"2563\":2,\"2564\":1,\"2565\":1,\"2566\":3,\"2567\":2,\"2568\":2,\"2569\":2,\"2570\":3,\"2571\":2,\"2572\":3,\"2573\":3,\"2574\":2,\"2575\":1,\"2576\":1,\"2577\":1,\"2578\":2,\"2579\":2,\"2580\":1,\"2581\":1,\"2582\":2,\"2583\":1,\"2584\":1,\"2585\":1,\"2586\":1,\"2587\":2,\"2588\":2,\"2589\":1,\"2590\":1,\"2591\":1,\"2592\":1,\"2593\":4,\"2594\":4,\"2595\":1,\"2596\":2,\"2597\":2,\"2598\":2,\"2599\":1,\"2600\":3,\"2601\":2,\"2602\":1,\"2603\":1,\"2604\":1,\"2605\":1,\"2606\":1,\"2607\":1,\"2608\":1,\"2609\":1,\"2610\":1,\"2611\":1,\"2612\":1,\"2613\":1,\"2615\":3,\"2616\":8,\"2617\":2,\"2618\":3,\"2619\":9,\"2623\":1,\"2624\":1,\"2639\":7,\"2645\":2,\"2647\":8,\"2649\":1,\"2650\":1,\"2651\":1,\"2652\":4,\"2653\":4,\"2654\":1,\"2655\":2,\"2656\":2,\"2657\":2,\"2658\":1,\"2659\":3,\"2660\":2,\"2661\":1,\"2662\":1,\"2663\":1,\"2664\":1,\"2665\":1,\"2666\":1,\"2667\":1,\"2668\":1,\"2669\":1,\"2670\":1,\"2671\":1,\"2672\":1,\"2673\":1,\"2674\":1,\"2675\":3,\"2676\":2,\"2677\":2,\"2678\":2,\"2679\":3,\"2680\":3,\"2681\":2,\"2682\":3,\"2683\":2,\"2684\":1,\"2685\":1,\"2686\":1,\"2687\":1,\"2688\":1,\"2689\":1,\"2690\":1,\"2691\":2,\"2692\":3,\"2693\":2,\"2694\":2,\"2695\":2,\"2696\":2,\"2697\":2,\"2698\":2,\"2699\":2,\"2700\":2,\"2701\":2,\"2702\":2,\"2703\":2,\"2704\":2,\"2705\":2,\"2706\":2,\"2707\":4,\"2708\":2,\"2709\":1,\"2710\":1,\"2711\":1,\"2712\":1,\"2713\":3,\"2714\":1,\"2715\":1,\"2716\":1,\"2717\":1,\"2718\":1,\"2719\":2,\"2720\":1,\"2721\":1,\"2722\":2,\"2723\":2,\"2724\":1,\"2725\":1,\"2726\":1,\"2727\":1,\"2728\":2,\"2729\":2,\"2730\":2,\"2731\":3,\"2732\":2,\"2733\":1,\"2734\":1,\"2735\":1,\"2736\":1,\"2737\":1,\"2738\":1,\"2739\":2,\"2740\":2,\"2741\":1,\"2743\":3,\"2744\":8,\"2745\":3,\"2746\":9,\"2750\":1,\"2751\":1,\"2766\":8,\"2772\":2,\"2773\":4,\"2774\":10,\"2776\":2,\"2777\":3,\"2778\":2,\"2779\":3,\"2780\":2,\"2781\":2,\"2782\":2,\"2783\":1,\"2784\":1,\"2785\":3,\"2786\":2,\"2787\":2,\"2788\":2,\"2789\":3,\"2790\":2,\"2791\":3,\"2792\":3,\"2793\":2,\"2794\":1,\"2795\":1,\"2796\":1,\"2797\":2,\"2798\":2,\"2799\":1,\"2800\":1,\"2801\":2,\"2802\":1,\"2803\":1,\"2804\":1,\"2805\":1,\"2806\":2,\"2807\":2,\"2808\":1,\"2809\":1,\"2810\":1,\"2811\":1,\"2812\":4,\"2813\":4,\"2814\":1,\"2815\":2,\"2816\":2,\"2817\":2,\"2818\":1,\"2819\":3,\"2820\":2,\"2821\":1,\"2822\":1,\"2823\":1,\"2824\":1,\"2825\":1,\"2826\":1,\"2827\":1,\"2828\":1,\"2829\":1,\"2830\":1,\"2831\":1,\"2832\":1,\"2834\":3,\"2835\":8,\"2836\":2,\"2837\":3,\"2838\":9,\"2842\":1,\"2843\":1}}]],\"serializationVersion\":2}}")).map(([e,t])=>[e,zt(t,{fields:["h","t","c"],storeFields:["h","t","c"]})]));self.onmessage=({data:{type:e="all",query:t,locale:s,options:n,id:o}})=>{const u=bt[s];e==="suggest"?self.postMessage([e,o,tt(t,u,n)]):e==="search"?self.postMessage([e,o,Z(t,u,n)]):self.postMessage({suggestions:[e,o,tt(t,u,n)],results:[e,o,Z(t,u,n)]})}; +//# sourceMappingURL=index.js.map diff --git a/security/index.html b/security/index.html new file mode 100644 index 000000000..dda09808e --- /dev/null +++ b/security/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Security + + + + + +
    Skip to main content

    Security

    DSF-TeamAbout 2 min

    We take security of the DSF, its process plugins, services and tools we operate very seriously.

    We describe the security mechanisms used by the DSF to implement secure communication on the pages Architectureopen in new window, Securityopen in new window and Allow Listopen in new window.

    To ensure a high level of security, you should always install the latest DSF version and use the latest versions of the process plugins. Use the instructions to installopen in new window the latest version of the DSF or to upgradeopen in new window on the latest version. The instructions described there implement the security configuration recommended by us.

    It is also important that you ensure a secure operating environment in which you verify firewall configurations, keep the operating systems on which the DSF is running up to date and harden it according to the latest state of the art.

    Security vulnerability disclosure policy

    Our commitment to security

    We as the DSF development team take security of our software, services and data very seriously. We understand that despite our best efforts, vulnerabilities can exist. To address this, we encourage responsible reporting of any security vulnerabilities discovered in our software and systems.

    Responsible disclosure

    We kindly ask security researchers and the general public to follow the principles of Coordinated Vulnerability Disclosure (CVD) or Responsible Disclosure when reporting vulnerabilities to us. This approach helps us to mitigate potential risks and protect our users' data effectively.

    How to Report a Vulnerability

    If you believe you have found a security vulnerability in our system, please email us at dsf-security@hs-heilbronn.de. If you want to use end-to-end-encryption, you can send us mails using s-mime with the certificate chain provided hereopen in new window. We kindly request the following:

    • Provide a detailed description of the vulnerability, including if possible the potential impact and how it can be exploited.
    • Include steps to reproduce the vulnerability or proof-of-concept code, if possible.
    • Avoid accessing or modifying user data without permission, and do not exploit a security issue for any reason other than testing.
    • Maintain confidentiality and do not publicly disclose the vulnerability, until we have had the opportunity to investigate and address it.

    Please do not file an issue on a security-related topic and use the e-mail address provided. You can verify the address both in the application repositoryopen in new window and at the homepage (this page).

    Our promise

    • Acknowledgement: We usually will acknowledge receipt of your vulnerability report within 48 hours.
    • Investigation: Our security team will investigate the issue and work diligently to verify and reproduce the vulnerability.
    • Communication: We will keep you informed of our progress as we work to resolve the issue.
    • Resolution: We will strive to resolve security issues in a timely manner and release updates, patches, or remediations as needed.
    • Recognition: We value your effort in making our systems more secure and will recognize your contribution, if desired, once the vulnerability is resolved.

    We promise not to initiate legal action against individuals who report vulnerabilities responsibly in accordance with this policy. This includes not suing for accidental access to data or reporting in good faith.

    Questions?

    If you have any questions about this policy or security of the Data Sharing Framework, the services and tools we provide, please contact us at dsf-security@hs-heilbronn.de. You can send us encrypted e-mails using s-mime. You can find the certificate chain hereopen in new window.

    Last update:
    + + + diff --git a/sprechstunde/index.html b/sprechstunde/index.html new file mode 100644 index 000000000..1affc1ccc --- /dev/null +++ b/sprechstunde/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Sprechstunde + + + + + + + + + diff --git a/stable/contribute/code.html b/stable/contribute/code.html new file mode 100644 index 000000000..a28480acc --- /dev/null +++ b/stable/contribute/code.html @@ -0,0 +1,40 @@ + + + + + + + + + + Contribute code + + + + + +
    Skip to main content

    Contribute code

    DSF-TeamAbout 3 min

    Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.

    Benefits of Contributing:

    • Foster community growth and diversification.
    • Sharpen your coding skills.
    • Gain recognition in the DSF community.
    • Directly impact the future of data sharing in medicine.

    Start now by visiting our contribution pages. Every line of code helps us build a stronger and more versatile DSF.

    General

    Code style

    You can import our code style for your specific IDE:

    • Eclipseopen in new window. Open your preferences, click on Java, Code style, Formatter, Import and select the downloaded file.
    • IntelliJopen in new window. Open your settings, click on Editor, Code style, Java, the settings icon, import scheme, IntelliJ and select the downloaded file.

    Pull requests will only be approved if the code is formatted according to the code style configurations above. To format the code with maven before pushing to GitHub, use mvn compile -Pformat-and-sort.

    Branching strategy

    Git Flowopen in new window is used as this project's branching strategy. Therefore, you will find the following structure:

    • main
    • develop
    • issue
    • hotfix
    • release

    Notice that only the first two elements listed are actual branches. The other elements are containers to hold all branches belonging to that category.

    Branch naming

    The following ruleset is applied to name branches:

    • issue/<issue-number>_<issue-name>
    • hotfix/<version>
    • release/<version>

    Setting up the project

    This chapter lists all important requirements to get the project buildable and running properly.

    Java

    This project uses Java JDK 17, so make sure you have it installed on your system.

    Docker

    Dockeropen in new window is used in this project to test database functionality and to run more complex test-setups.

    Maven

    The project relies on Mavenopen in new window as its management tool.
    Important: When building the project you might encounter the following error:
    Could not determine gpg version GPGopen in new window is used to sign artifacts for public release. Since this does not concern contributors, you may skip this step in the maven build process with -Dgpg.skip.

    Workflow

    1. Create an issue or comment on an issue that you want to contribute some feature
    2. Fork the repository, create a branch and mention it in the issue
    3. If you desire feedback, create a pull request or comment on it in the issue. Feel free to @ any member with write permissions if you feel like your request has not been registered yet. They will review your changes and/or change requests
    4. If your changes are production-ready, create a pull requestopen in new window.

    Pull request process

    We follow Martin Fowler's method for managing pull requests. This approach categorizes pull requests based on the level of trust and experience of the contributor, as well as the impact of the changes. Here's how we apply it:

    1. Ship: For our most trusted contributors with a proven track record. These members can merge their pull requests without prior review, typically for minor or highly confident changes.

    2. Show: This level is for trusted contributors who need some oversight, as well as for experienced developers who want to demonstrate how certain changes should be made in the future. They create pull requests and show their work to the team.

    3. Ask: New or less experienced contributors, as well as those submitting more complex changes, fall into this category. They are required to ask for feedback and approval before their changes can be merged, ensuring thorough review and quality control.

    This method helps us maintain a balance between code quality and efficient development, recognizing the varying levels of expertise among our contributors.

    For more information on Fowler's approach, visit Martin Fowler's article on Pull Requestsopen in new window.

    Data Security in DSF Development

    The DSF (Data Sharing Framework) and its process plugins are frequently used to transmit sensitive personal data. To prevent the release of personal data during development, please adhere to the following guidelines:

    • No development with real personal data: Always use anonymized or synthetic data for development purposes.
    • No personal data in repositories: Ensure no personal data is present in local and remote repositories intended for publication, not even temporarily.
    • Review all log files: Before using log files in issues, examples, etc., thoroughly review them to ensure no personal and sensitive data is included.
    + + + diff --git a/stable/contribute/documentation.html b/stable/contribute/documentation.html new file mode 100644 index 000000000..fb3b9bdbd --- /dev/null +++ b/stable/contribute/documentation.html @@ -0,0 +1,40 @@ + + + + + + + + + + Contribute documentation + + + + + +
    Skip to main content

    Contribute documentation

    DSF-TeamLess than 1 minute

    Join us in enhancing our documentation!

    We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!

    1. Contact us with feedback: If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.
    2. Create an issue: You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at Data Sharing Framework Documentationopen in new window and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.
    3. Contribute directly with a pull request: If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at Data Sharing Framework Documentationopen in new window and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.

    We're excited to see your suggestions and are grateful for every contribution that helps us improve. Let's build better documentation together!

    + + + diff --git a/stable/contribute/index.html b/stable/contribute/index.html new file mode 100644 index 000000000..9fa17f71d --- /dev/null +++ b/stable/contribute/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Contribute + + + + + +
    Skip to main content

    Contribute

    DSF-TeamAbout 2 min

    We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.

    Ways you can contribute:

    1. Helping other users:
    2. Testing releases:
      • Stay ahead: Help us testing the latest releases. Your feedback on functionality, bugs, and user experience is invaluable.
      • Report findings: Share your testing results to help us refine and enhance our releases.
    3. Reviewing changes:
      • Peer review: Contribute by reviewing pull requests. Your insights can help ensure the quality and integrity of code changes.
      • Constructive feedback: Offer constructive feedback and suggestions to help improve and refine proposed changes.
    4. Documentation changes:
    5. Contributing bug reports:
      • Report bugs: If you find a bug, please report it via an issue on GitHubopen in new window. Detailed bug reports are incredibly helpful.
      • Reproduction steps: Include steps to reproduce the bug and any relevant logs according to our bug report issue template.
    6. Contributing feature requests:
      • Suggest features: You have an idea for a new feature? We'd love to hear it! Open an issue to describe your proposed feature and its potential benefits according to our feature request template.
      • Collaborate on implementation: If you're able to, contribute to the development of your proposed feature or bug fix. Collaboration can lead to more innovative and effective solutions. Please checkout our Getting started guide for code contributions to DSF.
    7. Contributing process plugins:

    Before you start contributing, we recommend reading our getting started guidelines for detailed information on our processes and standards. This ensures a smooth and productive experience for everyone involved.

    Your contributions in any form, are what drives the continuous growth and improvement of this project. Thank you for being a part of our community and for your willingness to contribute!

    + + + diff --git a/stable/develop/create.html b/stable/develop/create.html new file mode 100644 index 000000000..1367a5096 --- /dev/null +++ b/stable/develop/create.html @@ -0,0 +1,40 @@ + + + + + + + + + + Create a new process plugin + + + + + + + + + diff --git a/stable/develop/index.html b/stable/develop/index.html new file mode 100644 index 000000000..edee18cb0 --- /dev/null +++ b/stable/develop/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Develop Process Plugins + + + + + + + + + diff --git a/stable/develop/upgrade-from-0.html b/stable/develop/upgrade-from-0.html new file mode 100644 index 000000000..3218b21b0 --- /dev/null +++ b/stable/develop/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade processes from 0.9.x + + + + + + + + + diff --git a/stable/dsf-for-dev.html b/stable/dsf-for-dev.html new file mode 100644 index 000000000..d7996306a --- /dev/null +++ b/stable/dsf-for-dev.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF for Developers + + + + + + + + + diff --git a/stable/index.html b/stable/index.html new file mode 100644 index 000000000..79e7aaab2 --- /dev/null +++ b/stable/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF 1.5.2 + + + + + +
    Skip to main content

    DSF 1.5.2

    DSF-TeamLess than 1 minute

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    Important note

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsfopen in new window.

    System Administrators

    Developers

    New features

    • Improved versioning to support up- and downwards-compatibility
    • Enhanced web ui to start processes in the web browser
    • Allow local user authentication and authorization with OpenID Connect
    • New process plugin API
    • Removed mostly unused features to simplify instance configuration
    • Unified proxy setup
    • Many more features, see 1.x release-notesopen in new window
    Last update:
    + + + diff --git a/stable/maintain/allowList-mgm.html b/stable/maintain/allowList-mgm.html new file mode 100644 index 000000000..9762c0ac6 --- /dev/null +++ b/stable/maintain/allowList-mgm.html @@ -0,0 +1,40 @@ + + + + + + + + + + Allow List Management + + + + + +
    Skip to main content

    Allow List Management

    DSF-TeamAbout 1 min

    You can read all about the concept of Allow Lists in our introduction.

    Overview

    To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

    The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.

    Prerequisites

    1. Deployed DSF instance (test or production infrastructure)
      1.1 If none exists yet, read the installation guide
    2. Certificate
      2.1 If none exists yet, read the certificate requirements
    3. Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de
    4. FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir
    5. Contact details from a responsible person of your organization
    6. Access to the E-Mail address from your organization for verification

    Start here

    When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:

    We use different highlight colors for the DSF Allow List Management Tool: Green for the Test environment and blue for the Production infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/stable/maintain/bpe-reverse-proxy/configuration.html b/stable/maintain/bpe-reverse-proxy/configuration.html new file mode 100644 index 000000000..44b944695 --- /dev/null +++ b/stable/maintain/bpe-reverse-proxy/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 1 min

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF BPE server application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF BPE server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /bpe

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    + + + diff --git a/stable/maintain/bpe-reverse-proxy/index.html b/stable/maintain/bpe-reverse-proxy/index.html new file mode 100644 index 000000000..6701e6e36 --- /dev/null +++ b/stable/maintain/bpe-reverse-proxy/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + BPE Reverse Proxy + + + + + + + + + diff --git a/stable/maintain/bpe/access-control.html b/stable/maintain/bpe/access-control.html new file mode 100644 index 000000000..d8af35f7d --- /dev/null +++ b/stable/maintain/bpe/access-control.html @@ -0,0 +1,65 @@ + + + + + + + + + + Access Control + + + + + +
    Skip to main content

    Access Control

    DSF-TeamAbout 2 min

    Overview

    The DSF BPE server provides a user interface for administrators. Without any additional configuration the user interface is not accessible with the organizations X.509 client certificate or any other certificate or OpenID Connect authenticated user.

    OpenID Connect

    To enable OpenID Connect authentication of local user, see the DSF BPE server OpenID Connect configuration page.

    Access to the user interface can be enabled for client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

    The listing below shows a minimal configuration to enable access for a specific client-certificate:

          DEV_DSF_BPE_SERVER_ROLECONFIG: |
    +        - example_read_only_role:
    +            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
    +            dsf-role:
    +              - ADMIN
    +

    The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.

    Certificate Thumbprints

    SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

    certtool --fingerprint --hash=sha512 --infile=certificate.pem
    +

    Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG if no roles should be configured.

    Matching Users

    To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

    thumbprint

    The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

    email

    Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the email claimopen in new window from the access token will be matched against the property values.

    token-role and token-group

    With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

    DSF and Practitioner Roles

    Two types of roles can be applied to matched users.

    dsf-role

    DSF roles specified via the dsf-role property define general access to the user interface. Allowed values are:

    ADMIN.

    practitioner-role

    The BPE server currently does not support any practionier-roles.

    Examples

    The first example defines a group of DSF administrators. Two client certificates match against this role:

          DEV_DSF_BPE_SERVER_ROLECONFIG: |
    +        - certificate-admins:
    +            thumbprint: 
    +              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
    +              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
    +            dsf-role:
    +              - ADMIN
    +

    The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

          DEV_DSF_BPE_SERVER_ROLECONFIG: |
    +        - token-role-admins:
    +            token-role: admin
    +            dsf-role:
    +              - ADMIN
    +

    The third example allows administrator access and users e-mail addresses to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

          DEV_DSF_BPE_SERVER_ROLECONFIG: |
    +        - email-admins:
    +            email:
    +              - first.user@test.org
    +              - second.user@test.org
    +            dsf-role:
    +              - ADMIN
    +
    + + + diff --git a/stable/maintain/bpe/configuration.html b/stable/maintain/bpe/configuration.html new file mode 100644 index 000000000..912d06352 --- /dev/null +++ b/stable/maintain/bpe/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 9 min

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: Address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: Password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: Username to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: Password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: Username to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_CURRENTUSER

    • Property: dev.dsf.bpe.debug.log.message.currentUser
    • Required: No
    • Description: To enable logging of the currently requesting user set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_DBSTATEMENT

    • Property: dev.dsf.bpe.debug.log.message.dbStatement
    • Required: No
    • Description: To enable logging of DB queries set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL

    • Property: dev.dsf.bpe.debug.log.message.variablesLocal
    • Required: No
    • Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST

    • Property: dev.dsf.bpe.debug.log.message.webserviceRequest
    • Required: No
    • Description: To enable logging of webservices requests set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: Base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.corePoolSize
    • Required: No
    • Description: Process engine job executor core pool size
    • Default: 4

    DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.maxPoolSize
    • Required: No
    • Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full
    • Default: 10

    DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE

    • Property: dev.dsf.bpe.process.engine.queueSize
    • Required: No
    • Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy
    • Default: 40

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List
    • Example: dsfdev_updateAllowList|1.0, another_process|x.y

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available
    • Example: old_process|x.y

    DEV_DSF_BPE_PROCESS_THREADS

    • Property: dev.dsf.bpe.process.threads
    • Required: No
    • Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores
    • Default: -1

    DEV_DSF_BPE_SERVER_BASE_URL

    • Property: dev.dsf.bpe.server.base.url
    • Required: No
    • Description: Base address of the BPE server, configure when exposing the web-ui
    • Example: https://foo.bar/bpe
    • Default: https

    DEV_DSF_BPE_SERVER_ROLECONFIG

    DEV_DSF_BPE_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.bpe.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_BPE_SERVER_UI_THEME

    • Property: dev.dsf.bpe.server.ui.theme
    • Required: No
    • Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    + + + diff --git a/stable/maintain/bpe/index.html b/stable/maintain/bpe/index.html new file mode 100644 index 000000000..18c910313 --- /dev/null +++ b/stable/maintain/bpe/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + BPE Server + + + + + + + + + diff --git a/stable/maintain/bpe/oidc.html b/stable/maintain/bpe/oidc.html new file mode 100644 index 000000000..fca1e9453 --- /dev/null +++ b/stable/maintain/bpe/oidc.html @@ -0,0 +1,60 @@ + + + + + + + + + + OpenID Connect + + + + + +
    Skip to main content

    OpenID Connect

    DSF-TeamAbout 1 min

    Overview

    Access to the DSF BPE server user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    The DSF BPE server supports Authorization Code Flowopen in new window for the user interface. Back-Channel Logoutopen in new window is also supported.

    BPE Reverse Proxy

    The DSF BPE reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter SSL_VERIFY_CLIENT needs to be set to optional.

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF BPE server accepts logout tokens at DEV_DSF_BPE_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF BPE server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/bpe:1.5.2
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-bpe
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    + + + diff --git a/stable/maintain/fhir-reverse-proxy/configuration.html b/stable/maintain/fhir-reverse-proxy/configuration.html new file mode 100644 index 000000000..de1dbee35 --- /dev/null +++ b/stable/maintain/fhir-reverse-proxy/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 1 min

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR server application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /fhir

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    + + + diff --git a/stable/maintain/fhir-reverse-proxy/index.html b/stable/maintain/fhir-reverse-proxy/index.html new file mode 100644 index 000000000..3b1946093 --- /dev/null +++ b/stable/maintain/fhir-reverse-proxy/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Reverse Proxy + + + + + + + + + diff --git a/stable/maintain/fhir/access-control.html b/stable/maintain/fhir/access-control.html new file mode 100644 index 000000000..7e34a1583 --- /dev/null +++ b/stable/maintain/fhir/access-control.html @@ -0,0 +1,85 @@ + + + + + + + + + + Access Control + + + + + +
    Skip to main content

    Access Control

    DSF-TeamAbout 3 min

    Overview

    The DSF FHIR server implements a subset of the FHIR R4 REST APIopen in new window. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    OpenID Connect

    To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

    Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

    The listing below shows a minimal configuration to enable read access for a specific client-certificate:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - example_read_only_role:
    +            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +

    The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.

    Certificate Thumbprints

    SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

    certtool --fingerprint --hash=sha512 --infile=certificate.pem
    +

    Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

    Matching Users

    To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

    thumbprint

    The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

    email

    Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the email claimopen in new window from the access token will be matched against the property values.

    token-role and token-group

    With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

    DSF and Practitioner Roles

    Two types of roles can be applied to matched users.

    dsf-role

    DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

    CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

    practitioner-role

    In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystemopen in new window resources. Codes are specified in the form system-url|code.
    If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinitionopen in new window resource, the user can start the process if he also has the dsf-role CREATE.

    Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

    UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

    Examples

    The first example defines a group of DSF administrators. Two client certificates match against this role:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - certificate-admins:
    +            thumbprint: 
    +              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
    +              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - token-role-admins:
    +            token-role: admin
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - read-only:
    +            email:
    +              - first.user@test.org
    +              - second.user@test.org
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +
    + + + diff --git a/stable/maintain/fhir/configuration.html b/stable/maintain/fhir/configuration.html new file mode 100644 index 000000000..93075d721 --- /dev/null +++ b/stable/maintain/fhir/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 5 min

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client _trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: Address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: Password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: Password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: Username to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: Username to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_CURRENTUSER

    • Property: dev.dsf.fhir.debug.log.message.currentUser
    • Required: No
    • Description: To enable logging of the currently requesting user set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_DBSTATEMENT

    • Property: dev.dsf.fhir.debug.log.message.dbStatement
    • Required: No
    • Description: To enable logging of DB queries set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST

    • Property: dev.dsf.fhir.debug.log.message.webserviceRequest
    • Required: No
    • Description: To enable logging of webservices requests set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: Base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: Fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: Local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: Page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_FHIR_SERVER_UI_THEME

    • Property: dev.dsf.fhir.server.ui.theme
    • Required: No
    • Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    + + + diff --git a/stable/maintain/fhir/index.html b/stable/maintain/fhir/index.html new file mode 100644 index 000000000..48c31629e --- /dev/null +++ b/stable/maintain/fhir/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Server + + + + + + + + + diff --git a/stable/maintain/fhir/oidc.html b/stable/maintain/fhir/oidc.html new file mode 100644 index 000000000..6b2668ca7 --- /dev/null +++ b/stable/maintain/fhir/oidc.html @@ -0,0 +1,60 @@ + + + + + + + + + + OpenID Connect + + + + + +
    Skip to main content

    OpenID Connect

    DSF-TeamAbout 1 min

    Overview

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    The DSF FHIR server supports Authorization Code Flowopen in new window for the user interface as well as Bearer Token Authenticationopen in new window for the REST API. Back-Channel Logoutopen in new window is also supported.

    FHIR Reverse Proxy

    The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter SSL_VERIFY_CLIENT needs to be set to optional.

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.5.2
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    + + + diff --git a/stable/maintain/index.html b/stable/maintain/index.html new file mode 100644 index 000000000..6db69cb3e --- /dev/null +++ b/stable/maintain/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Maintain a DSF instance + + + + + + + + + diff --git a/stable/maintain/install-plugins.html b/stable/maintain/install-plugins.html new file mode 100644 index 000000000..2dfa1ae3d --- /dev/null +++ b/stable/maintain/install-plugins.html @@ -0,0 +1,46 @@ + + + + + + + + + + Install Plugins + + + + + +
    Skip to main content

    Install Plugins

    DSF-TeamAbout 1 min

    Marketplace for process plugins

    To install and learn more about each Process Plugin, you can visit the Marketplace hereopen in new window.

    Overview

    • You can find an overview of compatable process plugins below (last updated 25/07/2024).
    Process Pluginreleased for testreleased for production
    Ping-Pongopen in new windowv1.0.1.0open in new windowv1.0.1.0open in new window
    Allow-Listopen in new windowv1.0.0.1open in new windowv1.0.0.1open in new window
    MII Process Feasibilityopen in new windowv1.0.0.5open in new windowv1.0.0.5open in new window
    MII Process Reportopen in new windowv1.1.0.1open in new windowv1.0.0.0open in new window
    MII Process Data Transferopen in new windowv1.0.0.1open in new windowv1.0.0.1open in new window
    MII Process Data Sharingopen in new windowv1.0.1.0open in new windowv1.0.1.0open in new window
    NUM-RDPopen in new windowv1.1.0.0open in new windowv1.1.0.0open in new window
    • Explore and install Process Plugins in the Marketplace. Details on each plugin are available hereopen in new window.
    • Deploying the process plugin to the DSF involves copy the process jar-file and configuring environment variable for the business process engine (BPE).

    Prerequisites

    Deployment

    • Add the process jar-file to the DSF BPE folder /opt/bpe/process:
    wget (your jar-file download link)
    +

    For example:

     wget https://github.com/medizininformatik-initiative/mii-process-data-sharing/releases/download/v1.0.0.1/mii-process-data-sharing-1.0.0.1.jar
    +
    • Make sure the process is readable by the bpe user or group, for example by executing:
    sudo chmod 440 (your jar-file name.jar)
    +sudo chown root:bpe (your jar-file name.jar)
    +

    For example:

    sudo chmod 440 mii-process-data-sharing-1.0.0.1.jar
    +sudo chown root:bpe mii-process-data-sharing-1.0.0.1.jar
    +
    • Modify the process exclude config in /opt/bpe/docker-compose.yml
    • Reminder: Update/verify required configurations in docker-compose.yml
    + + + diff --git a/stable/maintain/install.html b/stable/maintain/install.html new file mode 100644 index 000000000..459891991 --- /dev/null +++ b/stable/maintain/install.html @@ -0,0 +1,74 @@ + + + + + + + + + + Install DSF 1.5.2 + + + + + +
    Skip to main content

    Install DSF 1.5.2

    DSF-TeamAbout 6 min

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/installopen in new window.

    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)

    Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.netopen in new window or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2101 fhir
      +sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_5_2.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_5_2.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L39:      - app_client_certificate_private_key.pem.password
        +...
        +L54:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L141:  app_client_certificate_private_key.pem.password:
        +L142:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2202 bpe
      +sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_5_2.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_5_2.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L13:      - app_client_certificate_private_key.pem.password
        +...
        +L35:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L89:  app_client_certificate_private_key.pem.password:
        +L90:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) -  INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket open, session SOME_RANDOM_UUID1
    +INFO Grizzly(1) -  INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket open, session SOME_RANDOM_UUID2
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/stable/maintain/upgrade-from-0.html b/stable/maintain/upgrade-from-0.html new file mode 100644 index 000000000..1585729e9 --- /dev/null +++ b/stable/maintain/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade from DSF 0.9.x + + + + + +
    Skip to main content

    Upgrade from DSF 0.9.x

    DSF-TeamAbout 1 min

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    Do not use your 0.9.x configuration as starting point

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    Instead, please perform the following steps:

    1. Shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. Install the new DSF according to the instructions.
    4. You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).
    5. Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).
    6. If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).
    7. If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Use your old virtual machine

    We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.

    Last update:
    + + + diff --git a/stable/maintain/upgrade-from-1.html b/stable/maintain/upgrade-from-1.html new file mode 100644 index 000000000..7e9cc665d --- /dev/null +++ b/stable/maintain/upgrade-from-1.html @@ -0,0 +1,61 @@ + + + + + + + + + + Upgrade from DSF 1.5.1 + + + + + +
    Skip to main content

    Upgrade from DSF 1.5.1

    DSF-TeamAbout 1 min

    Upgrading the DSF from 1.5.1 to 1.5.2 involves modifying the docker-compose.yml files and recreating the containers.

    Update to DSF 1.2.0 first

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.5.2_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.5.2.

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.5.1
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.5.2
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.5.1
    ++   image: ghcr.io/datasharingframework/fhir:1.5.2
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.5.2_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.5.2.

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.5.1
    ++   image: ghcr.io/datasharingframework/bpe:1.5.2
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF BPE containers
      From /opt/bpe execute

      docker compose up -d && docker compose logs -f
      +
    2. Verify your upgrade:

      • Verify the DSF FHIR server is running in version 1.5.2. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.5.2, [...]
      • Verify the DSF FHIR server started without errors
      • Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/open in new window (authentication with your client-certificate)
      • Verify the DSF BPE server is running in version 1.5.2. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.5.2, [...]
      • Verify the DSF BPE server started without errors
      • Verify your install with a ping/pong test
    + + + diff --git a/stable/process-plugins-advanced.html b/stable/process-plugins-advanced.html new file mode 100644 index 000000000..a5b6dd39a --- /dev/null +++ b/stable/process-plugins-advanced.html @@ -0,0 +1,40 @@ + + + + + + + + + + Process Plugins Advanced + + + + + + + + + diff --git a/v1.0.0/develop/create.html b/v1.0.0/develop/create.html new file mode 100644 index 000000000..d9217b50e --- /dev/null +++ b/v1.0.0/develop/create.html @@ -0,0 +1,40 @@ + + + + + + + + + + Create a new process plugin + + + + + + + + + diff --git a/v1.0.0/develop/index.html b/v1.0.0/develop/index.html new file mode 100644 index 000000000..df262e92a --- /dev/null +++ b/v1.0.0/develop/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Develop Process Plugins + + + + + + + + + diff --git a/v1.0.0/develop/upgrade-from-0.html b/v1.0.0/develop/upgrade-from-0.html new file mode 100644 index 000000000..45b8c254b --- /dev/null +++ b/v1.0.0/develop/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade processes from 0.9.x + + + + + + + + + diff --git a/v1.0.0/dsf-for-dev.html b/v1.0.0/dsf-for-dev.html new file mode 100644 index 000000000..8048c1324 --- /dev/null +++ b/v1.0.0/dsf-for-dev.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF for Developers + + + + + + + + + diff --git a/v1.0.0/index.html b/v1.0.0/index.html new file mode 100644 index 000000000..d660305ed --- /dev/null +++ b/v1.0.0/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF 1.0.0 + + + + + +
    Skip to main content

    DSF 1.0.0

    DSF-TeamLess than 1 minute

    Data Sharing Framework 1.0.0 is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    Important note

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsfopen in new window.

    System Administrators

    Developers

    New features

    • Improved versioning to support up- and downwards-compatibility
    • Enhanced web ui to start processes in the web browser
    • Allow user authenitication and authorization with OpenID Connect
    • New process plugin API
    • Removed mostly unused features to simplify instance configuration
    • Unified proxy setup
    • Many more featuresopen in new window
    Last update:
    + + + diff --git a/v1.0.0/maintain/allowList-mgm.html b/v1.0.0/maintain/allowList-mgm.html new file mode 100644 index 000000000..e0424d81f --- /dev/null +++ b/v1.0.0/maintain/allowList-mgm.html @@ -0,0 +1,40 @@ + + + + + + + + + + Allow List Management + + + + + +
    Skip to main content

    Allow List Management

    DSF-TeamAbout 1 min

    Caution

    This is an outdated version of the Allow List Management documentation. Please use the current version, even if you use an outdated DSF version.

    You can read all about the concept of Allow Lists here.

    Overview

    To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the Gecko Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

    The DSF Allow List management tool uses client certificates for authentication. You can either use your personal client certificate or the client certificate from your DSF BPE, which needs to be added to your webbrowser. For instructions on how to add a client certificate to your browser, please follow here.
    Currently, the Allow List Management Tool is only for DSF TEST infrastructure. For production, please write us an E-Mail with your information.

    Prerequisites

    1. Deployed DSF instance (test infrastructure)
      1.1 If none exists yet, read here
    2. Certificate
      2.1 If none exists yet, read here
    3. Organization identifier (FQDN of your organization, e.g. hs-heilbronn.deopen in new window)
    4. FHIR Endpoint URL (e.g. https://gth.gecko.hs-heilbronn.de/fhiropen in new window )
    5. Contact details from a responsible person of your organization
    6. Access to the E-Mail address from your organization for verification

    Start here

    When you have fulfilled all the prerequisites, you can start managing your Allow Lists on the DSF Allow List Management Tool.
    At the beginning, a popup will appear where you have to select your certificate. Only then you will have access to the website.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.0.0/maintain/configuration/bpe.html b/v1.0.0/maintain/configuration/bpe.html new file mode 100644 index 000000000..102c067b3 --- /dev/null +++ b/v1.0.0/maintain/configuration/bpe.html @@ -0,0 +1,40 @@ + + + + + + + + + + Parameters BPE Server + + + + + +
    Skip to main content

    Parameters BPE Server

    DSF-TeamAbout 6 min

    Parameters BPE Server

    Please also check common parameters for additional configuration options.

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable loging bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_server_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: The base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.bpe.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    Last update:
    + + + diff --git a/v1.0.0/maintain/configuration/common.html b/v1.0.0/maintain/configuration/common.html new file mode 100644 index 000000000..cd7ab3101 --- /dev/null +++ b/v1.0.0/maintain/configuration/common.html @@ -0,0 +1,40 @@ + + + + + + + + + + Common Parameters + + + + + +
    Skip to main content

    Common Parameters

    DSF-TeamAbout 2 min

    Common Parameters

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    Last update:
    + + + diff --git a/v1.0.0/maintain/configuration/fhir.html b/v1.0.0/maintain/configuration/fhir.html new file mode 100644 index 000000000..cef197e19 --- /dev/null +++ b/v1.0.0/maintain/configuration/fhir.html @@ -0,0 +1,40 @@ + + + + + + + + + + Parameters FHIR Server + + + + + +
    Skip to main content

    Parameters FHIR Server

    DSF-TeamAbout 3 min

    Parameters FHIR Server

    Please also check common parameters for additional configuration options.

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_server_trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: The base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: The page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    • Property: dev.dsf.fhir.server.roleConfig
    • Required: Yes
    • Description: Role config YAML

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    Last update:
    + + + diff --git a/v1.0.0/maintain/configuration/index.html b/v1.0.0/maintain/configuration/index.html new file mode 100644 index 000000000..62d570c0b --- /dev/null +++ b/v1.0.0/maintain/configuration/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + + + + + diff --git a/v1.0.0/maintain/configuration/reverseproxy.html b/v1.0.0/maintain/configuration/reverseproxy.html new file mode 100644 index 000000000..507ca3b85 --- /dev/null +++ b/v1.0.0/maintain/configuration/reverseproxy.html @@ -0,0 +1,40 @@ + + + + + + + + + + Parameters FHIR Reverse Proxy + + + + + +
    Skip to main content

    Parameters FHIR Reverse Proxy

    DSF-TeamAbout 1 min

    Parameters FHIR Reverse Proxy

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem
    Last update:
    + + + diff --git a/v1.0.0/maintain/index.html b/v1.0.0/maintain/index.html new file mode 100644 index 000000000..9e9953664 --- /dev/null +++ b/v1.0.0/maintain/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Maintain a DSF instance + + + + + + + + + diff --git a/v1.0.0/maintain/install.html b/v1.0.0/maintain/install.html new file mode 100644 index 000000000..4565766bd --- /dev/null +++ b/v1.0.0/maintain/install.html @@ -0,0 +1,74 @@ + + + + + + + + + + Install DSF 1.0.0 + + + + + +
    Skip to main content

    Install DSF 1.0.0

    DSF-TeamAbout 6 min

    Member of existing networks

    If you are part of an existing network (e.g. the German MII), please install the appropriate DSF version. For the production environment of MII and NUM this is currently DSF 0.9.x.

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/installopen in new window.

    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)

    Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.netopen in new window or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo addgroup --gid 2101 fhir
      +sudo adduser --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_0_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_0_0.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L44:      - app_client_certificate_private_key.pem.password
        +...
        +L59:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L149:  app_client_certificate_private_key.pem.password:
        +L150:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_BASE_URL: https://TODO_DSF_FHIR_SERVER_EXTERNAL_FQDN/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: TODO_CLIENT_CERTIFICATE_THUMBPRINT
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.
        • DEV_DSF_FHIR_SERVER_ROLECONFIG: You can add other client certificates (e.g. personal DFN PKI S/MIME certificates, e.g. from admins) to your DSF instance.
          Set the SHA-512 Hash (lowercase hex) of your additional client certificates. The parameter TODO_WEBUSER_CLIENT_CERTIFICATE_THUMBPRINT can be a single thumbprint or can be expanded to a list (like dsf-role). If you don't have additional thumbprints you want to add, simply remove the DEV_DSF_FHIR_SERVER_ROLECONFIG variable from your docker-compose file.
        • For additional environment variables, see DSF configuration parameters - FHIR Server
    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo addgroup --gid 2202 bpe
      +sudo adduser --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_0_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_0_0.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L18:      - app_client_certificate_private_key.pem.password
        +...
        +L40:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L89:  app_client_certificate_private_key.pem.password:
        +L90:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: TODO_ORGANIZATION_IDENTIFIER
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves the main homepage of the organization, e.g. hs-heilbronn.de
        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://TODO_DSF_FHIR_SERVER_FQDN/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir
        • For additional environment variables, see DSF configuration parameters - BPE Server
    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1}
    +INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2}
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.0.0/maintain/upgrade-from-0.html b/v1.0.0/maintain/upgrade-from-0.html new file mode 100644 index 000000000..ccd8985a0 --- /dev/null +++ b/v1.0.0/maintain/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade from DSF 0.9.x + + + + + +
    Skip to main content

    Upgrade from DSF 0.9.x

    DSF-TeamLess than 1 minute

    Do not upgrade unless prompted!

    Please do not upgrade your DSF installation from DSF 0.9.x to DSF 1.x unless prompted to do so (e.g. from the German MII).

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported. Instead, please perform the following steps:

    1. shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. install the new DSF according to the instructions.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Last update:
    + + + diff --git a/v1.0.0/process-plugins-advanced.html b/v1.0.0/process-plugins-advanced.html new file mode 100644 index 000000000..222e49999 --- /dev/null +++ b/v1.0.0/process-plugins-advanced.html @@ -0,0 +1,40 @@ + + + + + + + + + + Process Plugins Advanced + + + + + + + + + diff --git a/v1.1.0/develop/create.html b/v1.1.0/develop/create.html new file mode 100644 index 000000000..94def3a01 --- /dev/null +++ b/v1.1.0/develop/create.html @@ -0,0 +1,40 @@ + + + + + + + + + + Create a new process plugin + + + + + + + + + diff --git a/v1.1.0/develop/index.html b/v1.1.0/develop/index.html new file mode 100644 index 000000000..5ddaa68fd --- /dev/null +++ b/v1.1.0/develop/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Develop Process Plugins + + + + + + + + + diff --git a/v1.1.0/develop/upgrade-from-0.html b/v1.1.0/develop/upgrade-from-0.html new file mode 100644 index 000000000..02c25aabb --- /dev/null +++ b/v1.1.0/develop/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade processes from 0.9.x + + + + + + + + + diff --git a/v1.1.0/dsf-for-dev.html b/v1.1.0/dsf-for-dev.html new file mode 100644 index 000000000..acf5c50f8 --- /dev/null +++ b/v1.1.0/dsf-for-dev.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF for Developers + + + + + + + + + diff --git a/v1.1.0/index.html b/v1.1.0/index.html new file mode 100644 index 000000000..5ff162922 --- /dev/null +++ b/v1.1.0/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF 1.1.0 + + + + + +
    Skip to main content

    DSF 1.1.0

    DSF-TeamLess than 1 minute

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    Important note

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsfopen in new window.

    System Administrators

    Developers

    New features

    • Improved versioning to support up- and downwards-compatibility
    • Enhanced web ui to start processes in the web browser
    • Allow local user authentication and authorization with OpenID Connect
    • New process plugin API
    • Removed mostly unused features to simplify instance configuration
    • Unified proxy setup
    • Many more features, see 1.x release-notesopen in new window
    Last update:
    + + + diff --git a/v1.1.0/maintain/allowList-mgm.html b/v1.1.0/maintain/allowList-mgm.html new file mode 100644 index 000000000..72a78a3f7 --- /dev/null +++ b/v1.1.0/maintain/allowList-mgm.html @@ -0,0 +1,40 @@ + + + + + + + + + + Allow List Management + + + + + +
    Skip to main content

    Allow List Management

    DSF-TeamAbout 1 min

    Caution

    This is an outdated version of the Allow List Management documentation. Please use the current version, even if you use an outdated DSF version.

    You can read all about the concept of Allow Lists here.

    Overview

    To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the Gecko Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

    The DSF Allow List management tool uses client certificates for authentication. You can either use your personal client certificate or the client certificate from your DSF BPE, which needs to be added to your webbrowser. For instructions on how to add a client certificate to your browser, please follow here.
    Currently, the Allow List Management Tool is only for DSF TEST infrastructure. For production, please write us an E-Mail with your information.

    Prerequisites

    1. Deployed DSF instance (test infrastructure)
      1.1 If none exists yet, read here
    2. Certificate
      2.1 If none exists yet, read here
    3. Organization identifier (FQDN of your organization website, e.g. hs-heilbronn.deopen in new window)
    4. FHIR Endpoint URL (e.g. https://gth.gecko.hs-heilbronn.de/fhiropen in new window )
    5. Contact details from a responsible person of your organization
    6. Access to the E-Mail address from your organization for verification

    Start here

    When you have fulfilled all the prerequisites, you can start managing your Allow Lists on the DSF Allow List Management Tool.
    At the beginning, a popup will appear where you have to select your certificate. Only then you will have access to the website.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.1.0/maintain/bpe/configuration.html b/v1.1.0/maintain/bpe/configuration.html new file mode 100644 index 000000000..160f470a5 --- /dev/null +++ b/v1.1.0/maintain/bpe/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 8 min

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable loging bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_server_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: The base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.bpe.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    Last update:
    + + + diff --git a/v1.1.0/maintain/bpe/index.html b/v1.1.0/maintain/bpe/index.html new file mode 100644 index 000000000..161fae380 --- /dev/null +++ b/v1.1.0/maintain/bpe/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + BPE Server + + + + + + + + + diff --git a/v1.1.0/maintain/fhir-reverse-proxy/configuration.html b/v1.1.0/maintain/fhir-reverse-proxy/configuration.html new file mode 100644 index 000000000..b9d55a7d2 --- /dev/null +++ b/v1.1.0/maintain/fhir-reverse-proxy/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 1 min

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    Last update:
    + + + diff --git a/v1.1.0/maintain/fhir-reverse-proxy/index.html b/v1.1.0/maintain/fhir-reverse-proxy/index.html new file mode 100644 index 000000000..58d9c5627 --- /dev/null +++ b/v1.1.0/maintain/fhir-reverse-proxy/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Reverse Proxy + + + + + + + + + diff --git a/v1.1.0/maintain/fhir/access-control.html b/v1.1.0/maintain/fhir/access-control.html new file mode 100644 index 000000000..99b2f5a8e --- /dev/null +++ b/v1.1.0/maintain/fhir/access-control.html @@ -0,0 +1,85 @@ + + + + + + + + + + Access Control + + + + + +
    Skip to main content

    Access Control

    DSF-TeamAbout 2 min

    Overview

    The DSF FHIR server implements a subset of the FHIR R4 REST APIopen in new window. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    OpenID Connect

    To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

    Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

    The listing below shows a minimal configuration to enable read access for a specific client-certificate:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - example_read_only_role:
    +            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +

    The list of user roles above contains a single entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles.

    Certificate Thumbprints

    SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

    certtool --fingerprint --hash=sha512 --infile=certificate.pem
    +

    Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

    Matching Users

    To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

    thumbprint

    The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

    email

    Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the email claimopen in new window from the access token will be matched against the property values.

    token-role and token-group

    With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

    DSF and Practitioner Roles

    To types of roles can be applied to matched users.

    dsf-role

    DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

    CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

    practitioner-role

    In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystemopen in new window resources. Codes are specified in the form system-url|code.
    If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinitionopen in new window resource, the user can start the process if he also has the dsf-role CREATE.

    Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

    UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

    Examples

    The first example defines a group of DSF administrators. Two client certificates match against this role:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - certificate-admins:
    +            thumbprint: 
    +              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
    +              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - token-role-admins:
    +            token-role: admin
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - read-only:
    +            email:
    +              - first.user@test.org
    +              - second.user@test.org
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +
    Last update:
    + + + diff --git a/v1.1.0/maintain/fhir/configuration.html b/v1.1.0/maintain/fhir/configuration.html new file mode 100644 index 000000000..11d9693b2 --- /dev/null +++ b/v1.1.0/maintain/fhir/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 5 min

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_server_trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: The base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: The page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    • Property: dev.dsf.fhir.server.roleConfig
    • Required: Yes
    • Description: Role config YAML as defined in FHIR Server: Access Control.
    • Recommendation: Use an empty string "" or a single block scalar | character if no roles should be configured

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    Last update:
    + + + diff --git a/v1.1.0/maintain/fhir/index.html b/v1.1.0/maintain/fhir/index.html new file mode 100644 index 000000000..04b29957e --- /dev/null +++ b/v1.1.0/maintain/fhir/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Server + + + + + + + + + diff --git a/v1.1.0/maintain/fhir/oidc.html b/v1.1.0/maintain/fhir/oidc.html new file mode 100644 index 000000000..5f6ea481e --- /dev/null +++ b/v1.1.0/maintain/fhir/oidc.html @@ -0,0 +1,60 @@ + + + + + + + + + + OpenID Connect + + + + + +
    Skip to main content

    OpenID Connect

    DSF-TeamAbout 1 min

    Overview

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    The DSF FHIR server supports Authorization Code Flowopen in new window for the user interface as well as Bearer Token Authenticationopen in new window for the REST API. Back-Channel Logoutopen in new window is also supported.

    FHIR Reverse Proxy

    The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter SSL_VERIFY_CLIENT needs to be set to optional.

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.1.0
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    Last update:
    + + + diff --git a/v1.1.0/maintain/index.html b/v1.1.0/maintain/index.html new file mode 100644 index 000000000..84c015622 --- /dev/null +++ b/v1.1.0/maintain/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Maintain a DSF instance + + + + + + + + + diff --git a/v1.1.0/maintain/install.html b/v1.1.0/maintain/install.html new file mode 100644 index 000000000..6c6806ce9 --- /dev/null +++ b/v1.1.0/maintain/install.html @@ -0,0 +1,74 @@ + + + + + + + + + + Install DSF 1.1.0 + + + + + +
    Skip to main content

    Install DSF 1.1.0

    DSF-TeamAbout 6 min

    Member of existing networks

    If you are part of an existing network (e.g. the German MII), please install the appropriate DSF version. For the production environment of MII and NUM this is currently DSF 0.9.x.

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/installopen in new window.

    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)

    Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.netopen in new window or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo addgroup --gid 2101 fhir
      +sudo adduser --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_1_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_1_0.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L44:      - app_client_certificate_private_key.pem.password
        +...
        +L59:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L146:  app_client_certificate_private_key.pem.password:
        +L147:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo addgroup --gid 2202 bpe
      +sudo adduser --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_1_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_1_0.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L18:      - app_client_certificate_private_key.pem.password
        +...
        +L40:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L97:  app_client_certificate_private_key.pem.password:
        +L98:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1}
    +INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2}
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.1.0/maintain/upgrade-from-0.html b/v1.1.0/maintain/upgrade-from-0.html new file mode 100644 index 000000000..ecea72e1a --- /dev/null +++ b/v1.1.0/maintain/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade from DSF 0.9.x + + + + + +
    Skip to main content

    Upgrade from DSF 0.9.x

    DSF-TeamLess than 1 minute

    Do not upgrade unless prompted!

    Please do not upgrade your DSF installation from DSF 0.9.x to DSF 1.x unless prompted to do so (e.g. from the German MII).

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported. Instead, please perform the following steps:

    1. shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. install the new DSF according to the instructions.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Last update:
    + + + diff --git a/v1.1.0/maintain/upgrade-from-1.html b/v1.1.0/maintain/upgrade-from-1.html new file mode 100644 index 000000000..983b3c9e5 --- /dev/null +++ b/v1.1.0/maintain/upgrade-from-1.html @@ -0,0 +1,61 @@ + + + + + + + + + + Upgrade from DSF 1.x + + + + + +
    Skip to main content

    Upgrade from DSF 1.x

    DSF-TeamAbout 1 min

    Upgrading the DSF from 1.0.0 to 1.1.0 involves modifying the docker-compose.yml files and recreating the containers.

    Upgrade from 0.9.x

    If you want to migrate from DSF 0.9.x, please follow these instructions.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.1.0_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.1.0

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.0.0
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.1.0
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.0.0
    ++   image: ghcr.io/datasharingframework/fhir:1.1.0
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.1.0_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.1.0

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.0.0
    ++   image: ghcr.io/datasharingframework/bpe:1.1.0
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF BPE containers
      From /opt/bpe execute

      docker compose up -d && docker compose logs -f
      +
    2. Verify your upgrade:

      • Verify the DSF FHIR server is running in version 1.1.0. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.1.0, [...]
      • Verify the DSF FHIR server started without errors
      • Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/open in new window (authentication with your client-certificate)
      • Verify the DSF BPE server is running in version 1.1.0. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.1.0, [...]
      • Verify the DSF BPE server started without errors
      • Verify your install with a ping/pong test
    Last update:
    + + + diff --git a/v1.1.0/process-plugins-advanced.html b/v1.1.0/process-plugins-advanced.html new file mode 100644 index 000000000..9c8ba3662 --- /dev/null +++ b/v1.1.0/process-plugins-advanced.html @@ -0,0 +1,40 @@ + + + + + + + + + + Process Plugins Advanced + + + + + + + + + diff --git a/v1.2.0/develop/create.html b/v1.2.0/develop/create.html new file mode 100644 index 000000000..586a15763 --- /dev/null +++ b/v1.2.0/develop/create.html @@ -0,0 +1,40 @@ + + + + + + + + + + Create a new process plugin + + + + + + + + + diff --git a/v1.2.0/develop/index.html b/v1.2.0/develop/index.html new file mode 100644 index 000000000..1175b49b1 --- /dev/null +++ b/v1.2.0/develop/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Develop Process Plugins + + + + + + + + + diff --git a/v1.2.0/develop/upgrade-from-0.html b/v1.2.0/develop/upgrade-from-0.html new file mode 100644 index 000000000..76e2692bb --- /dev/null +++ b/v1.2.0/develop/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade processes from 0.9.x + + + + + + + + + diff --git a/v1.2.0/dsf-for-dev.html b/v1.2.0/dsf-for-dev.html new file mode 100644 index 000000000..6aaf81c98 --- /dev/null +++ b/v1.2.0/dsf-for-dev.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF for Developers + + + + + + + + + diff --git a/v1.2.0/index.html b/v1.2.0/index.html new file mode 100644 index 000000000..3e26005bc --- /dev/null +++ b/v1.2.0/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF 1.2.0 + + + + + +
    Skip to main content

    DSF 1.2.0

    DSF-TeamLess than 1 minute

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    Important note

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsfopen in new window.

    System Administrators

    Developers

    New features

    • Improved versioning to support up- and downwards-compatibility
    • Enhanced web ui to start processes in the web browser
    • Allow local user authentication and authorization with OpenID Connect
    • New process plugin API
    • Removed mostly unused features to simplify instance configuration
    • Unified proxy setup
    • Many more features, see 1.x release-notesopen in new window
    Last update:
    + + + diff --git a/v1.2.0/maintain/allowList-mgm.html b/v1.2.0/maintain/allowList-mgm.html new file mode 100644 index 000000000..16653ac05 --- /dev/null +++ b/v1.2.0/maintain/allowList-mgm.html @@ -0,0 +1,40 @@ + + + + + + + + + + Allow List Management + + + + + +
    Skip to main content

    Allow List Management

    DSF-TeamAbout 1 min

    Caution

    This is an outdated version of the Allow List Management documentation. Please use the current version, even if you use an outdated DSF version.

    You can read all about the concept of Allow Lists here.

    Overview

    To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the Gecko Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

    The DSF Allow List management tool uses client certificates for authentication. You can either use your personal client certificate or the client certificate from your DSF BPE, which needs to be added to your webbrowser. For instructions on how to add a client certificate to your browser, please follow here.
    Currently, the Allow List Management Tool is only for DSF TEST infrastructure. For production, please write us an E-Mail with your information.

    Prerequisites

    1. Deployed DSF instance (test infrastructure)
      1.1 If none exists yet, read here
    2. Certificate
      2.1 If none exists yet, read here
    3. Organization identifier (FQDN of your organization website, e.g. hs-heilbronn.deopen in new window)
    4. FHIR Endpoint URL (e.g. https://gth.gecko.hs-heilbronn.de/fhiropen in new window )
    5. Contact details from a responsible person of your organization
    6. Access to the E-Mail address from your organization for verification

    Start here

    When you have fulfilled all the prerequisites, you can start managing your Allow Lists on the DSF Allow List Management Tool.
    At the beginning, a popup will appear where you have to select your certificate. Only then you will have access to the website.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.2.0/maintain/bpe/configuration.html b/v1.2.0/maintain/bpe/configuration.html new file mode 100644 index 000000000..f74f38171 --- /dev/null +++ b/v1.2.0/maintain/bpe/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 8 min

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL

    • Property: dev.dsf.bpe.debug.log.message.variablesLocal
    • Required: No
    • Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_server_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: The base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.corePoolSize
    • Required: No
    • Description: Process engine job executor core pool size
    • Default: 4

    DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.maxPoolSize
    • Required: No
    • Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full
    • Default: 10

    DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE

    • Property: dev.dsf.bpe.process.engine.queueSize
    • Required: No
    • Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy
    • Default: 40

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List
    • Example: dsfdev_updateAllowList|1.0, another_process|x.y

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available
    • Example: old_process|x.y

    DEV_DSF_BPE_PROCESS_THREADS

    • Property: dev.dsf.bpe.process.threads
    • Required: No
    • Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores
    • Default: -1

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    Last update:
    + + + diff --git a/v1.2.0/maintain/bpe/index.html b/v1.2.0/maintain/bpe/index.html new file mode 100644 index 000000000..69a0d23e7 --- /dev/null +++ b/v1.2.0/maintain/bpe/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + BPE Server + + + + + + + + + diff --git a/v1.2.0/maintain/fhir-reverse-proxy/configuration.html b/v1.2.0/maintain/fhir-reverse-proxy/configuration.html new file mode 100644 index 000000000..718041462 --- /dev/null +++ b/v1.2.0/maintain/fhir-reverse-proxy/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 1 min

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /fhir

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    Last update:
    + + + diff --git a/v1.2.0/maintain/fhir-reverse-proxy/index.html b/v1.2.0/maintain/fhir-reverse-proxy/index.html new file mode 100644 index 000000000..4a4cd96fc --- /dev/null +++ b/v1.2.0/maintain/fhir-reverse-proxy/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Reverse Proxy + + + + + + + + + diff --git a/v1.2.0/maintain/fhir/access-control.html b/v1.2.0/maintain/fhir/access-control.html new file mode 100644 index 000000000..284c014cb --- /dev/null +++ b/v1.2.0/maintain/fhir/access-control.html @@ -0,0 +1,85 @@ + + + + + + + + + + Access Control + + + + + +
    Skip to main content

    Access Control

    DSF-TeamAbout 2 min

    Overview

    The DSF FHIR server implements a subset of the FHIR R4 REST APIopen in new window. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    OpenID Connect

    To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

    Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

    The listing below shows a minimal configuration to enable read access for a specific client-certificate:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - example_read_only_role:
    +            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +

    The list of user roles above contains a single entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles.

    Certificate Thumbprints

    SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

    certtool --fingerprint --hash=sha512 --infile=certificate.pem
    +

    Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

    Matching Users

    To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

    thumbprint

    The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

    email

    Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the email claimopen in new window from the access token will be matched against the property values.

    token-role and token-group

    With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

    DSF and Practitioner Roles

    To types of roles can be applied to matched users.

    dsf-role

    DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

    CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

    practitioner-role

    In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystemopen in new window resources. Codes are specified in the form system-url|code.
    If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinitionopen in new window resource, the user can start the process if he also has the dsf-role CREATE.

    Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

    UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

    Examples

    The first example defines a group of DSF administrators. Two client certificates match against this role:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - certificate-admins:
    +            thumbprint: 
    +              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
    +              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - token-role-admins:
    +            token-role: admin
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - read-only:
    +            email:
    +              - first.user@test.org
    +              - second.user@test.org
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +
    Last update:
    + + + diff --git a/v1.2.0/maintain/fhir/configuration.html b/v1.2.0/maintain/fhir/configuration.html new file mode 100644 index 000000000..3df2daa2a --- /dev/null +++ b/v1.2.0/maintain/fhir/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 5 min

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_server_trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: The base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: The page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    Last update:
    + + + diff --git a/v1.2.0/maintain/fhir/index.html b/v1.2.0/maintain/fhir/index.html new file mode 100644 index 000000000..d0a635423 --- /dev/null +++ b/v1.2.0/maintain/fhir/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Server + + + + + + + + + diff --git a/v1.2.0/maintain/fhir/oidc.html b/v1.2.0/maintain/fhir/oidc.html new file mode 100644 index 000000000..8766bae19 --- /dev/null +++ b/v1.2.0/maintain/fhir/oidc.html @@ -0,0 +1,60 @@ + + + + + + + + + + OpenID Connect + + + + + +
    Skip to main content

    OpenID Connect

    DSF-TeamAbout 1 min

    Overview

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    The DSF FHIR server supports Authorization Code Flowopen in new window for the user interface as well as Bearer Token Authenticationopen in new window for the REST API. Back-Channel Logoutopen in new window is also supported.

    FHIR Reverse Proxy

    The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter SSL_VERIFY_CLIENT needs to be set to optional.

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.2.0
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    Last update:
    + + + diff --git a/v1.2.0/maintain/index.html b/v1.2.0/maintain/index.html new file mode 100644 index 000000000..4d2974800 --- /dev/null +++ b/v1.2.0/maintain/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Maintain a DSF instance + + + + + + + + + diff --git a/v1.2.0/maintain/install.html b/v1.2.0/maintain/install.html new file mode 100644 index 000000000..e142bae00 --- /dev/null +++ b/v1.2.0/maintain/install.html @@ -0,0 +1,74 @@ + + + + + + + + + + Install DSF 1.2.0 + + + + + +
    Skip to main content

    Install DSF 1.2.0

    DSF-TeamAbout 6 min

    Member of existing networks

    If you are part of an existing network (e.g. the German MII), please install the appropriate DSF version. For the production environment of MII and NUM this is currently DSF 0.9.x.

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/installopen in new window.

    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)

    Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.netopen in new window or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2101 fhir
      +sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_2_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_2_0.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L44:      - app_client_certificate_private_key.pem.password
        +...
        +L59:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L146:  app_client_certificate_private_key.pem.password:
        +L147:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2202 bpe
      +sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_2_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_2_0.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L18:      - app_client_certificate_private_key.pem.password
        +...
        +L40:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L97:  app_client_certificate_private_key.pem.password:
        +L98:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1}
    +INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2}
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.2.0/maintain/upgrade-from-0.html b/v1.2.0/maintain/upgrade-from-0.html new file mode 100644 index 000000000..0a93a672e --- /dev/null +++ b/v1.2.0/maintain/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade from DSF 0.9.x + + + + + +
    Skip to main content

    Upgrade from DSF 0.9.x

    DSF-TeamLess than 1 minute

    Do not upgrade unless prompted!

    Please do not upgrade your DSF installation from DSF 0.9.x to DSF 1.x unless prompted to do so (e.g. from the German MII).

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported. Instead, please perform the following steps:

    1. shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. install the new DSF according to the instructions.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Last update:
    + + + diff --git a/v1.2.0/maintain/upgrade-from-1.html b/v1.2.0/maintain/upgrade-from-1.html new file mode 100644 index 000000000..51842ad82 --- /dev/null +++ b/v1.2.0/maintain/upgrade-from-1.html @@ -0,0 +1,77 @@ + + + + + + + + + + Upgrade from DSF 1.1.0 + + + + + +
    Skip to main content

    Upgrade from DSF 1.1.0

    DSF-TeamAbout 2 min

    Upgrading the DSF from 1.1.0 to 1.2.0 involves modifying the docker-compose.yml files and recreating the containers.

    Upgrade from 0.9.x

    If you want to migrate from DSF 0.9.x, please follow these instructions.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.2.0_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.2.0 and remove the old healthcheck definition. The new healthcheck is defined as part of the docker image.

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.1.0
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.2.0
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.1.0
    ++   image: ghcr.io/datasharingframework/fhir:1.2.0
    +    restart: on-failure
    +-   healthcheck:
    +-     test: ["CMD", "java", "-cp", "dsf_fhir.jar", "dev.dsf.common.status.client.StatusClient"]
    +-     interval: 10s
    +-     timeout: 15s
    +-     retries: 5
    +...
    +
    1. The role configuration is now optional. If you don't use roles, you can remove the role config (default for new installations):
      app:
    +...
    +    environment:
    +...
    +-     # TODO specify role configuration to allow access to the UI via web-browser or REST API for specific users, see documentation at dsf.dev
    +-     DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.2.0_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.2.0 and remove the old healthcheck definition. The new healthcheck is defined as part of the docker image.

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.1.0
    ++   image: ghcr.io/datasharingframework/bpe:1.2.0
    +    restart: on-failure
    +-   healthcheck:
    +-     test: ["CMD", "java", "-cp", "dsf_bpe.jar", "dev.dsf.common.status.client.StatusClient"]
    +-     interval: 10s
    +-     timeout: 15s
    +-     retries: 5
    +...
    +
    1. DSF v1.2.0 is not compatible with the Ping/Pong process plugin v1.0.0.0, upgrade to the Ping/Pong plugin v1.0.1.0open in new window by removing the old jar file and replacing it with the new v1.0.1.0 one.

    2. We have released a new version of the Allow List Process plugin where we added support for delete operations. Please upgrade to the Allow-List process v1.0.0.1open in new window by removing the old jar file and replacing it with the new v1.0.0.1 one.

    3. Upgrade the DSF BPE containers
      From /opt/bpe execute

      docker compose up -d && docker compose logs -f
      +
    4. Verify your upgrade:

      • Verify the DSF FHIR server is running in version 1.2.0. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.2.0, [...]
      • Verify the DSF FHIR server started without errors
      • Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/open in new window (authentication with your client-certificate)
      • Verify the DSF BPE server is running in version 1.2.0. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.2.0, [...]
      • Verify the DSF BPE server started without errors
      • Verify your install with a ping/pong test
    Last update:
    + + + diff --git a/v1.2.0/process-plugins-advanced.html b/v1.2.0/process-plugins-advanced.html new file mode 100644 index 000000000..d8be0e4ba --- /dev/null +++ b/v1.2.0/process-plugins-advanced.html @@ -0,0 +1,40 @@ + + + + + + + + + + Process Plugins Advanced + + + + + + + + + diff --git a/v1.3.0/develop/create.html b/v1.3.0/develop/create.html new file mode 100644 index 000000000..cd9b753eb --- /dev/null +++ b/v1.3.0/develop/create.html @@ -0,0 +1,40 @@ + + + + + + + + + + Create a new process plugin + + + + + + + + + diff --git a/v1.3.0/develop/index.html b/v1.3.0/develop/index.html new file mode 100644 index 000000000..60fedc4db --- /dev/null +++ b/v1.3.0/develop/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Develop Process Plugins + + + + + + + + + diff --git a/v1.3.0/develop/upgrade-from-0.html b/v1.3.0/develop/upgrade-from-0.html new file mode 100644 index 000000000..093677a6d --- /dev/null +++ b/v1.3.0/develop/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade processes from 0.9.x + + + + + + + + + diff --git a/v1.3.0/dsf-for-dev.html b/v1.3.0/dsf-for-dev.html new file mode 100644 index 000000000..fd1043dce --- /dev/null +++ b/v1.3.0/dsf-for-dev.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF for Developers + + + + + + + + + diff --git a/v1.3.0/index.html b/v1.3.0/index.html new file mode 100644 index 000000000..666541bc8 --- /dev/null +++ b/v1.3.0/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF 1.3.0 + + + + + +
    Skip to main content

    DSF 1.3.0

    DSF-TeamLess than 1 minute

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    Important note

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsfopen in new window.

    System Administrators

    Developers

    New features

    • Improved versioning to support up- and downwards-compatibility
    • Enhanced web ui to start processes in the web browser
    • Allow local user authentication and authorization with OpenID Connect
    • New process plugin API
    • Removed mostly unused features to simplify instance configuration
    • Unified proxy setup
    • Many more features, see 1.x release-notesopen in new window
    Last update:
    + + + diff --git a/v1.3.0/maintain/allowList-mgm.html b/v1.3.0/maintain/allowList-mgm.html new file mode 100644 index 000000000..f165372d1 --- /dev/null +++ b/v1.3.0/maintain/allowList-mgm.html @@ -0,0 +1,40 @@ + + + + + + + + + + Allow List Management + + + + + +
    Skip to main content

    Allow List Management

    DSF-TeamAbout 1 min

    You can read all about the concept of Allow Lists in our introduction.

    Overview

    To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the Gecko Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

    The DSF Allow List management tool uses client certificates for authentication. You can either use your personal client certificate or the client certificate from your DSF BPE, which needs to be added to your webbrowser. For instructions on how to add a client certificate to your browser, please follow here.

    Prerequisites

    1. Deployed DSF instance (test or production infrastructure)
      1.1 If none exists yet, read the installation guide
    2. Certificate
      2.1 If none exists yet, read the certificate requirements
    3. Organization identifier (FQDN of your organization website, e.g. hs-heilbronn.deopen in new window)
    4. FHIR Endpoint URL (e.g. https://gth.gecko.hs-heilbronn.de/fhiropen in new window )
    5. Contact details from a responsible person of your organization
    6. Access to the E-Mail address from your organization for verification

    Start here

    When you have fulfilled all the prerequisites, you can start managing your Allow Lists respective Allow List Management Tool.

    Click here to open the DSF Allow List Management Tool for the Test infrastructure.

    Click here to open the DSF Allow List Management Tool for the Production infrastructure.

    We use different colors for the DSF Allow List Management Tools in the Test (green) and Production (blue) infastructure.

    At the beginning, a popup will appear where you have to select your certificate. Only then you will have access to the website.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.3.0/maintain/bpe/configuration.html b/v1.3.0/maintain/bpe/configuration.html new file mode 100644 index 000000000..fb5eea73a --- /dev/null +++ b/v1.3.0/maintain/bpe/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 8 min

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL

    • Property: dev.dsf.bpe.debug.log.message.variablesLocal
    • Required: No
    • Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: The base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.corePoolSize
    • Required: No
    • Description: Process engine job executor core pool size
    • Default: 4

    DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.maxPoolSize
    • Required: No
    • Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full
    • Default: 10

    DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE

    • Property: dev.dsf.bpe.process.engine.queueSize
    • Required: No
    • Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy
    • Default: 40

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List
    • Example: dsfdev_updateAllowList|1.0, another_process|x.y

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available
    • Example: old_process|x.y

    DEV_DSF_BPE_PROCESS_THREADS

    • Property: dev.dsf.bpe.process.threads
    • Required: No
    • Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores
    • Default: -1

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    Last update:
    + + + diff --git a/v1.3.0/maintain/bpe/index.html b/v1.3.0/maintain/bpe/index.html new file mode 100644 index 000000000..1adacf835 --- /dev/null +++ b/v1.3.0/maintain/bpe/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + BPE Server + + + + + + + + + diff --git a/v1.3.0/maintain/fhir-reverse-proxy/configuration.html b/v1.3.0/maintain/fhir-reverse-proxy/configuration.html new file mode 100644 index 000000000..f198bd97d --- /dev/null +++ b/v1.3.0/maintain/fhir-reverse-proxy/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 1 min

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /fhir

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    Last update:
    + + + diff --git a/v1.3.0/maintain/fhir-reverse-proxy/index.html b/v1.3.0/maintain/fhir-reverse-proxy/index.html new file mode 100644 index 000000000..034d379af --- /dev/null +++ b/v1.3.0/maintain/fhir-reverse-proxy/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Reverse Proxy + + + + + + + + + diff --git a/v1.3.0/maintain/fhir/access-control.html b/v1.3.0/maintain/fhir/access-control.html new file mode 100644 index 000000000..1175380a8 --- /dev/null +++ b/v1.3.0/maintain/fhir/access-control.html @@ -0,0 +1,85 @@ + + + + + + + + + + Access Control + + + + + +
    Skip to main content

    Access Control

    DSF-TeamAbout 2 min

    Overview

    The DSF FHIR server implements a subset of the FHIR R4 REST APIopen in new window. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    OpenID Connect

    To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

    Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

    The listing below shows a minimal configuration to enable read access for a specific client-certificate:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - example_read_only_role:
    +            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +

    The list of user roles above contains a single entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles.

    Certificate Thumbprints

    SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

    certtool --fingerprint --hash=sha512 --infile=certificate.pem
    +

    Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

    Matching Users

    To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

    thumbprint

    The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

    email

    Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the email claimopen in new window from the access token will be matched against the property values.

    token-role and token-group

    With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

    DSF and Practitioner Roles

    To types of roles can be applied to matched users.

    dsf-role

    DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

    CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

    practitioner-role

    In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystemopen in new window resources. Codes are specified in the form system-url|code.
    If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinitionopen in new window resource, the user can start the process if he also has the dsf-role CREATE.

    Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

    UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

    Examples

    The first example defines a group of DSF administrators. Two client certificates match against this role:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - certificate-admins:
    +            thumbprint: 
    +              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
    +              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - token-role-admins:
    +            token-role: admin
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - read-only:
    +            email:
    +              - first.user@test.org
    +              - second.user@test.org
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +
    Last update:
    + + + diff --git a/v1.3.0/maintain/fhir/configuration.html b/v1.3.0/maintain/fhir/configuration.html new file mode 100644 index 000000000..2854645c4 --- /dev/null +++ b/v1.3.0/maintain/fhir/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 5 min

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client _trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: The base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: The page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    Last update:
    + + + diff --git a/v1.3.0/maintain/fhir/index.html b/v1.3.0/maintain/fhir/index.html new file mode 100644 index 000000000..4f0f544c1 --- /dev/null +++ b/v1.3.0/maintain/fhir/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Server + + + + + + + + + diff --git a/v1.3.0/maintain/fhir/oidc.html b/v1.3.0/maintain/fhir/oidc.html new file mode 100644 index 000000000..ed7024b5a --- /dev/null +++ b/v1.3.0/maintain/fhir/oidc.html @@ -0,0 +1,60 @@ + + + + + + + + + + OpenID Connect + + + + + +
    Skip to main content

    OpenID Connect

    DSF-TeamAbout 1 min

    Overview

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    The DSF FHIR server supports Authorization Code Flowopen in new window for the user interface as well as Bearer Token Authenticationopen in new window for the REST API. Back-Channel Logoutopen in new window is also supported.

    FHIR Reverse Proxy

    The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter SSL_VERIFY_CLIENT needs to be set to optional.

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.3.0
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    Last update:
    + + + diff --git a/v1.3.0/maintain/index.html b/v1.3.0/maintain/index.html new file mode 100644 index 000000000..b9baca6c6 --- /dev/null +++ b/v1.3.0/maintain/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Maintain a DSF instance + + + + + + + + + diff --git a/v1.3.0/maintain/install-plugins.html b/v1.3.0/maintain/install-plugins.html new file mode 100644 index 000000000..ba473e9a1 --- /dev/null +++ b/v1.3.0/maintain/install-plugins.html @@ -0,0 +1,40 @@ + + + + + + + + + + Install Plugins + + + + + +
    Skip to main content

    Install Plugins

    DSF-TeamLess than 1 minute

    Last update:
    + + + diff --git a/v1.3.0/maintain/install.html b/v1.3.0/maintain/install.html new file mode 100644 index 000000000..ca7460942 --- /dev/null +++ b/v1.3.0/maintain/install.html @@ -0,0 +1,74 @@ + + + + + + + + + + Install DSF 1.3.0 + + + + + +
    Skip to main content

    Install DSF 1.3.0

    DSF-TeamAbout 6 min

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/installopen in new window.

    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)

    Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.netopen in new window or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2101 fhir
      +sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_3_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_3_0.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L44:      - app_client_certificate_private_key.pem.password
        +...
        +L59:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L146:  app_client_certificate_private_key.pem.password:
        +L147:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2202 bpe
      +sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_3_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_3_0.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L18:      - app_client_certificate_private_key.pem.password
        +...
        +L40:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L97:  app_client_certificate_private_key.pem.password:
        +L98:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1}
    +INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2}
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.3.0/maintain/upgrade-from-0.html b/v1.3.0/maintain/upgrade-from-0.html new file mode 100644 index 000000000..f0ae6b312 --- /dev/null +++ b/v1.3.0/maintain/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade from DSF 0.9.x + + + + + +
    Skip to main content

    Upgrade from DSF 0.9.x

    DSF-TeamAbout 1 min

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    Do not use your 0.9.x configuration as starting point

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    Instead, please perform the following steps:

    1. Shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. Install the new DSF according to the instructions.
    4. You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).
    5. Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).
    6. If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).
    7. If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Use your old virtual machine

    We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.

    Last update:
    + + + diff --git a/v1.3.0/maintain/upgrade-from-1.html b/v1.3.0/maintain/upgrade-from-1.html new file mode 100644 index 000000000..be62758fe --- /dev/null +++ b/v1.3.0/maintain/upgrade-from-1.html @@ -0,0 +1,61 @@ + + + + + + + + + + Upgrade from DSF 1.2.0 + + + + + +
    Skip to main content

    Upgrade from DSF 1.2.0

    DSF-TeamAbout 1 min

    Upgrading the DSF from 1.2.0 to 1.3.0 involves modifying the docker-compose.yml files and recreating the containers.

    Upgrade from 0.9.x

    If you want to migrate from DSF 0.9.x, please follow these instructions.

    Update to DSF 1.2.0 first

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.3.0_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.3.0.

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.2.0
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.3.0
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.2.0
    ++   image: ghcr.io/datasharingframework/fhir:1.3.0
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.3.0_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.3.0.

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.2.0
    ++   image: ghcr.io/datasharingframework/bpe:1.3.0
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF BPE containers
      From /opt/bpe execute

      docker compose up -d && docker compose logs -f
      +
    2. Verify your upgrade:

      • Verify the DSF FHIR server is running in version 1.3.0. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.3.0, [...]
      • Verify the DSF FHIR server started without errors
      • Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/open in new window (authentication with your client-certificate)
      • Verify the DSF BPE server is running in version 1.3.0. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.3.0, [...]
      • Verify the DSF BPE server started without errors
      • Verify your install with a ping/pong test
    Last update:
    + + + diff --git a/v1.3.0/process-plugins-advanced.html b/v1.3.0/process-plugins-advanced.html new file mode 100644 index 000000000..0650dd02c --- /dev/null +++ b/v1.3.0/process-plugins-advanced.html @@ -0,0 +1,40 @@ + + + + + + + + + + Process Plugins Advanced + + + + + + + + + diff --git a/v1.3.1/develop/create.html b/v1.3.1/develop/create.html new file mode 100644 index 000000000..66dc5b021 --- /dev/null +++ b/v1.3.1/develop/create.html @@ -0,0 +1,40 @@ + + + + + + + + + + Create a new process plugin + + + + + + + + + diff --git a/v1.3.1/develop/index.html b/v1.3.1/develop/index.html new file mode 100644 index 000000000..c6600abfb --- /dev/null +++ b/v1.3.1/develop/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Develop Process Plugins + + + + + + + + + diff --git a/v1.3.1/develop/upgrade-from-0.html b/v1.3.1/develop/upgrade-from-0.html new file mode 100644 index 000000000..eff3d9df0 --- /dev/null +++ b/v1.3.1/develop/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade processes from 0.9.x + + + + + + + + + diff --git a/v1.3.1/dsf-for-dev.html b/v1.3.1/dsf-for-dev.html new file mode 100644 index 000000000..db0edb74c --- /dev/null +++ b/v1.3.1/dsf-for-dev.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF for Developers + + + + + + + + + diff --git a/v1.3.1/index.html b/v1.3.1/index.html new file mode 100644 index 000000000..4db150883 --- /dev/null +++ b/v1.3.1/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF 1.3.1 + + + + + +
    Skip to main content

    DSF 1.3.1

    DSF-TeamLess than 1 minute

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    Important note

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsfopen in new window.

    System Administrators

    Developers

    New features

    • Improved versioning to support up- and downwards-compatibility
    • Enhanced web ui to start processes in the web browser
    • Allow local user authentication and authorization with OpenID Connect
    • New process plugin API
    • Removed mostly unused features to simplify instance configuration
    • Unified proxy setup
    • Many more features, see 1.x release-notesopen in new window
    Last update:
    + + + diff --git a/v1.3.1/maintain/allowList-mgm.html b/v1.3.1/maintain/allowList-mgm.html new file mode 100644 index 000000000..7d134e5ca --- /dev/null +++ b/v1.3.1/maintain/allowList-mgm.html @@ -0,0 +1,40 @@ + + + + + + + + + + Allow List Management + + + + + +
    Skip to main content

    Allow List Management

    DSF-TeamAbout 1 min

    You can read all about the concept of Allow Lists in our introduction.

    Overview

    To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

    The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.

    Prerequisites

    1. Deployed DSF instance (test or production infrastructure)
      1.1 If none exists yet, read the installation guide
    2. Certificate
      2.1 If none exists yet, read the certificate requirements
    3. Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de
    4. FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir
    5. Contact details from a responsible person of your organization
    6. Access to the E-Mail address from your organization for verification

    Start here

    When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:

    We use different highlight colors for the DSF Allow List Management Tool: Green for the Test environment and blue for the Production infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.3.1/maintain/bpe/configuration.html b/v1.3.1/maintain/bpe/configuration.html new file mode 100644 index 000000000..8ea429cec --- /dev/null +++ b/v1.3.1/maintain/bpe/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 8 min

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL

    • Property: dev.dsf.bpe.debug.log.message.variablesLocal
    • Required: No
    • Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: The base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.corePoolSize
    • Required: No
    • Description: Process engine job executor core pool size
    • Default: 4

    DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.maxPoolSize
    • Required: No
    • Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full
    • Default: 10

    DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE

    • Property: dev.dsf.bpe.process.engine.queueSize
    • Required: No
    • Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy
    • Default: 40

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List
    • Example: dsfdev_updateAllowList|1.0, another_process|x.y

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available
    • Example: old_process|x.y

    DEV_DSF_BPE_PROCESS_THREADS

    • Property: dev.dsf.bpe.process.threads
    • Required: No
    • Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores
    • Default: -1

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    Last update:
    + + + diff --git a/v1.3.1/maintain/bpe/index.html b/v1.3.1/maintain/bpe/index.html new file mode 100644 index 000000000..25683164c --- /dev/null +++ b/v1.3.1/maintain/bpe/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + BPE Server + + + + + + + + + diff --git a/v1.3.1/maintain/fhir-reverse-proxy/configuration.html b/v1.3.1/maintain/fhir-reverse-proxy/configuration.html new file mode 100644 index 000000000..1effa076d --- /dev/null +++ b/v1.3.1/maintain/fhir-reverse-proxy/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 1 min

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /fhir

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    Last update:
    + + + diff --git a/v1.3.1/maintain/fhir-reverse-proxy/index.html b/v1.3.1/maintain/fhir-reverse-proxy/index.html new file mode 100644 index 000000000..9b3b26338 --- /dev/null +++ b/v1.3.1/maintain/fhir-reverse-proxy/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Reverse Proxy + + + + + + + + + diff --git a/v1.3.1/maintain/fhir/access-control.html b/v1.3.1/maintain/fhir/access-control.html new file mode 100644 index 000000000..71a19b194 --- /dev/null +++ b/v1.3.1/maintain/fhir/access-control.html @@ -0,0 +1,85 @@ + + + + + + + + + + Access Control + + + + + +
    Skip to main content

    Access Control

    DSF-TeamAbout 2 min

    Overview

    The DSF FHIR server implements a subset of the FHIR R4 REST APIopen in new window. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    OpenID Connect

    To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

    Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

    The listing below shows a minimal configuration to enable read access for a specific client-certificate:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - example_read_only_role:
    +            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +

    The list of user roles above contains a single entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles.

    Certificate Thumbprints

    SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

    certtool --fingerprint --hash=sha512 --infile=certificate.pem
    +

    Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

    Matching Users

    To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

    thumbprint

    The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

    email

    Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the email claimopen in new window from the access token will be matched against the property values.

    token-role and token-group

    With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

    DSF and Practitioner Roles

    To types of roles can be applied to matched users.

    dsf-role

    DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

    CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

    practitioner-role

    In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystemopen in new window resources. Codes are specified in the form system-url|code.
    If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinitionopen in new window resource, the user can start the process if he also has the dsf-role CREATE.

    Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

    UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

    Examples

    The first example defines a group of DSF administrators. Two client certificates match against this role:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - certificate-admins:
    +            thumbprint: 
    +              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
    +              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - token-role-admins:
    +            token-role: admin
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - read-only:
    +            email:
    +              - first.user@test.org
    +              - second.user@test.org
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +
    Last update:
    + + + diff --git a/v1.3.1/maintain/fhir/configuration.html b/v1.3.1/maintain/fhir/configuration.html new file mode 100644 index 000000000..7c23979a0 --- /dev/null +++ b/v1.3.1/maintain/fhir/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 5 min

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client _trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: The base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: The page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    Last update:
    + + + diff --git a/v1.3.1/maintain/fhir/index.html b/v1.3.1/maintain/fhir/index.html new file mode 100644 index 000000000..4a8a3d318 --- /dev/null +++ b/v1.3.1/maintain/fhir/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Server + + + + + + + + + diff --git a/v1.3.1/maintain/fhir/oidc.html b/v1.3.1/maintain/fhir/oidc.html new file mode 100644 index 000000000..55753df2d --- /dev/null +++ b/v1.3.1/maintain/fhir/oidc.html @@ -0,0 +1,60 @@ + + + + + + + + + + OpenID Connect + + + + + +
    Skip to main content

    OpenID Connect

    DSF-TeamAbout 1 min

    Overview

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    The DSF FHIR server supports Authorization Code Flowopen in new window for the user interface as well as Bearer Token Authenticationopen in new window for the REST API. Back-Channel Logoutopen in new window is also supported.

    FHIR Reverse Proxy

    The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter SSL_VERIFY_CLIENT needs to be set to optional.

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.3.1
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    Last update:
    + + + diff --git a/v1.3.1/maintain/index.html b/v1.3.1/maintain/index.html new file mode 100644 index 000000000..1c6211aea --- /dev/null +++ b/v1.3.1/maintain/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Maintain a DSF instance + + + + + + + + + diff --git a/v1.3.1/maintain/install-plugins.html b/v1.3.1/maintain/install-plugins.html new file mode 100644 index 000000000..1e90cbefb --- /dev/null +++ b/v1.3.1/maintain/install-plugins.html @@ -0,0 +1,40 @@ + + + + + + + + + + Install Plugins + + + + + +
    Skip to main content

    Install Plugins

    DSF-TeamLess than 1 minute

    Last update:
    + + + diff --git a/v1.3.1/maintain/install.html b/v1.3.1/maintain/install.html new file mode 100644 index 000000000..c3dde979e --- /dev/null +++ b/v1.3.1/maintain/install.html @@ -0,0 +1,74 @@ + + + + + + + + + + Install DSF 1.3.1 + + + + + +
    Skip to main content

    Install DSF 1.3.1

    DSF-TeamAbout 6 min

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/installopen in new window.

    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)

    Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.netopen in new window or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2101 fhir
      +sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_3_1.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_3_1.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L39:      - app_client_certificate_private_key.pem.password
        +...
        +L54:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L141:  app_client_certificate_private_key.pem.password:
        +L142:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2202 bpe
      +sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_3_1.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_3_1.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L13:      - app_client_certificate_private_key.pem.password
        +...
        +L35:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L89:  app_client_certificate_private_key.pem.password:
        +L90:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1}
    +INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2}
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.3.1/maintain/upgrade-from-0.html b/v1.3.1/maintain/upgrade-from-0.html new file mode 100644 index 000000000..631942403 --- /dev/null +++ b/v1.3.1/maintain/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade from DSF 0.9.x + + + + + +
    Skip to main content

    Upgrade from DSF 0.9.x

    DSF-TeamAbout 1 min

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    Do not use your 0.9.x configuration as starting point

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    Instead, please perform the following steps:

    1. Shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. Install the new DSF according to the instructions.
    4. You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).
    5. Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).
    6. If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).
    7. If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Use your old virtual machine

    We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.

    Last update:
    + + + diff --git a/v1.3.1/maintain/upgrade-from-1.html b/v1.3.1/maintain/upgrade-from-1.html new file mode 100644 index 000000000..18d518850 --- /dev/null +++ b/v1.3.1/maintain/upgrade-from-1.html @@ -0,0 +1,61 @@ + + + + + + + + + + Upgrade from DSF 1.3.0 + + + + + +
    Skip to main content

    Upgrade from DSF 1.3.0

    DSF-TeamAbout 1 min

    Upgrading the DSF from 1.3.0 to 1.3.1 involves modifying the docker-compose.yml files and recreating the containers.

    Update to DSF 1.2.0 first

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.3.1_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.3.1.

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.3.0
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.3.1
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.3.0
    ++   image: ghcr.io/datasharingframework/fhir:1.3.1
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.3.1_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.3.1.

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.3.0
    ++   image: ghcr.io/datasharingframework/bpe:1.3.1
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF BPE containers
      From /opt/bpe execute

      docker compose up -d && docker compose logs -f
      +
    2. Verify your upgrade:

      • Verify the DSF FHIR server is running in version 1.3.1. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.3.1, [...]
      • Verify the DSF FHIR server started without errors
      • Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/open in new window (authentication with your client-certificate)
      • Verify the DSF BPE server is running in version 1.3.1. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.3.1, [...]
      • Verify the DSF BPE server started without errors
      • Verify your install with a ping/pong test
    Last update:
    + + + diff --git a/v1.3.1/process-plugins-advanced.html b/v1.3.1/process-plugins-advanced.html new file mode 100644 index 000000000..9cf54d76d --- /dev/null +++ b/v1.3.1/process-plugins-advanced.html @@ -0,0 +1,40 @@ + + + + + + + + + + Process Plugins Advanced + + + + + + + + + diff --git a/v1.3.2/develop/create.html b/v1.3.2/develop/create.html new file mode 100644 index 000000000..496d1e553 --- /dev/null +++ b/v1.3.2/develop/create.html @@ -0,0 +1,40 @@ + + + + + + + + + + Create a new process plugin + + + + + + + + + diff --git a/v1.3.2/develop/index.html b/v1.3.2/develop/index.html new file mode 100644 index 000000000..ceb6ea0d6 --- /dev/null +++ b/v1.3.2/develop/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Develop Process Plugins + + + + + + + + + diff --git a/v1.3.2/develop/upgrade-from-0.html b/v1.3.2/develop/upgrade-from-0.html new file mode 100644 index 000000000..f56cce644 --- /dev/null +++ b/v1.3.2/develop/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade processes from 0.9.x + + + + + + + + + diff --git a/v1.3.2/dsf-for-dev.html b/v1.3.2/dsf-for-dev.html new file mode 100644 index 000000000..eace9c17e --- /dev/null +++ b/v1.3.2/dsf-for-dev.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF for Developers + + + + + + + + + diff --git a/v1.3.2/index.html b/v1.3.2/index.html new file mode 100644 index 000000000..9b697935c --- /dev/null +++ b/v1.3.2/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF 1.3.2 + + + + + +
    Skip to main content

    DSF 1.3.2

    DSF-TeamLess than 1 minute

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    Important note

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsfopen in new window.

    System Administrators

    Developers

    New features

    • Improved versioning to support up- and downwards-compatibility
    • Enhanced web ui to start processes in the web browser
    • Allow local user authentication and authorization with OpenID Connect
    • New process plugin API
    • Removed mostly unused features to simplify instance configuration
    • Unified proxy setup
    • Many more features, see 1.x release-notesopen in new window
    Last update:
    + + + diff --git a/v1.3.2/maintain/allowList-mgm.html b/v1.3.2/maintain/allowList-mgm.html new file mode 100644 index 000000000..a7387cec7 --- /dev/null +++ b/v1.3.2/maintain/allowList-mgm.html @@ -0,0 +1,40 @@ + + + + + + + + + + Allow List Management + + + + + +
    Skip to main content

    Allow List Management

    DSF-TeamAbout 1 min

    You can read all about the concept of Allow Lists in our introduction.

    Overview

    To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

    The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.

    Prerequisites

    1. Deployed DSF instance (test or production infrastructure)
      1.1 If none exists yet, read the installation guide
    2. Certificate
      2.1 If none exists yet, read the certificate requirements
    3. Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de
    4. FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir
    5. Contact details from a responsible person of your organization
    6. Access to the E-Mail address from your organization for verification

    Start here

    When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:

    We use different highlight colors for the DSF Allow List Management Tool: Green for the Test environment and blue for the Production infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.3.2/maintain/bpe/configuration.html b/v1.3.2/maintain/bpe/configuration.html new file mode 100644 index 000000000..d6e989f03 --- /dev/null +++ b/v1.3.2/maintain/bpe/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 8 min

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL

    • Property: dev.dsf.bpe.debug.log.message.variablesLocal
    • Required: No
    • Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: The base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.corePoolSize
    • Required: No
    • Description: Process engine job executor core pool size
    • Default: 4

    DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.maxPoolSize
    • Required: No
    • Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full
    • Default: 10

    DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE

    • Property: dev.dsf.bpe.process.engine.queueSize
    • Required: No
    • Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy
    • Default: 40

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List
    • Example: dsfdev_updateAllowList|1.0, another_process|x.y

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available
    • Example: old_process|x.y

    DEV_DSF_BPE_PROCESS_THREADS

    • Property: dev.dsf.bpe.process.threads
    • Required: No
    • Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores
    • Default: -1

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    Last update:
    + + + diff --git a/v1.3.2/maintain/bpe/index.html b/v1.3.2/maintain/bpe/index.html new file mode 100644 index 000000000..246f04df7 --- /dev/null +++ b/v1.3.2/maintain/bpe/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + BPE Server + + + + + + + + + diff --git a/v1.3.2/maintain/fhir-reverse-proxy/configuration.html b/v1.3.2/maintain/fhir-reverse-proxy/configuration.html new file mode 100644 index 000000000..2994a9533 --- /dev/null +++ b/v1.3.2/maintain/fhir-reverse-proxy/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 1 min

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /fhir

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    Last update:
    + + + diff --git a/v1.3.2/maintain/fhir-reverse-proxy/index.html b/v1.3.2/maintain/fhir-reverse-proxy/index.html new file mode 100644 index 000000000..1cccd9125 --- /dev/null +++ b/v1.3.2/maintain/fhir-reverse-proxy/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Reverse Proxy + + + + + + + + + diff --git a/v1.3.2/maintain/fhir/access-control.html b/v1.3.2/maintain/fhir/access-control.html new file mode 100644 index 000000000..e9c7fd97e --- /dev/null +++ b/v1.3.2/maintain/fhir/access-control.html @@ -0,0 +1,85 @@ + + + + + + + + + + Access Control + + + + + +
    Skip to main content

    Access Control

    DSF-TeamAbout 2 min

    Overview

    The DSF FHIR server implements a subset of the FHIR R4 REST APIopen in new window. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    OpenID Connect

    To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

    Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

    The listing below shows a minimal configuration to enable read access for a specific client-certificate:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - example_read_only_role:
    +            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +

    The list of user roles above contains a single entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles.

    Certificate Thumbprints

    SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

    certtool --fingerprint --hash=sha512 --infile=certificate.pem
    +

    Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

    Matching Users

    To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

    thumbprint

    The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

    email

    Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the email claimopen in new window from the access token will be matched against the property values.

    token-role and token-group

    With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

    DSF and Practitioner Roles

    To types of roles can be applied to matched users.

    dsf-role

    DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

    CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

    practitioner-role

    In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystemopen in new window resources. Codes are specified in the form system-url|code.
    If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinitionopen in new window resource, the user can start the process if he also has the dsf-role CREATE.

    Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

    UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

    Examples

    The first example defines a group of DSF administrators. Two client certificates match against this role:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - certificate-admins:
    +            thumbprint: 
    +              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
    +              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - token-role-admins:
    +            token-role: admin
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - read-only:
    +            email:
    +              - first.user@test.org
    +              - second.user@test.org
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +
    Last update:
    + + + diff --git a/v1.3.2/maintain/fhir/configuration.html b/v1.3.2/maintain/fhir/configuration.html new file mode 100644 index 000000000..7ffea0944 --- /dev/null +++ b/v1.3.2/maintain/fhir/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 5 min

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client _trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: The base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: The page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    Last update:
    + + + diff --git a/v1.3.2/maintain/fhir/index.html b/v1.3.2/maintain/fhir/index.html new file mode 100644 index 000000000..b6a8c653a --- /dev/null +++ b/v1.3.2/maintain/fhir/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Server + + + + + + + + + diff --git a/v1.3.2/maintain/fhir/oidc.html b/v1.3.2/maintain/fhir/oidc.html new file mode 100644 index 000000000..c0823ed72 --- /dev/null +++ b/v1.3.2/maintain/fhir/oidc.html @@ -0,0 +1,60 @@ + + + + + + + + + + OpenID Connect + + + + + +
    Skip to main content

    OpenID Connect

    DSF-TeamAbout 1 min

    Overview

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    The DSF FHIR server supports Authorization Code Flowopen in new window for the user interface as well as Bearer Token Authenticationopen in new window for the REST API. Back-Channel Logoutopen in new window is also supported.

    FHIR Reverse Proxy

    The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter SSL_VERIFY_CLIENT needs to be set to optional.

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.3.2
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    Last update:
    + + + diff --git a/v1.3.2/maintain/index.html b/v1.3.2/maintain/index.html new file mode 100644 index 000000000..472d9e924 --- /dev/null +++ b/v1.3.2/maintain/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Maintain a DSF instance + + + + + + + + + diff --git a/v1.3.2/maintain/install-plugins.html b/v1.3.2/maintain/install-plugins.html new file mode 100644 index 000000000..bbb59bb53 --- /dev/null +++ b/v1.3.2/maintain/install-plugins.html @@ -0,0 +1,40 @@ + + + + + + + + + + Install Plugins + + + + + +
    Skip to main content

    Install Plugins

    DSF-TeamLess than 1 minute

    Last update:
    + + + diff --git a/v1.3.2/maintain/install.html b/v1.3.2/maintain/install.html new file mode 100644 index 000000000..8599a10e0 --- /dev/null +++ b/v1.3.2/maintain/install.html @@ -0,0 +1,74 @@ + + + + + + + + + + Install DSF 1.3.2 + + + + + +
    Skip to main content

    Install DSF 1.3.2

    DSF-TeamAbout 6 min

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/installopen in new window.

    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)

    Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.netopen in new window or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2101 fhir
      +sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_3_2.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_3_2.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L39:      - app_client_certificate_private_key.pem.password
        +...
        +L54:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L141:  app_client_certificate_private_key.pem.password:
        +L142:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2202 bpe
      +sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_3_2.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_3_2.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L13:      - app_client_certificate_private_key.pem.password
        +...
        +L35:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L89:  app_client_certificate_private_key.pem.password:
        +L90:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1}
    +INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2}
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.3.2/maintain/upgrade-from-0.html b/v1.3.2/maintain/upgrade-from-0.html new file mode 100644 index 000000000..4d1b5c9e4 --- /dev/null +++ b/v1.3.2/maintain/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade from DSF 0.9.x + + + + + +
    Skip to main content

    Upgrade from DSF 0.9.x

    DSF-TeamAbout 1 min

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    Do not use your 0.9.x configuration as starting point

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    Instead, please perform the following steps:

    1. Shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. Install the new DSF according to the instructions.
    4. You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).
    5. Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).
    6. If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).
    7. If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Use your old virtual machine

    We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.

    Last update:
    + + + diff --git a/v1.3.2/maintain/upgrade-from-1.html b/v1.3.2/maintain/upgrade-from-1.html new file mode 100644 index 000000000..d5c42b10a --- /dev/null +++ b/v1.3.2/maintain/upgrade-from-1.html @@ -0,0 +1,61 @@ + + + + + + + + + + Upgrade from DSF 1.3.1 + + + + + +
    Skip to main content

    Upgrade from DSF 1.3.1

    DSF-TeamAbout 1 min

    Upgrading the DSF from 1.3.1 to 1.3.2 involves modifying the docker-compose.yml files and recreating the containers.

    Update to DSF 1.2.0 first

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.3.2_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.3.2.

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.3.1
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.3.2
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.3.1
    ++   image: ghcr.io/datasharingframework/fhir:1.3.2
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.3.2_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.3.2.

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.3.1
    ++   image: ghcr.io/datasharingframework/bpe:1.3.2
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF BPE containers
      From /opt/bpe execute

      docker compose up -d && docker compose logs -f
      +
    2. Verify your upgrade:

      • Verify the DSF FHIR server is running in version 1.3.2. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.3.2, [...]
      • Verify the DSF FHIR server started without errors
      • Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/open in new window (authentication with your client-certificate)
      • Verify the DSF BPE server is running in version 1.3.2. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.3.2, [...]
      • Verify the DSF BPE server started without errors
      • Verify your install with a ping/pong test
    Last update:
    + + + diff --git a/v1.3.2/process-plugins-advanced.html b/v1.3.2/process-plugins-advanced.html new file mode 100644 index 000000000..de2ab4493 --- /dev/null +++ b/v1.3.2/process-plugins-advanced.html @@ -0,0 +1,40 @@ + + + + + + + + + + Process Plugins Advanced + + + + + + + + + diff --git a/v1.4.0/contribute/code.html b/v1.4.0/contribute/code.html new file mode 100644 index 000000000..3e0db44b5 --- /dev/null +++ b/v1.4.0/contribute/code.html @@ -0,0 +1,40 @@ + + + + + + + + + + Contribute code + + + + + +
    Skip to main content

    Contribute code

    DSF-TeamAbout 3 min

    Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.

    Benefits of Contributing:

    • Foster community growth and diversification.
    • Sharpen your coding skills.
    • Gain recognition in the DSF community.
    • Directly impact the future of data sharing in medicine.

    Start now by visiting our contribution pages. Every line of code helps us build a stronger and more versatile DSF.

    General

    Code style

    You can import our code style for your specific IDE:

    • Eclipseopen in new window. Open your preferences, click on Java, Code style, Formatter, Import and select the downloaded file.
    • IntelliJopen in new window. Open your settings, click on Editor, Code style, Java, the settings icon, import scheme, IntelliJ and select the downloaded file.

    Pull requests will only be approved if the code is formatted according to the code style configurations above. To format the code with maven before pushing to GitHub, use mvn compile -Pformat-and-sort.

    Branching strategy

    Git Flowopen in new window is used as this project's branching strategy. Therefore, you will find the following structure:

    • main
    • develop
    • issue
    • hotfix
    • release

    Notice that only the first two elements listed are actual branches. The other elements are containers to hold all branches belonging to that category.

    Branch naming

    The following ruleset is applied to name branches:

    • issue/<issue-number>_<issue-name>
    • hotfix/<version>
    • release/<version>

    Setting up the project

    This chapter lists all important requirements to get the project buildable and running properly.

    Java

    This project uses Java JDK 17, so make sure you have it installed on your system.

    Docker

    Dockeropen in new window is used in this project to test database functionality and to run more complex test-setups.

    Maven

    The project relies on Mavenopen in new window as its management tool.
    Important: When building the project you might encounter the following error:
    Could not determine gpg version GPGopen in new window is used to sign artifacts for public release. Since this does not concern contributors, you may skip this step in the maven build process with -Dgpg.skip.

    Workflow

    1. Create an issue or comment on an issue that you want to contribute some feature
    2. Fork the repository, create a branch and mention it in the issue
    3. If you desire feedback, create a pull request or comment on it in the issue. Feel free to @ any member with write permissions if you feel like your request has not been registered yet. They will review your changes and/or change requests
    4. If your changes are production-ready, create a pull requestopen in new window.

    Pull request process

    We follow Martin Fowler's method for managing pull requests. This approach categorizes pull requests based on the level of trust and experience of the contributor, as well as the impact of the changes. Here's how we apply it:

    1. Ship: For our most trusted contributors with a proven track record. These members can merge their pull requests without prior review, typically for minor or highly confident changes.

    2. Show: This level is for trusted contributors who need some oversight, as well as for experienced developers who want to demonstrate how certain changes should be made in the future. They create pull requests and show their work to the team.

    3. Ask: New or less experienced contributors, as well as those submitting more complex changes, fall into this category. They are required to ask for feedback and approval before their changes can be merged, ensuring thorough review and quality control.

    This method helps us maintain a balance between code quality and efficient development, recognizing the varying levels of expertise among our contributors.

    For more information on Fowler's approach, visit Martin Fowler's article on Pull Requestsopen in new window.

    Data Security in DSF Development

    The DSF (Data Sharing Framework) and its process plugins are frequently used to transmit sensitive personal data. To prevent the release of personal data during development, please adhere to the following guidelines:

    • No development with real personal data: Always use anonymized or synthetic data for development purposes.
    • No personal data in repositories: Ensure no personal data is present in local and remote repositories intended for publication, not even temporarily.
    • Review all log files: Before using log files in issues, examples, etc., thoroughly review them to ensure no personal and sensitive data is included.
    Last update:
    + + + diff --git a/v1.4.0/contribute/documentation.html b/v1.4.0/contribute/documentation.html new file mode 100644 index 000000000..a8de83096 --- /dev/null +++ b/v1.4.0/contribute/documentation.html @@ -0,0 +1,40 @@ + + + + + + + + + + Contribute documentation + + + + + +
    Skip to main content

    Contribute documentation

    DSF-TeamLess than 1 minute

    Join us in enhancing our documentation!

    We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!

    1. Contact us with feedback: If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.
    2. Create an issue: You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at Data Sharing Framework Documentationopen in new window and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.
    3. Contribute directly with a pull request: If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at Data Sharing Framework Documentationopen in new window and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.

    We're excited to see your suggestions and are grateful for every contribution that helps us improve. Let's build better documentation together!

    Last update:
    + + + diff --git a/v1.4.0/contribute/index.html b/v1.4.0/contribute/index.html new file mode 100644 index 000000000..ba33f6f7d --- /dev/null +++ b/v1.4.0/contribute/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Contribute + + + + + +
    Skip to main content

    Contribute

    DSF-TeamAbout 2 min

    We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.

    Ways you can contribute:

    1. Helping other users:
    2. Testing releases:
      • Stay ahead: Help us testing the latest releases. Your feedback on functionality, bugs, and user experience is invaluable.
      • Report findings: Share your testing results to help us refine and enhance our releases.
    3. Reviewing changes:
      • Peer review: Contribute by reviewing pull requests. Your insights can help ensure the quality and integrity of code changes.
      • Constructive feedback: Offer constructive feedback and suggestions to help improve and refine proposed changes.
    4. Documentation changes:
    5. Contributing bug reports:
      • Report bugs: If you find a bug, please report it via an issue on GitHubopen in new window. Detailed bug reports are incredibly helpful.
      • Reproduction steps: Include steps to reproduce the bug and any relevant logs according to our bug report issue template.
    6. Contributing feature requests:
      • Suggest features: You have an idea for a new feature? We'd love to hear it! Open an issue to describe your proposed feature and its potential benefits according to our feature request template.
      • Collaborate on implementation: If you're able to, contribute to the development of your proposed feature or bug fix. Collaboration can lead to more innovative and effective solutions. Please checkout our Getting started guide for code contributions to DSF.
    7. Contributing process plugins:

    Before you start contributing, we recommend reading our getting started guidelines for detailed information on our processes and standards. This ensures a smooth and productive experience for everyone involved.

    Your contributions in any form, are what drives the continuous growth and improvement of this project. Thank you for being a part of our community and for your willingness to contribute!

    Last update:
    + + + diff --git a/v1.4.0/develop/create.html b/v1.4.0/develop/create.html new file mode 100644 index 000000000..152197832 --- /dev/null +++ b/v1.4.0/develop/create.html @@ -0,0 +1,40 @@ + + + + + + + + + + Create a new process plugin + + + + + + + + + diff --git a/v1.4.0/develop/index.html b/v1.4.0/develop/index.html new file mode 100644 index 000000000..016032e58 --- /dev/null +++ b/v1.4.0/develop/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Develop Process Plugins + + + + + + + + + diff --git a/v1.4.0/develop/upgrade-from-0.html b/v1.4.0/develop/upgrade-from-0.html new file mode 100644 index 000000000..79881bdae --- /dev/null +++ b/v1.4.0/develop/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade processes from 0.9.x + + + + + + + + + diff --git a/v1.4.0/dsf-for-dev.html b/v1.4.0/dsf-for-dev.html new file mode 100644 index 000000000..7cab76b91 --- /dev/null +++ b/v1.4.0/dsf-for-dev.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF for Developers + + + + + + + + + diff --git a/v1.4.0/index.html b/v1.4.0/index.html new file mode 100644 index 000000000..35396fa1c --- /dev/null +++ b/v1.4.0/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF 1.4.0 + + + + + +
    Skip to main content

    DSF 1.4.0

    DSF-TeamLess than 1 minute

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    Important note

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsfopen in new window.

    System Administrators

    Developers

    New features

    • Improved versioning to support up- and downwards-compatibility
    • Enhanced web ui to start processes in the web browser
    • Allow local user authentication and authorization with OpenID Connect
    • New process plugin API
    • Removed mostly unused features to simplify instance configuration
    • Unified proxy setup
    • Many more features, see 1.x release-notesopen in new window
    Last update:
    + + + diff --git a/v1.4.0/maintain/allowList-mgm.html b/v1.4.0/maintain/allowList-mgm.html new file mode 100644 index 000000000..0d94eb96f --- /dev/null +++ b/v1.4.0/maintain/allowList-mgm.html @@ -0,0 +1,40 @@ + + + + + + + + + + Allow List Management + + + + + +
    Skip to main content

    Allow List Management

    DSF-TeamAbout 1 min

    You can read all about the concept of Allow Lists in our introduction.

    Overview

    To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

    The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.

    Prerequisites

    1. Deployed DSF instance (test or production infrastructure)
      1.1 If none exists yet, read the installation guide
    2. Certificate
      2.1 If none exists yet, read the certificate requirements
    3. Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de
    4. FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir
    5. Contact details from a responsible person of your organization
    6. Access to the E-Mail address from your organization for verification

    Start here

    When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:

    We use different highlight colors for the DSF Allow List Management Tool: Green for the Test environment and blue for the Production infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.4.0/maintain/bpe/configuration.html b/v1.4.0/maintain/bpe/configuration.html new file mode 100644 index 000000000..bfb9ed89a --- /dev/null +++ b/v1.4.0/maintain/bpe/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 8 min

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL

    • Property: dev.dsf.bpe.debug.log.message.variablesLocal
    • Required: No
    • Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: The base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.corePoolSize
    • Required: No
    • Description: Process engine job executor core pool size
    • Default: 4

    DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.maxPoolSize
    • Required: No
    • Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full
    • Default: 10

    DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE

    • Property: dev.dsf.bpe.process.engine.queueSize
    • Required: No
    • Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy
    • Default: 40

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List
    • Example: dsfdev_updateAllowList|1.0, another_process|x.y

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available
    • Example: old_process|x.y

    DEV_DSF_BPE_PROCESS_THREADS

    • Property: dev.dsf.bpe.process.threads
    • Required: No
    • Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores
    • Default: -1

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    Last update:
    + + + diff --git a/v1.4.0/maintain/bpe/index.html b/v1.4.0/maintain/bpe/index.html new file mode 100644 index 000000000..b36e202cc --- /dev/null +++ b/v1.4.0/maintain/bpe/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + BPE Server + + + + + + + + + diff --git a/v1.4.0/maintain/fhir-reverse-proxy/configuration.html b/v1.4.0/maintain/fhir-reverse-proxy/configuration.html new file mode 100644 index 000000000..333fd7440 --- /dev/null +++ b/v1.4.0/maintain/fhir-reverse-proxy/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 1 min

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR servers application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /fhir

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    Last update:
    + + + diff --git a/v1.4.0/maintain/fhir-reverse-proxy/index.html b/v1.4.0/maintain/fhir-reverse-proxy/index.html new file mode 100644 index 000000000..c8491ae15 --- /dev/null +++ b/v1.4.0/maintain/fhir-reverse-proxy/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Reverse Proxy + + + + + + + + + diff --git a/v1.4.0/maintain/fhir/access-control.html b/v1.4.0/maintain/fhir/access-control.html new file mode 100644 index 000000000..a0779a24a --- /dev/null +++ b/v1.4.0/maintain/fhir/access-control.html @@ -0,0 +1,85 @@ + + + + + + + + + + Access Control + + + + + +
    Skip to main content

    Access Control

    DSF-TeamAbout 2 min

    Overview

    The DSF FHIR server implements a subset of the FHIR R4 REST APIopen in new window. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    OpenID Connect

    To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

    Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

    The listing below shows a minimal configuration to enable read access for a specific client-certificate:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - example_read_only_role:
    +            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +

    The list of user roles above contains a single entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles.

    Certificate Thumbprints

    SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

    certtool --fingerprint --hash=sha512 --infile=certificate.pem
    +

    Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

    Matching Users

    To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

    thumbprint

    The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

    email

    Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the email claimopen in new window from the access token will be matched against the property values.

    token-role and token-group

    With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

    DSF and Practitioner Roles

    To types of roles can be applied to matched users.

    dsf-role

    DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

    CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

    practitioner-role

    In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystemopen in new window resources. Codes are specified in the form system-url|code.
    If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinitionopen in new window resource, the user can start the process if he also has the dsf-role CREATE.

    Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

    UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

    Examples

    The first example defines a group of DSF administrators. Two client certificates match against this role:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - certificate-admins:
    +            thumbprint: 
    +              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
    +              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - token-role-admins:
    +            token-role: admin
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - read-only:
    +            email:
    +              - first.user@test.org
    +              - second.user@test.org
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +
    Last update:
    + + + diff --git a/v1.4.0/maintain/fhir/configuration.html b/v1.4.0/maintain/fhir/configuration.html new file mode 100644 index 000000000..b74c4abc9 --- /dev/null +++ b/v1.4.0/maintain/fhir/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 5 min

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: The timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: The timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client _trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: The address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: The base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: The fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: The local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: The page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    Last update:
    + + + diff --git a/v1.4.0/maintain/fhir/index.html b/v1.4.0/maintain/fhir/index.html new file mode 100644 index 000000000..93c75d0be --- /dev/null +++ b/v1.4.0/maintain/fhir/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Server + + + + + + + + + diff --git a/v1.4.0/maintain/fhir/oidc.html b/v1.4.0/maintain/fhir/oidc.html new file mode 100644 index 000000000..b8912fce1 --- /dev/null +++ b/v1.4.0/maintain/fhir/oidc.html @@ -0,0 +1,60 @@ + + + + + + + + + + OpenID Connect + + + + + +
    Skip to main content

    OpenID Connect

    DSF-TeamAbout 1 min

    Overview

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    The DSF FHIR server supports Authorization Code Flowopen in new window for the user interface as well as Bearer Token Authenticationopen in new window for the REST API. Back-Channel Logoutopen in new window is also supported.

    FHIR Reverse Proxy

    The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter SSL_VERIFY_CLIENT needs to be set to optional.

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.4.0
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    Last update:
    + + + diff --git a/v1.4.0/maintain/index.html b/v1.4.0/maintain/index.html new file mode 100644 index 000000000..a6c224c84 --- /dev/null +++ b/v1.4.0/maintain/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Maintain a DSF instance + + + + + + + + + diff --git a/v1.4.0/maintain/install-plugins.html b/v1.4.0/maintain/install-plugins.html new file mode 100644 index 000000000..331757358 --- /dev/null +++ b/v1.4.0/maintain/install-plugins.html @@ -0,0 +1,40 @@ + + + + + + + + + + Install Plugins + + + + + +
    Skip to main content

    Install Plugins

    DSF-TeamLess than 1 minute

    Last update:
    + + + diff --git a/v1.4.0/maintain/install.html b/v1.4.0/maintain/install.html new file mode 100644 index 000000000..22cd6cb7e --- /dev/null +++ b/v1.4.0/maintain/install.html @@ -0,0 +1,74 @@ + + + + + + + + + + Install DSF 1.4.0 + + + + + +
    Skip to main content

    Install DSF 1.4.0

    DSF-TeamAbout 6 min

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/installopen in new window.

    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)

    Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.netopen in new window or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2101 fhir
      +sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_4_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_4_0.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L39:      - app_client_certificate_private_key.pem.password
        +...
        +L54:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L141:  app_client_certificate_private_key.pem.password:
        +L142:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2202 bpe
      +sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_4_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_4_0.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L13:      - app_client_certificate_private_key.pem.password
        +...
        +L35:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L89:  app_client_certificate_private_key.pem.password:
        +L90:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1}
    +INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2}
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.4.0/maintain/upgrade-from-0.html b/v1.4.0/maintain/upgrade-from-0.html new file mode 100644 index 000000000..15424c7ed --- /dev/null +++ b/v1.4.0/maintain/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade from DSF 0.9.x + + + + + +
    Skip to main content

    Upgrade from DSF 0.9.x

    DSF-TeamAbout 1 min

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    Do not use your 0.9.x configuration as starting point

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    Instead, please perform the following steps:

    1. Shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. Install the new DSF according to the instructions.
    4. You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).
    5. Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).
    6. If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).
    7. If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Use your old virtual machine

    We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.

    Last update:
    + + + diff --git a/v1.4.0/maintain/upgrade-from-1.html b/v1.4.0/maintain/upgrade-from-1.html new file mode 100644 index 000000000..710518f98 --- /dev/null +++ b/v1.4.0/maintain/upgrade-from-1.html @@ -0,0 +1,61 @@ + + + + + + + + + + Upgrade from DSF 1.3.2 + + + + + +
    Skip to main content

    Upgrade from DSF 1.3.2

    DSF-TeamAbout 1 min

    Upgrading the DSF from 1.3.2 to 1.4.0 involves modifying the docker-compose.yml files and recreating the containers.

    Update to DSF 1.2.0 first

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.4.0_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.4.0.

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.3.2
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.4.0
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.3.2
    ++   image: ghcr.io/datasharingframework/fhir:1.4.0
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.4.0_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.4.0.

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.3.2
    ++   image: ghcr.io/datasharingframework/bpe:1.4.0
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF BPE containers
      From /opt/bpe execute

      docker compose up -d && docker compose logs -f
      +
    2. Verify your upgrade:

      • Verify the DSF FHIR server is running in version 1.4.0. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.4.0, [...]
      • Verify the DSF FHIR server started without errors
      • Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/open in new window (authentication with your client-certificate)
      • Verify the DSF BPE server is running in version 1.4.0. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.4.0, [...]
      • Verify the DSF BPE server started without errors
      • Verify your install with a ping/pong test
    Last update:
    + + + diff --git a/v1.4.0/process-plugins-advanced.html b/v1.4.0/process-plugins-advanced.html new file mode 100644 index 000000000..e29a0d013 --- /dev/null +++ b/v1.4.0/process-plugins-advanced.html @@ -0,0 +1,40 @@ + + + + + + + + + + Process Plugins Advanced + + + + + + + + + diff --git a/v1.5.0/contribute/code.html b/v1.5.0/contribute/code.html new file mode 100644 index 000000000..89619c32c --- /dev/null +++ b/v1.5.0/contribute/code.html @@ -0,0 +1,40 @@ + + + + + + + + + + Contribute code + + + + + +
    Skip to main content

    Contribute code

    DSF-TeamAbout 3 min

    Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.

    Benefits of Contributing:

    • Foster community growth and diversification.
    • Sharpen your coding skills.
    • Gain recognition in the DSF community.
    • Directly impact the future of data sharing in medicine.

    Start now by visiting our contribution pages. Every line of code helps us build a stronger and more versatile DSF.

    General

    Code style

    You can import our code style for your specific IDE:

    • Eclipseopen in new window. Open your preferences, click on Java, Code style, Formatter, Import and select the downloaded file.
    • IntelliJopen in new window. Open your settings, click on Editor, Code style, Java, the settings icon, import scheme, IntelliJ and select the downloaded file.

    Pull requests will only be approved if the code is formatted according to the code style configurations above. To format the code with maven before pushing to GitHub, use mvn compile -Pformat-and-sort.

    Branching strategy

    Git Flowopen in new window is used as this project's branching strategy. Therefore, you will find the following structure:

    • main
    • develop
    • issue
    • hotfix
    • release

    Notice that only the first two elements listed are actual branches. The other elements are containers to hold all branches belonging to that category.

    Branch naming

    The following ruleset is applied to name branches:

    • issue/<issue-number>_<issue-name>
    • hotfix/<version>
    • release/<version>

    Setting up the project

    This chapter lists all important requirements to get the project buildable and running properly.

    Java

    This project uses Java JDK 17, so make sure you have it installed on your system.

    Docker

    Dockeropen in new window is used in this project to test database functionality and to run more complex test-setups.

    Maven

    The project relies on Mavenopen in new window as its management tool.
    Important: When building the project you might encounter the following error:
    Could not determine gpg version GPGopen in new window is used to sign artifacts for public release. Since this does not concern contributors, you may skip this step in the maven build process with -Dgpg.skip.

    Workflow

    1. Create an issue or comment on an issue that you want to contribute some feature
    2. Fork the repository, create a branch and mention it in the issue
    3. If you desire feedback, create a pull request or comment on it in the issue. Feel free to @ any member with write permissions if you feel like your request has not been registered yet. They will review your changes and/or change requests
    4. If your changes are production-ready, create a pull requestopen in new window.

    Pull request process

    We follow Martin Fowler's method for managing pull requests. This approach categorizes pull requests based on the level of trust and experience of the contributor, as well as the impact of the changes. Here's how we apply it:

    1. Ship: For our most trusted contributors with a proven track record. These members can merge their pull requests without prior review, typically for minor or highly confident changes.

    2. Show: This level is for trusted contributors who need some oversight, as well as for experienced developers who want to demonstrate how certain changes should be made in the future. They create pull requests and show their work to the team.

    3. Ask: New or less experienced contributors, as well as those submitting more complex changes, fall into this category. They are required to ask for feedback and approval before their changes can be merged, ensuring thorough review and quality control.

    This method helps us maintain a balance between code quality and efficient development, recognizing the varying levels of expertise among our contributors.

    For more information on Fowler's approach, visit Martin Fowler's article on Pull Requestsopen in new window.

    Data Security in DSF Development

    The DSF (Data Sharing Framework) and its process plugins are frequently used to transmit sensitive personal data. To prevent the release of personal data during development, please adhere to the following guidelines:

    • No development with real personal data: Always use anonymized or synthetic data for development purposes.
    • No personal data in repositories: Ensure no personal data is present in local and remote repositories intended for publication, not even temporarily.
    • Review all log files: Before using log files in issues, examples, etc., thoroughly review them to ensure no personal and sensitive data is included.
    Last update:
    + + + diff --git a/v1.5.0/contribute/documentation.html b/v1.5.0/contribute/documentation.html new file mode 100644 index 000000000..d9c39631c --- /dev/null +++ b/v1.5.0/contribute/documentation.html @@ -0,0 +1,40 @@ + + + + + + + + + + Contribute documentation + + + + + +
    Skip to main content

    Contribute documentation

    DSF-TeamLess than 1 minute

    Join us in enhancing our documentation!

    We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!

    1. Contact us with feedback: If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.
    2. Create an issue: You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at Data Sharing Framework Documentationopen in new window and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.
    3. Contribute directly with a pull request: If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at Data Sharing Framework Documentationopen in new window and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.

    We're excited to see your suggestions and are grateful for every contribution that helps us improve. Let's build better documentation together!

    Last update:
    + + + diff --git a/v1.5.0/contribute/index.html b/v1.5.0/contribute/index.html new file mode 100644 index 000000000..ecac758d4 --- /dev/null +++ b/v1.5.0/contribute/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Contribute + + + + + +
    Skip to main content

    Contribute

    DSF-TeamAbout 2 min

    We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.

    Ways you can contribute:

    1. Helping other users:
    2. Testing releases:
      • Stay ahead: Help us testing the latest releases. Your feedback on functionality, bugs, and user experience is invaluable.
      • Report findings: Share your testing results to help us refine and enhance our releases.
    3. Reviewing changes:
      • Peer review: Contribute by reviewing pull requests. Your insights can help ensure the quality and integrity of code changes.
      • Constructive feedback: Offer constructive feedback and suggestions to help improve and refine proposed changes.
    4. Documentation changes:
    5. Contributing bug reports:
      • Report bugs: If you find a bug, please report it via an issue on GitHubopen in new window. Detailed bug reports are incredibly helpful.
      • Reproduction steps: Include steps to reproduce the bug and any relevant logs according to our bug report issue template.
    6. Contributing feature requests:
      • Suggest features: You have an idea for a new feature? We'd love to hear it! Open an issue to describe your proposed feature and its potential benefits according to our feature request template.
      • Collaborate on implementation: If you're able to, contribute to the development of your proposed feature or bug fix. Collaboration can lead to more innovative and effective solutions. Please checkout our Getting started guide for code contributions to DSF.
    7. Contributing process plugins:

    Before you start contributing, we recommend reading our getting started guidelines for detailed information on our processes and standards. This ensures a smooth and productive experience for everyone involved.

    Your contributions in any form, are what drives the continuous growth and improvement of this project. Thank you for being a part of our community and for your willingness to contribute!

    Last update:
    + + + diff --git a/v1.5.0/develop/create.html b/v1.5.0/develop/create.html new file mode 100644 index 000000000..f28ba803d --- /dev/null +++ b/v1.5.0/develop/create.html @@ -0,0 +1,40 @@ + + + + + + + + + + Create a new process plugin + + + + + + + + + diff --git a/v1.5.0/develop/index.html b/v1.5.0/develop/index.html new file mode 100644 index 000000000..b0e7b3693 --- /dev/null +++ b/v1.5.0/develop/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Develop Process Plugins + + + + + + + + + diff --git a/v1.5.0/develop/upgrade-from-0.html b/v1.5.0/develop/upgrade-from-0.html new file mode 100644 index 000000000..2086fa212 --- /dev/null +++ b/v1.5.0/develop/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade processes from 0.9.x + + + + + + + + + diff --git a/v1.5.0/dsf-for-dev.html b/v1.5.0/dsf-for-dev.html new file mode 100644 index 000000000..777ff8a6f --- /dev/null +++ b/v1.5.0/dsf-for-dev.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF for Developers + + + + + + + + + diff --git a/v1.5.0/index.html b/v1.5.0/index.html new file mode 100644 index 000000000..34f47f729 --- /dev/null +++ b/v1.5.0/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF 1.5.0 + + + + + +
    Skip to main content

    DSF 1.5.0

    DSF-TeamLess than 1 minute

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    Important note

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsfopen in new window.

    System Administrators

    Developers

    New features

    • Improved versioning to support up- and downwards-compatibility
    • Enhanced web ui to start processes in the web browser
    • Allow local user authentication and authorization with OpenID Connect
    • New process plugin API
    • Removed mostly unused features to simplify instance configuration
    • Unified proxy setup
    • Many more features, see 1.x release-notesopen in new window
    Last update:
    + + + diff --git a/v1.5.0/maintain/allowList-mgm.html b/v1.5.0/maintain/allowList-mgm.html new file mode 100644 index 000000000..8c0b9d123 --- /dev/null +++ b/v1.5.0/maintain/allowList-mgm.html @@ -0,0 +1,40 @@ + + + + + + + + + + Allow List Management + + + + + +
    Skip to main content

    Allow List Management

    DSF-TeamAbout 1 min

    You can read all about the concept of Allow Lists in our introduction.

    Overview

    To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

    The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.

    Prerequisites

    1. Deployed DSF instance (test or production infrastructure)
      1.1 If none exists yet, read the installation guide
    2. Certificate
      2.1 If none exists yet, read the certificate requirements
    3. Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de
    4. FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir
    5. Contact details from a responsible person of your organization
    6. Access to the E-Mail address from your organization for verification

    Start here

    When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:

    We use different highlight colors for the DSF Allow List Management Tool: Green for the Test environment and blue for the Production infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.5.0/maintain/bpe-reverse-proxy/configuration.html b/v1.5.0/maintain/bpe-reverse-proxy/configuration.html new file mode 100644 index 000000000..409732797 --- /dev/null +++ b/v1.5.0/maintain/bpe-reverse-proxy/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 1 min

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF BPE server application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF BPE server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /bpe

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    Last update:
    + + + diff --git a/v1.5.0/maintain/bpe-reverse-proxy/index.html b/v1.5.0/maintain/bpe-reverse-proxy/index.html new file mode 100644 index 000000000..9b4155955 --- /dev/null +++ b/v1.5.0/maintain/bpe-reverse-proxy/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + BPE Reverse Proxy + + + + + + + + + diff --git a/v1.5.0/maintain/bpe/access-control.html b/v1.5.0/maintain/bpe/access-control.html new file mode 100644 index 000000000..2082fecdf --- /dev/null +++ b/v1.5.0/maintain/bpe/access-control.html @@ -0,0 +1,65 @@ + + + + + + + + + + Access Control + + + + + +
    Skip to main content

    Access Control

    DSF-TeamAbout 2 min

    Overview

    The DSF BPE server provides a user interface for administrators. Without any additional configuration the user interface is not accessible with the organizations X.509 client certificate or any other certificate or OpenID Connect authenticated user.

    OpenID Connect

    To enable OpenID Connect authentication of local user, see the DSF BPE server OpenID Connect configuration page.

    Access to the user interface can be enabled for client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

    The listing below shows a minimal configuration to enable access for a specific client-certificate:

          DEV_DSF_BPE_SERVER_ROLECONFIG: |
    +        - example_read_only_role:
    +            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
    +            dsf-role:
    +              - ADMIN
    +

    The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.

    Certificate Thumbprints

    SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

    certtool --fingerprint --hash=sha512 --infile=certificate.pem
    +

    Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG if no roles should be configured.

    Matching Users

    To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

    thumbprint

    The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

    email

    Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the email claimopen in new window from the access token will be matched against the property values.

    token-role and token-group

    With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

    DSF and Practitioner Roles

    Two types of roles can be applied to matched users.

    dsf-role

    DSF roles specified via the dsf-role property define general access to the user interface. Allowed values are:

    ADMIN.

    practitioner-role

    The BPE server currently does not support any practionier-roles.

    Examples

    The first example defines a group of DSF administrators. Two client certificates match against this role:

          DEV_DSF_BPE_SERVER_ROLECONFIG: |
    +        - certificate-admins:
    +            thumbprint: 
    +              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
    +              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
    +            dsf-role:
    +              - ADMIN
    +

    The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

          DEV_DSF_BPE_SERVER_ROLECONFIG: |
    +        - token-role-admins:
    +            token-role: admin
    +            dsf-role:
    +              - ADMIN
    +

    The third example allows administrator access and users e-mail addresses to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

          DEV_DSF_BPE_SERVER_ROLECONFIG: |
    +        - email-admins:
    +            email:
    +              - first.user@test.org
    +              - second.user@test.org
    +            dsf-role:
    +              - ADMIN
    +
    Last update:
    + + + diff --git a/v1.5.0/maintain/bpe/configuration.html b/v1.5.0/maintain/bpe/configuration.html new file mode 100644 index 000000000..dc5bec8fa --- /dev/null +++ b/v1.5.0/maintain/bpe/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 9 min

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: Address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: Password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: Username to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: Password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: Username to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_CURRENTUSER

    • Property: dev.dsf.bpe.debug.log.message.currentUser
    • Required: No
    • Description: To enable logging of the currently requesting user set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_DBSTATEMENT

    • Property: dev.dsf.bpe.debug.log.message.dbStatement
    • Required: No
    • Description: To enable logging of DB queries set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL

    • Property: dev.dsf.bpe.debug.log.message.variablesLocal
    • Required: No
    • Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST

    • Property: dev.dsf.bpe.debug.log.message.webserviceRequest
    • Required: No
    • Description: To enable logging of webservices requests set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: Base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.corePoolSize
    • Required: No
    • Description: Process engine job executor core pool size
    • Default: 4

    DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.maxPoolSize
    • Required: No
    • Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full
    • Default: 10

    DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE

    • Property: dev.dsf.bpe.process.engine.queueSize
    • Required: No
    • Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy
    • Default: 40

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List
    • Example: dsfdev_updateAllowList|1.0, another_process|x.y

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available
    • Example: old_process|x.y

    DEV_DSF_BPE_PROCESS_THREADS

    • Property: dev.dsf.bpe.process.threads
    • Required: No
    • Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores
    • Default: -1

    DEV_DSF_BPE_SERVER_BASE_URL

    • Property: dev.dsf.bpe.server.base.url
    • Required: No
    • Description: Base address of the BPE server, configure when exposing the web-ui
    • Example: https://foo.bar/bpe
    • Default: https

    DEV_DSF_BPE_SERVER_ROLECONFIG

    DEV_DSF_BPE_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.bpe.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_BPE_SERVER_UI_THEME

    • Property: dev.dsf.bpe.server.ui.theme
    • Required: No
    • Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    Last update:
    + + + diff --git a/v1.5.0/maintain/bpe/index.html b/v1.5.0/maintain/bpe/index.html new file mode 100644 index 000000000..dd18cf0be --- /dev/null +++ b/v1.5.0/maintain/bpe/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + BPE Server + + + + + + + + + diff --git a/v1.5.0/maintain/bpe/oidc.html b/v1.5.0/maintain/bpe/oidc.html new file mode 100644 index 000000000..12871f2c0 --- /dev/null +++ b/v1.5.0/maintain/bpe/oidc.html @@ -0,0 +1,60 @@ + + + + + + + + + + OpenID Connect + + + + + +
    Skip to main content

    OpenID Connect

    DSF-TeamAbout 1 min

    Overview

    Access to the DSF BPE server user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    The DSF BPE server supports Authorization Code Flowopen in new window for the user interface. Back-Channel Logoutopen in new window is also supported.

    BPE Reverse Proxy

    The DSF BPE reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter SSL_VERIFY_CLIENT needs to be set to optional.

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF BPE server accepts logout tokens at DEV_DSF_BPE_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF BPE server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/bpe:1.5.0
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-bpe
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    Last update:
    + + + diff --git a/v1.5.0/maintain/fhir-reverse-proxy/configuration.html b/v1.5.0/maintain/fhir-reverse-proxy/configuration.html new file mode 100644 index 000000000..cf7aa49fe --- /dev/null +++ b/v1.5.0/maintain/fhir-reverse-proxy/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 1 min

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR server application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /fhir

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    Last update:
    + + + diff --git a/v1.5.0/maintain/fhir-reverse-proxy/index.html b/v1.5.0/maintain/fhir-reverse-proxy/index.html new file mode 100644 index 000000000..d772d2f9c --- /dev/null +++ b/v1.5.0/maintain/fhir-reverse-proxy/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Reverse Proxy + + + + + + + + + diff --git a/v1.5.0/maintain/fhir/access-control.html b/v1.5.0/maintain/fhir/access-control.html new file mode 100644 index 000000000..4b879afc0 --- /dev/null +++ b/v1.5.0/maintain/fhir/access-control.html @@ -0,0 +1,85 @@ + + + + + + + + + + Access Control + + + + + +
    Skip to main content

    Access Control

    DSF-TeamAbout 3 min

    Overview

    The DSF FHIR server implements a subset of the FHIR R4 REST APIopen in new window. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    OpenID Connect

    To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

    Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

    The listing below shows a minimal configuration to enable read access for a specific client-certificate:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - example_read_only_role:
    +            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +

    The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.

    Certificate Thumbprints

    SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

    certtool --fingerprint --hash=sha512 --infile=certificate.pem
    +

    Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

    Matching Users

    To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

    thumbprint

    The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

    email

    Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the email claimopen in new window from the access token will be matched against the property values.

    token-role and token-group

    With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

    DSF and Practitioner Roles

    Two types of roles can be applied to matched users.

    dsf-role

    DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

    CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

    practitioner-role

    In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystemopen in new window resources. Codes are specified in the form system-url|code.
    If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinitionopen in new window resource, the user can start the process if he also has the dsf-role CREATE.

    Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

    UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

    Examples

    The first example defines a group of DSF administrators. Two client certificates match against this role:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - certificate-admins:
    +            thumbprint: 
    +              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
    +              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - token-role-admins:
    +            token-role: admin
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - read-only:
    +            email:
    +              - first.user@test.org
    +              - second.user@test.org
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +
    Last update:
    + + + diff --git a/v1.5.0/maintain/fhir/configuration.html b/v1.5.0/maintain/fhir/configuration.html new file mode 100644 index 000000000..52983b874 --- /dev/null +++ b/v1.5.0/maintain/fhir/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 5 min

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client _trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: Address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: Password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: Password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: Username to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: Username to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_CURRENTUSER

    • Property: dev.dsf.fhir.debug.log.message.currentUser
    • Required: No
    • Description: To enable logging of the currently requesting user set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_DBSTATEMENT

    • Property: dev.dsf.fhir.debug.log.message.dbStatement
    • Required: No
    • Description: To enable logging of DB queries set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST

    • Property: dev.dsf.fhir.debug.log.message.webserviceRequest
    • Required: No
    • Description: To enable logging of webservices requests set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: Base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: Fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: Local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: Page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_FHIR_SERVER_UI_THEME

    • Property: dev.dsf.fhir.server.ui.theme
    • Required: No
    • Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    Last update:
    + + + diff --git a/v1.5.0/maintain/fhir/index.html b/v1.5.0/maintain/fhir/index.html new file mode 100644 index 000000000..ccbd92d3c --- /dev/null +++ b/v1.5.0/maintain/fhir/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Server + + + + + + + + + diff --git a/v1.5.0/maintain/fhir/oidc.html b/v1.5.0/maintain/fhir/oidc.html new file mode 100644 index 000000000..be7941d6d --- /dev/null +++ b/v1.5.0/maintain/fhir/oidc.html @@ -0,0 +1,60 @@ + + + + + + + + + + OpenID Connect + + + + + +
    Skip to main content

    OpenID Connect

    DSF-TeamAbout 1 min

    Overview

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    The DSF FHIR server supports Authorization Code Flowopen in new window for the user interface as well as Bearer Token Authenticationopen in new window for the REST API. Back-Channel Logoutopen in new window is also supported.

    FHIR Reverse Proxy

    The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter SSL_VERIFY_CLIENT needs to be set to optional.

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.5.0
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    Last update:
    + + + diff --git a/v1.5.0/maintain/index.html b/v1.5.0/maintain/index.html new file mode 100644 index 000000000..636415a5f --- /dev/null +++ b/v1.5.0/maintain/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Maintain a DSF instance + + + + + + + + + diff --git a/v1.5.0/maintain/install-plugins.html b/v1.5.0/maintain/install-plugins.html new file mode 100644 index 000000000..9f0284250 --- /dev/null +++ b/v1.5.0/maintain/install-plugins.html @@ -0,0 +1,40 @@ + + + + + + + + + + Install Plugins + + + + + +
    Skip to main content

    Install Plugins

    DSF-TeamLess than 1 minute

    Last update:
    + + + diff --git a/v1.5.0/maintain/install.html b/v1.5.0/maintain/install.html new file mode 100644 index 000000000..7231687eb --- /dev/null +++ b/v1.5.0/maintain/install.html @@ -0,0 +1,74 @@ + + + + + + + + + + Install DSF 1.5.0 + + + + + +
    Skip to main content

    Install DSF 1.5.0

    DSF-TeamAbout 6 min

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/installopen in new window.

    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)

    Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.netopen in new window or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2101 fhir
      +sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_5_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_5_0.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L39:      - app_client_certificate_private_key.pem.password
        +...
        +L54:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L141:  app_client_certificate_private_key.pem.password:
        +L142:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2202 bpe
      +sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_5_0.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_5_0.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L13:      - app_client_certificate_private_key.pem.password
        +...
        +L35:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L89:  app_client_certificate_private_key.pem.password:
        +L90:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID1}
    +INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket connected {uri: wss://FHIR_SERVER_FQDN/fhir/ws, session-id: SOME_RANDOM_UUID2}
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.5.0/maintain/upgrade-from-0.html b/v1.5.0/maintain/upgrade-from-0.html new file mode 100644 index 000000000..62b019a29 --- /dev/null +++ b/v1.5.0/maintain/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade from DSF 0.9.x + + + + + +
    Skip to main content

    Upgrade from DSF 0.9.x

    DSF-TeamAbout 1 min

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    Do not use your 0.9.x configuration as starting point

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    Instead, please perform the following steps:

    1. Shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. Install the new DSF according to the instructions.
    4. You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).
    5. Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).
    6. If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).
    7. If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Use your old virtual machine

    We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.

    Last update:
    + + + diff --git a/v1.5.0/maintain/upgrade-from-1.html b/v1.5.0/maintain/upgrade-from-1.html new file mode 100644 index 000000000..bb511841e --- /dev/null +++ b/v1.5.0/maintain/upgrade-from-1.html @@ -0,0 +1,61 @@ + + + + + + + + + + Upgrade from DSF 1.4.0 + + + + + +
    Skip to main content

    Upgrade from DSF 1.4.0

    DSF-TeamAbout 1 min

    Upgrading the DSF from 1.4.0 to 1.5.0 involves modifying the docker-compose.yml files and recreating the containers.

    Update to DSF 1.2.0 first

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.5.0_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.5.0.

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.4.0
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.5.0
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.4.0
    ++   image: ghcr.io/datasharingframework/fhir:1.5.0
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.5.0_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.5.0.

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.4.0
    ++   image: ghcr.io/datasharingframework/bpe:1.5.0
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF BPE containers
      From /opt/bpe execute

      docker compose up -d && docker compose logs -f
      +
    2. Verify your upgrade:

      • Verify the DSF FHIR server is running in version 1.5.0. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.5.0, [...]
      • Verify the DSF FHIR server started without errors
      • Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/open in new window (authentication with your client-certificate)
      • Verify the DSF BPE server is running in version 1.5.0. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.5.0, [...]
      • Verify the DSF BPE server started without errors
      • Verify your install with a ping/pong test
    Last update:
    + + + diff --git a/v1.5.0/process-plugins-advanced.html b/v1.5.0/process-plugins-advanced.html new file mode 100644 index 000000000..dd3470045 --- /dev/null +++ b/v1.5.0/process-plugins-advanced.html @@ -0,0 +1,40 @@ + + + + + + + + + + Process Plugins Advanced + + + + + + + + + diff --git a/v1.5.1/contribute/code.html b/v1.5.1/contribute/code.html new file mode 100644 index 000000000..aea7c6f31 --- /dev/null +++ b/v1.5.1/contribute/code.html @@ -0,0 +1,40 @@ + + + + + + + + + + Contribute code + + + + + +
    Skip to main content

    Contribute code

    DSF-TeamAbout 3 min

    Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.

    Benefits of Contributing:

    • Foster community growth and diversification.
    • Sharpen your coding skills.
    • Gain recognition in the DSF community.
    • Directly impact the future of data sharing in medicine.

    Start now by visiting our contribution pages. Every line of code helps us build a stronger and more versatile DSF.

    General

    Code style

    You can import our code style for your specific IDE:

    • Eclipseopen in new window. Open your preferences, click on Java, Code style, Formatter, Import and select the downloaded file.
    • IntelliJopen in new window. Open your settings, click on Editor, Code style, Java, the settings icon, import scheme, IntelliJ and select the downloaded file.

    Pull requests will only be approved if the code is formatted according to the code style configurations above. To format the code with maven before pushing to GitHub, use mvn compile -Pformat-and-sort.

    Branching strategy

    Git Flowopen in new window is used as this project's branching strategy. Therefore, you will find the following structure:

    • main
    • develop
    • issue
    • hotfix
    • release

    Notice that only the first two elements listed are actual branches. The other elements are containers to hold all branches belonging to that category.

    Branch naming

    The following ruleset is applied to name branches:

    • issue/<issue-number>_<issue-name>
    • hotfix/<version>
    • release/<version>

    Setting up the project

    This chapter lists all important requirements to get the project buildable and running properly.

    Java

    This project uses Java JDK 17, so make sure you have it installed on your system.

    Docker

    Dockeropen in new window is used in this project to test database functionality and to run more complex test-setups.

    Maven

    The project relies on Mavenopen in new window as its management tool.
    Important: When building the project you might encounter the following error:
    Could not determine gpg version GPGopen in new window is used to sign artifacts for public release. Since this does not concern contributors, you may skip this step in the maven build process with -Dgpg.skip.

    Workflow

    1. Create an issue or comment on an issue that you want to contribute some feature
    2. Fork the repository, create a branch and mention it in the issue
    3. If you desire feedback, create a pull request or comment on it in the issue. Feel free to @ any member with write permissions if you feel like your request has not been registered yet. They will review your changes and/or change requests
    4. If your changes are production-ready, create a pull requestopen in new window.

    Pull request process

    We follow Martin Fowler's method for managing pull requests. This approach categorizes pull requests based on the level of trust and experience of the contributor, as well as the impact of the changes. Here's how we apply it:

    1. Ship: For our most trusted contributors with a proven track record. These members can merge their pull requests without prior review, typically for minor or highly confident changes.

    2. Show: This level is for trusted contributors who need some oversight, as well as for experienced developers who want to demonstrate how certain changes should be made in the future. They create pull requests and show their work to the team.

    3. Ask: New or less experienced contributors, as well as those submitting more complex changes, fall into this category. They are required to ask for feedback and approval before their changes can be merged, ensuring thorough review and quality control.

    This method helps us maintain a balance between code quality and efficient development, recognizing the varying levels of expertise among our contributors.

    For more information on Fowler's approach, visit Martin Fowler's article on Pull Requestsopen in new window.

    Data Security in DSF Development

    The DSF (Data Sharing Framework) and its process plugins are frequently used to transmit sensitive personal data. To prevent the release of personal data during development, please adhere to the following guidelines:

    • No development with real personal data: Always use anonymized or synthetic data for development purposes.
    • No personal data in repositories: Ensure no personal data is present in local and remote repositories intended for publication, not even temporarily.
    • Review all log files: Before using log files in issues, examples, etc., thoroughly review them to ensure no personal and sensitive data is included.
    Last update:
    + + + diff --git a/v1.5.1/contribute/documentation.html b/v1.5.1/contribute/documentation.html new file mode 100644 index 000000000..f1c68ff5a --- /dev/null +++ b/v1.5.1/contribute/documentation.html @@ -0,0 +1,40 @@ + + + + + + + + + + Contribute documentation + + + + + +
    Skip to main content

    Contribute documentation

    DSF-TeamLess than 1 minute

    Join us in enhancing our documentation!

    We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!

    1. Contact us with feedback: If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.
    2. Create an issue: You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at Data Sharing Framework Documentationopen in new window and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.
    3. Contribute directly with a pull request: If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at Data Sharing Framework Documentationopen in new window and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.

    We're excited to see your suggestions and are grateful for every contribution that helps us improve. Let's build better documentation together!

    Last update:
    + + + diff --git a/v1.5.1/contribute/index.html b/v1.5.1/contribute/index.html new file mode 100644 index 000000000..e2b4ef050 --- /dev/null +++ b/v1.5.1/contribute/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Contribute + + + + + +
    Skip to main content

    Contribute

    DSF-TeamAbout 2 min

    We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.

    Ways you can contribute:

    1. Helping other users:
    2. Testing releases:
      • Stay ahead: Help us testing the latest releases. Your feedback on functionality, bugs, and user experience is invaluable.
      • Report findings: Share your testing results to help us refine and enhance our releases.
    3. Reviewing changes:
      • Peer review: Contribute by reviewing pull requests. Your insights can help ensure the quality and integrity of code changes.
      • Constructive feedback: Offer constructive feedback and suggestions to help improve and refine proposed changes.
    4. Documentation changes:
    5. Contributing bug reports:
      • Report bugs: If you find a bug, please report it via an issue on GitHubopen in new window. Detailed bug reports are incredibly helpful.
      • Reproduction steps: Include steps to reproduce the bug and any relevant logs according to our bug report issue template.
    6. Contributing feature requests:
      • Suggest features: You have an idea for a new feature? We'd love to hear it! Open an issue to describe your proposed feature and its potential benefits according to our feature request template.
      • Collaborate on implementation: If you're able to, contribute to the development of your proposed feature or bug fix. Collaboration can lead to more innovative and effective solutions. Please checkout our Getting started guide for code contributions to DSF.
    7. Contributing process plugins:

    Before you start contributing, we recommend reading our getting started guidelines for detailed information on our processes and standards. This ensures a smooth and productive experience for everyone involved.

    Your contributions in any form, are what drives the continuous growth and improvement of this project. Thank you for being a part of our community and for your willingness to contribute!

    Last update:
    + + + diff --git a/v1.5.1/develop/create.html b/v1.5.1/develop/create.html new file mode 100644 index 000000000..86ccbe15c --- /dev/null +++ b/v1.5.1/develop/create.html @@ -0,0 +1,40 @@ + + + + + + + + + + Create a new process plugin + + + + + + + + + diff --git a/v1.5.1/develop/index.html b/v1.5.1/develop/index.html new file mode 100644 index 000000000..9a92f65f3 --- /dev/null +++ b/v1.5.1/develop/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Develop Process Plugins + + + + + + + + + diff --git a/v1.5.1/develop/upgrade-from-0.html b/v1.5.1/develop/upgrade-from-0.html new file mode 100644 index 000000000..b1bb8e5a9 --- /dev/null +++ b/v1.5.1/develop/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade processes from 0.9.x + + + + + + + + + diff --git a/v1.5.1/dsf-for-dev.html b/v1.5.1/dsf-for-dev.html new file mode 100644 index 000000000..39b3692c7 --- /dev/null +++ b/v1.5.1/dsf-for-dev.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF for Developers + + + + + + + + + diff --git a/v1.5.1/index.html b/v1.5.1/index.html new file mode 100644 index 000000000..bad0da1d2 --- /dev/null +++ b/v1.5.1/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF 1.5.1 + + + + + +
    Skip to main content

    DSF 1.5.1

    DSF-TeamLess than 1 minute

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    Important note

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsfopen in new window.

    System Administrators

    Developers

    New features

    • Improved versioning to support up- and downwards-compatibility
    • Enhanced web ui to start processes in the web browser
    • Allow local user authentication and authorization with OpenID Connect
    • New process plugin API
    • Removed mostly unused features to simplify instance configuration
    • Unified proxy setup
    • Many more features, see 1.x release-notesopen in new window
    Last update:
    + + + diff --git a/v1.5.1/maintain/allowList-mgm.html b/v1.5.1/maintain/allowList-mgm.html new file mode 100644 index 000000000..bdbded79e --- /dev/null +++ b/v1.5.1/maintain/allowList-mgm.html @@ -0,0 +1,40 @@ + + + + + + + + + + Allow List Management + + + + + +
    Skip to main content

    Allow List Management

    DSF-TeamAbout 1 min

    You can read all about the concept of Allow Lists in our introduction.

    Overview

    To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

    The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.

    Prerequisites

    1. Deployed DSF instance (test or production infrastructure)
      1.1 If none exists yet, read the installation guide
    2. Certificate
      2.1 If none exists yet, read the certificate requirements
    3. Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de
    4. FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir
    5. Contact details from a responsible person of your organization
    6. Access to the E-Mail address from your organization for verification

    Start here

    When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:

    We use different highlight colors for the DSF Allow List Management Tool: Green for the Test environment and blue for the Production infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.5.1/maintain/bpe-reverse-proxy/configuration.html b/v1.5.1/maintain/bpe-reverse-proxy/configuration.html new file mode 100644 index 000000000..6eeb388d5 --- /dev/null +++ b/v1.5.1/maintain/bpe-reverse-proxy/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 1 min

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF BPE server application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF BPE server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /bpe

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    Last update:
    + + + diff --git a/v1.5.1/maintain/bpe-reverse-proxy/index.html b/v1.5.1/maintain/bpe-reverse-proxy/index.html new file mode 100644 index 000000000..1f08ad5b4 --- /dev/null +++ b/v1.5.1/maintain/bpe-reverse-proxy/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + BPE Reverse Proxy + + + + + + + + + diff --git a/v1.5.1/maintain/bpe/access-control.html b/v1.5.1/maintain/bpe/access-control.html new file mode 100644 index 000000000..24654098d --- /dev/null +++ b/v1.5.1/maintain/bpe/access-control.html @@ -0,0 +1,65 @@ + + + + + + + + + + Access Control + + + + + +
    Skip to main content

    Access Control

    DSF-TeamAbout 2 min

    Overview

    The DSF BPE server provides a user interface for administrators. Without any additional configuration the user interface is not accessible with the organizations X.509 client certificate or any other certificate or OpenID Connect authenticated user.

    OpenID Connect

    To enable OpenID Connect authentication of local user, see the DSF BPE server OpenID Connect configuration page.

    Access to the user interface can be enabled for client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

    The listing below shows a minimal configuration to enable access for a specific client-certificate:

          DEV_DSF_BPE_SERVER_ROLECONFIG: |
    +        - example_read_only_role:
    +            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
    +            dsf-role:
    +              - ADMIN
    +

    The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.

    Certificate Thumbprints

    SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

    certtool --fingerprint --hash=sha512 --infile=certificate.pem
    +

    Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG if no roles should be configured.

    Matching Users

    To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

    thumbprint

    The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

    email

    Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the email claimopen in new window from the access token will be matched against the property values.

    token-role and token-group

    With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

    DSF and Practitioner Roles

    Two types of roles can be applied to matched users.

    dsf-role

    DSF roles specified via the dsf-role property define general access to the user interface. Allowed values are:

    ADMIN.

    practitioner-role

    The BPE server currently does not support any practionier-roles.

    Examples

    The first example defines a group of DSF administrators. Two client certificates match against this role:

          DEV_DSF_BPE_SERVER_ROLECONFIG: |
    +        - certificate-admins:
    +            thumbprint: 
    +              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
    +              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
    +            dsf-role:
    +              - ADMIN
    +

    The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

          DEV_DSF_BPE_SERVER_ROLECONFIG: |
    +        - token-role-admins:
    +            token-role: admin
    +            dsf-role:
    +              - ADMIN
    +

    The third example allows administrator access and users e-mail addresses to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

          DEV_DSF_BPE_SERVER_ROLECONFIG: |
    +        - email-admins:
    +            email:
    +              - first.user@test.org
    +              - second.user@test.org
    +            dsf-role:
    +              - ADMIN
    +
    Last update:
    + + + diff --git a/v1.5.1/maintain/bpe/configuration.html b/v1.5.1/maintain/bpe/configuration.html new file mode 100644 index 000000000..1eb6fb017 --- /dev/null +++ b/v1.5.1/maintain/bpe/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 9 min

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: Address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: Password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: Username to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: Password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: Username to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_CURRENTUSER

    • Property: dev.dsf.bpe.debug.log.message.currentUser
    • Required: No
    • Description: To enable logging of the currently requesting user set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_DBSTATEMENT

    • Property: dev.dsf.bpe.debug.log.message.dbStatement
    • Required: No
    • Description: To enable logging of DB queries set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL

    • Property: dev.dsf.bpe.debug.log.message.variablesLocal
    • Required: No
    • Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST

    • Property: dev.dsf.bpe.debug.log.message.webserviceRequest
    • Required: No
    • Description: To enable logging of webservices requests set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: Base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.corePoolSize
    • Required: No
    • Description: Process engine job executor core pool size
    • Default: 4

    DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.maxPoolSize
    • Required: No
    • Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full
    • Default: 10

    DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE

    • Property: dev.dsf.bpe.process.engine.queueSize
    • Required: No
    • Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy
    • Default: 40

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List
    • Example: dsfdev_updateAllowList|1.0, another_process|x.y

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available
    • Example: old_process|x.y

    DEV_DSF_BPE_PROCESS_THREADS

    • Property: dev.dsf.bpe.process.threads
    • Required: No
    • Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores
    • Default: -1

    DEV_DSF_BPE_SERVER_BASE_URL

    • Property: dev.dsf.bpe.server.base.url
    • Required: No
    • Description: Base address of the BPE server, configure when exposing the web-ui
    • Example: https://foo.bar/bpe
    • Default: https

    DEV_DSF_BPE_SERVER_ROLECONFIG

    DEV_DSF_BPE_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.bpe.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_BPE_SERVER_UI_THEME

    • Property: dev.dsf.bpe.server.ui.theme
    • Required: No
    • Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    Last update:
    + + + diff --git a/v1.5.1/maintain/bpe/index.html b/v1.5.1/maintain/bpe/index.html new file mode 100644 index 000000000..a4ff61117 --- /dev/null +++ b/v1.5.1/maintain/bpe/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + BPE Server + + + + + + + + + diff --git a/v1.5.1/maintain/bpe/oidc.html b/v1.5.1/maintain/bpe/oidc.html new file mode 100644 index 000000000..3c0c6509c --- /dev/null +++ b/v1.5.1/maintain/bpe/oidc.html @@ -0,0 +1,60 @@ + + + + + + + + + + OpenID Connect + + + + + +
    Skip to main content

    OpenID Connect

    DSF-TeamAbout 1 min

    Overview

    Access to the DSF BPE server user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    The DSF BPE server supports Authorization Code Flowopen in new window for the user interface. Back-Channel Logoutopen in new window is also supported.

    BPE Reverse Proxy

    The DSF BPE reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter SSL_VERIFY_CLIENT needs to be set to optional.

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF BPE server accepts logout tokens at DEV_DSF_BPE_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF BPE server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/bpe:1.5.1
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-bpe
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    Last update:
    + + + diff --git a/v1.5.1/maintain/fhir-reverse-proxy/configuration.html b/v1.5.1/maintain/fhir-reverse-proxy/configuration.html new file mode 100644 index 000000000..45a43eacf --- /dev/null +++ b/v1.5.1/maintain/fhir-reverse-proxy/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 1 min

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR server application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /fhir

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    Last update:
    + + + diff --git a/v1.5.1/maintain/fhir-reverse-proxy/index.html b/v1.5.1/maintain/fhir-reverse-proxy/index.html new file mode 100644 index 000000000..501f73aed --- /dev/null +++ b/v1.5.1/maintain/fhir-reverse-proxy/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Reverse Proxy + + + + + + + + + diff --git a/v1.5.1/maintain/fhir/access-control.html b/v1.5.1/maintain/fhir/access-control.html new file mode 100644 index 000000000..69ebbdf2e --- /dev/null +++ b/v1.5.1/maintain/fhir/access-control.html @@ -0,0 +1,85 @@ + + + + + + + + + + Access Control + + + + + +
    Skip to main content

    Access Control

    DSF-TeamAbout 3 min

    Overview

    The DSF FHIR server implements a subset of the FHIR R4 REST APIopen in new window. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    OpenID Connect

    To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

    Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

    The listing below shows a minimal configuration to enable read access for a specific client-certificate:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - example_read_only_role:
    +            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +

    The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.

    Certificate Thumbprints

    SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

    certtool --fingerprint --hash=sha512 --infile=certificate.pem
    +

    Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

    Matching Users

    To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

    thumbprint

    The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

    email

    Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the email claimopen in new window from the access token will be matched against the property values.

    token-role and token-group

    With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

    DSF and Practitioner Roles

    Two types of roles can be applied to matched users.

    dsf-role

    DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

    CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

    practitioner-role

    In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystemopen in new window resources. Codes are specified in the form system-url|code.
    If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinitionopen in new window resource, the user can start the process if he also has the dsf-role CREATE.

    Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

    UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

    Examples

    The first example defines a group of DSF administrators. Two client certificates match against this role:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - certificate-admins:
    +            thumbprint: 
    +              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
    +              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - token-role-admins:
    +            token-role: admin
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - read-only:
    +            email:
    +              - first.user@test.org
    +              - second.user@test.org
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +
    Last update:
    + + + diff --git a/v1.5.1/maintain/fhir/configuration.html b/v1.5.1/maintain/fhir/configuration.html new file mode 100644 index 000000000..012bfa626 --- /dev/null +++ b/v1.5.1/maintain/fhir/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 5 min

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client _trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: Address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: Password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: Password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: Username to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: Username to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_CURRENTUSER

    • Property: dev.dsf.fhir.debug.log.message.currentUser
    • Required: No
    • Description: To enable logging of the currently requesting user set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_DBSTATEMENT

    • Property: dev.dsf.fhir.debug.log.message.dbStatement
    • Required: No
    • Description: To enable logging of DB queries set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST

    • Property: dev.dsf.fhir.debug.log.message.webserviceRequest
    • Required: No
    • Description: To enable logging of webservices requests set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: Base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: Fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: Local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: Page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_FHIR_SERVER_UI_THEME

    • Property: dev.dsf.fhir.server.ui.theme
    • Required: No
    • Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    Last update:
    + + + diff --git a/v1.5.1/maintain/fhir/index.html b/v1.5.1/maintain/fhir/index.html new file mode 100644 index 000000000..cfd262f53 --- /dev/null +++ b/v1.5.1/maintain/fhir/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Server + + + + + + + + + diff --git a/v1.5.1/maintain/fhir/oidc.html b/v1.5.1/maintain/fhir/oidc.html new file mode 100644 index 000000000..b67521952 --- /dev/null +++ b/v1.5.1/maintain/fhir/oidc.html @@ -0,0 +1,60 @@ + + + + + + + + + + OpenID Connect + + + + + +
    Skip to main content

    OpenID Connect

    DSF-TeamAbout 1 min

    Overview

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    The DSF FHIR server supports Authorization Code Flowopen in new window for the user interface as well as Bearer Token Authenticationopen in new window for the REST API. Back-Channel Logoutopen in new window is also supported.

    FHIR Reverse Proxy

    The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter SSL_VERIFY_CLIENT needs to be set to optional.

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.5.1
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    Last update:
    + + + diff --git a/v1.5.1/maintain/index.html b/v1.5.1/maintain/index.html new file mode 100644 index 000000000..2357a1827 --- /dev/null +++ b/v1.5.1/maintain/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Maintain a DSF instance + + + + + + + + + diff --git a/v1.5.1/maintain/install-plugins.html b/v1.5.1/maintain/install-plugins.html new file mode 100644 index 000000000..43b987b82 --- /dev/null +++ b/v1.5.1/maintain/install-plugins.html @@ -0,0 +1,40 @@ + + + + + + + + + + Install Plugins + + + + + +
    Skip to main content

    Install Plugins

    DSF-TeamLess than 1 minute

    Last update:
    + + + diff --git a/v1.5.1/maintain/install.html b/v1.5.1/maintain/install.html new file mode 100644 index 000000000..f2e4b4421 --- /dev/null +++ b/v1.5.1/maintain/install.html @@ -0,0 +1,74 @@ + + + + + + + + + + Install DSF 1.5.1 + + + + + +
    Skip to main content

    Install DSF 1.5.1

    DSF-TeamAbout 6 min

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/installopen in new window.

    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)

    Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.netopen in new window or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2101 fhir
      +sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_5_1.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_5_1.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L39:      - app_client_certificate_private_key.pem.password
        +...
        +L54:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L141:  app_client_certificate_private_key.pem.password:
        +L142:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2202 bpe
      +sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_5_1.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_5_1.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L13:      - app_client_certificate_private_key.pem.password
        +...
        +L35:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L89:  app_client_certificate_private_key.pem.password:
        +L90:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) -  INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket open, session SOME_RANDOM_UUID1
    +INFO Grizzly(1) -  INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket open, session SOME_RANDOM_UUID2
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.5.1/maintain/upgrade-from-0.html b/v1.5.1/maintain/upgrade-from-0.html new file mode 100644 index 000000000..7faa36dc4 --- /dev/null +++ b/v1.5.1/maintain/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade from DSF 0.9.x + + + + + +
    Skip to main content

    Upgrade from DSF 0.9.x

    DSF-TeamAbout 1 min

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    Do not use your 0.9.x configuration as starting point

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    Instead, please perform the following steps:

    1. Shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. Install the new DSF according to the instructions.
    4. You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).
    5. Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).
    6. If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).
    7. If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Use your old virtual machine

    We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.

    Last update:
    + + + diff --git a/v1.5.1/maintain/upgrade-from-1.html b/v1.5.1/maintain/upgrade-from-1.html new file mode 100644 index 000000000..49ddda54a --- /dev/null +++ b/v1.5.1/maintain/upgrade-from-1.html @@ -0,0 +1,61 @@ + + + + + + + + + + Upgrade from DSF 1.5.0 + + + + + +
    Skip to main content

    Upgrade from DSF 1.5.0

    DSF-TeamAbout 1 min

    Upgrading the DSF from 1.5.0 to 1.5.1 involves modifying the docker-compose.yml files and recreating the containers.

    Update to DSF 1.2.0 first

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.5.1_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.5.1.

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.5.0
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.5.1
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.5.0
    ++   image: ghcr.io/datasharingframework/fhir:1.5.1
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.5.1_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.5.1.

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.5.0
    ++   image: ghcr.io/datasharingframework/bpe:1.5.1
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF BPE containers
      From /opt/bpe execute

      docker compose up -d && docker compose logs -f
      +
    2. Verify your upgrade:

      • Verify the DSF FHIR server is running in version 1.5.1. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.5.1, [...]
      • Verify the DSF FHIR server started without errors
      • Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/open in new window (authentication with your client-certificate)
      • Verify the DSF BPE server is running in version 1.5.1. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.5.1, [...]
      • Verify the DSF BPE server started without errors
      • Verify your install with a ping/pong test
    Last update:
    + + + diff --git a/v1.5.1/process-plugins-advanced.html b/v1.5.1/process-plugins-advanced.html new file mode 100644 index 000000000..1aa6a77be --- /dev/null +++ b/v1.5.1/process-plugins-advanced.html @@ -0,0 +1,40 @@ + + + + + + + + + + Process Plugins Advanced + + + + + + + + + diff --git a/v1.5.2/contribute/code.html b/v1.5.2/contribute/code.html new file mode 100644 index 000000000..ae2d2d28d --- /dev/null +++ b/v1.5.2/contribute/code.html @@ -0,0 +1,40 @@ + + + + + + + + + + Contribute code + + + + + +
    Skip to main content

    Contribute code

    DSF-TeamAbout 3 min

    Your code can make a difference for the Data Sharing Framework (DSF). We invite all users to share their code, tests, scripts and improvement ideas. Contributions of any size enhance the DSF and support the data sharing framework community.

    Benefits of Contributing:

    • Foster community growth and diversification.
    • Sharpen your coding skills.
    • Gain recognition in the DSF community.
    • Directly impact the future of data sharing in medicine.

    Start now by visiting our contribution pages. Every line of code helps us build a stronger and more versatile DSF.

    General

    Code style

    You can import our code style for your specific IDE:

    • Eclipseopen in new window. Open your preferences, click on Java, Code style, Formatter, Import and select the downloaded file.
    • IntelliJopen in new window. Open your settings, click on Editor, Code style, Java, the settings icon, import scheme, IntelliJ and select the downloaded file.

    Pull requests will only be approved if the code is formatted according to the code style configurations above. To format the code with maven before pushing to GitHub, use mvn compile -Pformat-and-sort.

    Branching strategy

    Git Flowopen in new window is used as this project's branching strategy. Therefore, you will find the following structure:

    • main
    • develop
    • issue
    • hotfix
    • release

    Notice that only the first two elements listed are actual branches. The other elements are containers to hold all branches belonging to that category.

    Branch naming

    The following ruleset is applied to name branches:

    • issue/<issue-number>_<issue-name>
    • hotfix/<version>
    • release/<version>

    Setting up the project

    This chapter lists all important requirements to get the project buildable and running properly.

    Java

    This project uses Java JDK 17, so make sure you have it installed on your system.

    Docker

    Dockeropen in new window is used in this project to test database functionality and to run more complex test-setups.

    Maven

    The project relies on Mavenopen in new window as its management tool.
    Important: When building the project you might encounter the following error:
    Could not determine gpg version GPGopen in new window is used to sign artifacts for public release. Since this does not concern contributors, you may skip this step in the maven build process with -Dgpg.skip.

    Workflow

    1. Create an issue or comment on an issue that you want to contribute some feature
    2. Fork the repository, create a branch and mention it in the issue
    3. If you desire feedback, create a pull request or comment on it in the issue. Feel free to @ any member with write permissions if you feel like your request has not been registered yet. They will review your changes and/or change requests
    4. If your changes are production-ready, create a pull requestopen in new window.

    Pull request process

    We follow Martin Fowler's method for managing pull requests. This approach categorizes pull requests based on the level of trust and experience of the contributor, as well as the impact of the changes. Here's how we apply it:

    1. Ship: For our most trusted contributors with a proven track record. These members can merge their pull requests without prior review, typically for minor or highly confident changes.

    2. Show: This level is for trusted contributors who need some oversight, as well as for experienced developers who want to demonstrate how certain changes should be made in the future. They create pull requests and show their work to the team.

    3. Ask: New or less experienced contributors, as well as those submitting more complex changes, fall into this category. They are required to ask for feedback and approval before their changes can be merged, ensuring thorough review and quality control.

    This method helps us maintain a balance between code quality and efficient development, recognizing the varying levels of expertise among our contributors.

    For more information on Fowler's approach, visit Martin Fowler's article on Pull Requestsopen in new window.

    Data Security in DSF Development

    The DSF (Data Sharing Framework) and its process plugins are frequently used to transmit sensitive personal data. To prevent the release of personal data during development, please adhere to the following guidelines:

    • No development with real personal data: Always use anonymized or synthetic data for development purposes.
    • No personal data in repositories: Ensure no personal data is present in local and remote repositories intended for publication, not even temporarily.
    • Review all log files: Before using log files in issues, examples, etc., thoroughly review them to ensure no personal and sensitive data is included.
    Last update:
    + + + diff --git a/v1.5.2/contribute/documentation.html b/v1.5.2/contribute/documentation.html new file mode 100644 index 000000000..21a2e72fc --- /dev/null +++ b/v1.5.2/contribute/documentation.html @@ -0,0 +1,40 @@ + + + + + + + + + + Contribute documentation + + + + + +
    Skip to main content

    Contribute documentation

    DSF-TeamLess than 1 minute

    Join us in enhancing our documentation!

    We believe in the power of community collaboration to make our documentation clearer, more comprehensive, and more user-friendly. There are several ways you can contribute, and we welcome greatly your input!

    1. Contact us with feedback: If you find any of our documentation unclear or if you think there's a topic not covered yet, please don't hesitate to reach out to us. Your perspective as a reader is invaluable in helping us to identify areas for improvement.
    2. Create an issue: You noticed something that needs fixing or you have a suggestion? Head over to our GitHub repository at Data Sharing Framework Documentationopen in new window and please create an issue. This way, our team and other contributors can track and address documentation changes systematically.
    3. Contribute directly with a pull request: If you're feeling proactive and want to make direct changes, you're more than welcome to submit a pull request. Visit our GitHub repository at Data Sharing Framework Documentationopen in new window and feel free to propose your changes. Whether it's a typo fix, a new section, or enhanced explanations, every contribution counts.

    We're excited to see your suggestions and are grateful for every contribution that helps us improve. Let's build better documentation together!

    Last update:
    + + + diff --git a/v1.5.2/contribute/index.html b/v1.5.2/contribute/index.html new file mode 100644 index 000000000..9d90d26ad --- /dev/null +++ b/v1.5.2/contribute/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Contribute + + + + + +
    Skip to main content

    Contribute

    DSF-TeamAbout 2 min

    We are thrilled that you consider contributing to our projects. Your contributions, big or small, are greatly valued and play a significant role in the success and improvement of our work. Whether you're a seasoned developer or just starting out, there's a place for you here to make a meaningful impact.

    Ways you can contribute:

    1. Helping other users:
    2. Testing releases:
      • Stay ahead: Help us testing the latest releases. Your feedback on functionality, bugs, and user experience is invaluable.
      • Report findings: Share your testing results to help us refine and enhance our releases.
    3. Reviewing changes:
      • Peer review: Contribute by reviewing pull requests. Your insights can help ensure the quality and integrity of code changes.
      • Constructive feedback: Offer constructive feedback and suggestions to help improve and refine proposed changes.
    4. Documentation changes:
    5. Contributing bug reports:
      • Report bugs: If you find a bug, please report it via an issue on GitHubopen in new window. Detailed bug reports are incredibly helpful.
      • Reproduction steps: Include steps to reproduce the bug and any relevant logs according to our bug report issue template.
    6. Contributing feature requests:
      • Suggest features: You have an idea for a new feature? We'd love to hear it! Open an issue to describe your proposed feature and its potential benefits according to our feature request template.
      • Collaborate on implementation: If you're able to, contribute to the development of your proposed feature or bug fix. Collaboration can lead to more innovative and effective solutions. Please checkout our Getting started guide for code contributions to DSF.
    7. Contributing process plugins:

    Before you start contributing, we recommend reading our getting started guidelines for detailed information on our processes and standards. This ensures a smooth and productive experience for everyone involved.

    Your contributions in any form, are what drives the continuous growth and improvement of this project. Thank you for being a part of our community and for your willingness to contribute!

    Last update:
    + + + diff --git a/v1.5.2/develop/create.html b/v1.5.2/develop/create.html new file mode 100644 index 000000000..1bddf486a --- /dev/null +++ b/v1.5.2/develop/create.html @@ -0,0 +1,40 @@ + + + + + + + + + + Create a new process plugin + + + + + + + + + diff --git a/v1.5.2/develop/index.html b/v1.5.2/develop/index.html new file mode 100644 index 000000000..132aa75bf --- /dev/null +++ b/v1.5.2/develop/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Develop Process Plugins + + + + + + + + + diff --git a/v1.5.2/develop/upgrade-from-0.html b/v1.5.2/develop/upgrade-from-0.html new file mode 100644 index 000000000..e4f099b31 --- /dev/null +++ b/v1.5.2/develop/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade processes from 0.9.x + + + + + + + + + diff --git a/v1.5.2/dsf-for-dev.html b/v1.5.2/dsf-for-dev.html new file mode 100644 index 000000000..7d37b888d --- /dev/null +++ b/v1.5.2/dsf-for-dev.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF for Developers + + + + + + + + + diff --git a/v1.5.2/index.html b/v1.5.2/index.html new file mode 100644 index 000000000..f20f78990 --- /dev/null +++ b/v1.5.2/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + DSF 1.5.2 + + + + + +
    Skip to main content

    DSF 1.5.2

    DSF-TeamLess than 1 minute

    Data Sharing Framework 1.x is the new major release of the Data Sharing Framework. Click here to find more information about the DSF in general.

    Important note

    This is a major DSF release not compatible with 0.9.x and older version developed at https://github.com/highmed/highmed-dsfopen in new window.

    System Administrators

    Developers

    New features

    • Improved versioning to support up- and downwards-compatibility
    • Enhanced web ui to start processes in the web browser
    • Allow local user authentication and authorization with OpenID Connect
    • New process plugin API
    • Removed mostly unused features to simplify instance configuration
    • Unified proxy setup
    • Many more features, see 1.x release-notesopen in new window
    Last update:
    + + + diff --git a/v1.5.2/maintain/allowList-mgm.html b/v1.5.2/maintain/allowList-mgm.html new file mode 100644 index 000000000..9791654f6 --- /dev/null +++ b/v1.5.2/maintain/allowList-mgm.html @@ -0,0 +1,40 @@ + + + + + + + + + + Allow List Management + + + + + +
    Skip to main content

    Allow List Management

    DSF-TeamAbout 1 min

    You can read all about the concept of Allow Lists in our introduction.

    Overview

    To simplify the DSF Allow List Management we have built a portal for administration. The portal is managed by the GECKO Institute at Heilbronn University. You as an DSF administrator can create or update your Allow List information. The information you provide on this portal will be transferred to us and will be used to built Allow List bundles that get distributed to the communication partners of the distributed processes.

    The DSF Allow List management tool uses client certificates for authentication. You can either use a personal client certificate or the client certificate from your DSF BPE, which needs to be added to your web-browsers certificate store.

    Prerequisites

    1. Deployed DSF instance (test or production infrastructure)
      1.1 If none exists yet, read the installation guide
    2. Certificate
      2.1 If none exists yet, read the certificate requirements
    3. Organization identifier, shortest FQDN of your organizations website, e.g. my-hospital.de
    4. FHIR endpoint URL, e.g. https://dsf.my-hospital.de/fhir
    5. Contact details from a responsible person of your organization
    6. Access to the E-Mail address from your organization for verification

    Start here

    When you have fulfilled all the prerequisites, you can start managing your Allow Lists via the environment specific Allow List Management Tool:

    We use different highlight colors for the DSF Allow List Management Tool: Green for the Test environment and blue for the Production infrastructure. To access the site, you have to authenticate yourself with a client certificate. Your web-browser will show a dialog to choose a valid certificate.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to contact us on the MII-Zulip Channel or write us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.5.2/maintain/bpe-reverse-proxy/configuration.html b/v1.5.2/maintain/bpe-reverse-proxy/configuration.html new file mode 100644 index 000000000..82b901af7 --- /dev/null +++ b/v1.5.2/maintain/bpe-reverse-proxy/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 1 min

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF BPE server application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF BPE server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /bpe

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    Last update:
    + + + diff --git a/v1.5.2/maintain/bpe-reverse-proxy/index.html b/v1.5.2/maintain/bpe-reverse-proxy/index.html new file mode 100644 index 000000000..8339fd5a3 --- /dev/null +++ b/v1.5.2/maintain/bpe-reverse-proxy/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + BPE Reverse Proxy + + + + + + + + + diff --git a/v1.5.2/maintain/bpe/access-control.html b/v1.5.2/maintain/bpe/access-control.html new file mode 100644 index 000000000..997c6d28f --- /dev/null +++ b/v1.5.2/maintain/bpe/access-control.html @@ -0,0 +1,65 @@ + + + + + + + + + + Access Control + + + + + +
    Skip to main content

    Access Control

    DSF-TeamAbout 2 min

    Overview

    The DSF BPE server provides a user interface for administrators. Without any additional configuration the user interface is not accessible with the organizations X.509 client certificate or any other certificate or OpenID Connect authenticated user.

    OpenID Connect

    To enable OpenID Connect authentication of local user, see the DSF BPE server OpenID Connect configuration page.

    Access to the user interface can be enabled for client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

    The listing below shows a minimal configuration to enable access for a specific client-certificate:

          DEV_DSF_BPE_SERVER_ROLECONFIG: |
    +        - example_read_only_role:
    +            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
    +            dsf-role:
    +              - ADMIN
    +

    The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.

    Certificate Thumbprints

    SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

    certtool --fingerprint --hash=sha512 --infile=certificate.pem
    +

    Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_BPE_SERVER_ROLECONFIG if no roles should be configured.

    Matching Users

    To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

    thumbprint

    The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

    email

    Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the email claimopen in new window from the access token will be matched against the property values.

    token-role and token-group

    With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

    DSF and Practitioner Roles

    Two types of roles can be applied to matched users.

    dsf-role

    DSF roles specified via the dsf-role property define general access to the user interface. Allowed values are:

    ADMIN.

    practitioner-role

    The BPE server currently does not support any practionier-roles.

    Examples

    The first example defines a group of DSF administrators. Two client certificates match against this role:

          DEV_DSF_BPE_SERVER_ROLECONFIG: |
    +        - certificate-admins:
    +            thumbprint: 
    +              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
    +              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
    +            dsf-role:
    +              - ADMIN
    +

    The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

          DEV_DSF_BPE_SERVER_ROLECONFIG: |
    +        - token-role-admins:
    +            token-role: admin
    +            dsf-role:
    +              - ADMIN
    +

    The third example allows administrator access and users e-mail addresses to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

          DEV_DSF_BPE_SERVER_ROLECONFIG: |
    +        - email-admins:
    +            email:
    +              - first.user@test.org
    +              - second.user@test.org
    +            dsf-role:
    +              - ADMIN
    +
    Last update:
    + + + diff --git a/v1.5.2/maintain/bpe/configuration.html b/v1.5.2/maintain/bpe/configuration.html new file mode 100644 index 000000000..2a14ef597 --- /dev/null +++ b/v1.5.2/maintain/bpe/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 9 min

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000

    DEV_DSF_BPE_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.bpe.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_BPE_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.bpe.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD or DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF BPE server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_BPE_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_BPE_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.bpe.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF BPE server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_BPE_DB_URL

    • Property: dev.dsf.bpe.db.url
    • Required: Yes
    • Description: Address of the database used for the DSF BPE server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/bpe

    DEV_DSF_BPE_DB_USER_CAMUNDA_GROUP

    • Property: dev.dsf.bpe.db.user.camunda.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server for camunda processes
    • Default: camunda_users

    DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD or DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.camunda.password
    • Required: Yes
    • Description: Password to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_CAMUNDA_PASSWORD_FILE
    • Example: /run/secrets/db_user_camunda.password

    DEV_DSF_BPE_DB_USER_CAMUNDA_USERNAME

    • Property: dev.dsf.bpe.db.user.camunda.username
    • Required: No
    • Description: Username to access the database from the DSF BPE server for camunda processes
    • Recommendation: Use a different user then in DEV_DSF_BPE_DB_USER_USERNAME
    • Default: camunda_server_user

    DEV_DSF_BPE_DB_USER_GROUP

    • Property: dev.dsf.bpe.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF BPE server
    • Default: bpe_users

    DEV_DSF_BPE_DB_USER_PASSWORD or DEV_DSF_BPE_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.bpe.db.user.password
    • Required: Yes
    • Description: Password to access the database from the DSF BPE server
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_BPE_DB_USER_USERNAME

    • Property: dev.dsf.bpe.db.user.username
    • Required: No
    • Description: Username to access the database from the DSF BPE server
    • Default: bpe_server_user

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_CURRENTUSER

    • Property: dev.dsf.bpe.debug.log.message.currentUser
    • Required: No
    • Description: To enable logging of the currently requesting user set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_DBSTATEMENT

    • Property: dev.dsf.bpe.debug.log.message.dbStatement
    • Required: No
    • Description: To enable logging of DB queries set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYEND

    • Property: dev.dsf.bpe.debug.log.message.onActivityEnd
    • Required: No
    • Description: To enable debug log messages for every bpmn activity end, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_ONACTIVITYSTART

    • Property: dev.dsf.bpe.debug.log.message.onActivityStart
    • Required: No
    • Description: To enable debug log messages for every bpmn activity start, set to true.
    • Recommendation: This debug function should only be activated during process plugin development.
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLES

    • Property: dev.dsf.bpe.debug.log.message.variables
    • Required: No
    • Description: To enable logging of bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_VARIABLESLOCAL

    • Property: dev.dsf.bpe.debug.log.message.variablesLocal
    • Required: No
    • Description: To enable logging of local bpmn variables for every bpmn activity start or end, when logging of these events is enabled, set to true.
    • Recommendation: This debug function should only be activated during process plugin development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST

    • Property: dev.dsf.bpe.debug.log.message.webserviceRequest
    • Required: No
    • Description: To enable logging of webservices requests set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.local.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established with the local DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.local.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until reading a resource from the local DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_LOCAL_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.local.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from the local DSF FHIR server, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_CONNECT

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established with a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 5000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_TIMEOUT_READ

    • Property: dev.dsf.bpe.fhir.client.remote.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 60000

    DEV_DSF_BPE_FHIR_CLIENT_REMOTE_VERBOSE

    • Property: dev.dsf.bpe.fhir.client.remote.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_BPE_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to local and remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_BPE_FHIR_QUESTIONNAIRE_RESPONSE_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.questionnaire.response.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about questionnaire response resources from the DSF FHIR server
    • Default: ?criteria=QuestionnaireResponse%3Fstatus%3Dcompleted&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.bpe.fhir.server.base.url
    • Required: Yes
    • Description: Base address of the local DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_MAX

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.max
    • Required: No
    • Description: Number of retries until a websocket connection can be established with the DSF FHIR server, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_RETRY_SLEEP

    • Property: dev.dsf.bpe.fhir.task.subscription.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a websocket connection with the DSF FHIR server
    • Default: 5000

    DEV_DSF_BPE_FHIR_TASK_SUBSCRIPTION_SEARCH_PARAMETER

    • Property: dev.dsf.bpe.fhir.task.subscription.search.parameter
    • Required: No
    • Description: Subscription to receive notifications about task resources from the DSF FHIR server
    • Default: ?criteria=Task%3Fstatus%3Drequested&status=active&type=websocket&payload=application/fhir%2Bjson

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE

    • Property: dev.dsf.bpe.mail.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate used to authenticate against the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.bpe.mail.client.certificate.private.key
    • Required: No
    • Description: Private key corresponging to the SMTP server client certificate as PEM encoded file. Use DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD* or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem

    DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/smtp_server_client_certificate_private_key.pem.password

    DEV_DSF_BPE_MAIL_FROMADDRESS

    • Property: dev.dsf.bpe.mail.fromAddress
    • Required: No
    • Description: Mail service sender address
    • Example: sender@localhost

    DEV_DSF_BPE_MAIL_HOST

    • Property: dev.dsf.bpe.mail.host
    • Required: No
    • Description: SMTP server hostname
    • Example: smtp.server.de

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTBUFFERSIZE

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventBufferSize
    • Required: No
    • Description: Number of previous INFO, WARN log messages to include in ERROR log event mails (>=0). Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: 4

    DEV_DSF_BPE_MAIL_MAILONERRORLOGEVENTDEBUGLOGLOCATION

    • Property: dev.dsf.bpe.mail.mailOnErrorLogEventDebugLogLocation
    • Required: No
    • Description: Location of the BPE debug log as displayed in the footer of ERROR log event mails, does not modify the actual location of the debug log file. Requires send mail on ERROR log event option to be enabled to have an effect.
    • Default: /opt/bpe/log/bpe.log

    DEV_DSF_BPE_MAIL_PASSWORD or DEV_DSF_BPE_MAIL_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.password
    • Required: No
    • Description: SMTP server authentication password
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; use docker secret file to configure using DEV_DSF_BPE_MAIL_PASSWORD_FILE; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_PORT

    • Property: dev.dsf.bpe.mail.port
    • Required: No
    • Description: SMTP server port
    • Example: 465
    • Default: 0

    DEV_DSF_BPE_MAIL_REPLYTOADDRESSES

    • Property: dev.dsf.bpe.mail.replyToAddresses
    • Required: No
    • Description: Mail service reply to addresses; comma or space separated list, YAML block scalars supported
    • Example: reply.to@localhost

    DEV_DSF_BPE_MAIL_SENDMAILONERRORLOGEVENT

    • Property: dev.dsf.bpe.mail.sendMailOnErrorLogEvent
    • Required: No
    • Description: To enable mails being send for every ERROR logged, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SENDTESTMAILONSTARTUP

    • Property: dev.dsf.bpe.mail.sendTestMailOnStartup
    • Required: No
    • Description: To enable a test mail being send on startup of the BPE, set to true. Requires SMTP server to be configured.
    • Default: false

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore
    • Required: No
    • Description: PKCS12 encoded file with S/MIME certificate, private key and certificate chain to enable send mails to be S/MIME signed
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smime_certificate.p12

    DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD or DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE

    • Property: dev.dsf.bpe.mail.smime.p12Keystore.password
    • Required: No
    • Description: Password to decrypt the PKCS12 encoded S/MIMIE certificate file
    • Recommendation: Use docker secret file to configure using DEV_DSF_BPE_MAIL_SMIME_P12KEYSTORE_PASSWORD_FILE
    • Example: /run/secrets/smime_certificate.p12.password

    DEV_DSF_BPE_MAIL_TOADDRESSES

    • Property: dev.dsf.bpe.mail.toAddresses
    • Required: No
    • Description: Mail service recipient addresses, configure at least one; comma or space separated list, YAML block scalars supported
    • Example: recipient@localhost

    DEV_DSF_BPE_MAIL_TOADDRESSESCC

    • Property: dev.dsf.bpe.mail.toAddressesCc
    • Required: No
    • Description: Mail service CC recipient addresses; comma or space separated list, YAML block scalars supported
    • Example: cc.recipient@localhost

    DEV_DSF_BPE_MAIL_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.bpe.mail.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate the server certificate of the SMTP server. Requires SMTP over TLS to be enabled via DEV_DSF_BPE_MAIL_USESMTPS
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/smtp_server_trust_certificates.pem

    DEV_DSF_BPE_MAIL_USERNAME

    • Property: dev.dsf.bpe.mail.username
    • Required: No
    • Description: SMTP server authentication username
    • Recommendation: Configure if the SMTP server reqiures username/password authentication; enable SMTP over TLS via DEV_DSF_BPE_MAIL_USESMTPS

    DEV_DSF_BPE_MAIL_USESMTPS

    • Property: dev.dsf.bpe.mail.useSmtps
    • Required: No
    • Description: To enable SMTP over TLS (smtps), set to true
    • Default: false

    DEV_DSF_BPE_PROCESS_ENGINE_COREPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.corePoolSize
    • Required: No
    • Description: Process engine job executor core pool size
    • Default: 4

    DEV_DSF_BPE_PROCESS_ENGINE_MAXPOOLSIZE

    • Property: dev.dsf.bpe.process.engine.maxPoolSize
    • Required: No
    • Description: Process engine job executor max pool size, additional threads until max pool size are created if the queue is full
    • Default: 10

    DEV_DSF_BPE_PROCESS_ENGINE_QUEUESIZE

    • Property: dev.dsf.bpe.process.engine.queueSize
    • Required: No
    • Description: Process engine job executor queue size, jobs are added to the queue if all core pool threads are busy
    • Default: 40

    DEV_DSF_BPE_PROCESS_EXCLUDED

    • Property: dev.dsf.bpe.process.excluded
    • Required: No
    • Description: List of process names that should be excluded from deployment during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Only deploy processes that can be started depending on your organization's roles in the Allow-List
    • Example: dsfdev_updateAllowList|1.0, another_process|x.y

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_MAX

    • Property: dev.dsf.bpe.process.fhir.server.retry.max
    • Required: No
    • Description: Number of retries until a connection can be established with the local DSF FHIR server during process deployment, -1 means infinite number of retries
    • Default: -1

    DEV_DSF_BPE_PROCESS_FHIR_SERVER_RETRY_SLEEP

    • Property: dev.dsf.bpe.process.fhir.server.retry.sleep
    • Required: No
    • Description: Milliseconds between two retries to establish a connection with the local DSF FHIR server during process deployment
    • Default: 5000

    DEV_DSF_BPE_PROCESS_PLUGIN_DIRECTROY

    • Property: dev.dsf.bpe.process.plugin.directroy
    • Required: No
    • Description: Directory containing the DSF BPE process plugins for deployment on startup of the DSF BPE server
    • Recommendation: Change only if you don't use the provided directory structure from the installation guide or made changes to tit
    • Default: process

    DEV_DSF_BPE_PROCESS_RETIRED

    • Property: dev.dsf.bpe.process.retired
    • Required: No
    • Description: List of already deployed process names that should be retired during startup of the DSF BPE server; comma or space separated list, YAML block scalars supported
    • Recommendation: Retire processes that where deployed previously but are not anymore available
    • Example: old_process|x.y

    DEV_DSF_BPE_PROCESS_THREADS

    • Property: dev.dsf.bpe.process.threads
    • Required: No
    • Description: Number of parallel Task / QuestionnaireResponse threads to start new or continue existing processes, a value <= 0 means number of cpu cores
    • Default: -1

    DEV_DSF_BPE_SERVER_BASE_URL

    • Property: dev.dsf.bpe.server.base.url
    • Required: No
    • Description: Base address of the BPE server, configure when exposing the web-ui
    • Example: https://foo.bar/bpe
    • Default: https

    DEV_DSF_BPE_SERVER_ROLECONFIG

    DEV_DSF_BPE_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.bpe.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_BPE_SERVER_UI_THEME

    • Property: dev.dsf.bpe.server.ui.theme
    • Required: No
    • Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication
    Last update:
    + + + diff --git a/v1.5.2/maintain/bpe/index.html b/v1.5.2/maintain/bpe/index.html new file mode 100644 index 000000000..18a19763f --- /dev/null +++ b/v1.5.2/maintain/bpe/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + BPE Server + + + + + + + + + diff --git a/v1.5.2/maintain/bpe/oidc.html b/v1.5.2/maintain/bpe/oidc.html new file mode 100644 index 000000000..9f0c696ae --- /dev/null +++ b/v1.5.2/maintain/bpe/oidc.html @@ -0,0 +1,60 @@ + + + + + + + + + + OpenID Connect + + + + + +
    Skip to main content

    OpenID Connect

    DSF-TeamAbout 1 min

    Overview

    Access to the DSF BPE server user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    The DSF BPE server supports Authorization Code Flowopen in new window for the user interface. Back-Channel Logoutopen in new window is also supported.

    BPE Reverse Proxy

    The DSF BPE reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter SSL_VERIFY_CLIENT needs to be set to optional.

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF BPE server accepts logout tokens at DEV_DSF_BPE_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF BPE server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/bpe:1.5.2
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-bpe
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    Last update:
    + + + diff --git a/v1.5.2/maintain/fhir-reverse-proxy/configuration.html b/v1.5.2/maintain/fhir-reverse-proxy/configuration.html new file mode 100644 index 000000000..ecb9cf41e --- /dev/null +++ b/v1.5.2/maintain/fhir-reverse-proxy/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 1 min

    APP_SERVER_IP

    • Required: Yes
    • Description: Hostname or IP-Address of the DSF FHIR server application container, the reverse proxy target
    • Example: app, 172.28.1.3

    HTTPS_SERVER_NAME_PORT

    • Required: Yes
    • Description: External FQDN of your DSF FHIR server with port, typically 443
    • Example: my-external.fqdn:443

    PROXY_PASS_CONNECTION_TIMEOUT_HTTP

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_CONNECTION_TIMEOUT_WS

    • Required: No
    • Description: Connection timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a connection to be established
    • Default: 30 seconds

    PROXY_PASS_TIMEOUT_HTTP

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server http connection, time the proxy waits for a reply
    • Default: 60 seconds

    PROXY_PASS_TIMEOUT_WS

    • Required: No
    • Description: Timeout (seconds) for reverse proxy to app server ws connection, time the proxy waits for a reply
    • Default: 60 seconds

    SERVER_CONTEXT_PATH

    • Required: No
    • Description: Reverse proxy context path that delegates to the app server, / character at start, no / character at end, use '' (empty string) to configure root as context path.
    • Default: /fhir

    SSL_CA_CERTIFICATE_FILE

    • Required: Yes
    • Description: Certificate chain file including all signing, intermediate and ca certificate used to validate client certificates, PEM encoded, sets the apache httpd parameter SSLCACertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_certificate_file.pem

    SSL_CA_DN_REQUEST_FILE

    • Required: No
    • Description: File containing all signing certificates excepted, will be used to specify the Acceptable client certificate CA names send to the client, during TLS handshake, sets the apache httpd parameter SSLCADNRequestFile; if omitted all entries from SSL_CA_CERTIFICATE_FILE are used
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_ca_dn_request_file.pem

    SSL_CERTIFICATE_CHAIN_FILE

    • Required: No
    • Description: Certificate chain file, PEM encoded, must contain all certificates between the server certificate and the root ca certificate, sets the apache httpd parameter SSLCertificateChainFile; can be omitted if either no chain is needed (aka self signed server certificate) or the file specified via SSL_CERTIFICATE_FILE contains the certificate chain
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_chain_file.pem

    SSL_CERTIFICATE_FILE

    • Required: Yes
    • Description: Server certificate file, PEM encoded, sets the apache httpd parameter SSLCertificateFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_file.pem

    SSL_CERTIFICATE_KEY_FILE

    • Required: Yes
    • Description: Server certificate private key file, PEM encoded, unencrypted, sets the apache httpd parameter SSLCertificateKeyFile
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/ssl_certificate_key_file.pem

    SSL_VERIFY_CLIENT

    • Required: No
    • Description: Modifies the apache mod_ssl config parameter SSLVerifyClient
    • Recommendation: Set to optional when using OIDC authentication
    • Default: require
    Last update:
    + + + diff --git a/v1.5.2/maintain/fhir-reverse-proxy/index.html b/v1.5.2/maintain/fhir-reverse-proxy/index.html new file mode 100644 index 000000000..d2e5e4192 --- /dev/null +++ b/v1.5.2/maintain/fhir-reverse-proxy/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Reverse Proxy + + + + + + + + + diff --git a/v1.5.2/maintain/fhir/access-control.html b/v1.5.2/maintain/fhir/access-control.html new file mode 100644 index 000000000..87b7a7167 --- /dev/null +++ b/v1.5.2/maintain/fhir/access-control.html @@ -0,0 +1,85 @@ + + + + + + + + + + Access Control + + + + + +
    Skip to main content

    Access Control

    DSF-TeamAbout 3 min

    Overview

    The DSF FHIR server implements a subset of the FHIR R4 REST APIopen in new window. When accessing the API with a web browser a limited graphical user interface is shown. Without any additional configuration the API and user interface is only accessible with the X.509 client certificate configured for the organization via the configuration parameter: DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    OpenID Connect

    To enable OpenID Connect authentication of local user, see the DSF FHIR server OpenID Connect configuration page.

    Access to the API and user interface can be enabled for additional client certificates and local users authenticating via OAuth 2.0 OpenID Connect. Access can be configured for so called roles, with all roles specified using the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG. The value for this environment variable is specified as YAML using the block scalar |.

    The listing below shows a minimal configuration to enable read access for a specific client-certificate:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - example_read_only_role:
    +            thumbprint: 00474993fa261b0225f93c5a66aa6fcc... [a-f0-9]{128}
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +

    The list of user roles above contains a single rule-entry example_read_only_role, matching the user via a client certificate SHA-512 thumprint and assigning three DSF roles. Any string can be used as the name for the rule-enty.

    Certificate Thumbprints

    SHA-512 certificate thumbprints in HEX form [a-f0-9]{128} can be calculated using:

    certtool --fingerprint --hash=sha512 --infile=certificate.pem
    +

    Multiple user roles can be specified and all matching roles will be applied to an authenticated users. Use an empty string "" or a single block scalar | character as the value for the configuration parameter DEV_DSF_FHIR_SERVER_ROLECONFIG if no roles should be configured.

    Matching Users

    To apply roles, users can be matched via the thumbprint, email, token-role or token-group properties. A single value or a list of values can be specified.

    thumbprint

    The property thumbprint can used to specify one or multiple SHA-512 certificate thumbprints. Roles from this rule are applied to the authenticating user if the certificate matches one of the specified thumbprints.

    email

    Using the property email users can be matched against e-mail addresses specified in X.509 client certificates and in OpenID Connect access tokens. Values will be matched against e-mail addresses specified in the subject DN (via PKCS#9 extension 1.2.840.113549.1.9.1) and RFC-822 Name entries of the Subject Alternative Name field. If the user authenticates via OpenID Connect, the email claimopen in new window from the access token will be matched against the property values.

    token-role and token-group

    With the properties token-role and token-group role and group names can be specified to match against role and group claims within OAuth 2.0 access tokens.

    DSF and Practitioner Roles

    Two types of roles can be applied to matched users.

    dsf-role

    DSF roles specified via the dsf-role property define general access to the REST API and user interface. Allowed values are:

    CREATE, READ, UPDATE, DELETE, SEARCH, HISTORY, PERMANENT_DELETE and WEBSOCKET.

    practitioner-role

    In order to allow users to start processes, the property practitioner-role can be used to assign codes from FHIR CodeSystemopen in new window resources. Codes are specified in the form system-url|code.
    If the uses has a code specified here that match with a requester extension within the process plugin's ActivityDefinitionopen in new window resource, the user can start the process if he also has the dsf-role CREATE.

    Process plugins can defined and use there own code-systems. However, the DSF specifies a standard set of practitioner roles within the CodeSystem http://dsf.dev/fhir/CodeSystem/practitioner-role:

    UAC_USER, COS_USER, CRR_USER, DIC_USER, DMS_USER, DTS_USER, HRP_USER, TTP_USER, AMS_USER and DSF_ADMIN.

    Examples

    The first example defines a group of DSF administrators. Two client certificates match against this role:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - certificate-admins:
    +            thumbprint: 
    +              - afb68b1d9d47e691b8b3d50fd9848467cada8b1c76f5f4b45f00c9f8432d505361a3ee27805f4aa06799d9ac8dace94b3f1942fce44d84866961259b13be825d
    +              - 2441bfddcad97eeb83c8c31fe181b90652787b8b59bf4e569219da7db4429e389479cb7c4a2f311e34217357d594ecad7d58ccfeef2a9e93c6fcf8d98897d88c
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The second example defines a group of DSF administrators by specifying an admin role that gets matched against OAuth 2.0 access tokens:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - token-role-admins:
    +            token-role: admin
    +            dsf-role:
    +              - CREATE
    +              - READ
    +              - UPDATE
    +              - DELETE
    +              - SEARCH
    +              - HISTORY
    +            practitioner-role:
    +              - http://dsf.dev/fhir/CodeSystem/practitioner-role|DSF_ADMIN
    +
    +

    The third example allows read-only access. Two e-mail addresses are used to match this role. E-mail addresses from X.509 client certificates and OAuth 2.0 access tokens are matched:

          DEV_DSF_FHIR_SERVER_ROLECONFIG: |
    +        - read-only:
    +            email:
    +              - first.user@test.org
    +              - second.user@test.org
    +            dsf-role:
    +              - READ
    +              - SEARCH
    +              - HISTORY
    +
    Last update:
    + + + diff --git a/v1.5.2/maintain/fhir/configuration.html b/v1.5.2/maintain/fhir/configuration.html new file mode 100644 index 000000000..4acda047e --- /dev/null +++ b/v1.5.2/maintain/fhir/configuration.html @@ -0,0 +1,40 @@ + + + + + + + + + + Configuration Parameters + + + + + +
    Skip to main content

    Configuration Parameters

    DSF-TeamAbout 5 min

    DEV_DSF_FHIR_CLIENT_CERTIFICATE

    • Property: dev.dsf.fhir.client.certificate
    • Required: Yes
    • Description: PEM encoded file with local client certificate for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.fhir.client.certificate.private.key
    • Required: Yes
    • Description: Private key corresponding to the local client certificate as PEM encoded file. Use DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_certificate_private_key.pem

    DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.fhir.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the local client certificate encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/app_client_certificate_private_key.pem.password

    DEV_DSF_FHIR_CLIENT_TIMEOUT_CONNECT

    • Property: dev.dsf.fhir.client.timeout.connect
    • Required: No
    • Description: Timeout in milliseconds until a connection is established between this DSF FHIR server and a remote DSF FHIR server
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 2000

    DEV_DSF_FHIR_CLIENT_TIMEOUT_READ

    • Property: dev.dsf.fhir.client.timeout.read
    • Required: No
    • Description: Timeout in milliseconds until a reading a resource from a remote DSF FHIR server is aborted
    • Recommendation: Change default value only if timeout exceptions occur
    • Default: 10000

    DEV_DSF_FHIR_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.fhir.client.trust.server.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to remote DSF FHIR servers
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client _trust_certificates.pem

    DEV_DSF_FHIR_CLIENT_VERBOSE

    • Property: dev.dsf.fhir.client.verbose
    • Required: No
    • Description: To enable verbose logging of requests to and replies from remote DSF FHIR servers, set to true
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_FORCEUNLOCK

    • Property: dev.dsf.fhir.db.liquibase.forceUnlock
    • Required: No
    • Description: To force liquibase to unlock the migration lock set to true
    • Recommendation: Only use this option temporarily to unlock a stuck DB migration step
    • Default: false

    DEV_DSF_FHIR_DB_LIQUIBASE_LOCKWAITTIME

    • Property: dev.dsf.fhir.db.liquibase.lockWaitTime
    • Required: No
    • Description: Liquibase change lock wait time in minutes, default 2 minutes
    • Default: 2

    DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD or DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.liquibase.password
    • Required: Yes
    • Description: The password to access the database from the DSF FHIR server to execute database migrations
    • Recommendation: Use docker secret file to configure by using DEV_DSF_FHIR_DB_LIQUIBASE_PASSWORD_FILE
    • Example: /run/secrets/db_liquibase.password

    DEV_DSF_FHIR_DB_LIQUIBASE_USERNAME

    • Property: dev.dsf.fhir.db.liquibase.username
    • Required: No
    • Description: The user name to access the database from the DSF FHIR server to execute database migrations
    • Default: liquibase_user

    DEV_DSF_FHIR_DB_URL

    • Property: dev.dsf.fhir.db.url
    • Required: Yes
    • Description: Address of the database used for the DSF FHIR server
    • Recommendation: Change only if you don't use the provided docker-compose from the installation guide or made changes to the database settings/networking in the docker-compose
    • Example: jdbc:postgresql://db/fhir

    DEV_DSF_FHIR_DB_USER_GROUP

    • Property: dev.dsf.fhir.db.user.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server
    • Default: fhir_users

    DEV_DSF_FHIR_DB_USER_PASSWORD or DEV_DSF_FHIR_DB_USER_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.password
    • Required: Yes
    • Description: Password to access the database from the DSF FHIR server
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PASSWORD_FILE
    • Example: /run/secrets/db_user.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_GROUP

    • Property: dev.dsf.fhir.db.user.permanent.delete.group
    • Required: No
    • Description: The name of the user group to access the database from the DSF FHIR server for permanent deletes
    • Default: fhir_permanent_delete_users

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD or DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE

    • Property: dev.dsf.fhir.db.user.permanent.delete.password
    • Required: Yes
    • Description: Password to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use docker secret file to configure using DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_PASSWORD_FILE
    • Example: /run/secrets/db_user_permanent_delete.password

    DEV_DSF_FHIR_DB_USER_PERMANENT_DELETE_USERNAME

    • Property: dev.dsf.fhir.db.user.permanent.delete.username
    • Required: No
    • Description: Username to access the database from the DSF FHIR server for permanent deletes
    • Recommendation: Use a different user then DEV_DSF_FHIR_DB_USER_USERNAME
    • Default: fhir_server_permanent_delete_user

    DEV_DSF_FHIR_DB_USER_USERNAME

    • Property: dev.dsf.fhir.db.user.username
    • Required: No
    • Description: Username to access the database from the DSF FHIR server
    • Default: fhir_server_user

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_CURRENTUSER

    • Property: dev.dsf.fhir.debug.log.message.currentUser
    • Required: No
    • Description: To enable logging of the currently requesting user set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_DBSTATEMENT

    • Property: dev.dsf.fhir.debug.log.message.dbStatement
    • Required: No
    • Description: To enable logging of DB queries set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_DEBUG_LOG_MESSAGE_WEBSERVICEREQUEST

    • Property: dev.dsf.fhir.debug.log.message.webserviceRequest
    • Required: No
    • Description: To enable logging of webservices requests set to true.
    • Recommendation: This debug function should only be activated during development. WARNNING: Confidential information may be leaked via the debug log!
    • Default: false

    DEV_DSF_FHIR_SERVER_BASE_URL

    • Property: dev.dsf.fhir.server.base.url
    • Required: Yes
    • Description: Base address of this DSF FHIR server to read/store fhir resources
    • Example: https://foo.bar/fhir

    DEV_DSF_FHIR_SERVER_INIT_BUNDLE

    • Property: dev.dsf.fhir.server.init.bundle
    • Required: No
    • Description: Fhir bundle containing the initial Allow-List, loaded on startup of the DSF FHIR server
    • Recommendation: Change only if you don't use the provided files from the installation guide, have local changes in the Allow-List or received an Allow-List from another source
    • Default: conf/bundle.xml

    DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE

    • Property: dev.dsf.fhir.server.organization.identifier.value
    • Required: Yes
    • Description: Local identifier value used in the Allow-List
    • Recommendation: By convention: The shortest possible FQDN that resolve the homepage of the organization
    • Example: hospital.com

    DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT

    • Property: dev.dsf.fhir.server.organization.thumbprint
    • Required: Yes
    • Description: The SHA-512 thumbprint of the local organization client certificate
    • Recommendation: The thumbprint can be calculated via certtool --fingerprint --hash=sha512 --infile=client_certificate.pem

    DEV_DSF_FHIR_SERVER_PAGE_COUNT

    • Property: dev.dsf.fhir.server.page.count
    • Required: No
    • Description: Page size returned by the DSF FHIR server when reading/searching fhir resources
    • Default: 20

    DEV_DSF_FHIR_SERVER_ROLECONFIG

    DEV_DSF_FHIR_SERVER_STATIC_RESOURCE_CACHE

    • Property: dev.dsf.fhir.server.static.resource.cache
    • Required: No
    • Description: To disable static resource caching, set to false
    • Recommendation: Only set to false for development
    • Default: true

    DEV_DSF_FHIR_SERVER_UI_THEME

    • Property: dev.dsf.fhir.server.ui.theme
    • Required: No
    • Description: UI theme parameter, adds a color indicator to the ui to distinguish dev, test and prod environments im configured; supported values: dev, test and prod

    DEV_DSF_PROXY_NOPROXY

    • Property: dev.dsf.proxy.noProxy
    • Required: No
    • Description: Forward proxy no-proxy list, entries will match exactly or agianst (one level) sub-domains, if no port is specified - all ports are matched; comma or space separated list, YAML block scalars supported
    • Example: foo.bar, test.com:8080

    DEV_DSF_PROXY_PASSWORD or DEV_DSF_PROXY_PASSWORD_FILE

    • Property: dev.dsf.proxy.password
    • Required: No
    • Description: Forward Proxy password
    • Recommendation: Configure password if proxy requires authentication, use docker secret file to configure using DEV_DSF_PROXY_PASSWORD_FILE

    DEV_DSF_PROXY_URL

    • Property: dev.dsf.proxy.url
    • Required: No
    • Description: Forward (http/https) proxy url, use DEV_DSF_BPE_PROXY_NOPROXY to list domains that do not require a forward proxy
    • Example: http://proxy.foo:8080

    DEV_DSF_PROXY_USERNAME

    • Property: dev.dsf.proxy.username
    • Required: No
    • Description: Forward proxy username
    • Recommendation: Configure username if proxy requires authentication

    DEV_DSF_SERVER_API_HOST

    • Property: dev.dsf.server.api.host
    • Required: Yes
    • Description: API connector host, default in docker image: 0.0.0.0
    • Default: 127.0.0.1

    DEV_DSF_SERVER_API_PORT

    • Property: dev.dsf.server.api.port
    • Required: Yes
    • Description: API connector port, default in docker image: 8080

    DEV_DSF_SERVER_AUTH_CLIENT_CERTIFICATE_HEADER

    • Property: dev.dsf.server.auth.client.certificate.header
    • Required: Yes
    • Description: Name of HTTP header with client certificate from reverse proxy
    • Default: X-ClientCert

    DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW

    • Property: dev.dsf.server.auth.oidc.authorization.code.flow
    • Required: No
    • Description: Set to true to enable OIDC authorization code flow
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL, DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT

    • Property: dev.dsf.server.auth.oidc.back.channel.logout
    • Required: No
    • Description: Set to true to enable OIDC back-channel logout
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to be set to true (enabled), DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID and DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH

    • Property: dev.dsf.server.auth.oidc.back.channel.logout.path
    • Required: No
    • Description: Path called by the OIDC provide to request back-channel logout
    • Default: /back-channel-logout

    DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN

    • Property: dev.dsf.server.auth.oidc.bearer.token
    • Required: No
    • Description: Set to true to enable OIDC bearer token authentication
    • Recommendation: Requires DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL to be specified
    • Default: false

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID

    DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET

    • Property: dev.dsf.server.auth.oidc.client.secret
    • Required: No
    • Description: OIDC provider client_secret, must be specified if DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW is enabled

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate
    • Required: No
    • Description: PEM encoded file with client certificate for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key
    • Required: No
    • Description: Private key corresponding to the client certificate for the OIDC provider as PEM encoded file. Use DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE if private key is encrypted
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD or DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.auth.oidc.provider.client.certificate.private.key.password
    • Required: No
    • Description: Password to decrypt the client certificate for the OIDC provider encrypted private key
    • Recommendation: Use docker secret file to configure using DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE
    • Example: /run/secrets/oidc_provider_client_certificate_private_key.pem.password

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_CONNECTTIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.connectTimeout
    • Required: No
    • Description: OIDC provider client connect timeout in milliseconds
    • Default: 5000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_IDLETIMEOUT

    • Property: dev.dsf.server.auth.oidc.provider.client.idleTimeout
    • Required: No
    • Description: OIDC provider client idle timeout in milliseconds
    • Default: 30000

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.oidc.provider.client.trust.server.certificate.cas
    • Required: No
    • Description: PEM encoded file with one or more trusted root certificates to validate server certificates for https connections to the OIDC provider
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/oidc_provider_trust_certificates.pem

    DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL

    • Property: dev.dsf.server.auth.oidc.provider.realm.base.url
    • Required: No
    • Description: OIDC provider realm base url
    • Example: https://keycloak.test.com:8443/realms/example-realm-name

    DEV_DSF_SERVER_AUTH_TRUST_CLIENT_CERTIFICATE_CAS

    • Property: dev.dsf.server.auth.trust.client.certificate.cas
    • Required: Yes
    • Description: PEM encoded file with one or more trusted root certificates to validate client certificates for https connections from local and remote clients
    • Recommendation: Use docker secret file to configure
    • Example: /run/secrets/app_client_trust_certificates.pem

    DEV_DSF_SERVER_CERTIFICATE

    • Property: dev.dsf.server.certificate
    • Required: No
    • Description: Server certificate file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_CHAIN

    • Property: dev.dsf.server.certificate.chain
    • Required: No
    • Description: Server certificate chain file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY

    • Property: dev.dsf.server.certificate.key
    • Required: No
    • Description: Server certificate private key file for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD or DEV_DSF_SERVER_CERTIFICATE_KEY_PASSWORD_FILE

    • Property: dev.dsf.server.certificate.key.password
    • Required: No
    • Description: Server certificate private key file password for testing
    • Recommendation: Only specify For testing when terminating TLS in jetty server

    DEV_DSF_SERVER_CONTEXT_PATH

    • Property: dev.dsf.server.context.path
    • Required: Yes
    • Description: Web application context path, default in bpe docker image: /bpe, default in fhir docker image: /fhir
    • Recommendation: Only modify for testing

    DEV_DSF_SERVER_STATUS_HOST

    • Property: dev.dsf.server.status.host
    • Required: Yes
    • Description: Status connector host
    • Default: 127.0.0.1

    DEV_DSF_SERVER_STATUS_PORT

    • Property: dev.dsf.server.status.port
    • Required: Yes
    • Description: Status connector port, default in docker image: 10000
    Last update:
    + + + diff --git a/v1.5.2/maintain/fhir/index.html b/v1.5.2/maintain/fhir/index.html new file mode 100644 index 000000000..a5643246a --- /dev/null +++ b/v1.5.2/maintain/fhir/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + FHIR Server + + + + + + + + + diff --git a/v1.5.2/maintain/fhir/oidc.html b/v1.5.2/maintain/fhir/oidc.html new file mode 100644 index 000000000..2404590de --- /dev/null +++ b/v1.5.2/maintain/fhir/oidc.html @@ -0,0 +1,60 @@ + + + + + + + + + + OpenID Connect + + + + + +
    Skip to main content

    OpenID Connect

    DSF-TeamAbout 1 min

    Overview

    Access to the DSF FHIR server REST API and user interface can be configured via access control roles. By default users are only authenticated using X.509 client certificates, but authentication for local users via OAuth 2.0 OpenID Connect can also be enabled.

    The DSF FHIR server supports Authorization Code Flowopen in new window for the user interface as well as Bearer Token Authenticationopen in new window for the REST API. Back-Channel Logoutopen in new window is also supported.

    FHIR Reverse Proxy

    The DSF FHIR reverse proxy requires client certificates by default. To use OpenID Connect authentication the configuration parameter SSL_VERIFY_CLIENT needs to be set to optional.

    Authorization Code Flow

    To enable authentication via OpenID Connect authorization code flow, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW to true and specify the following parameters:

    Optionally, back channel logout can be enabled by setting DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT to true. The DSF FHIR server accepts logout tokens at DEV_DSF_FHIR_SERVER_BASE_URL + /back-channel-logout. The path can be modified via DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT_PATH.

    Bearer Token Authentication

    To enable bearer token authentication, set the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN to true and specify the following parameter:

    Additional ODIC Configuration Parameter

    A number of additional DEV_DSF_SERVER_AUTH_OIDC ... configuration parameter are specify on the DSF FHIR server configuration parameter page.

    For example the configuration parameter DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS can be used to specify a PEM encoded file with trusted root certificates to be used when accessing the OpenID Connect provider. If not specify the JVM default trusted root certificates are used for this connection.

    Example

    services:
    +  app:
    +    image: ghcr.io/datasharingframework/fhir:1.5.2
    +    # ...
    +    secrets:
    +      - keycloak_root_ca.pem
    +      # ...
    +    environment:
    +      # ...
    +      DEV_DSF_SERVER_AUTH_OIDC_AUTHORIZATION_CODE_FLOW: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BACK_CHANNEL_LOGOUT: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_BEARER_TOKEN: 'true'
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_REALM_BASE_URL: https://keycloak.test.org/realms/dsf
    +      DEV_DSF_SERVER_AUTH_OIDC_PROVIDER_CLIENT_TRUST_SERVER_CERTIFICATE_CAS: /run/secrets/keycloak_root_ca.pem
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_ID: dsf-fhir
    +      DEV_DSF_SERVER_AUTH_OIDC_CLIENT_SECRET: n9bCMtjugv3Y_.szktXyQ2RH5se+J%o3
    +    # ...
    +secrets:
    +  keycloak_root_ca.pem:
    +    file: ./secrets/keycloak_root_ca.pem
    +
    Last update:
    + + + diff --git a/v1.5.2/maintain/index.html b/v1.5.2/maintain/index.html new file mode 100644 index 000000000..9a0c1d749 --- /dev/null +++ b/v1.5.2/maintain/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + Maintain a DSF instance + + + + + + + + + diff --git a/v1.5.2/maintain/install-plugins.html b/v1.5.2/maintain/install-plugins.html new file mode 100644 index 000000000..d0c88e8e7 --- /dev/null +++ b/v1.5.2/maintain/install-plugins.html @@ -0,0 +1,46 @@ + + + + + + + + + + Install Plugins + + + + + +
    Skip to main content

    Install Plugins

    DSF-TeamAbout 1 min

    Marketplace for process plugins

    To install and learn more about each Process Plugin, you can visit the Marketplace hereopen in new window.

    Overview

    • You can find an overview of compatable process plugins below (last updated 25/07/2024).
    Process Pluginreleased for testreleased for production
    Ping-Pongopen in new windowv1.0.1.0open in new windowv1.0.1.0open in new window
    Allow-Listopen in new windowv1.0.0.1open in new windowv1.0.0.1open in new window
    MII Process Feasibilityopen in new windowv1.0.0.5open in new windowv1.0.0.5open in new window
    MII Process Reportopen in new windowv1.1.0.1open in new windowv1.0.0.0open in new window
    MII Process Data Transferopen in new windowv1.0.0.1open in new windowv1.0.0.1open in new window
    MII Process Data Sharingopen in new windowv1.0.1.0open in new windowv1.0.1.0open in new window
    NUM-RDPopen in new windowv1.1.0.0open in new windowv1.1.0.0open in new window
    • Explore and install Process Plugins in the Marketplace. Details on each plugin are available hereopen in new window.
    • Deploying the process plugin to the DSF involves copy the process jar-file and configuring environment variable for the business process engine (BPE).

    Prerequisites

    Deployment

    • Add the process jar-file to the DSF BPE folder /opt/bpe/process:
    wget (your jar-file download link)
    +

    For example:

     wget https://github.com/medizininformatik-initiative/mii-process-data-sharing/releases/download/v1.0.0.1/mii-process-data-sharing-1.0.0.1.jar
    +
    • Make sure the process is readable by the bpe user or group, for example by executing:
    sudo chmod 440 (your jar-file name.jar)
    +sudo chown root:bpe (your jar-file name.jar)
    +

    For example:

    sudo chmod 440 mii-process-data-sharing-1.0.0.1.jar
    +sudo chown root:bpe mii-process-data-sharing-1.0.0.1.jar
    +
    • Modify the process exclude config in /opt/bpe/docker-compose.yml
    • Reminder: Update/verify required configurations in docker-compose.yml
    Last update:
    + + + diff --git a/v1.5.2/maintain/install.html b/v1.5.2/maintain/install.html new file mode 100644 index 000000000..c76665dbf --- /dev/null +++ b/v1.5.2/maintain/install.html @@ -0,0 +1,74 @@ + + + + + + + + + + Install DSF 1.5.2 + + + + + +
    Skip to main content

    Install DSF 1.5.2

    DSF-TeamAbout 6 min

    In the following installation manual we will show you how you can install your own DSF instance to be part of an already existing DSF network.

    Unified installation manual

    The installation instructions of DSF 0.9.x for different application use cases (e.g. NUM CODEX or HiGHmed) are now combined under one common manual. The specific steps for process installation and configuration are documented at the process plugin documentation pages.

    Prerequisites

    Virtual Machines

    • DSF FHIR VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD
    • DSF BPE VM: min. 4 GB RAM, 4 vCPU, 20 GB HDD

    Docker / Docker-Compose

    Both VMs need latest docker (>= 24.0.0) and docker compose. For the latest install guide see https://docs.docker.com/engine/installopen in new window.

    sudo apt-get update
    +sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    +sudo apt-get update
    +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    +sudo systemctl enable docker.service
    +sudo systemctl enable containerd.service
    +

    The current version of docker compose is installed with the current docker version.

    Client/Server Certificates

    Two Certificates from the GÉANT TCS (via DFN e.V.), D-Trust (via TMF e.V.) or DFN-PKI Global G2 (legacy, no new certificates are issued) are needed:

    • Certificate A: Server Certificate - TLS Web Server Authentication (DFN PKI Profile: 'Web Server', Common-Name: Your external DSF FHIR Servers FQDN)
    • Certificate B: Client Certificate - TLS Web Client Authentication (DFN PKI Profile: '802.1X Client', Common-Name: Your DSF BPE Servers FQDN)

    If you use GÉANT TCS certificates, then they are configured by default with the necessary X509v3 Extended Key Usages: TLS Web Server Authentication, TLS Web Client Authentication.

    Network setup / Network access

    • The DSF FHIR server needs to be accessible via the internet and able to access the internet without TLS interception.
    • The BPE FHIR server should only be accessible by the internal network and able to access your DSF FHIR server via its external FQDN and the internet without TLS interception.

    Here is a quick overview of the expected network setup.

    SourceTargetPortProtocol
    DSF BPE (local)DSF FHIR (local)443https, wss
    DSF BPE (local)DSF FHIR (other DSF communication partners)443https
    DSF FHIR (local)DSF FHIR (other DSF communication partners)443https (HTTP HEAD only)
    DSF BPE (other DSF communication partners)DSF FHIR (local)443https
    DSF FHIR (other DSF communication partners)DSF FHIR (local)443https (HTTP HEAD only)

    Connections to services that are used by process plugins (e.g. a fTTP, a terminology server, simplifier.netopen in new window or a local FHIR server) are not listed. Please refer to the respective process plugin documentation pages for more information.

    Setup

    Prepare Certificates

    1. Server Certificate (certificate A)
      This certificate will be used as the DSF FHIR servers server certificate (ssl_certificate_file.pem, ssl_certificate_key_file.pem)

      • Store PEM encoded certificate as ssl_certificate_file.pem
      • Store unencrypted, PEM encoded private-key as ssl_certificate_key_file.pem
    2. Client Certificate (Certificate B)
      This certificate will be used as the DSF BPE servers client certificate (client_certificate.pem, client_certificate_private_key.pem) as well as the DSF FHIR servers client certificate (client_certificate.pem, client_certificate_private_key.pem)

      • Store PEM encoded certificate as client_certificate.pem
      • Store encrypted or not encrypted, PEM encoded private-key as client_certificate_private_key.pem

    DSF FHIR Server

    1. Add Group/User
      Add group and user used by the DSF FHIR java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2101 fhir
      +sudo useradd --system --no-create-home --uid 2101 --gid 2101 fhir
      +
    2. Download and Extract Config Files
      Download and unpack the prepared DSF FHIR server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_fhir_1_5_2.tar.gz
      +sudo tar --same-owner -zxvf dsf_fhir_1_5_2.tar.gz
      +

      The tar command will unpack the config files at /opt/fhir assuming you changed into the /opt directory.

    3. Verify that the fhir system user or group can write into the following folder

      • /opt/fhir/log
    4. Add certificates and keys

      • Add the server certificate (certificate A) and the corresponding private-key to /opt/fhir/secrets/
        • ssl_certificate_file.pem (chmod: 440, chown: fhir:docker)
        • ssl_certificate_key_file.pem (chmod: 440, chown: fhir:docker)
      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/fhir/secrets/
        • client_certificate.pem (chmod: 440, chown: fhir:docker)
        • client_certificate_private_key.pem (chmod: 440, chown: fhir:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/fhir/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L39:      - app_client_certificate_private_key.pem.password
        +...
        +L54:      DEV_DSF_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L141:  app_client_certificate_private_key.pem.password:
        +L142:    file: ./secrets/client_certificate_private_key.pem.password
        +

      How to chmod / chown

      For the example ssl_certificate_file.pem (chmod: 440, chown: fhir:docker) you must:

      1. Set the file content as requested
      2. Change the file permissions to 440 (allow read access to the owner of the file and the group the file belongs to, deny write access to everybody and deny read for other users):
        chmod 440 /opt/fhir/secrets/ssl_certificate_file.pem
      3. Change the owner of the file to the user fhir and the group the file belongs to to docker:
        chown fhir:docker /opt/fhir/secrets/ssl_certificate_file.pem
    5. Uncomment one of the certificate chain entries in the docker-compose file base on the certificate authority that signed your DSF FHIR server certificate (certificate A). For example use the following two lines if the server certificate is signed by DFN-Verein Global Issuing CA

      L114:  ssl_certificate_chain_file.pem:
      +L115:    file: ./secrets/ssl_certificate_chain_file_DFN-Verein.pem
      +
    6. Modify database passwords

      • /opt/fhir/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/fhir/secrets/db_user_permanent_delete.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    7. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> proxy -> environment:
      • services -> app -> environment:
        • DEV_DSF_FHIR_SERVER_ORGANIZATION_IDENTIFIER_VALUE: todo.organization.com
          Set your Organizations DSF identifier, aka the shortest FQDN that resolves to the main homepage of the organization, e.g. hs-heilbronn.de

        • DEV_DSF_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • DEV_DSF_FHIR_SERVER_ORGANIZATION_THUMBPRINT: f4344032fe77bffb912ff5abfd44da89fe64d355affb8d0f14c9ecb8bdbf92c7fe5f995b1ec0c453e4228b395e331052e4639044df4933d57721de508a84d26f
          Set the SHA-512 Hash (lowercase hex) of your client certificate (Certificate B)
          Use certtool --fingerprint --hash=sha512 --infile=client_certificate.pem to generate the hash.

        • DEV_DSF_FHIR_SERVER_ROLECONFIG: |
          (Optional) You can add other client certificates (e.g. personal certificates from admins) to your DSF instance. For additional information, see the FHIR server Access Control page.

        • For additional environment variables, see FHIR server Configuration Parameters page.

    8. Start the DSF FHIR Server
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    DSF BPE Server

    1. Add Group/User
      Add group and user used by the DSF BPE java application. Ubuntu compatible commands below:

      sudo groupadd --gid 2202 bpe
      +sudo useradd --system --no-create-home --uid 2202 --gid 2202 bpe
      +
    2. Download and Extract Config Files
      Download and extract prepared DSF BPE server config files and folder structure:

      cd /opt
      +wget https://dsf.dev/download/dsf_bpe_1_5_2.tar.gz
      +sudo tar --same-owner -zxvf dsf_bpe_1_5_2.tar.gz
      +

      The tar command will unpack the config files at /opt/bpe assuming you changed into the /opt directory.

    3. Verify that the bpe system user or group can write into the following folders

      • /opt/bpe/log
    4. Add certificates and keys

      • Add the client certificate (Certificate B) and the corresponding private-key to /opt/bpe/secrets/
        • client_certificate.pem (chmod: 440 chown: bpe:docker)
        • client_certificate_private_key.pem (chmod: 440 chown: bpe:docker)
      • If the private key is encrypted, add a password file with the password as the only content to /opt/bpe/secrets/client_certificate_private_key.pem.password
      • If the private key is not encrypted, remove the corresponding docker secret lines from the docker-compose.yml file
        L13:      - app_client_certificate_private_key.pem.password
        +...
        +L35:      DEV_DSF_BPE_FHIR_CLIENT_CERTIFICATE_PRIVATE_KEY_PASSWORD_FILE: /run/secrets/app_client_certificate_private_key.pem.password
        +...
        +L89:  app_client_certificate_private_key.pem.password:
        +L90:    file: ./secrets/client_certificate_private_key.pem.password
        +
    5. Modify database passwords

      • /opt/bpe/secrets/db_liquibase.password
        • Generate a random password (min. 32 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
      • /opt/bpe/secrets/db_user_camunda.password
        • Generate a random password (min. 16 characters recommended) and replace the content of the file.
    6. Modify the docker-compose.yml file and set environment variables to the appropriate values

      • services -> app -> environment:
        • DEV_DSF_BPE_FHIR_SERVER_BASE_URL: https://dsf.todo.organization.com/fhir
          Set your FHIR servers external FQDN, e.g. foo.bar.de -> https://foo.bar.de/fhir

        • For additional environment variables, see the BPE server Configuration Parameters page.

    7. Start the DSF BPE Server (without process plugins)
      Start using: docker compose up -d && docker compose logs -f (Ctrl-C will close log, but not stop container)

    8. Verify DSF BPE Startup

      • Check that the BPE was able to download new Task resources from the DSF FHIR server during startup.
      • Check that the BPE was able to download a Subscription resource from the DSF FHIR server during startup.
      • Check that the BPE was able to connect to the websocket endpoint of the DSF FHIR server during startup.

      If you need to debug the TLS connection to your DSF FHIR server use for example:
      docker run -it --rm alpine/openssl s_client your-fhir-server.fqdn:443
      The command above should print the server certificate of your DSF FHIR server (certificate A) and end with a message like [...]tlsv13 alert certificate required[...]

    Logs

    By default, we will log both to the console (collected by docker) and to files in the log directory, so you can use docker compose logs -f in /opt/bpe and /opt/fhir to view informational, warning and error logs. If you encounter any error and the reported information is not detailled enough, you can also check the logs in the /opt/fhir/log and /opt/bpe/log directories with debugging logs. There, you will also find older log files. If you have any questions and can't resolve them by yourself please always include the latest logs from /opt/fhir/log and /opt/bpe/log in your support request.

    On a successful BPE start, you should see the following entries in your BPE log:

    INFO Grizzly(1) -  INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket open, session SOME_RANDOM_UUID1
    +INFO Grizzly(1) -  INFO Grizzly(1) - ClientEndpoint.onOpen(37) | Websocket open, session SOME_RANDOM_UUID2
    +

    On-Boarding

    Please visit the on boarding website of your network for more information.

    Ideas for improvement?

    Have you found an error or is something unclear to you? Then please feel free to write to us at gth-gecko@hs-heilbronn.de. Thank you very much!

    Last update:
    + + + diff --git a/v1.5.2/maintain/upgrade-from-0.html b/v1.5.2/maintain/upgrade-from-0.html new file mode 100644 index 000000000..ebf9e5fa7 --- /dev/null +++ b/v1.5.2/maintain/upgrade-from-0.html @@ -0,0 +1,40 @@ + + + + + + + + + + Upgrade from DSF 0.9.x + + + + + +
    Skip to main content

    Upgrade from DSF 0.9.x

    DSF-TeamAbout 1 min

    A direct upgrade from DSF 0.9.x to DSF 1.x is not supported.

    Do not use your 0.9.x configuration as starting point

    There are too many changes between DSF 0.9.x and DSF 1.x to use the old configuration as starting point and just adapt some configuration parameter names.

    Please use the new installation manual to perform a new installation and use the old setup only for reference.

    Instead, please perform the following steps:

    1. Shut down your DSF instances (DSF FHIR Server and DSF BPE).
    2. Backup your DSF instances (e.g. by moving the folders /opt/bpe and /opt/fhir to /opt/bpe_0.9 and /opt/fhir_0.9)
    3. Install the new DSF according to the instructions.
    4. You can copy your certificates (server- and client certificates) to your new installation. Please do not copy the CA certificate files from your old installation, as the new version will contain additional CAs (e.g. D-Trust).
    5. Configure your processes according to the new process plugin documentation. You can use your test environment configuration and your old production setup configuration for reference. Please ensure to use the new configuration parameter names, as many of them will have new prefixes (like DEV_DSF instead of ORG_HIGHMED).
    6. If you perform the installation before the change of the according environment, you can start the old instances again (out of the /opt/fhir_0.9 and /opt/bpe_0.9 directories).
    7. If you want to replace the old setup with the new one, shutdown the old instances (FHIR + BPE) and start the new ones.

    New process plugins

    Please do not copy your old process plugins into the new DSF. There will be a new release for each process plugin at the time you will be prompted to update your DSF instance.

    Use your old virtual machine

    We recommand the usage of your old DSF 0.9.x virtual machine for your new DSF 1.x setup. This will ensure that you already have the required firewall settings in place.

    Last update:
    + + + diff --git a/v1.5.2/maintain/upgrade-from-1.html b/v1.5.2/maintain/upgrade-from-1.html new file mode 100644 index 000000000..e209e9641 --- /dev/null +++ b/v1.5.2/maintain/upgrade-from-1.html @@ -0,0 +1,61 @@ + + + + + + + + + + Upgrade from DSF 1.5.1 + + + + + +
    Skip to main content

    Upgrade from DSF 1.5.1

    DSF-TeamAbout 1 min

    Upgrading the DSF from 1.5.1 to 1.5.2 involves modifying the docker-compose.yml files and recreating the containers.

    Update to DSF 1.2.0 first

    When upgrading from 1.0.0 or 1.1.0 it is important to migrate to DSF 1.2.0 first.

    Modify DSF FHIR Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/fhir directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/fhir /opt/fhir_backup_pre_1.5.2_upgrade
    2. Modify the DSF FHIR docker-compose.yml file, replace the version number with 1.5.2.

    version: '3.8'
    +services:
    +  proxy:
    +-   image: ghcr.io/datasharingframework/fhir_proxy:1.5.1
    ++   image: ghcr.io/datasharingframework/fhir_proxy:1.5.2
    +    restart: on-failure
    +...
    +  app:
    +-   image: ghcr.io/datasharingframework/fhir:1.5.1
    ++   image: ghcr.io/datasharingframework/fhir:1.5.2
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF FHIR containers
      From /opt/fhir execute
      docker compose up -d && docker compose logs -f
      +

    Modify DSF BPE Server Setup

    1. Preparation / Backup

      • We recommend to create a backup of the /opt/bpe directory before proceeding with the upgrade.
        For example using: sudo cp -rp /opt/bpe /opt/bpe_backup_pre_1.5.2_upgrade
    2. Modify the DSF BPE docker-compose.yml file, replace the version number with 1.5.2.

    version: '3.8'
    +services:
    +  app:
    +-   image: ghcr.io/datasharingframework/bpe:1.5.1
    ++   image: ghcr.io/datasharingframework/bpe:1.5.2
    +    restart: on-failure
    +...
    +
    1. Upgrade the DSF BPE containers
      From /opt/bpe execute

      docker compose up -d && docker compose logs -f
      +
    2. Verify your upgrade:

      • Verify the DSF FHIR server is running in version 1.5.2. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-fhir-server-jetty, version: 1.5.2, [...]
      • Verify the DSF FHIR server started without errors
      • Verify the DSF FHIR server is accessible via https, for example by browsing to https://your-dsf-endpoint.de/fhir/open in new window (authentication with your client-certificate)
      • Verify the DSF BPE server is running in version 1.5.2. The log should contain a message:
        INFO main - BuildInfoReaderImpl.logBuildInfo(137) | Artifact: dsf-bpe-server-jetty, version: 1.5.2, [...]
      • Verify the DSF BPE server started without errors
      • Verify your install with a ping/pong test
    Last update:
    + + + diff --git a/v1.5.2/process-plugins-advanced.html b/v1.5.2/process-plugins-advanced.html new file mode 100644 index 000000000..f66b082cd --- /dev/null +++ b/v1.5.2/process-plugins-advanced.html @@ -0,0 +1,40 @@ + + + + + + + + + + Process Plugins Advanced + + + + + + + + +