diff --git a/.env.development b/.env.development index 749e247..dafe494 100644 --- a/.env.development +++ b/.env.development @@ -1,3 +1,4 @@ FHIR_RESOURCE_VALIDATOR_URL=http://localhost/hl7validatorapi REDIS_URL=redis://localhost:6379/0 FHIR_REFERENCE_SERVER=http://localhost:8080/reference-server/r4 +FHIRPATH_URL=http://localhost/fhirpath diff --git a/.env.production b/.env.production index 21dc353..b4b08f0 100644 --- a/.env.production +++ b/.env.production @@ -1,3 +1,4 @@ REDIS_URL=redis://redis:6379/0 FHIR_RESOURCE_VALIDATOR_URL=http://hl7_validator_service:3500 FHIR_REFERENCE_SERVER=https://inferno.healthit.gov/reference-server/r4 +FHIRPATH_URL=http://fhirpath:6789 diff --git a/.env.test b/.env.test index 32c7e91..9c02870 100644 --- a/.env.test +++ b/.env.test @@ -1,3 +1,4 @@ FHIR_RESOURCE_VALIDATOR_URL=https://example.com/validatorapi ASYNC_JOBS=false FHIR_REFERENCE_SERVER=http://example.com/reference-server/r4 +FHIRPATH_URL=https://example.com/fhirpath diff --git a/config/DTR Full EHR Tests Postman Demo.postman_collection.json b/config/DTR Full EHR Tests Postman Demo.postman_collection.json index 8fb4b5e..2c36b77 100644 --- a/config/DTR Full EHR Tests Postman Demo.postman_collection.json +++ b/config/DTR Full EHR Tests Postman Demo.postman_collection.json @@ -1,10 +1,10 @@ { "info": { - "_postman_id": "c0d6c304-f2e3-458d-82fd-058e2f5cb8e8", + "_postman_id": "67fc5dbd-1121-4e76-8f20-db620aaca054", "name": "DTR Full EHR Tests Postman Demo", "description": "The variables tab in this collection controls port for inferno and token used to establish a session.\n\n- base_url: points to a running instance of inferno. Typical values will be\n \n - Inferno production: [https://inferno.healthit.gov/suites](https://inferno.healthit.gov/suites)\n \n - Inferno QA: [https://inferno-qa.healthit.gov/suites](https://inferno-qa.healthit.gov/suites)\n \n - Local docker: [http://localhost](http://localhost)\n \n - Local development: [http://localhost:4657](http://localhost:4657)\n \n- bearer_token: placed in the Authentication header as a bearer token and used by Inferno to recognize requests for a test session. This value will need to be entered in the Access Token input of the DTR SMART App test suite.", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", - "_exporter_id": "32597978" + "_exporter_id": "13945262" }, "item": [ { @@ -17,7 +17,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{\n \"resourceType\" : \"Parameters\",\n \"id\" : \"QuestionnairePackageInputParamsExample\",\n \"meta\" : {\n \"profile\" : [\"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-input-parameters\"]\n },\n \"parameter\" : [{\n \"name\" : \"coverage\",\n \"resource\" : {\n \"resourceType\" : \"Coverage\",\n \"id\" : \"CoverageExample\",\n \"meta\" : {\n \"profile\" : [\"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-coverage\"]\n },\n \"contained\" : [{\n \"resourceType\" : \"Organization\",\n \"id\" : \"OrgExample\",\n \"meta\" : {\n \"profile\" : [\"http://hl7.org/fhir/us/core/StructureDefinition/us-core-organization\"]\n },\n \"active\" : true,\n \"type\" : [{\n \"coding\" : [{\n \"system\" : \"http://terminology.hl7.org/CodeSystem/organization-type\",\n \"code\" : \"pay\",\n \"display\" : \"Payer\"\n }]\n }],\n \"name\" : \"Insurance Company\",\n \"telecom\" : [{\n \"system\" : \"phone\",\n \"value\" : \"860-547-5001\",\n \"use\" : \"work\"\n }],\n \"address\" : [{\n \"line\" : [\"680 Asylum Street\"],\n \"city\" : \"Hartford\",\n \"state\" : \"CT\",\n \"postalCode\" : \"06155\",\n \"country\" : \"US\"\n }]\n }],\n \"status\" : \"active\",\n \"subscriber\" : {\n \"reference\" : \"Patient/examplepatient\"\n },\n \"subscriberId\" : \"PFP123450000\",\n \"beneficiary\" : {\n \"reference\" : \"Patient/examplepatient\"\n },\n \"relationship\" : {\n \"coding\" : [{\n \"system\" : \"http://terminology.hl7.org/CodeSystem/subscriber-relationship\",\n \"code\" : \"self\",\n \"display\" : \"Self\"\n }]\n },\n \"period\" : {\n \"start\" : \"2022-01-01\",\n \"end\" : \"2023-01-01\"\n },\n \"payor\" : [{\n \"reference\" : \"#OrgExample\"\n }],\n \"class\" : [{\n \"type\" : {\n \"coding\" : [{\n \"system\" : \"http://terminology.hl7.org/CodeSystem/coverage-class\",\n \"code\" : \"plan\",\n \"display\" : \"Plan\"\n }]\n },\n \"value\" : \"Premim Family Plus\",\n \"name\" : \"Premim Family Plus Plan\"\n }]\n }\n },\n {\n \"name\" : \"order\",\n \"resource\" : {\n \"resourceType\" : \"ServiceRequest\",\n \"id\" : \"dinner-request\",\n \"meta\" : {\n \"profile\" : [\"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-servicerequest\"]\n },\n \"status\" : \"draft\",\n \"intent\" : \"original-order\",\n \"code\" : {\n \"text\" : \"Dinner\"\n },\n \"subject\" : {\n \"reference\" : \"Patient/examplepatient\"\n },\n \"occurrenceDateTime\" : \"2019-05-08T09:33:27+07:00\",\n \"authoredOn\" : \"2019-09-18T07:53:21+07:00\",\n \"requester\" : {\n \"reference\" : \"Practitioner/PractitionerExample\"\n },\n \"reasonCode\" : [{\n \"text\" : \"Hungry\"\n }]\n }\n }]\n}", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"QuestionnairePackageInputParamsExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-input-parameters\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"coverage\",\n \"resource\": {\n \"resourceType\": \"Coverage\",\n \"id\": \"CoverageExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-coverage\"\n ]\n },\n \"contained\": [\n {\n \"resourceType\": \"Organization\",\n \"id\": \"OrgExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-organization\"\n ]\n },\n \"identifier\": [\n {\n \"system\": \"http://hl7.org/fhir/sid/us-npi\",\n \"value\": \"1234567893\"\n }\n ],\n \"active\": true,\n \"type\": [\n {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/organization-type\",\n \"code\": \"pay\",\n \"display\": \"Payer\"\n }\n ]\n }\n ],\n \"name\": \"Insurance Company\",\n \"telecom\": [\n {\n \"system\": \"phone\",\n \"value\": \"860-547-5001\",\n \"use\": \"work\"\n }\n ],\n \"address\": [\n {\n \"line\": [\n \"680 Asylum Street\"\n ],\n \"city\": \"Hartford\",\n \"state\": \"CT\",\n \"postalCode\": \"06155\",\n \"country\": \"US\"\n }\n ]\n }\n ],\n \"status\": \"active\",\n \"subscriber\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"subscriberId\": \"PFP123450000\",\n \"beneficiary\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"relationship\": {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/subscriber-relationship\",\n \"code\": \"self\",\n \"display\": \"Self\"\n }\n ]\n },\n \"period\": {\n \"start\": \"2022-01-01\",\n \"end\": \"2023-01-01\"\n },\n \"payor\": [\n {\n \"reference\": \"#OrgExample\"\n }\n ],\n \"class\": [\n {\n \"type\": {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/coverage-class\",\n \"code\": \"plan\",\n \"display\": \"Plan\"\n }\n ]\n },\n \"value\": \"Premim Family Plus\",\n \"name\": \"Premim Family Plus Plan\"\n }\n ]\n }\n },\n {\n \"name\": \"order\",\n \"resource\": {\n \"resourceType\": \"ServiceRequest\",\n \"id\": \"dinner-request\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-servicerequest\"\n ]\n },\n \"status\": \"draft\",\n \"intent\": \"original-order\",\n \"code\": {\n \"text\": \"Dinner\"\n },\n \"subject\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"occurrenceDateTime\": \"2019-05-08T09:33:27+07:00\",\n \"authoredOn\": \"2019-09-18T07:53:21+07:00\",\n \"requester\": {\n \"reference\": \"Practitioner/PractitionerExample\"\n },\n \"reasonCode\": [\n {\n \"text\": \"Hungry\"\n }\n ]\n }\n }\n ]\n}", "options": { "raw": { "language": "json" @@ -96,7 +96,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{\n \"resourceType\": \"QuestionnaireResponse\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaireresponse-r4\"\n ],\n \"tag\": [\n {\n \"code\": \"lformsVersion: 29.3.1\"\n }\n ]\n },\n \"status\": \"completed\",\n \"authored\": \"2024-05-08T12:35:38.748Z\",\n \"item\": [\n {\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"item\": [\n {\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"answer\": [\n {\n \"valueString\": \"Sample\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"practitioner\",\n \"valueReference\": {\n \"reference\": \"Practitioner/pra1234\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"answer\": [\n {\n \"valueString\": \"Bob\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"override\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"practitioner\",\n \"valueReference\": {\n \"reference\": \"Practitioner/pra1234\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"answer\": [\n {\n \"valueCoding\": {\n \"code\": \"Hamburger\",\n \"display\": \"Hamburger\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"practitioner\",\n \"valueReference\": {\n \"reference\": \"Practitioner/pra1234\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ],\n \"author\": {\n \"reference\": \"Practitioner/pra1234\"\n },\n \"subject\": {\n \"reference\": \"Patient/pat015\"\n },\n \"questionnaire\": \"http://localhost:4567/custom/dtr_payer_server/fhir/Questionnaire\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/qr-context\",\n \"valueReference\": {\n \"reference\": \"DeviceRequest/devreq015\",\n \"type\": \"DeviceRequest\"\n }\n },\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/qr-context\",\n \"valueReference\": {\n \"reference\": \"Coverage/cov015\",\n \"type\": \"Coverage\"\n }\n },\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/intendedUse\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/us/davinci-crd/CodeSystem/temp\",\n \"code\": \"withorder\",\n \"display\": \"Include with order\"\n }\n ]\n }\n }\n ]\n}", + "raw": "{\n \"resourceType\": \"QuestionnaireResponse\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaireresponse-r4\"\n ],\n \"tag\": [\n {\n \"code\": \"lformsVersion: 29.3.1\"\n }\n ]\n },\n \"status\": \"completed\",\n \"authored\": \"2024-05-08T12:35:38.748Z\",\n \"item\": [\n {\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"item\": [\n {\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"answer\": [\n {\n \"valueString\": \"Sample\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"answer\": [\n {\n \"valueString\": \"Bob\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"override\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"practitioner\",\n \"valueReference\": {\n \"reference\": \"Practitioner/pra1234\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"answer\": [\n {\n \"valueCoding\": {\n \"code\": \"Hamburger\",\n \"display\": \"Hamburger\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"practitioner\",\n \"valueReference\": {\n \"reference\": \"Practitioner/pra1234\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ],\n \"author\": {\n \"reference\": \"Practitioner/pra1234\"\n },\n \"subject\": {\n \"reference\": \"Patient/pat015\"\n },\n \"questionnaire\": \"http://localhost:4567/custom/dtr_payer_server/fhir/Questionnaire\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/qr-context\",\n \"valueReference\": {\n \"reference\": \"DeviceRequest/devreq015\",\n \"type\": \"DeviceRequest\"\n }\n },\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/qr-context\",\n \"valueReference\": {\n \"reference\": \"Coverage/cov015\",\n \"type\": \"Coverage\"\n }\n },\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/intendedUse\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/us/davinci-crd/CodeSystem/temp\",\n \"code\": \"withorder\",\n \"display\": \"Include with order\"\n }\n ]\n }\n }\n ]\n}", "options": { "raw": { "language": "json" @@ -110,6 +110,327 @@ "response": [] } ] + }, + { + "name": "Adaptive Dinner", + "item": [ + { + "name": "Questionnaire Package for Dinner", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"QuestionnairePackageInputParamsExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-input-parameters\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"coverage\",\n \"resource\": {\n \"resourceType\": \"Coverage\",\n \"id\": \"CoverageExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-coverage\"\n ]\n },\n \"contained\": [\n {\n \"resourceType\": \"Organization\",\n \"id\": \"OrgExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-organization\"\n ]\n },\n \"identifier\": [\n {\n \"system\": \"http://hl7.org/fhir/sid/us-npi\",\n \"value\": \"1234567893\"\n }\n ],\n \"active\": true,\n \"type\": [\n {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/organization-type\",\n \"code\": \"pay\",\n \"display\": \"Payer\"\n }\n ]\n }\n ],\n \"name\": \"Insurance Company\",\n \"telecom\": [\n {\n \"system\": \"phone\",\n \"value\": \"860-547-5001\",\n \"use\": \"work\"\n }\n ],\n \"address\": [\n {\n \"line\": [\n \"680 Asylum Street\"\n ],\n \"city\": \"Hartford\",\n \"state\": \"CT\",\n \"postalCode\": \"06155\",\n \"country\": \"US\"\n }\n ]\n }\n ],\n \"status\": \"active\",\n \"subscriber\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"subscriberId\": \"PFP123450000\",\n \"beneficiary\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"relationship\": {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/subscriber-relationship\",\n \"code\": \"self\",\n \"display\": \"Self\"\n }\n ]\n },\n \"period\": {\n \"start\": \"2022-01-01\",\n \"end\": \"2023-01-01\"\n },\n \"payor\": [\n {\n \"reference\": \"#OrgExample\"\n }\n ],\n \"class\": [\n {\n \"type\": {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/coverage-class\",\n \"code\": \"plan\",\n \"display\": \"Plan\"\n }\n ]\n },\n \"value\": \"Premim Family Plus\",\n \"name\": \"Premim Family Plus Plan\"\n }\n ]\n }\n },\n {\n \"name\": \"order\",\n \"resource\": {\n \"resourceType\": \"ServiceRequest\",\n \"id\": \"dinner-request\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-servicerequest\"\n ]\n },\n \"status\": \"draft\",\n \"intent\": \"original-order\",\n \"code\": {\n \"text\": \"Dinner\"\n },\n \"subject\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"occurrenceDateTime\": \"2019-05-08T09:33:27+07:00\",\n \"authoredOn\": \"2019-09-18T07:53:21+07:00\",\n \"requester\": {\n \"reference\": \"Practitioner/PractitionerExample\"\n },\n \"reasonCode\": [\n {\n \"text\": \"Hungry\"\n }\n ]\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{base_url}}/custom/dtr_full_ehr/fhir/Questionnaire/$questionnaire-package", + "host": [ + "{{base_url}}" + ], + "path": [ + "custom", + "dtr_full_ehr", + "fhir", + "Questionnaire", + "$questionnaire-package" + ] + } + }, + "response": [ + { + "name": "Example Response", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"QuestionnairePackageInputParamsExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-input-parameters\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"coverage\",\n \"resource\": {\n \"resourceType\": \"Coverage\",\n \"id\": \"CoverageExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-coverage\"\n ]\n },\n \"contained\": [\n {\n \"resourceType\": \"Organization\",\n \"id\": \"OrgExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/core/StructureDefinition/us-core-organization\"\n ]\n },\n \"active\": true,\n \"type\": [\n {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/organization-type\",\n \"code\": \"pay\",\n \"display\": \"Payer\"\n }\n ]\n }\n ],\n \"name\": \"Insurance Company\",\n \"telecom\": [\n {\n \"system\": \"phone\",\n \"value\": \"860-547-5001\",\n \"use\": \"work\"\n }\n ],\n \"address\": [\n {\n \"line\": [\n \"680 Asylum Street\"\n ],\n \"city\": \"Hartford\",\n \"state\": \"CT\",\n \"postalCode\": \"06155\",\n \"country\": \"US\"\n }\n ]\n }\n ],\n \"status\": \"active\",\n \"subscriber\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"subscriberId\": \"PFP123450000\",\n \"beneficiary\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"relationship\": {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/subscriber-relationship\",\n \"code\": \"self\",\n \"display\": \"Self\"\n }\n ]\n },\n \"period\": {\n \"start\": \"2022-01-01\",\n \"end\": \"2023-01-01\"\n },\n \"payor\": [\n {\n \"reference\": \"#OrgExample\"\n }\n ],\n \"class\": [\n {\n \"type\": {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/coverage-class\",\n \"code\": \"plan\",\n \"display\": \"Plan\"\n }\n ]\n },\n \"value\": \"Premim Family Plus\",\n \"name\": \"Premim Family Plus Plan\"\n }\n ]\n }\n },\n {\n \"name\": \"order\",\n \"resource\": {\n \"resourceType\": \"ServiceRequest\",\n \"id\": \"dinner-request\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-servicerequest\"\n ]\n },\n \"status\": \"draft\",\n \"intent\": \"original-order\",\n \"code\": {\n \"text\": \"Dinner\"\n },\n \"subject\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"occurrenceDateTime\": \"2019-05-08T09:33:27+07:00\",\n \"authoredOn\": \"2019-09-18T07:53:21+07:00\",\n \"requester\": {\n \"reference\": \"Practitioner/PractitionerExample\"\n },\n \"reasonCode\": [\n {\n \"text\": \"Hungry\"\n }\n ]\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{local_base_url}}/custom/dtr_full_ehr/fhir/Questionnaire/$questionnaire-package", + "host": [ + "{{local_base_url}}" + ], + "path": [ + "custom", + "dtr_full_ehr", + "fhir", + "Questionnaire", + "$questionnaire-package" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Content-Length", + "value": "96736" + } + ], + "cookie": [], + "body": "{\n \"entry\": [\n {\n \"resource\": {\n \"id\": \"DinnerOrderAdaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt-search\"\n ]\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"url\": \"urn:inferno:dtr-test-kit:dinner-order-adaptive\",\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\",\n \"resourceType\": \"Questionnaire\"\n }\n },\n {\n \"resource\": {\n \"id\": \"DTRTest\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/computable-library-cqfm\"\n ]\n },\n \"language\": \"en\",\n \"text\": {\n \"status\": \"extensions\",\n \"div\": \"
\\n \\n\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n
Title: DTRTest
Id: DTRTest
Version: 0.3.000
Url: https://madie.cms.gov/Library/DTRTest
\\n \\n \\n official\\n \\n \\n \\n \\n

\\n 66399d1c633fd342e6fbc547\\n

\\n \\n
Name: DTRTest
Status: active
Experimental: true
Type: \\n \\n \\n \\n

\\n system: http://terminology.hl7.org/CodeSystem/library-type\\n

\\n \\n \\n

\\n code: logic-library\\n

\\n \\n \\n \\n \\n \\n
Date: 2024-05-07T03:17:27+00:00
Publisher: MITRE
Description: Library for use in DTR IG Testing
Data Requirements:\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
TypeProfileMSCode Filter
Encounter\\n \\n
\\n
\\n \\n \\n \\n
Content: text/cql
[108, 105, 98, 114, 97, 114, 121, 32, 68, 84, 82, 84, 101, 115, 116, 32, 118, 101, 114, 115, 105, 111, 110, 32, 39, 48, 46, 51, 46, 48, 48, 48, 39, 10, 117, 115, 105, 110, 103, 32, 70, 72, 73, 82, 32, 118, 101, 114, 115, 105, 111, 110, 32, 39, 52, 46, 48, 46, 49, 39, 10, 10, 99, 111, 110, 116, 101, 120, 116, 32, 80, 97, 116, 105, 101, 110, 116, 10, 10, 100, 101, 102, 105, 110, 101, 32, 34, 69, 110, 99, 111, 117, 110, 116, 101, 114, 115, 34, 58, 32, 10, 32, 32, 91, 69, 110, 99, 111, 117, 110, 116, 101, 114, 93, 10, 32, 32, 10, 100, 101, 102, 105, 110, 101, 32, 34, 79, 110, 101, 69, 110, 99, 111, 117, 110, 116, 101, 114, 34, 58, 10, 9, 34, 69, 110, 99, 111, 117, 110, 116, 101, 114, 115, 34, 91, 48, 93, 10, 32, 32, 10, 32, 32, 10, 100, 101, 102, 105, 110, 101, 32, 34, 70, 105, 114, 115, 116, 76, 111, 99, 97, 116, 105, 111, 110, 68, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 34, 58, 10, 9, 34, 79, 110, 101, 69, 110, 99, 111, 117, 110, 116, 101, 114, 34, 46, 108, 111, 99, 97, 116, 105, 111, 110, 91, 48, 93, 46, 108, 111, 99, 97, 116, 105, 111, 110, 46, 100, 105, 115, 112, 108, 97, 121, 46, 118, 97, 108, 117, 101, 10, 9, 10, 100, 101, 102, 105, 110, 101, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 71, 101, 116, 77, 105, 100, 100, 108, 101, 73, 110, 105, 116, 105, 97, 108, 115, 40, 110, 97, 109, 101, 32, 70, 72, 73, 82, 46, 72, 117, 109, 97, 110, 78, 97, 109, 101, 41, 58, 10, 32, 32, 83, 117, 98, 115, 116, 114, 105, 110, 103, 40, 67, 111, 109, 98, 105, 110, 101, 40, 40, 110, 97, 109, 101, 46, 103, 105, 118, 101, 110, 32, 103, 105, 118, 101, 110, 32, 114, 101, 116, 117, 114, 110, 32, 83, 117, 98, 115, 116, 114, 105, 110, 103, 40, 103, 105, 118, 101, 110, 46, 118, 97, 108, 117, 101, 44, 48, 44, 49, 41, 41, 44, 39, 44, 32, 39, 41, 44, 51, 41, 10, 10, 47, 47, 32, 71, 114, 97, 98, 32, 112, 97, 116, 105, 101, 110, 116, 32, 70, 72, 73, 82, 32, 72, 117, 109, 97, 110, 78, 97, 109, 101, 10, 100, 101, 102, 105, 110, 101, 32, 78, 97, 109, 101, 58, 32, 115, 105, 110, 103, 108, 101, 116, 111, 110, 32, 102, 114, 111, 109, 32, 40, 80, 97, 116, 105, 101, 110, 116, 46, 110, 97, 109, 101, 32, 110, 97, 109, 101, 32, 119, 104, 101, 114, 101, 32, 110, 97, 109, 101, 46, 117, 115, 101, 46, 118, 97, 108, 117, 101, 32, 61, 32, 39, 111, 102, 102, 105, 99, 105, 97, 108, 39, 41, 10, 10, 47, 47, 32, 69, 120, 116, 114, 97, 99, 116, 32, 117, 115, 101, 102, 117, 108, 32, 110, 97, 109, 101, 32, 101, 108, 101, 109, 101, 110, 116, 115, 10, 100, 101, 102, 105, 110, 101, 32, 76, 97, 115, 116, 78, 97, 109, 101, 58, 32, 34, 78, 97, 109, 101, 34, 46, 102, 97, 109, 105, 108, 121, 46, 118, 97, 108, 117, 101, 10, 100, 101, 102, 105, 110, 101, 32, 77, 105, 100, 100, 108, 101, 73, 110, 105, 116, 105, 97, 108, 58, 32, 71, 101, 116, 77, 105, 100, 100, 108, 101, 73, 110, 105, 116, 105, 97, 108, 115, 40, 34, 78, 97, 109, 101, 34, 41, 10, 100, 101, 102, 105, 110, 101, 32, 70, 105, 114, 115, 116, 78, 97, 109, 101, 58, 32, 34, 78, 97, 109, 101, 34, 46, 103, 105, 118, 101, 110, 91, 48, 93, 46, 118, 97, 108, 117, 101]
\\n
\\n
\"\n },\n \"url\": \"https://madie.cms.gov/Library/DTRTest\",\n \"identifier\": [\n {\n \"use\": \"official\",\n \"system\": \"https://madie.cms.gov/login\",\n \"value\": \"66399d1c633fd342e6fbc547\"\n }\n ],\n \"version\": \"0.3.000\",\n \"name\": \"DTRTest\",\n \"title\": \"DTRTest\",\n \"status\": \"active\",\n \"experimental\": true,\n \"type\": {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/library-type\",\n \"code\": \"logic-library\"\n }\n ]\n },\n \"date\": \"2024-05-07T03:17:27+00:00\",\n \"publisher\": \"MITRE\",\n \"description\": \"Library for use in DTR IG Testing\",\n \"dataRequirement\": [\n {\n \"type\": \"Encounter\"\n }\n ],\n \"content\": [\n {\n \"contentType\": \"text/cql\",\n \"data\": \"bGlicmFyeSBEVFJUZXN0IHZlcnNpb24gJzAuMy4wMDAnCnVzaW5nIEZISVIgdmVyc2lvbiAnNC4wLjEnCgpjb250ZXh0IFBhdGllbnQKCmRlZmluZSAiRW5jb3VudGVycyI6IAogIFtFbmNvdW50ZXJdCiAgCmRlZmluZSAiT25lRW5jb3VudGVyIjoKCSJFbmNvdW50ZXJzIlswXQogIAogIApkZWZpbmUgIkZpcnN0TG9jYXRpb25EZXNjcmlwdGlvbiI6CgkiT25lRW5jb3VudGVyIi5sb2NhdGlvblswXS5sb2NhdGlvbi5kaXNwbGF5LnZhbHVlCgkKZGVmaW5lIGZ1bmN0aW9uIEdldE1pZGRsZUluaXRpYWxzKG5hbWUgRkhJUi5IdW1hbk5hbWUpOgogIFN1YnN0cmluZyhDb21iaW5lKChuYW1lLmdpdmVuIGdpdmVuIHJldHVybiBTdWJzdHJpbmcoZ2l2ZW4udmFsdWUsMCwxKSksJywgJyksMykKCi8vIEdyYWIgcGF0aWVudCBGSElSIEh1bWFuTmFtZQpkZWZpbmUgTmFtZTogc2luZ2xldG9uIGZyb20gKFBhdGllbnQubmFtZSBuYW1lIHdoZXJlIG5hbWUudXNlLnZhbHVlID0gJ29mZmljaWFsJykKCi8vIEV4dHJhY3QgdXNlZnVsIG5hbWUgZWxlbWVudHMKZGVmaW5lIExhc3ROYW1lOiAiTmFtZSIuZmFtaWx5LnZhbHVlCmRlZmluZSBNaWRkbGVJbml0aWFsOiBHZXRNaWRkbGVJbml0aWFscygiTmFtZSIpCmRlZmluZSBGaXJzdE5hbWU6ICJOYW1lIi5naXZlblswXS52YWx1ZQ==\"\n },\n {\n \"contentType\": \"application/elm+xml\",\n \"data\": \"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSI+CiAgIDxhbm5vdGF0aW9uIHRyYW5zbGF0b3JWZXJzaW9uPSIzLjMuMiIgdHJhbnNsYXRvck9wdGlvbnM9IkVuYWJsZUFubm90YXRpb25zLEVuYWJsZUxvY2F0b3JzLEVuYWJsZVJlc3VsdFR5cGVzLEVuYWJsZURldGFpbGVkRXJyb3JzLERpc2FibGVMaXN0RGVtb3Rpb24sRGlzYWJsZUxpc3RQcm9tb3Rpb24iIHNpZ25hdHVyZUxldmVsPSJOb25lIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUluZm8iLz4KICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgIDxhOnMgcj0iNTMiPgogICAgICAgICA8YTpzPmxpYnJhcnkgRFRSVGVzdCB2ZXJzaW9uICcwLjMuMDAwJzwvYTpzPgogICAgICA8L2E6cz4KICAgPC9hbm5vdGF0aW9uPgogICA8aWRlbnRpZmllciBpZD0iRFRSVGVzdCIgdmVyc2lvbj0iMC4zLjAwMCIvPgogICA8c2NoZW1hSWRlbnRpZmllciBpZD0idXJuOmhsNy1vcmc6ZWxtIiB2ZXJzaW9uPSJyMSIvPgogICA8dXNpbmdzPgogICAgICA8ZGVmIGxvY2FsSWRlbnRpZmllcj0iU3lzdGVtIiB1cmk9InVybjpobDctb3JnOmVsbS10eXBlczpyMSIvPgogICAgICA8ZGVmIGxvY2FsSWQ9IjEiIGxvY2F0b3I9IjI6MS0yOjI2IiBsb2NhbElkZW50aWZpZXI9IkZISVIiIHVyaT0iaHR0cDovL2hsNy5vcmcvZmhpciIgdmVyc2lvbj0iNC4wLjEiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIxIj4KICAgICAgICAgICAgICAgPGE6cz51c2luZyA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgPGE6cz5GSElSPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzPiB2ZXJzaW9uICc0LjAuMSc8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgPC9kZWY+CiAgIDwvdXNpbmdzPgogICA8Y29udGV4dHM+CiAgICAgIDxkZWYgbG9jYXRvcj0iNDoxLTQ6MTUiIG5hbWU9IlBhdGllbnQiLz4KICAgPC9jb250ZXh0cz4KICAgPHN0YXRlbWVudHM+CiAgICAgIDxkZWYgbG9jYXRvcj0iNDoxLTQ6MTUiIG5hbWU9IlBhdGllbnQiIGNvbnRleHQ9IlBhdGllbnQiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iU2luZ2xldG9uRnJvbSI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2F0b3I9IjQ6MS00OjE1IiBkYXRhVHlwZT0iZmhpcjpQYXRpZW50IiB0ZW1wbGF0ZUlkPSJodHRwOi8vaGw3Lm9yZy9maGlyL1N0cnVjdHVyZURlZmluaXRpb24vUGF0aWVudCIgeHNpOnR5cGU9IlJldHJpZXZlIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMyIgbG9jYXRvcj0iNjoxLTc6MTMiIG5hbWU9IkVuY291bnRlcnMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIzIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7RW5jb3VudGVycyZxdW90OzogCiAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMiI+CiAgICAgICAgICAgICAgICAgIDxhOnM+W0VuY291bnRlcl08L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxyZXN1bHRUeXBlU3BlY2lmaWVyIHhzaTp0eXBlPSJMaXN0VHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgIDxlbGVtZW50VHlwZSBuYW1lPSJmaGlyOkVuY291bnRlciIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L3Jlc3VsdFR5cGVTcGVjaWZpZXI+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjIiIGxvY2F0b3I9Ijc6My03OjEzIiBkYXRhVHlwZT0iZmhpcjpFbmNvdW50ZXIiIHRlbXBsYXRlSWQ9Imh0dHA6Ly9obDcub3JnL2ZoaXIvU3RydWN0dXJlRGVmaW5pdGlvbi9FbmNvdW50ZXIiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgIDxyZXN1bHRUeXBlU3BlY2lmaWVyIHhzaTp0eXBlPSJMaXN0VHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgICAgIDxlbGVtZW50VHlwZSBuYW1lPSJmaGlyOkVuY291bnRlciIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICA8L3Jlc3VsdFR5cGVTcGVjaWZpZXI+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iNyIgbG9jYXRvcj0iOToxLTEwOjE2IiByZXN1bHRUeXBlTmFtZT0iZmhpcjpFbmNvdW50ZXIiIG5hbWU9Ik9uZUVuY291bnRlciIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjciPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtPbmVFbmNvdW50ZXImcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI2Ij4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI0Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtFbmNvdW50ZXJzJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjUiPlswXTwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNiIgbG9jYXRvcj0iMTA6Mi0xMDoxNiIgcmVzdWx0VHlwZU5hbWU9ImZoaXI6RW5jb3VudGVyIiB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQiIGxvY2F0b3I9IjEwOjItMTA6MTMiIG5hbWU9IkVuY291bnRlcnMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIj4KICAgICAgICAgICAgICAgPHJlc3VsdFR5cGVTcGVjaWZpZXIgeHNpOnR5cGU9Ikxpc3RUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnRUeXBlIG5hbWU9ImZoaXI6RW5jb3VudGVyIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgIDwvcmVzdWx0VHlwZVNwZWNpZmllcj4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1IiBsb2NhdG9yPSIxMDoxNSIgcmVzdWx0VHlwZU5hbWU9InQ6SW50ZWdlciIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjE1IiBsb2NhdG9yPSIxMzoxLTE0OjUwIiByZXN1bHRUeXBlTmFtZT0idDpTdHJpbmciIG5hbWU9IkZpcnN0TG9jYXRpb25EZXNjcmlwdGlvbiIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjE1Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7Rmlyc3RMb2NhdGlvbkRlc2NyaXB0aW9uJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMTQiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O09uZUVuY291bnRlciZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+bG9jYXRpb248L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwIj5bMF08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5sb2NhdGlvbjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5kaXNwbGF5PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTQiIGxvY2F0b3I9IjE0OjItMTQ6NTAiIHJlc3VsdFR5cGVOYW1lPSJ0OlN0cmluZyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTMiIGxvY2F0b3I9IjE0OjItMTQ6NDQiIHJlc3VsdFR5cGVOYW1lPSJmaGlyOnN0cmluZyIgcGF0aD0iZGlzcGxheSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMiIgbG9jYXRvcj0iMTQ6Mi0xNDozNiIgcmVzdWx0VHlwZU5hbWU9ImZoaXI6UmVmZXJlbmNlIiBwYXRoPSJsb2NhdGlvbiIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMSIgbG9jYXRvcj0iMTQ6Mi0xNDoyNyIgcmVzdWx0VHlwZU5hbWU9ImZoaXI6RW5jb3VudGVyLkxvY2F0aW9uIiB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjkiIGxvY2F0b3I9IjE0OjItMTQ6MjQiIHBhdGg9ImxvY2F0aW9uIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8cmVzdWx0VHlwZVNwZWNpZmllciB4c2k6dHlwZT0iTGlzdFR5cGVTcGVjaWZpZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudFR5cGUgbmFtZT0iZmhpcjpFbmNvdW50ZXIuTG9jYXRpb24iIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9yZXN1bHRUeXBlU3BlY2lmaWVyPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjgiIGxvY2F0b3I9IjE0OjItMTQ6MTUiIHJlc3VsdFR5cGVOYW1lPSJmaGlyOkVuY291bnRlciIgbmFtZT0iT25lRW5jb3VudGVyIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEwIiBsb2NhdG9yPSIxNDoyNiIgcmVzdWx0VHlwZU5hbWU9InQ6SW50ZWdlciIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjMwIiBsb2NhdG9yPSIxNjoxLTE3OjgxIiByZXN1bHRUeXBlTmFtZT0idDpTdHJpbmciIG5hbWU9IkdldE1pZGRsZUluaXRpYWxzIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIzMCI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lIGZ1bmN0aW9uIEdldE1pZGRsZUluaXRpYWxzKG5hbWUgRkhJUi5IdW1hbk5hbWUpOgogIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjI5Ij4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+U3Vic3RyaW5nKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Db21iaW5lKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+bmFtZS5naXZlbjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGdpdmVuPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnJldHVybiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+U3Vic3RyaW5nKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Z2l2ZW48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjEiPiwwLDEpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4sPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPicsICc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOCI+LDMpPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjkiIGxvY2F0b3I9IjE3OjMtMTc6ODEiIHJlc3VsdFR5cGVOYW1lPSJ0OlN0cmluZyIgeHNpOnR5cGU9IlN1YnN0cmluZyI+CiAgICAgICAgICAgIDxzdHJpbmdUb1N1YiBsb2NhbElkPSIyNyIgbG9jYXRvcj0iMTc6MTMtMTc6NzgiIHJlc3VsdFR5cGVOYW1lPSJ0OlN0cmluZyIgeHNpOnR5cGU9IkNvbWJpbmUiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI1IiBsb2NhdG9yPSIxNzoyMS0xNzo3MiIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgPHJlc3VsdFR5cGVTcGVjaWZpZXIgeHNpOnR5cGU9Ikxpc3RUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnRUeXBlIG5hbWU9InQ6U3RyaW5nIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgIDwvcmVzdWx0VHlwZVNwZWNpZmllcj4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxOCIgbG9jYXRvcj0iMTc6MjItMTc6MzciIGFsaWFzPSJnaXZlbiI+CiAgICAgICAgICAgICAgICAgICAgIDxyZXN1bHRUeXBlU3BlY2lmaWVyIHhzaTp0eXBlPSJMaXN0VHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50VHlwZSBuYW1lPSJmaGlyOnN0cmluZyIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICA8L3Jlc3VsdFR5cGVTcGVjaWZpZXI+CiAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjE3IiBsb2NhdG9yPSIxNzoyMi0xNzozMSIgcGF0aD0iZ2l2ZW4iIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZXN1bHRUeXBlU3BlY2lmaWVyIHhzaTp0eXBlPSJMaXN0VHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50VHlwZSBuYW1lPSJmaGlyOnN0cmluZyIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3Jlc3VsdFR5cGVTcGVjaWZpZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0ibmFtZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPHJldHVybiBsb2NhbElkPSIyNCIgbG9jYXRvcj0iMTc6MzktMTc6NzEiPgogICAgICAgICAgICAgICAgICAgICA8cmVzdWx0VHlwZVNwZWNpZmllciB4c2k6dHlwZT0iTGlzdFR5cGVTcGVjaWZpZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudFR5cGUgbmFtZT0idDpTdHJpbmciIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgPC9yZXN1bHRUeXBlU3BlY2lmaWVyPgogICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyMyIgbG9jYXRvcj0iMTc6NDYtMTc6NzEiIHJlc3VsdFR5cGVOYW1lPSJ0OlN0cmluZyIgeHNpOnR5cGU9IlN1YnN0cmluZyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmdUb1N1YiBsb2NhbElkPSIyMCIgbG9jYXRvcj0iMTc6NTYtMTc6NjYiIHJlc3VsdFR5cGVOYW1lPSJ0OlN0cmluZyIgcGF0aD0idmFsdWUiIHNjb3BlPSJnaXZlbiIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdGFydEluZGV4IGxvY2FsSWQ9IjIxIiBsb2NhdG9yPSIxNzo2OCIgcmVzdWx0VHlwZU5hbWU9InQ6SW50ZWdlciIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8bGVuZ3RoIGxvY2FsSWQ9IjIyIiBsb2NhdG9yPSIxNzo3MCIgcmVzdWx0VHlwZU5hbWU9InQ6SW50ZWdlciIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIxIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgIDwvcmV0dXJuPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHNlcGFyYXRvciBsb2NhbElkPSIyNiIgbG9jYXRvcj0iMTc6NzQtMTc6NzciIHJlc3VsdFR5cGVOYW1lPSJ0OlN0cmluZyIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IiwgIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L3N0cmluZ1RvU3ViPgogICAgICAgICAgICA8c3RhcnRJbmRleCBsb2NhbElkPSIyOCIgbG9jYXRvcj0iMTc6ODAiIHJlc3VsdFR5cGVOYW1lPSJ0OkludGVnZXIiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJuYW1lIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjE2IiBsb2NhdG9yPSIxNjo0MC0xNjo1MyIgcmVzdWx0VHlwZU5hbWU9ImZoaXI6SHVtYW5OYW1lIiBuYW1lPSJmaGlyOkh1bWFuTmFtZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjQwIiBsb2NhdG9yPSIyMDoxLTIwOjgxIiByZXN1bHRUeXBlTmFtZT0iZmhpcjpIdW1hbk5hbWUiIG5hbWU9Ik5hbWUiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI0MCI+CiAgICAgICAgICAgICAgIDxhOnM+Ly8gR3JhYiBwYXRpZW50IEZISVIgSHVtYW5OYW1lCmRlZmluZSBOYW1lOiA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIzOSI+CiAgICAgICAgICAgICAgICAgIDxhOnM+c2luZ2xldG9uIGZyb20gPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzgiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzOCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QYXRpZW50Lm5hbWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBuYW1lPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5uYW1lPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dXNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J29mZmljaWFsJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMzkiIGxvY2F0b3I9IjIwOjE0LTIwOjgxIiByZXN1bHRUeXBlTmFtZT0iZmhpcjpIdW1hbk5hbWUiIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzgiIGxvY2F0b3I9IjIwOjI5LTIwOjgxIiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICA8cmVzdWx0VHlwZVNwZWNpZmllciB4c2k6dHlwZT0iTGlzdFR5cGVTcGVjaWZpZXIiPgogICAgICAgICAgICAgICAgICA8ZWxlbWVudFR5cGUgbmFtZT0iZmhpcjpIdW1hbk5hbWUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgPC9yZXN1bHRUeXBlU3BlY2lmaWVyPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjMyIiBsb2NhdG9yPSIyMDozMC0yMDo0NiIgYWxpYXM9Im5hbWUiPgogICAgICAgICAgICAgICAgICA8cmVzdWx0VHlwZVNwZWNpZmllciB4c2k6dHlwZT0iTGlzdFR5cGVTcGVjaWZpZXIiPgogICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudFR5cGUgbmFtZT0iZmhpcjpIdW1hbk5hbWUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgPC9yZXN1bHRUeXBlU3BlY2lmaWVyPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzMSIgbG9jYXRvcj0iMjA6MzAtMjA6NDEiIHBhdGg9Im5hbWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxyZXN1bHRUeXBlU3BlY2lmaWVyIHhzaTp0eXBlPSJMaXN0VHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50VHlwZSBuYW1lPSJmaGlyOkh1bWFuTmFtZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICA8L3Jlc3VsdFR5cGVTcGVjaWZpZXI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iUGF0aWVudCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjM3IiBsb2NhdG9yPSIyMDo0OC0yMDo4MCIgcmVzdWx0VHlwZU5hbWU9InQ6Qm9vbGVhbiIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzUiIGxvY2F0b3I9IjIwOjU0LTIwOjY3IiByZXN1bHRUeXBlTmFtZT0idDpTdHJpbmciIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjM0IiBsb2NhdG9yPSIyMDo1NC0yMDo2MSIgcmVzdWx0VHlwZU5hbWU9ImZoaXI6TmFtZVVzZSIgcGF0aD0idXNlIiBzY29wZT0ibmFtZSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzYiIGxvY2F0b3I9IjIwOjcxLTIwOjgwIiByZXN1bHRUeXBlTmFtZT0idDpTdHJpbmciIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJvZmZpY2lhbCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjQ0IiBsb2NhdG9yPSIyMzoxLTIzOjM2IiByZXN1bHRUeXBlTmFtZT0idDpTdHJpbmciIG5hbWU9Ikxhc3ROYW1lIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iNDQiPgogICAgICAgICAgICAgICA8YTpzPi8vIEV4dHJhY3QgdXNlZnVsIG5hbWUgZWxlbWVudHMKZGVmaW5lIExhc3ROYW1lOiA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI0MyI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDIiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQxIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtOYW1lJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZmFtaWx5PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDMiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNDMiIGxvY2F0b3I9IjIzOjE4LTIzOjM2IiByZXN1bHRUeXBlTmFtZT0idDpTdHJpbmciIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjQyIiBsb2NhdG9yPSIyMzoxOC0yMzozMCIgcmVzdWx0VHlwZU5hbWU9ImZoaXI6c3RyaW5nIiBwYXRoPSJmYW1pbHkiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNDEiIGxvY2F0b3I9IjIzOjE4LTIzOjIzIiByZXN1bHRUeXBlTmFtZT0iZmhpcjpIdW1hbk5hbWUiIG5hbWU9Ik5hbWUiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjQ3IiBsb2NhdG9yPSIyNDoxLTI0OjQ3IiByZXN1bHRUeXBlTmFtZT0idDpTdHJpbmciIG5hbWU9Ik1pZGRsZUluaXRpYWwiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI0NyI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lIE1pZGRsZUluaXRpYWw6IDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjQ2Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5HZXRNaWRkbGVJbml0aWFscyg8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TmFtZSZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI0NiIgbG9jYXRvcj0iMjQ6MjMtMjQ6NDciIHJlc3VsdFR5cGVOYW1lPSJ0OlN0cmluZyIgbmFtZT0iR2V0TWlkZGxlSW5pdGlhbHMiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ1IiBsb2NhdG9yPSIyNDo0MS0yNDo0NiIgcmVzdWx0VHlwZU5hbWU9ImZoaXI6SHVtYW5OYW1lIiBuYW1lPSJOYW1lIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjUzIiBsb2NhdG9yPSIyNToxLTI1OjM5IiByZXN1bHRUeXBlTmFtZT0idDpTdHJpbmciIG5hbWU9IkZpcnN0TmFtZSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjUzIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgRmlyc3ROYW1lOiA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI1MiI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTEiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TmFtZSZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmdpdmVuPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MCI+WzBdPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MiI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI1MiIgbG9jYXRvcj0iMjU6MTktMjU6MzkiIHJlc3VsdFR5cGVOYW1lPSJ0OlN0cmluZyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNTEiIGxvY2F0b3I9IjI1OjE5LTI1OjMzIiByZXN1bHRUeXBlTmFtZT0iZmhpcjpzdHJpbmciIHhzaTp0eXBlPSJJbmRleGVyIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDkiIGxvY2F0b3I9IjI1OjE5LTI1OjMwIiBwYXRoPSJnaXZlbiIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHJlc3VsdFR5cGVTcGVjaWZpZXIgeHNpOnR5cGU9Ikxpc3RUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnRUeXBlIG5hbWU9ImZoaXI6c3RyaW5nIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgIDwvcmVzdWx0VHlwZVNwZWNpZmllcj4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI0OCIgbG9jYXRvcj0iMjU6MTktMjU6MjQiIHJlc3VsdFR5cGVOYW1lPSJmaGlyOkh1bWFuTmFtZSIgbmFtZT0iTmFtZSIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MCIgbG9jYXRvcj0iMjU6MzIiIHJlc3VsdFR5cGVOYW1lPSJ0OkludGVnZXIiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgIDwvc3RhdGVtZW50cz4KPC9saWJyYXJ5Pgo=\"\n },\n {\n \"contentType\": \"application/elm+json\",\n \"data\": \"ewogICJsaWJyYXJ5IjogewogICAgImFubm90YXRpb24iOiBbCiAgICAgIHsKICAgICAgICAidHJhbnNsYXRvclZlcnNpb24iOiAiMy4zLjIiCiAgICAgIH0KICAgIF0sCiAgICAiaWRlbnRpZmllciI6IHsKICAgICAgImlkIjogIkRUUlRlc3QiLAogICAgICAidmVyc2lvbiI6ICIwLjMuMDAwIgogICAgfSwKICAgICJzY2hlbWFJZGVudGlmaWVyIjogewogICAgICAiaWQiOiAidXJuOmhsNy1vcmc6ZWxtIiwKICAgICAgInZlcnNpb24iOiAicjEiCiAgICB9LAogICAgInVzaW5ncyI6IHsKICAgICAgImRlZiI6IFsKICAgICAgICB7CiAgICAgICAgICAibG9jYWxJZGVudGlmaWVyIjogIlN5c3RlbSIsCiAgICAgICAgICAidXJpIjogInVybjpobDctb3JnOmVsbS10eXBlczpyMSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJsb2NhbElkIjogIjEiLAogICAgICAgICAgImxvY2F0b3IiOiAiMjoxLTI6MjYiLAogICAgICAgICAgImxvY2FsSWRlbnRpZmllciI6ICJGSElSIiwKICAgICAgICAgICJ1cmkiOiAiaHR0cDovL2hsNy5vcmcvZmhpciIsCiAgICAgICAgICAidmVyc2lvbiI6ICI0LjAuMSIsCiAgICAgICAgICAiYW5ub3RhdGlvbiI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJ0eXBlIjogIkFubm90YXRpb24iLAogICAgICAgICAgICAgICJzIjogewogICAgICAgICAgICAgICAgInIiOiAiMSIsCiAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICAgICAgICAgInVzaW5nICIKICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICJGSElSIgogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgIiB2ZXJzaW9uICc0LjAuMSciCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgImNvbnRleHRzIjogewogICAgICAiZGVmIjogWwogICAgICAgIHsKICAgICAgICAgICJsb2NhdG9yIjogIjQ6MS00OjE1IiwKICAgICAgICAgICJuYW1lIjogIlBhdGllbnQiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgInN0YXRlbWVudHMiOiB7CiAgICAgICJkZWYiOiBbCiAgICAgICAgewogICAgICAgICAgImxvY2F0b3IiOiAiNDoxLTQ6MTUiLAogICAgICAgICAgIm5hbWUiOiAiUGF0aWVudCIsCiAgICAgICAgICAiY29udGV4dCI6ICJQYXRpZW50IiwKICAgICAgICAgICJleHByZXNzaW9uIjogewogICAgICAgICAgICAidHlwZSI6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgIm9wZXJhbmQiOiB7CiAgICAgICAgICAgICAgImxvY2F0b3IiOiAiNDoxLTQ6MTUiLAogICAgICAgICAgICAgICJkYXRhVHlwZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QYXRpZW50IiwKICAgICAgICAgICAgICAidHlwZSI6ICJSZXRyaWV2ZSIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImxvY2FsSWQiOiAiMyIsCiAgICAgICAgICAibG9jYXRvciI6ICI2OjEtNzoxMyIsCiAgICAgICAgICAibmFtZSI6ICJFbmNvdW50ZXJzIiwKICAgICAgICAgICJjb250ZXh0IjogIlBhdGllbnQiLAogICAgICAgICAgImFjY2Vzc0xldmVsIjogIlB1YmxpYyIsCiAgICAgICAgICAiYW5ub3RhdGlvbiI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJ0eXBlIjogIkFubm90YXRpb24iLAogICAgICAgICAgICAgICJzIjogewogICAgICAgICAgICAgICAgInIiOiAiMyIsCiAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICAgICAgICAgImRlZmluZSAiLAogICAgICAgICAgICAgICAgICAgICAgIlwiRW5jb3VudGVyc1wiIiwKICAgICAgICAgICAgICAgICAgICAgICI6IFxuICAiCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInIiOiAiMiIsCiAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAiWyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkVuY291bnRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIl0iCiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAicmVzdWx0VHlwZVNwZWNpZmllciI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAiZWxlbWVudFR5cGUiOiB7CiAgICAgICAgICAgICAgIm5hbWUiOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5jb3VudGVyIiwKICAgICAgICAgICAgICAidHlwZSI6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZXhwcmVzc2lvbiI6IHsKICAgICAgICAgICAgImxvY2FsSWQiOiAiMiIsCiAgICAgICAgICAgICJsb2NhdG9yIjogIjc6My03OjEzIiwKICAgICAgICAgICAgImRhdGFUeXBlIjogIntodHRwOi8vaGw3Lm9yZy9maGlyfUVuY291bnRlciIsCiAgICAgICAgICAgICJ0eXBlIjogIlJldHJpZXZlIiwKICAgICAgICAgICAgInJlc3VsdFR5cGVTcGVjaWZpZXIiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6IHsKICAgICAgICAgICAgICAgICJuYW1lIjogIntodHRwOi8vaGw3Lm9yZy9maGlyfUVuY291bnRlciIsCiAgICAgICAgICAgICAgICAidHlwZSI6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibG9jYWxJZCI6ICI3IiwKICAgICAgICAgICJsb2NhdG9yIjogIjk6MS0xMDoxNiIsCiAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5jb3VudGVyIiwKICAgICAgICAgICJuYW1lIjogIk9uZUVuY291bnRlciIsCiAgICAgICAgICAiY29udGV4dCI6ICJQYXRpZW50IiwKICAgICAgICAgICJhY2Nlc3NMZXZlbCI6ICJQdWJsaWMiLAogICAgICAgICAgImFubm90YXRpb24iOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAidHlwZSI6ICJBbm5vdGF0aW9uIiwKICAgICAgICAgICAgICAicyI6IHsKICAgICAgICAgICAgICAgICJyIjogIjciLAogICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAiIiwKICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUgIiwKICAgICAgICAgICAgICAgICAgICAgICJcIk9uZUVuY291bnRlclwiIiwKICAgICAgICAgICAgICAgICAgICAgICI6XG5cdCIKICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiciI6ICI2IiwKICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiRW5jb3VudGVyc1wiIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAiWyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJdIgogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgImV4cHJlc3Npb24iOiB7CiAgICAgICAgICAgICJsb2NhbElkIjogIjYiLAogICAgICAgICAgICAibG9jYXRvciI6ICIxMDoyLTEwOjE2IiwKICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogIntodHRwOi8vaGw3Lm9yZy9maGlyfUVuY291bnRlciIsCiAgICAgICAgICAgICJ0eXBlIjogIkluZGV4ZXIiLAogICAgICAgICAgICAib3BlcmFuZCI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibG9jYWxJZCI6ICI0IiwKICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjEwOjItMTA6MTMiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAiRW5jb3VudGVycyIsCiAgICAgICAgICAgICAgICAidHlwZSI6ICJFeHByZXNzaW9uUmVmIiwKICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlU3BlY2lmaWVyIjogewogICAgICAgICAgICAgICAgICAidHlwZSI6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6IHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FbmNvdW50ZXIiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImxvY2FsSWQiOiAiNSIsCiAgICAgICAgICAgICAgICAibG9jYXRvciI6ICIxMDoxNSIsCiAgICAgICAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIwIiwKICAgICAgICAgICAgICAgICJ0eXBlIjogIkxpdGVyYWwiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibG9jYWxJZCI6ICIxNSIsCiAgICAgICAgICAibG9jYXRvciI6ICIxMzoxLTE0OjUwIiwKICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAibmFtZSI6ICJGaXJzdExvY2F0aW9uRGVzY3JpcHRpb24iLAogICAgICAgICAgImNvbnRleHQiOiAiUGF0aWVudCIsCiAgICAgICAgICAiYWNjZXNzTGV2ZWwiOiAiUHVibGljIiwKICAgICAgICAgICJhbm5vdGF0aW9uIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgInR5cGUiOiAiQW5ub3RhdGlvbiIsCiAgICAgICAgICAgICAgInMiOiB7CiAgICAgICAgICAgICAgICAiciI6ICIxNSIsCiAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICAgICAgICAgImRlZmluZSAiLAogICAgICAgICAgICAgICAgICAgICAgIlwiRmlyc3RMb2NhdGlvbkRlc2NyaXB0aW9uXCIiLAogICAgICAgICAgICAgICAgICAgICAgIjpcblx0IgogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJyIjogIjE0IiwKICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMTMiLAogICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIxMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjExIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiOSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJPbmVFbmNvdW50ZXJcIiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICI5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjEyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjEzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc3BsYXkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgIi4iCiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjE0IiwKICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgImV4cHJlc3Npb24iOiB7CiAgICAgICAgICAgICJsb2NhbElkIjogIjE0IiwKICAgICAgICAgICAgImxvY2F0b3IiOiAiMTQ6Mi0xNDo1MCIsCiAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICJwYXRoIjogInZhbHVlIiwKICAgICAgICAgICAgInR5cGUiOiAiUHJvcGVydHkiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICJsb2NhbElkIjogIjEzIiwKICAgICAgICAgICAgICAibG9jYXRvciI6ICIxNDoyLTE0OjQ0IiwKICAgICAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9c3RyaW5nIiwKICAgICAgICAgICAgICAicGF0aCI6ICJkaXNwbGF5IiwKICAgICAgICAgICAgICAidHlwZSI6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjEyIiwKICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjE0OjItMTQ6MzYiLAogICAgICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogIntodHRwOi8vaGw3Lm9yZy9maGlyfVJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAicGF0aCI6ICJsb2NhdGlvbiIsCiAgICAgICAgICAgICAgICAidHlwZSI6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgICAibG9jYWxJZCI6ICIxMSIsCiAgICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjE0OjItMTQ6MjciLAogICAgICAgICAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5jb3VudGVyLkxvY2F0aW9uIiwKICAgICAgICAgICAgICAgICAgInR5cGUiOiAiSW5kZXhlciIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIjogWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjkiLAogICAgICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMTQ6Mi0xNDoyNCIsCiAgICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJsb2NhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0VHlwZVNwZWNpZmllciI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5jb3VudGVyLkxvY2F0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgICAgICAgICAibG9jYWxJZCI6ICI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMTQ6Mi0xNDoxNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FbmNvdW50ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJPbmVFbmNvdW50ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgImxvY2FsSWQiOiAiMTAiLAogICAgICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMTQ6MjYiLAogICAgICAgICAgICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImxvY2FsSWQiOiAiMzAiLAogICAgICAgICAgImxvY2F0b3IiOiAiMTY6MS0xNzo4MSIsCiAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgIm5hbWUiOiAiR2V0TWlkZGxlSW5pdGlhbHMiLAogICAgICAgICAgImNvbnRleHQiOiAiUGF0aWVudCIsCiAgICAgICAgICAiYWNjZXNzTGV2ZWwiOiAiUHVibGljIiwKICAgICAgICAgICJ0eXBlIjogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICJhbm5vdGF0aW9uIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgInR5cGUiOiAiQW5ub3RhdGlvbiIsCiAgICAgICAgICAgICAgInMiOiB7CiAgICAgICAgICAgICAgICAiciI6ICIzMCIsCiAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICAgICAgICAgImRlZmluZSBmdW5jdGlvbiBHZXRNaWRkbGVJbml0aWFscyhuYW1lIEZISVIuSHVtYW5OYW1lKTpcbiAgIgogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJyIjogIjI5IiwKICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMjkiLAogICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdWJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjI3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbWJpbmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMjUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjI1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIxOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjE3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2l2ZW4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnaXZlbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN1YnN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2l2ZW4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIyMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjI2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInLCAnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIyOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiZXhwcmVzc2lvbiI6IHsKICAgICAgICAgICAgImxvY2FsSWQiOiAiMjkiLAogICAgICAgICAgICAibG9jYXRvciI6ICIxNzozLTE3OjgxIiwKICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgInR5cGUiOiAiU3Vic3RyaW5nIiwKICAgICAgICAgICAgInN0cmluZ1RvU3ViIjogewogICAgICAgICAgICAgICJsb2NhbElkIjogIjI3IiwKICAgICAgICAgICAgICAibG9jYXRvciI6ICIxNzoxMy0xNzo3OCIsCiAgICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAidHlwZSI6ICJDb21iaW5lIiwKICAgICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgImxvY2FsSWQiOiAiMjUiLAogICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMTc6MjEtMTc6NzIiLAogICAgICAgICAgICAgICAgInR5cGUiOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgInJlc3VsdFR5cGVTcGVjaWZpZXIiOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIjogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAic291cmNlIjogWwogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgImxvY2FsSWQiOiAiMTgiLAogICAgICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjE3OjIyLTE3OjM3IiwKICAgICAgICAgICAgICAgICAgICAiYWxpYXMiOiAiZ2l2ZW4iLAogICAgICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlU3BlY2lmaWVyIjogewogICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1zdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiI6IHsKICAgICAgICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjE3IiwKICAgICAgICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjE3OjIyLTE3OjMxIiwKICAgICAgICAgICAgICAgICAgICAgICJwYXRoIjogImdpdmVuIiwKICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlU3BlY2lmaWVyIjogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1zdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiOiBbXSwKICAgICAgICAgICAgICAgICJyZXR1cm4iOiB7CiAgICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjI0IiwKICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMTc6MzktMTc6NzEiLAogICAgICAgICAgICAgICAgICAicmVzdWx0VHlwZVNwZWNpZmllciI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogewogICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iOiB7CiAgICAgICAgICAgICAgICAgICAgImxvY2FsSWQiOiAiMjMiLAogICAgICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjE3OjQ2LTE3OjcxIiwKICAgICAgICAgICAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIlN1YnN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgInN0cmluZ1RvU3ViIjogewogICAgICAgICAgICAgICAgICAgICAgImxvY2FsSWQiOiAiMjAiLAogICAgICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMTc6NTYtMTc6NjYiLAogICAgICAgICAgICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICJwYXRoIjogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICJzY29wZSI6ICJnaXZlbiIsCiAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICJzdGFydEluZGV4IjogewogICAgICAgICAgICAgICAgICAgICAgImxvY2FsSWQiOiAiMjEiLAogICAgICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMTc6NjgiLAogICAgICAgICAgICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgImxlbmd0aCI6IHsKICAgICAgICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjIyIiwKICAgICAgICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjE3OjcwIiwKICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjEiLAogICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJzZXBhcmF0b3IiOiB7CiAgICAgICAgICAgICAgICAibG9jYWxJZCI6ICIyNiIsCiAgICAgICAgICAgICAgICAibG9jYXRvciI6ICIxNzo3NC0xNzo3NyIsCiAgICAgICAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgInZhbHVlVHlwZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAidmFsdWUiOiAiLCAiLAogICAgICAgICAgICAgICAgInR5cGUiOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdGFydEluZGV4IjogewogICAgICAgICAgICAgICJsb2NhbElkIjogIjI4IiwKICAgICAgICAgICAgICAibG9jYXRvciI6ICIxNzo4MCIsCiAgICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgInZhbHVlVHlwZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICJ2YWx1ZSI6ICIzIiwKICAgICAgICAgICAgICAidHlwZSI6ICJMaXRlcmFsIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIm9wZXJhbmQiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAibmFtZSI6ICJuYW1lIiwKICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiOiB7CiAgICAgICAgICAgICAgICAibG9jYWxJZCI6ICIxNiIsCiAgICAgICAgICAgICAgICAibG9jYXRvciI6ICIxNjo0MC0xNjo1MyIsCiAgICAgICAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SHVtYW5OYW1lIiwKICAgICAgICAgICAgICAgICJuYW1lIjogIntodHRwOi8vaGw3Lm9yZy9maGlyfUh1bWFuTmFtZSIsCiAgICAgICAgICAgICAgICAidHlwZSI6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibG9jYWxJZCI6ICI0MCIsCiAgICAgICAgICAibG9jYXRvciI6ICIyMDoxLTIwOjgxIiwKICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1IdW1hbk5hbWUiLAogICAgICAgICAgIm5hbWUiOiAiTmFtZSIsCiAgICAgICAgICAiY29udGV4dCI6ICJQYXRpZW50IiwKICAgICAgICAgICJhY2Nlc3NMZXZlbCI6ICJQdWJsaWMiLAogICAgICAgICAgImFubm90YXRpb24iOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAidHlwZSI6ICJBbm5vdGF0aW9uIiwKICAgICAgICAgICAgICAicyI6IHsKICAgICAgICAgICAgICAgICJyIjogIjQwIiwKICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgIi8vIEdyYWIgcGF0aWVudCBGSElSIEh1bWFuTmFtZVxuIiwKICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUgIiwKICAgICAgICAgICAgICAgICAgICAgICJOYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICI6ICIKICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiciI6ICIzOSIsCiAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAic2luZ2xldG9uIGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIzOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIzOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIzMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjMxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGF0aWVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMzciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMzciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIzNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjM0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMzMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIzNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIzNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMzYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ29mZmljaWFsJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgImV4cHJlc3Npb24iOiB7CiAgICAgICAgICAgICJsb2NhbElkIjogIjM5IiwKICAgICAgICAgICAgImxvY2F0b3IiOiAiMjA6MTQtMjA6ODEiLAogICAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SHVtYW5OYW1lIiwKICAgICAgICAgICAgInR5cGUiOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICJvcGVyYW5kIjogewogICAgICAgICAgICAgICJsb2NhbElkIjogIjM4IiwKICAgICAgICAgICAgICAibG9jYXRvciI6ICIyMDoyOS0yMDo4MSIsCiAgICAgICAgICAgICAgInR5cGUiOiAiUXVlcnkiLAogICAgICAgICAgICAgICJyZXN1bHRUeXBlU3BlY2lmaWVyIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogewogICAgICAgICAgICAgICAgICAibmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1IdW1hbk5hbWUiLAogICAgICAgICAgICAgICAgICAidHlwZSI6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAic291cmNlIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAibG9jYWxJZCI6ICIzMiIsCiAgICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjIwOjMwLTIwOjQ2IiwKICAgICAgICAgICAgICAgICAgImFsaWFzIjogIm5hbWUiLAogICAgICAgICAgICAgICAgICAicmVzdWx0VHlwZVNwZWNpZmllciI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogewogICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SHVtYW5OYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIjogewogICAgICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjMxIiwKICAgICAgICAgICAgICAgICAgICAibG9jYXRvciI6ICIyMDozMC0yMDo0MSIsCiAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlU3BlY2lmaWVyIjogewogICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1IdW1hbk5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiUGF0aWVudCIsCiAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCI6IFtdLAogICAgICAgICAgICAgICJ3aGVyZSI6IHsKICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjM3IiwKICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjIwOjQ4LTIwOjgwIiwKICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUJvb2xlYW4iLAogICAgICAgICAgICAgICAgInR5cGUiOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgIm9wZXJhbmQiOiBbCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibG9jYWxJZCI6ICIzNSIsCiAgICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMjA6NTQtMjA6NjciLAogICAgICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgICAgICAgImxvY2FsSWQiOiAiMzQiLAogICAgICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMjA6NTQtMjA6NjEiLAogICAgICAgICAgICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogIntodHRwOi8vaGw3Lm9yZy9maGlyfU5hbWVVc2UiLAogICAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAidXNlIiwKICAgICAgICAgICAgICAgICAgICAgICJzY29wZSI6ICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjM2IiwKICAgICAgICAgICAgICAgICAgICAibG9jYXRvciI6ICIyMDo3MS0yMDo4MCIsCiAgICAgICAgICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAib2ZmaWNpYWwiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJsb2NhbElkIjogIjQ0IiwKICAgICAgICAgICJsb2NhdG9yIjogIjIzOjEtMjM6MzYiLAogICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICJuYW1lIjogIkxhc3ROYW1lIiwKICAgICAgICAgICJjb250ZXh0IjogIlBhdGllbnQiLAogICAgICAgICAgImFjY2Vzc0xldmVsIjogIlB1YmxpYyIsCiAgICAgICAgICAiYW5ub3RhdGlvbiI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJ0eXBlIjogIkFubm90YXRpb24iLAogICAgICAgICAgICAgICJzIjogewogICAgICAgICAgICAgICAgInIiOiAiNDQiLAogICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAiLy8gRXh0cmFjdCB1c2VmdWwgbmFtZSBlbGVtZW50c1xuIiwKICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUgIiwKICAgICAgICAgICAgICAgICAgICAgICJMYXN0TmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAiOiAiCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInIiOiAiNDMiLAogICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAiciI6ICI0MiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjQxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiTmFtZVwiIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjQyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhbWlseSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAiLiIKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiNDMiLAogICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiZXhwcmVzc2lvbiI6IHsKICAgICAgICAgICAgImxvY2FsSWQiOiAiNDMiLAogICAgICAgICAgICAibG9jYXRvciI6ICIyMzoxOC0yMzozNiIsCiAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICJwYXRoIjogInZhbHVlIiwKICAgICAgICAgICAgInR5cGUiOiAiUHJvcGVydHkiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICJsb2NhbElkIjogIjQyIiwKICAgICAgICAgICAgICAibG9jYXRvciI6ICIyMzoxOC0yMzozMCIsCiAgICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogIntodHRwOi8vaGw3Lm9yZy9maGlyfXN0cmluZyIsCiAgICAgICAgICAgICAgInBhdGgiOiAiZmFtaWx5IiwKICAgICAgICAgICAgICAidHlwZSI6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjQxIiwKICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjIzOjE4LTIzOjIzIiwKICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1IdW1hbk5hbWUiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAiTmFtZSIsCiAgICAgICAgICAgICAgICAidHlwZSI6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImxvY2FsSWQiOiAiNDciLAogICAgICAgICAgImxvY2F0b3IiOiAiMjQ6MS0yNDo0NyIsCiAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgIm5hbWUiOiAiTWlkZGxlSW5pdGlhbCIsCiAgICAgICAgICAiY29udGV4dCI6ICJQYXRpZW50IiwKICAgICAgICAgICJhY2Nlc3NMZXZlbCI6ICJQdWJsaWMiLAogICAgICAgICAgImFubm90YXRpb24iOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAidHlwZSI6ICJBbm5vdGF0aW9uIiwKICAgICAgICAgICAgICAicyI6IHsKICAgICAgICAgICAgICAgICJyIjogIjQ3IiwKICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgIiIsCiAgICAgICAgICAgICAgICAgICAgICAiZGVmaW5lICIsCiAgICAgICAgICAgICAgICAgICAgICAiTWlkZGxlSW5pdGlhbCIsCiAgICAgICAgICAgICAgICAgICAgICAiOiAiCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInIiOiAiNDYiLAogICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkdldE1pZGRsZUluaXRpYWxzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiKCIKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiNDUiLAogICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIk5hbWVcIiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAiKSIKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJleHByZXNzaW9uIjogewogICAgICAgICAgICAibG9jYWxJZCI6ICI0NiIsCiAgICAgICAgICAgICJsb2NhdG9yIjogIjI0OjIzLTI0OjQ3IiwKICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgIm5hbWUiOiAiR2V0TWlkZGxlSW5pdGlhbHMiLAogICAgICAgICAgICAidHlwZSI6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICJvcGVyYW5kIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjQ1IiwKICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjI0OjQxLTI0OjQ2IiwKICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1IdW1hbk5hbWUiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAiTmFtZSIsCiAgICAgICAgICAgICAgICAidHlwZSI6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImxvY2FsSWQiOiAiNTMiLAogICAgICAgICAgImxvY2F0b3IiOiAiMjU6MS0yNTozOSIsCiAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgIm5hbWUiOiAiRmlyc3ROYW1lIiwKICAgICAgICAgICJjb250ZXh0IjogIlBhdGllbnQiLAogICAgICAgICAgImFjY2Vzc0xldmVsIjogIlB1YmxpYyIsCiAgICAgICAgICAiYW5ub3RhdGlvbiI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJ0eXBlIjogIkFubm90YXRpb24iLAogICAgICAgICAgICAgICJzIjogewogICAgICAgICAgICAgICAgInIiOiAiNTMiLAogICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAiIiwKICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUgIiwKICAgICAgICAgICAgICAgICAgICAgICJGaXJzdE5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgIjogIgogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJyIjogIjUyIiwKICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiNTEiLAogICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICI0OSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjQ4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIk5hbWVcIiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjQ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnaXZlbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiNTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgIi4iCiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjUyIiwKICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgImV4cHJlc3Npb24iOiB7CiAgICAgICAgICAgICJsb2NhbElkIjogIjUyIiwKICAgICAgICAgICAgImxvY2F0b3IiOiAiMjU6MTktMjU6MzkiLAogICAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAicGF0aCI6ICJ2YWx1ZSIsCiAgICAgICAgICAgICJ0eXBlIjogIlByb3BlcnR5IiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAibG9jYWxJZCI6ICI1MSIsCiAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMjU6MTktMjU6MzMiLAogICAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1zdHJpbmciLAogICAgICAgICAgICAgICJ0eXBlIjogIkluZGV4ZXIiLAogICAgICAgICAgICAgICJvcGVyYW5kIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAibG9jYWxJZCI6ICI0OSIsCiAgICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjI1OjE5LTI1OjMwIiwKICAgICAgICAgICAgICAgICAgInBhdGgiOiAiZ2l2ZW4iLAogICAgICAgICAgICAgICAgICAidHlwZSI6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlU3BlY2lmaWVyIjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiOiB7CiAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1zdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICAgICAibG9jYWxJZCI6ICI0OCIsCiAgICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMjU6MTktMjU6MjQiLAogICAgICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1IdW1hbk5hbWUiLAogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk5hbWUiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjUwIiwKICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMjU6MzIiLAogICAgICAgICAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAidmFsdWUiOiAiMCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIjogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdCiAgICB9CiAgfSwKICAiZXh0ZXJuYWxFcnJvcnMiOiBbXQp9\"\n }\n ],\n \"resourceType\": \"Library\"\n }\n }\n ],\n \"resourceType\": \"Bundle\"\n}" + } + ] + }, + { + "name": "Initial Next Question", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"next-question-initial\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/parameters-questionnaire-next-question-in\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"questionnaire-response\",\n \"resource\": {\n \"resourceType\": \"QuestionnaireResponse\",\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"status\": \"in-progress\",\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"contained\": [\n {\n \"resourceType\": \"Questionnaire\",\n \"id\": \"DinnerOrderAdaptive\",\n \"url\": \"urn:inferno:dtr-test-kit:dinner-order-adaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt-search\"\n ]\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\"\n }\n ]\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{base_url}}/custom/dtr_full_ehr/fhir/Questionnaire/$next-question", + "host": [ + "{{base_url}}" + ], + "path": [ + "custom", + "dtr_full_ehr", + "fhir", + "Questionnaire", + "$next-question" + ] + } + }, + "response": [ + { + "name": "Example Response", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"next-question-initial\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/parameters-questionnaire-next-question-in\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"questionnaire-response\",\n \"resource\": {\n \"resourceType\": \"QuestionnaireResponse\",\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"status\": \"in-progress\",\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"contained\": [\n {\n \"resourceType\": \"Questionnaire\",\n \"id\": \"DinnerOrderAdaptive\",\n \"url\": \"urn:inferno:dtr-test-kit:dinner-order-adaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt-search\"\n ]\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\"\n }\n ]\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{local_base_url}}/custom/dtr_full_ehr/fhir/Questionnaire/$next-question", + "host": [ + "{{local_base_url}}" + ], + "path": [ + "custom", + "dtr_full_ehr", + "fhir", + "Questionnaire", + "$next-question" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Content-Length", + "value": "6047" + } + ], + "cookie": [], + "body": "{\n \"parameter\": [\n {\n \"name\": \"questionnaire-response\",\n \"resource\": {\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"contained\": [\n {\n \"id\": \"DinnerOrderAdaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt\"\n ]\n },\n \"text\": {\n \"status\": \"generated\",\n \"div\": \"
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"derivedFrom\": [\n \"urn:inferno:dtr-test-kit:dinner-order-adaptive\"\n ],\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".LastName\"\n }\n }\n ],\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"type\": \"string\",\n \"required\": true\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstName\"\n }\n }\n ],\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstLocationDescription\"\n }\n }\n ],\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"type\": \"group\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"type\": \"choice\",\n \"required\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Hamburger\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n }\n ]\n }\n ],\n \"resourceType\": \"Questionnaire\"\n }\n ],\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"status\": \"in-progress\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"resourceType\": \"QuestionnaireResponse\"\n }\n }\n ],\n \"resourceType\": \"Parameters\"\n}" + } + ] + }, + { + "name": "Second Next Question", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"next-question-followup-request\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/parameters-questionnaire-next-question-in\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"questionnaire-response\",\n \"resource\": {\n \"resourceType\": \"QuestionnaireResponse\",\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"status\": \"in-progress\",\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"contained\": [\n {\n \"resourceType\": \"Questionnaire\",\n \"id\": \"DinnerOrderAdaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt\"\n ]\n },\n \"text\": {\n \"status\": \"generated\",\n \"div\": \"
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"derivedFrom\": [\n \"urn:inferno:dtr-test-kit:dinner-order-adaptive\"\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".LastName\"\n }\n }\n ],\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"type\": \"string\",\n \"required\": true\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstName\"\n }\n }\n ],\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstLocationDescription\"\n }\n }\n ],\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"type\": \"group\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"type\": \"choice\",\n \"required\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Hamburger\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ],\n \"item\": [\n {\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"item\": [\n {\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"answer\": [\n {\n \"valueString\": \"Smith\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"answer\": [\n {\n \"valueString\": \"John\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"override\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"item\": [\n {\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"answer\": [\n {\n \"valueString\": \"Home\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"answer\": [\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{base_url}}/custom/dtr_full_ehr/fhir/Questionnaire/$next-question", + "host": [ + "{{base_url}}" + ], + "path": [ + "custom", + "dtr_full_ehr", + "fhir", + "Questionnaire", + "$next-question" + ] + } + }, + "response": [ + { + "name": "Example Response", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"next-question-followup-request\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/parameters-questionnaire-next-question-in\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"questionnaire-response\",\n \"resource\": {\n \"resourceType\": \"QuestionnaireResponse\",\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"status\": \"in-progress\",\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"contained\": [\n {\n \"resourceType\": \"Questionnaire\",\n \"id\": \"DinnerOrderAdaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt\"\n ]\n },\n \"text\": {\n \"status\": \"generated\",\n \"div\": \"
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"derivedFrom\": [\n \"urn:inferno:dtr-test-kit:dinner-order-adaptive\"\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".LastName\"\n }\n }\n ],\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"type\": \"string\",\n \"required\": true\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstName\"\n }\n }\n ],\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstLocationDescription\"\n }\n }\n ],\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"type\": \"group\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"type\": \"choice\",\n \"required\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Hamburger\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ],\n \"item\": [\n {\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"item\": [\n {\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"answer\": [\n {\n \"valueString\": \"Smith\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"answer\": [\n {\n \"valueString\": \"John\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"override\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"item\": [\n {\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"answer\": [\n {\n \"valueString\": \"Home\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"answer\": [\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{local_base_url}}/custom/dtr_full_ehr/fhir/Questionnaire/$next-question", + "host": [ + "{{local_base_url}}" + ], + "path": [ + "custom", + "dtr_full_ehr", + "fhir", + "Questionnaire", + "$next-question" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Content-Length", + "value": "11096" + } + ], + "cookie": [], + "body": "{\n \"parameter\": [\n {\n \"name\": \"questionnaire-response\",\n \"resource\": {\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"contained\": [\n {\n \"id\": \"DinnerOrderAdaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt\"\n ]\n },\n \"text\": {\n \"status\": \"generated\",\n \"div\": \"
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"derivedFrom\": [\n \"urn:inferno:dtr-test-kit:dinner-order-adaptive\"\n ],\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".LastName\"\n }\n }\n ],\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"type\": \"string\",\n \"required\": true\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstName\"\n }\n }\n ],\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstLocationDescription\"\n }\n }\n ],\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"type\": \"group\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"type\": \"choice\",\n \"required\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Hamburger\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.2.b\",\n \"text\": \"What would you like on your bean burrito?\",\n \"type\": \"choice\",\n \"required\": false,\n \"repeats\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Cheese\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Pico de Gallo\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Guacamole\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.3\",\n \"text\": \"Any special requests?\",\n \"type\": \"string\",\n \"required\": false\n }\n ]\n }\n ],\n \"resourceType\": \"Questionnaire\"\n }\n ],\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"status\": \"in-progress\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"item\": [\n {\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"item\": [\n {\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueString\": \"Smith\"\n }\n ]\n },\n {\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"override\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueString\": \"John\"\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"item\": [\n {\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueString\": \"Home\"\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n }\n ]\n }\n ],\n \"resourceType\": \"QuestionnaireResponse\"\n }\n }\n ],\n \"resourceType\": \"Parameters\"\n}" + } + ] + }, + { + "name": "Final Next Question", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"next-question-final-request\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/parameters-questionnaire-next-question-in\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"questionnaire-response\",\n \"resource\": {\n \"resourceType\": \"QuestionnaireResponse\",\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"status\": \"in-progress\",\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"author\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"contained\": [\n {\n \"resourceType\": \"Questionnaire\",\n \"id\": \"DinnerOrderAdaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt\"\n ]\n },\n \"text\": {\n \"status\": \"generated\",\n \"div\": \"
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"derivedFrom\": [\n \"urn:inferno:dtr-test-kit:dinner-order-adaptive\"\n ],\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".LastName\"\n }\n }\n ],\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"type\": \"string\",\n \"required\": true\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstName\"\n }\n }\n ],\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstLocationDescription\"\n }\n }\n ],\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"type\": \"group\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"type\": \"choice\",\n \"required\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Hamburger\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.2.b\",\n \"text\": \"What would you like on your bean burrito?\",\n \"type\": \"choice\",\n \"required\": false,\n \"repeats\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Cheese\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Pico de Gallo\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Guacamole\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.3\",\n \"text\": \"Any special requests?\",\n \"type\": \"string\",\n \"required\": false\n }\n ]\n }\n ]\n }\n ],\n \"item\": [\n {\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"item\": [\n {\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"answer\": [\n {\n \"valueString\": \"Smith\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"answer\": [\n {\n \"valueString\": \"John\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"override\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"item\": [\n {\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"answer\": [\n {\n \"valueString\": \"Home\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"answer\": [\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3.2.b\",\n \"text\": \"What would you like on your bean burrito?\",\n \"answer\": [\n {\n \"valueCoding\": {\n \"code\": \"Cheese\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"valueCoding\": {\n \"code\": \"Guacamole\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3.3\",\n \"text\": \"Any special requests?\",\n \"answer\": [\n {\n \"valueString\": \"Extra napkins, please.\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{base_url}}/custom/dtr_full_ehr/fhir/Questionnaire/$next-question", + "host": [ + "{{base_url}}" + ], + "path": [ + "custom", + "dtr_full_ehr", + "fhir", + "Questionnaire", + "$next-question" + ] + } + }, + "response": [ + { + "name": "Example Response", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"next-question-final-request\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/parameters-questionnaire-next-question-in\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"questionnaire-response\",\n \"resource\": {\n \"resourceType\": \"QuestionnaireResponse\",\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"status\": \"in-progress\",\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"author\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"contained\": [\n {\n \"resourceType\": \"Questionnaire\",\n \"id\": \"DinnerOrderAdaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt\"\n ]\n },\n \"text\": {\n \"status\": \"generated\",\n \"div\": \"
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"derivedFrom\": [\n \"urn:inferno:dtr-test-kit:dinner-order-adaptive\"\n ],\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".LastName\"\n }\n }\n ],\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"type\": \"string\",\n \"required\": true\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstName\"\n }\n }\n ],\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstLocationDescription\"\n }\n }\n ],\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"type\": \"group\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"type\": \"choice\",\n \"required\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Hamburger\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.2.b\",\n \"text\": \"What would you like on your bean burrito?\",\n \"type\": \"choice\",\n \"required\": false,\n \"repeats\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Cheese\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Pico de Gallo\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Guacamole\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.3\",\n \"text\": \"Any special requests?\",\n \"type\": \"string\",\n \"required\": false\n }\n ]\n }\n ]\n }\n ],\n \"item\": [\n {\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"item\": [\n {\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"answer\": [\n {\n \"valueString\": \"Smith\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"answer\": [\n {\n \"valueString\": \"John\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"override\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"item\": [\n {\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"answer\": [\n {\n \"valueString\": \"Home\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"answer\": [\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3.2.b\",\n \"text\": \"What would you like on your bean burrito?\",\n \"answer\": [\n {\n \"valueCoding\": {\n \"code\": \"Cheese\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"valueCoding\": {\n \"code\": \"Guacamole\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3.3\",\n \"text\": \"Any special requests?\",\n \"answer\": [\n {\n \"valueString\": \"Extra napkins, please.\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{local_base_url}}/custom/dtr_full_ehr/fhir/Questionnaire/$next-question", + "host": [ + "{{local_base_url}}" + ], + "path": [ + "custom", + "dtr_full_ehr", + "fhir", + "Questionnaire", + "$next-question" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Content-Length", + "value": "14006" + } + ], + "cookie": [], + "body": "{\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"contained\": [\n {\n \"id\": \"DinnerOrderAdaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt\"\n ]\n },\n \"text\": {\n \"status\": \"generated\",\n \"div\": \"
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"derivedFrom\": [\n \"urn:inferno:dtr-test-kit:dinner-order-adaptive\"\n ],\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".LastName\"\n }\n }\n ],\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"type\": \"string\",\n \"required\": true\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstName\"\n }\n }\n ],\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstLocationDescription\"\n }\n }\n ],\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"type\": \"group\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"type\": \"choice\",\n \"required\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Hamburger\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.2.b\",\n \"text\": \"What would you like on your bean burrito?\",\n \"type\": \"choice\",\n \"required\": false,\n \"repeats\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Cheese\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Pico de Gallo\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Guacamole\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.3\",\n \"text\": \"Any special requests?\",\n \"type\": \"string\",\n \"required\": false\n }\n ]\n }\n ],\n \"resourceType\": \"Questionnaire\"\n }\n ],\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"status\": \"completed\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"author\": {\n \"reference\": \"Patient/example\"\n },\n \"item\": [\n {\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"item\": [\n {\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueString\": \"Smith\"\n }\n ]\n },\n {\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"override\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueString\": \"John\"\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"item\": [\n {\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueString\": \"Home\"\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.2.b\",\n \"text\": \"What would you like on your bean burrito?\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueCoding\": {\n \"code\": \"Cheese\"\n }\n },\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueCoding\": {\n \"code\": \"Guacamole\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.3\",\n \"text\": \"Any special requests?\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueString\": \"Extra napkins, please.\"\n }\n ]\n }\n ]\n }\n ],\n \"resourceType\": \"QuestionnaireResponse\"\n}" + } + ] + } + ] } ], "auth": { @@ -149,6 +470,11 @@ "key": "base_url", "value": "https://inferno.healthit.gov/suites" }, + { + "key": "local_base_url", + "value": "http://localhost:4567", + "type": "string" + }, { "key": "access_token", "value": "RFRSIHNtYXJ0IGFwcCB0ZXN0cyBwb3N0bWFuIGRlbW8", diff --git a/config/DTR SMART App Tests Postman Demo.postman_collection.json b/config/DTR SMART App Tests Postman Demo.postman_collection.json index 94b8ab5..8dc5be7 100644 --- a/config/DTR SMART App Tests Postman Demo.postman_collection.json +++ b/config/DTR SMART App Tests Postman Demo.postman_collection.json @@ -1,10 +1,10 @@ { "info": { - "_postman_id": "7541fc56-d4d2-4126-b100-60416d01c5d5", + "_postman_id": "a9a2867f-61b8-4e8a-8f46-a948899454f1", "name": "DTR SMART App Tests Postman Demo", "description": "The variables tab in this collection controls port for inferno and token used to establish a session.\n\n- url_prefix: points to a running instance of inferno. Typical values will be\n \n - Inferno production: [https://inferno.healthit.gov/suites](https://inferno.healthit.gov/suites)\n \n - Inferno QA: [https://inferno-qa.healthit.gov/suites](https://inferno-qa.healthit.gov/suites)\n \n - Local docker: [http://localhost](http://localhost)\n \n - Local development: [http://localhost:4657](http://localhost:4657)\n \n- jwt_with_inferno_client_id: a non-standard jwt with the client_id value for the test present in the \"inferno_client_id\" entry of the payload. See [https://jwt.io/#debugger-io?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpbmZlcm5vX2NsaWVudF9pZCI6InRlc3QifQ.VvPENMXJqEfG3ShJ4hp4MQblfxcwJuX5o-3wSrGXEi0](https://jwt.io/#debugger-io?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpbmZlcm5vX2NsaWVudF9pZCI6InRlc3QifQ.VvPENMXJqEfG3ShJ4hp4MQblfxcwJuX5o-3wSrGXEi0) for an example where the client id is `sample` (NOTE: no other details matter). Sent on all questionnaire and clinical requests in the Authorization header as a bearer token (Bearer {{jwt_with_inferno_client_id}} - configured on the Authorization tab).", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", - "_exporter_id": "2481890" + "_exporter_id": "13945262" }, "item": [ { @@ -34,48 +34,6 @@ }, "response": [] }, - { - "name": "OpenID Configuration", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{base_url}}/custom/dtr_smart_app/fhir/.well-known/openid-configuration", - "host": [ - "{{base_url}}" - ], - "path": [ - "custom", - "dtr_smart_app", - "fhir", - ".well-known", - "openid-configuration" - ] - } - }, - "response": [] - }, - { - "name": "JWKS", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{base_url}}/custom/dtr_smart_app/fhir/.well-known/jwks.json", - "host": [ - "{{base_url}}" - ], - "path": [ - "custom", - "dtr_smart_app", - "fhir", - ".well-known", - "jwks.json" - ] - } - }, - "response": [] - }, { "name": "Authorize", "request": { @@ -85,7 +43,7 @@ "method": "GET", "header": [], "url": { - "raw": "{{base_url}}/custom/dtr_smart_app/fhir/mock_ehr_auth/authorize?response_type=code&client_id=sample&redirect_uri=http://localhost&launch=1234&scope=launch+patient%2F%2A.rs&state=394a5f8b-735c-4930-8f11-8f4034e3a483&aud={{base_url}}/custom/dtr_smart_app&code_challenge=59acb885e0a8b485df1a48c4d61544e5a0e6aa0209fe131bc64a336cb12aa95f&code_challenge_method=S256", + "raw": "{{base_url}}/custom/dtr_smart_app/fhir/mock_auth/authorize?response_type=code&client_id=sample&redirect_uri=http://localhost&launch=1234&scope=launch+patient%2F%2A.rs&state=394a5f8b-735c-4930-8f11-8f4034e3a483&aud={{base_url}}/custom/dtr_smart_app&code_challenge=59acb885e0a8b485df1a48c4d61544e5a0e6aa0209fe131bc64a336cb12aa95f&code_challenge_method=S256", "host": [ "{{base_url}}" ], @@ -93,7 +51,7 @@ "custom", "dtr_smart_app", "fhir", - "mock_ehr_auth", + "mock_auth", "authorize" ], "query": [ @@ -153,7 +111,7 @@ }, { "key": "client_id", - "value": "sample", + "value": "1", "type": "text" }, { @@ -168,7 +126,7 @@ }, { "key": "scope", - "value": "openid+user%2F%2A.rs+launch%2Fpatient+fhirUser", + "value": "openid+user%2F%2A.rs+launch%2Fpatient", "type": "text" }, { @@ -194,14 +152,13 @@ ] }, "url": { - "raw": "{{base_url}}/custom/dtr_smart_app/fhir/mock_ehr_auth/authorize", + "raw": "{{base_url}}/custom/dtr_smart_app/mock_ehr_auth/authorize", "host": [ "{{base_url}}" ], "path": [ "custom", "dtr_smart_app", - "fhir", "mock_ehr_auth", "authorize" ] @@ -250,20 +207,19 @@ }, { "key": "client_id", - "value": "sample", + "value": "1", "type": "text" } ] }, "url": { - "raw": "{{base_url}}/custom/dtr_smart_app/fhir/mock_ehr_auth/token", + "raw": "{{base_url}}/custom/dtr_smart_app/mock_ehr_auth/token", "host": [ "{{base_url}}" ], "path": [ "custom", "dtr_smart_app", - "fhir", "mock_ehr_auth", "token" ] @@ -308,7 +264,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{\n \"resourceType\" : \"Parameters\",\n \"id\" : \"QuestionnairePackageInputParamsExample\",\n \"meta\" : {\n \"profile\" : [\"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-input-parameters\"]\n },\n \"parameter\" : [{\n \"name\" : \"coverage\",\n \"resource\" : {\n \"resourceType\" : \"Coverage\",\n \"id\" : \"CoverageExample\",\n \"meta\" : {\n \"profile\" : [\"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-coverage\"]\n },\n \"contained\" : [{\n \"resourceType\" : \"Organization\",\n \"id\" : \"OrgExample\",\n \"meta\" : {\n \"profile\" : [\"http://hl7.org/fhir/us/core/StructureDefinition/us-core-organization\"]\n },\n \"active\" : true,\n \"type\" : [{\n \"coding\" : [{\n \"system\" : \"http://terminology.hl7.org/CodeSystem/organization-type\",\n \"code\" : \"pay\",\n \"display\" : \"Payer\"\n }]\n }],\n \"name\" : \"Insurance Company\",\n \"telecom\" : [{\n \"system\" : \"phone\",\n \"value\" : \"860-547-5001\",\n \"use\" : \"work\"\n }],\n \"address\" : [{\n \"line\" : [\"680 Asylum Street\"],\n \"city\" : \"Hartford\",\n \"state\" : \"CT\",\n \"postalCode\" : \"06155\",\n \"country\" : \"US\"\n }]\n }],\n \"status\" : \"active\",\n \"subscriber\" : {\n \"reference\" : \"Patient/examplepatient\"\n },\n \"subscriberId\" : \"PFP123450000\",\n \"beneficiary\" : {\n \"reference\" : \"Patient/examplepatient\"\n },\n \"relationship\" : {\n \"coding\" : [{\n \"system\" : \"http://terminology.hl7.org/CodeSystem/subscriber-relationship\",\n \"code\" : \"self\",\n \"display\" : \"Self\"\n }]\n },\n \"period\" : {\n \"start\" : \"2022-01-01\",\n \"end\" : \"2023-01-01\"\n },\n \"payor\" : [{\n \"reference\" : \"#OrgExample\"\n }],\n \"class\" : [{\n \"type\" : {\n \"coding\" : [{\n \"system\" : \"http://terminology.hl7.org/CodeSystem/coverage-class\",\n \"code\" : \"plan\",\n \"display\" : \"Plan\"\n }]\n },\n \"value\" : \"Premim Family Plus\",\n \"name\" : \"Premim Family Plus Plan\"\n }]\n }\n },\n {\n \"name\" : \"order\",\n \"resource\" : {\n \"resourceType\" : \"ServiceRequest\",\n \"id\" : \"dinner-request\",\n \"meta\" : {\n \"profile\" : [\"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-servicerequest\"]\n },\n \"status\" : \"draft\",\n \"intent\" : \"original-order\",\n \"code\" : {\n \"text\" : \"Dinner\"\n },\n \"subject\" : {\n \"reference\" : \"Patient/examplepatient\"\n },\n \"occurrenceDateTime\" : \"2019-05-08T09:33:27+07:00\",\n \"authoredOn\" : \"2019-09-18T07:53:21+07:00\",\n \"requester\" : {\n \"reference\" : \"Practitioner/PractitionerExample\"\n },\n \"reasonCode\" : [{\n \"text\" : \"Hungry\"\n }]\n }\n }]\n}", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"QuestionnairePackageInputParamsExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-input-parameters\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"coverage\",\n \"resource\": {\n \"resourceType\": \"Coverage\",\n \"id\": \"CoverageExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-coverage\"\n ]\n },\n \"contained\": [\n {\n \"resourceType\": \"Organization\",\n \"id\": \"OrgExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-organization\"\n ]\n },\n \"identifier\": [\n {\n \"system\": \"http://hl7.org/fhir/sid/us-npi\",\n \"value\": \"1234567893\"\n }\n ],\n \"active\": true,\n \"type\": [\n {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/organization-type\",\n \"code\": \"pay\",\n \"display\": \"Payer\"\n }\n ]\n }\n ],\n \"name\": \"Insurance Company\",\n \"telecom\": [\n {\n \"system\": \"phone\",\n \"value\": \"860-547-5001\",\n \"use\": \"work\"\n }\n ],\n \"address\": [\n {\n \"line\": [\n \"680 Asylum Street\"\n ],\n \"city\": \"Hartford\",\n \"state\": \"CT\",\n \"postalCode\": \"06155\",\n \"country\": \"US\"\n }\n ]\n }\n ],\n \"status\": \"active\",\n \"subscriber\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"subscriberId\": \"PFP123450000\",\n \"beneficiary\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"relationship\": {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/subscriber-relationship\",\n \"code\": \"self\",\n \"display\": \"Self\"\n }\n ]\n },\n \"period\": {\n \"start\": \"2022-01-01\",\n \"end\": \"2023-01-01\"\n },\n \"payor\": [\n {\n \"reference\": \"#OrgExample\"\n }\n ],\n \"class\": [\n {\n \"type\": {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/coverage-class\",\n \"code\": \"plan\",\n \"display\": \"Plan\"\n }\n ]\n },\n \"value\": \"Premim Family Plus\",\n \"name\": \"Premim Family Plus Plan\"\n }\n ]\n }\n },\n {\n \"name\": \"order\",\n \"resource\": {\n \"resourceType\": \"ServiceRequest\",\n \"id\": \"dinner-request\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-servicerequest\"\n ]\n },\n \"status\": \"draft\",\n \"intent\": \"original-order\",\n \"code\": {\n \"text\": \"Dinner\"\n },\n \"subject\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"occurrenceDateTime\": \"2019-05-08T09:33:27+07:00\",\n \"authoredOn\": \"2019-09-18T07:53:21+07:00\",\n \"requester\": {\n \"reference\": \"Practitioner/PractitionerExample\"\n },\n \"reasonCode\": [\n {\n \"text\": \"Hungry\"\n }\n ]\n }\n }\n ]\n}", "options": { "raw": { "language": "json" @@ -401,7 +357,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{\n \"resourceType\" : \"Parameters\",\n \"id\" : \"QuestionnairePackageInputParamsExample\",\n \"meta\" : {\n \"profile\" : [\"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-input-parameters\"]\n },\n \"parameter\" : [{\n \"name\" : \"coverage\",\n \"resource\" : {\n \"resourceType\" : \"Coverage\",\n \"id\" : \"CoverageExample\",\n \"meta\" : {\n \"profile\" : [\"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-coverage\"]\n },\n \"contained\" : [{\n \"resourceType\" : \"Organization\",\n \"id\" : \"OrgExample\",\n \"meta\" : {\n \"profile\" : [\"http://hl7.org/fhir/us/core/StructureDefinition/us-core-organization\"]\n },\n \"active\" : true,\n \"type\" : [{\n \"coding\" : [{\n \"system\" : \"http://terminology.hl7.org/CodeSystem/organization-type\",\n \"code\" : \"pay\",\n \"display\" : \"Payer\"\n }]\n }],\n \"name\" : \"Insurance Company\",\n \"telecom\" : [{\n \"system\" : \"phone\",\n \"value\" : \"860-547-5001\",\n \"use\" : \"work\"\n }],\n \"address\" : [{\n \"line\" : [\"680 Asylum Street\"],\n \"city\" : \"Hartford\",\n \"state\" : \"CT\",\n \"postalCode\" : \"06155\",\n \"country\" : \"US\"\n }]\n }],\n \"status\" : \"active\",\n \"subscriber\" : {\n \"reference\" : \"Patient/examplepatient\"\n },\n \"subscriberId\" : \"PFP123450000\",\n \"beneficiary\" : {\n \"reference\" : \"Patient/examplepatient\"\n },\n \"relationship\" : {\n \"coding\" : [{\n \"system\" : \"http://terminology.hl7.org/CodeSystem/subscriber-relationship\",\n \"code\" : \"self\",\n \"display\" : \"Self\"\n }]\n },\n \"period\" : {\n \"start\" : \"2022-01-01\",\n \"end\" : \"2023-01-01\"\n },\n \"payor\" : [{\n \"reference\" : \"#OrgExample\"\n }],\n \"class\" : [{\n \"type\" : {\n \"coding\" : [{\n \"system\" : \"http://terminology.hl7.org/CodeSystem/coverage-class\",\n \"code\" : \"plan\",\n \"display\" : \"Plan\"\n }]\n },\n \"value\" : \"Premim Family Plus\",\n \"name\" : \"Premim Family Plus Plan\"\n }]\n }\n },\n {\n \"name\" : \"order\",\n \"resource\" : {\n \"resourceType\" : \"ServiceRequest\",\n \"id\" : \"ServiceRequestExample\",\n \"meta\" : {\n \"profile\" : [\"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-servicerequest\"]\n },\n \"status\" : \"draft\",\n \"intent\" : \"original-order\",\n \"code\" : {\n \"coding\" : [{\n \"system\" : \"http://loinc.org\",\n \"code\" : \"24338-6\"\n }],\n \"text\" : \"Gas panel - Blood\"\n },\n \"subject\" : {\n \"reference\" : \"Patient/examplepatient\"\n },\n \"occurrenceDateTime\" : \"2019-05-08T09:33:27+07:00\",\n \"authoredOn\" : \"2019-09-18T07:53:21+07:00\",\n \"requester\" : {\n \"reference\" : \"Practitioner/PractitionerExample\"\n },\n \"reasonCode\" : [{\n \"coding\" : [{\n \"system\" : \"http://snomed.info/sct\",\n \"code\" : \"4565000\"\n }],\n \"text\" : \"Decreased oxygen affinity\"\n }]\n }\n }]\n}", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"QuestionnairePackageInputParamsExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-input-parameters\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"coverage\",\n \"resource\": {\n \"resourceType\": \"Coverage\",\n \"id\": \"CoverageExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-coverage\"\n ]\n },\n \"contained\": [\n {\n \"resourceType\": \"Organization\",\n \"id\": \"OrgExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-organization\"\n ]\n },\n \"identifier\": [\n {\n \"system\": \"http://hl7.org/fhir/sid/us-npi\",\n \"value\": \"1234567893\"\n }\n ],\n \"active\": true,\n \"type\": [\n {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/organization-type\",\n \"code\": \"pay\",\n \"display\": \"Payer\"\n }\n ]\n }\n ],\n \"name\": \"Insurance Company\",\n \"telecom\": [\n {\n \"system\": \"phone\",\n \"value\": \"860-547-5001\",\n \"use\": \"work\"\n }\n ],\n \"address\": [\n {\n \"line\": [\n \"680 Asylum Street\"\n ],\n \"city\": \"Hartford\",\n \"state\": \"CT\",\n \"postalCode\": \"06155\",\n \"country\": \"US\"\n }\n ]\n }\n ],\n \"status\": \"active\",\n \"subscriber\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"subscriberId\": \"PFP123450000\",\n \"beneficiary\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"relationship\": {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/subscriber-relationship\",\n \"code\": \"self\",\n \"display\": \"Self\"\n }\n ]\n },\n \"period\": {\n \"start\": \"2022-01-01\",\n \"end\": \"2023-01-01\"\n },\n \"payor\": [\n {\n \"reference\": \"#OrgExample\"\n }\n ],\n \"class\": [\n {\n \"type\": {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/coverage-class\",\n \"code\": \"plan\",\n \"display\": \"Plan\"\n }\n ]\n },\n \"value\": \"Premim Family Plus\",\n \"name\": \"Premim Family Plus Plan\"\n }\n ]\n }\n },\n {\n \"name\": \"order\",\n \"resource\": {\n \"resourceType\": \"ServiceRequest\",\n \"id\": \"ServiceRequestExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-servicerequest\"\n ]\n },\n \"status\": \"draft\",\n \"intent\": \"original-order\",\n \"code\": {\n \"coding\": [\n {\n \"system\": \"http://loinc.org\",\n \"code\": \"24338-6\"\n }\n ],\n \"text\": \"Gas panel - Blood\"\n },\n \"subject\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"occurrenceDateTime\": \"2019-05-08T09:33:27+07:00\",\n \"authoredOn\": \"2019-09-18T07:53:21+07:00\",\n \"requester\": {\n \"reference\": \"Practitioner/PractitionerExample\"\n },\n \"reasonCode\": [\n {\n \"coding\": [\n {\n \"system\": \"http://snomed.info/sct\",\n \"code\": \"4565000\"\n }\n ],\n \"text\": \"Decreased oxygen affinity\"\n }\n ]\n }\n }\n ]\n}", "options": { "raw": { "language": "json" @@ -483,6 +439,356 @@ "response": [] } ] + }, + { + "name": "Adaptive Dinner", + "item": [ + { + "name": "Questionnaire Package for Dinner", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"QuestionnairePackageInputParamsExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-input-parameters\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"coverage\",\n \"resource\": {\n \"resourceType\": \"Coverage\",\n \"id\": \"CoverageExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-coverage\"\n ]\n },\n \"contained\": [\n {\n \"resourceType\": \"Organization\",\n \"id\": \"OrgExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-organization\"\n ]\n },\n \"identifier\": [\n {\n \"system\": \"http://hl7.org/fhir/sid/us-npi\",\n \"value\": \"1234567893\"\n }\n ],\n \"active\": true,\n \"type\": [\n {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/organization-type\",\n \"code\": \"pay\",\n \"display\": \"Payer\"\n }\n ]\n }\n ],\n \"name\": \"Insurance Company\",\n \"telecom\": [\n {\n \"system\": \"phone\",\n \"value\": \"860-547-5001\",\n \"use\": \"work\"\n }\n ],\n \"address\": [\n {\n \"line\": [\n \"680 Asylum Street\"\n ],\n \"city\": \"Hartford\",\n \"state\": \"CT\",\n \"postalCode\": \"06155\",\n \"country\": \"US\"\n }\n ]\n }\n ],\n \"status\": \"active\",\n \"subscriber\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"subscriberId\": \"PFP123450000\",\n \"beneficiary\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"relationship\": {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/subscriber-relationship\",\n \"code\": \"self\",\n \"display\": \"Self\"\n }\n ]\n },\n \"period\": {\n \"start\": \"2022-01-01\",\n \"end\": \"2023-01-01\"\n },\n \"payor\": [\n {\n \"reference\": \"#OrgExample\"\n }\n ],\n \"class\": [\n {\n \"type\": {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/coverage-class\",\n \"code\": \"plan\",\n \"display\": \"Plan\"\n }\n ]\n },\n \"value\": \"Premim Family Plus\",\n \"name\": \"Premim Family Plus Plan\"\n }\n ]\n }\n },\n {\n \"name\": \"order\",\n \"resource\": {\n \"resourceType\": \"ServiceRequest\",\n \"id\": \"dinner-request\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-servicerequest\"\n ]\n },\n \"status\": \"draft\",\n \"intent\": \"original-order\",\n \"code\": {\n \"text\": \"Dinner\"\n },\n \"subject\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"occurrenceDateTime\": \"2019-05-08T09:33:27+07:00\",\n \"authoredOn\": \"2019-09-18T07:53:21+07:00\",\n \"requester\": {\n \"reference\": \"Practitioner/PractitionerExample\"\n },\n \"reasonCode\": [\n {\n \"text\": \"Hungry\"\n }\n ]\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{base_url}}/custom/dtr_smart_app/fhir/Questionnaire/$questionnaire-package", + "host": [ + "{{base_url}}" + ], + "path": [ + "custom", + "dtr_smart_app", + "fhir", + "Questionnaire", + "$questionnaire-package" + ] + } + }, + "response": [ + { + "name": "Example Response", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"QuestionnairePackageInputParamsExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-input-parameters\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"coverage\",\n \"resource\": {\n \"resourceType\": \"Coverage\",\n \"id\": \"CoverageExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-coverage\"\n ]\n },\n \"contained\": [\n {\n \"resourceType\": \"Organization\",\n \"id\": \"OrgExample\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/core/StructureDefinition/us-core-organization\"\n ]\n },\n \"active\": true,\n \"type\": [\n {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/organization-type\",\n \"code\": \"pay\",\n \"display\": \"Payer\"\n }\n ]\n }\n ],\n \"name\": \"Insurance Company\",\n \"telecom\": [\n {\n \"system\": \"phone\",\n \"value\": \"860-547-5001\",\n \"use\": \"work\"\n }\n ],\n \"address\": [\n {\n \"line\": [\n \"680 Asylum Street\"\n ],\n \"city\": \"Hartford\",\n \"state\": \"CT\",\n \"postalCode\": \"06155\",\n \"country\": \"US\"\n }\n ]\n }\n ],\n \"status\": \"active\",\n \"subscriber\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"subscriberId\": \"PFP123450000\",\n \"beneficiary\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"relationship\": {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/subscriber-relationship\",\n \"code\": \"self\",\n \"display\": \"Self\"\n }\n ]\n },\n \"period\": {\n \"start\": \"2022-01-01\",\n \"end\": \"2023-01-01\"\n },\n \"payor\": [\n {\n \"reference\": \"#OrgExample\"\n }\n ],\n \"class\": [\n {\n \"type\": {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/coverage-class\",\n \"code\": \"plan\",\n \"display\": \"Plan\"\n }\n ]\n },\n \"value\": \"Premim Family Plus\",\n \"name\": \"Premim Family Plus Plan\"\n }\n ]\n }\n },\n {\n \"name\": \"order\",\n \"resource\": {\n \"resourceType\": \"ServiceRequest\",\n \"id\": \"dinner-request\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-servicerequest\"\n ]\n },\n \"status\": \"draft\",\n \"intent\": \"original-order\",\n \"code\": {\n \"text\": \"Dinner\"\n },\n \"subject\": {\n \"reference\": \"Patient/examplepatient\"\n },\n \"occurrenceDateTime\": \"2019-05-08T09:33:27+07:00\",\n \"authoredOn\": \"2019-09-18T07:53:21+07:00\",\n \"requester\": {\n \"reference\": \"Practitioner/PractitionerExample\"\n },\n \"reasonCode\": [\n {\n \"text\": \"Hungry\"\n }\n ]\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{local_base_url}}/custom/dtr_full_ehr/fhir/Questionnaire/$questionnaire-package", + "host": [ + "{{local_base_url}}" + ], + "path": [ + "custom", + "dtr_full_ehr", + "fhir", + "Questionnaire", + "$questionnaire-package" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Content-Length", + "value": "96736" + } + ], + "cookie": [], + "body": "{\n \"entry\": [\n {\n \"resource\": {\n \"id\": \"DinnerOrderAdaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt-search\",\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-adapt\"\n ]\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"url\": \"urn:inferno:dtr-test-kit:dinner-order-adaptive\",\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\",\n \"resourceType\": \"Questionnaire\"\n }\n },\n {\n \"resource\": {\n \"id\": \"DTRTest\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/computable-library-cqfm\"\n ]\n },\n \"language\": \"en\",\n \"text\": {\n \"status\": \"extensions\",\n \"div\": \"
\\n \\n\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n
Title: DTRTest
Id: DTRTest
Version: 0.3.000
Url: https://madie.cms.gov/Library/DTRTest
\\n \\n \\n official\\n \\n \\n \\n \\n

\\n 66399d1c633fd342e6fbc547\\n

\\n \\n
Name: DTRTest
Status: active
Experimental: true
Type: \\n \\n \\n \\n

\\n system: http://terminology.hl7.org/CodeSystem/library-type\\n

\\n \\n \\n

\\n code: logic-library\\n

\\n \\n \\n \\n \\n \\n
Date: 2024-05-07T03:17:27+00:00
Publisher: MITRE
Description: Library for use in DTR IG Testing
Data Requirements:\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
TypeProfileMSCode Filter
Encounter\\n \\n
\\n
\\n \\n \\n \\n
Content: text/cql
[108, 105, 98, 114, 97, 114, 121, 32, 68, 84, 82, 84, 101, 115, 116, 32, 118, 101, 114, 115, 105, 111, 110, 32, 39, 48, 46, 51, 46, 48, 48, 48, 39, 10, 117, 115, 105, 110, 103, 32, 70, 72, 73, 82, 32, 118, 101, 114, 115, 105, 111, 110, 32, 39, 52, 46, 48, 46, 49, 39, 10, 10, 99, 111, 110, 116, 101, 120, 116, 32, 80, 97, 116, 105, 101, 110, 116, 10, 10, 100, 101, 102, 105, 110, 101, 32, 34, 69, 110, 99, 111, 117, 110, 116, 101, 114, 115, 34, 58, 32, 10, 32, 32, 91, 69, 110, 99, 111, 117, 110, 116, 101, 114, 93, 10, 32, 32, 10, 100, 101, 102, 105, 110, 101, 32, 34, 79, 110, 101, 69, 110, 99, 111, 117, 110, 116, 101, 114, 34, 58, 10, 9, 34, 69, 110, 99, 111, 117, 110, 116, 101, 114, 115, 34, 91, 48, 93, 10, 32, 32, 10, 32, 32, 10, 100, 101, 102, 105, 110, 101, 32, 34, 70, 105, 114, 115, 116, 76, 111, 99, 97, 116, 105, 111, 110, 68, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 34, 58, 10, 9, 34, 79, 110, 101, 69, 110, 99, 111, 117, 110, 116, 101, 114, 34, 46, 108, 111, 99, 97, 116, 105, 111, 110, 91, 48, 93, 46, 108, 111, 99, 97, 116, 105, 111, 110, 46, 100, 105, 115, 112, 108, 97, 121, 46, 118, 97, 108, 117, 101, 10, 9, 10, 100, 101, 102, 105, 110, 101, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 71, 101, 116, 77, 105, 100, 100, 108, 101, 73, 110, 105, 116, 105, 97, 108, 115, 40, 110, 97, 109, 101, 32, 70, 72, 73, 82, 46, 72, 117, 109, 97, 110, 78, 97, 109, 101, 41, 58, 10, 32, 32, 83, 117, 98, 115, 116, 114, 105, 110, 103, 40, 67, 111, 109, 98, 105, 110, 101, 40, 40, 110, 97, 109, 101, 46, 103, 105, 118, 101, 110, 32, 103, 105, 118, 101, 110, 32, 114, 101, 116, 117, 114, 110, 32, 83, 117, 98, 115, 116, 114, 105, 110, 103, 40, 103, 105, 118, 101, 110, 46, 118, 97, 108, 117, 101, 44, 48, 44, 49, 41, 41, 44, 39, 44, 32, 39, 41, 44, 51, 41, 10, 10, 47, 47, 32, 71, 114, 97, 98, 32, 112, 97, 116, 105, 101, 110, 116, 32, 70, 72, 73, 82, 32, 72, 117, 109, 97, 110, 78, 97, 109, 101, 10, 100, 101, 102, 105, 110, 101, 32, 78, 97, 109, 101, 58, 32, 115, 105, 110, 103, 108, 101, 116, 111, 110, 32, 102, 114, 111, 109, 32, 40, 80, 97, 116, 105, 101, 110, 116, 46, 110, 97, 109, 101, 32, 110, 97, 109, 101, 32, 119, 104, 101, 114, 101, 32, 110, 97, 109, 101, 46, 117, 115, 101, 46, 118, 97, 108, 117, 101, 32, 61, 32, 39, 111, 102, 102, 105, 99, 105, 97, 108, 39, 41, 10, 10, 47, 47, 32, 69, 120, 116, 114, 97, 99, 116, 32, 117, 115, 101, 102, 117, 108, 32, 110, 97, 109, 101, 32, 101, 108, 101, 109, 101, 110, 116, 115, 10, 100, 101, 102, 105, 110, 101, 32, 76, 97, 115, 116, 78, 97, 109, 101, 58, 32, 34, 78, 97, 109, 101, 34, 46, 102, 97, 109, 105, 108, 121, 46, 118, 97, 108, 117, 101, 10, 100, 101, 102, 105, 110, 101, 32, 77, 105, 100, 100, 108, 101, 73, 110, 105, 116, 105, 97, 108, 58, 32, 71, 101, 116, 77, 105, 100, 100, 108, 101, 73, 110, 105, 116, 105, 97, 108, 115, 40, 34, 78, 97, 109, 101, 34, 41, 10, 100, 101, 102, 105, 110, 101, 32, 70, 105, 114, 115, 116, 78, 97, 109, 101, 58, 32, 34, 78, 97, 109, 101, 34, 46, 103, 105, 118, 101, 110, 91, 48, 93, 46, 118, 97, 108, 117, 101]
\\n
\\n
\"\n },\n \"url\": \"https://madie.cms.gov/Library/DTRTest\",\n \"identifier\": [\n {\n \"use\": \"official\",\n \"system\": \"https://madie.cms.gov/login\",\n \"value\": \"66399d1c633fd342e6fbc547\"\n }\n ],\n \"version\": \"0.3.000\",\n \"name\": \"DTRTest\",\n \"title\": \"DTRTest\",\n \"status\": \"active\",\n \"experimental\": true,\n \"type\": {\n \"coding\": [\n {\n \"system\": \"http://terminology.hl7.org/CodeSystem/library-type\",\n \"code\": \"logic-library\"\n }\n ]\n },\n \"date\": \"2024-05-07T03:17:27+00:00\",\n \"publisher\": \"MITRE\",\n \"description\": \"Library for use in DTR IG Testing\",\n \"dataRequirement\": [\n {\n \"type\": \"Encounter\"\n }\n ],\n \"content\": [\n {\n \"contentType\": \"text/cql\",\n \"data\": \"bGlicmFyeSBEVFJUZXN0IHZlcnNpb24gJzAuMy4wMDAnCnVzaW5nIEZISVIgdmVyc2lvbiAnNC4wLjEnCgpjb250ZXh0IFBhdGllbnQKCmRlZmluZSAiRW5jb3VudGVycyI6IAogIFtFbmNvdW50ZXJdCiAgCmRlZmluZSAiT25lRW5jb3VudGVyIjoKCSJFbmNvdW50ZXJzIlswXQogIAogIApkZWZpbmUgIkZpcnN0TG9jYXRpb25EZXNjcmlwdGlvbiI6CgkiT25lRW5jb3VudGVyIi5sb2NhdGlvblswXS5sb2NhdGlvbi5kaXNwbGF5LnZhbHVlCgkKZGVmaW5lIGZ1bmN0aW9uIEdldE1pZGRsZUluaXRpYWxzKG5hbWUgRkhJUi5IdW1hbk5hbWUpOgogIFN1YnN0cmluZyhDb21iaW5lKChuYW1lLmdpdmVuIGdpdmVuIHJldHVybiBTdWJzdHJpbmcoZ2l2ZW4udmFsdWUsMCwxKSksJywgJyksMykKCi8vIEdyYWIgcGF0aWVudCBGSElSIEh1bWFuTmFtZQpkZWZpbmUgTmFtZTogc2luZ2xldG9uIGZyb20gKFBhdGllbnQubmFtZSBuYW1lIHdoZXJlIG5hbWUudXNlLnZhbHVlID0gJ29mZmljaWFsJykKCi8vIEV4dHJhY3QgdXNlZnVsIG5hbWUgZWxlbWVudHMKZGVmaW5lIExhc3ROYW1lOiAiTmFtZSIuZmFtaWx5LnZhbHVlCmRlZmluZSBNaWRkbGVJbml0aWFsOiBHZXRNaWRkbGVJbml0aWFscygiTmFtZSIpCmRlZmluZSBGaXJzdE5hbWU6ICJOYW1lIi5naXZlblswXS52YWx1ZQ==\"\n },\n {\n \"contentType\": \"application/elm+xml\",\n \"data\": \"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSI+CiAgIDxhbm5vdGF0aW9uIHRyYW5zbGF0b3JWZXJzaW9uPSIzLjMuMiIgdHJhbnNsYXRvck9wdGlvbnM9IkVuYWJsZUFubm90YXRpb25zLEVuYWJsZUxvY2F0b3JzLEVuYWJsZVJlc3VsdFR5cGVzLEVuYWJsZURldGFpbGVkRXJyb3JzLERpc2FibGVMaXN0RGVtb3Rpb24sRGlzYWJsZUxpc3RQcm9tb3Rpb24iIHNpZ25hdHVyZUxldmVsPSJOb25lIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUluZm8iLz4KICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgIDxhOnMgcj0iNTMiPgogICAgICAgICA8YTpzPmxpYnJhcnkgRFRSVGVzdCB2ZXJzaW9uICcwLjMuMDAwJzwvYTpzPgogICAgICA8L2E6cz4KICAgPC9hbm5vdGF0aW9uPgogICA8aWRlbnRpZmllciBpZD0iRFRSVGVzdCIgdmVyc2lvbj0iMC4zLjAwMCIvPgogICA8c2NoZW1hSWRlbnRpZmllciBpZD0idXJuOmhsNy1vcmc6ZWxtIiB2ZXJzaW9uPSJyMSIvPgogICA8dXNpbmdzPgogICAgICA8ZGVmIGxvY2FsSWRlbnRpZmllcj0iU3lzdGVtIiB1cmk9InVybjpobDctb3JnOmVsbS10eXBlczpyMSIvPgogICAgICA8ZGVmIGxvY2FsSWQ9IjEiIGxvY2F0b3I9IjI6MS0yOjI2IiBsb2NhbElkZW50aWZpZXI9IkZISVIiIHVyaT0iaHR0cDovL2hsNy5vcmcvZmhpciIgdmVyc2lvbj0iNC4wLjEiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIxIj4KICAgICAgICAgICAgICAgPGE6cz51c2luZyA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgPGE6cz5GSElSPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzPiB2ZXJzaW9uICc0LjAuMSc8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgPC9kZWY+CiAgIDwvdXNpbmdzPgogICA8Y29udGV4dHM+CiAgICAgIDxkZWYgbG9jYXRvcj0iNDoxLTQ6MTUiIG5hbWU9IlBhdGllbnQiLz4KICAgPC9jb250ZXh0cz4KICAgPHN0YXRlbWVudHM+CiAgICAgIDxkZWYgbG9jYXRvcj0iNDoxLTQ6MTUiIG5hbWU9IlBhdGllbnQiIGNvbnRleHQ9IlBhdGllbnQiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iU2luZ2xldG9uRnJvbSI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2F0b3I9IjQ6MS00OjE1IiBkYXRhVHlwZT0iZmhpcjpQYXRpZW50IiB0ZW1wbGF0ZUlkPSJodHRwOi8vaGw3Lm9yZy9maGlyL1N0cnVjdHVyZURlZmluaXRpb24vUGF0aWVudCIgeHNpOnR5cGU9IlJldHJpZXZlIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMyIgbG9jYXRvcj0iNjoxLTc6MTMiIG5hbWU9IkVuY291bnRlcnMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIzIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7RW5jb3VudGVycyZxdW90OzogCiAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMiI+CiAgICAgICAgICAgICAgICAgIDxhOnM+W0VuY291bnRlcl08L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxyZXN1bHRUeXBlU3BlY2lmaWVyIHhzaTp0eXBlPSJMaXN0VHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgIDxlbGVtZW50VHlwZSBuYW1lPSJmaGlyOkVuY291bnRlciIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L3Jlc3VsdFR5cGVTcGVjaWZpZXI+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjIiIGxvY2F0b3I9Ijc6My03OjEzIiBkYXRhVHlwZT0iZmhpcjpFbmNvdW50ZXIiIHRlbXBsYXRlSWQ9Imh0dHA6Ly9obDcub3JnL2ZoaXIvU3RydWN0dXJlRGVmaW5pdGlvbi9FbmNvdW50ZXIiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgIDxyZXN1bHRUeXBlU3BlY2lmaWVyIHhzaTp0eXBlPSJMaXN0VHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgICAgIDxlbGVtZW50VHlwZSBuYW1lPSJmaGlyOkVuY291bnRlciIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICA8L3Jlc3VsdFR5cGVTcGVjaWZpZXI+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iNyIgbG9jYXRvcj0iOToxLTEwOjE2IiByZXN1bHRUeXBlTmFtZT0iZmhpcjpFbmNvdW50ZXIiIG5hbWU9Ik9uZUVuY291bnRlciIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjciPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtPbmVFbmNvdW50ZXImcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI2Ij4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI0Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtFbmNvdW50ZXJzJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjUiPlswXTwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNiIgbG9jYXRvcj0iMTA6Mi0xMDoxNiIgcmVzdWx0VHlwZU5hbWU9ImZoaXI6RW5jb3VudGVyIiB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQiIGxvY2F0b3I9IjEwOjItMTA6MTMiIG5hbWU9IkVuY291bnRlcnMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIj4KICAgICAgICAgICAgICAgPHJlc3VsdFR5cGVTcGVjaWZpZXIgeHNpOnR5cGU9Ikxpc3RUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnRUeXBlIG5hbWU9ImZoaXI6RW5jb3VudGVyIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgIDwvcmVzdWx0VHlwZVNwZWNpZmllcj4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1IiBsb2NhdG9yPSIxMDoxNSIgcmVzdWx0VHlwZU5hbWU9InQ6SW50ZWdlciIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjE1IiBsb2NhdG9yPSIxMzoxLTE0OjUwIiByZXN1bHRUeXBlTmFtZT0idDpTdHJpbmciIG5hbWU9IkZpcnN0TG9jYXRpb25EZXNjcmlwdGlvbiIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjE1Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7Rmlyc3RMb2NhdGlvbkRlc2NyaXB0aW9uJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMTQiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O09uZUVuY291bnRlciZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+bG9jYXRpb248L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwIj5bMF08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5sb2NhdGlvbjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5kaXNwbGF5PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTQiIGxvY2F0b3I9IjE0OjItMTQ6NTAiIHJlc3VsdFR5cGVOYW1lPSJ0OlN0cmluZyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTMiIGxvY2F0b3I9IjE0OjItMTQ6NDQiIHJlc3VsdFR5cGVOYW1lPSJmaGlyOnN0cmluZyIgcGF0aD0iZGlzcGxheSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMiIgbG9jYXRvcj0iMTQ6Mi0xNDozNiIgcmVzdWx0VHlwZU5hbWU9ImZoaXI6UmVmZXJlbmNlIiBwYXRoPSJsb2NhdGlvbiIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMSIgbG9jYXRvcj0iMTQ6Mi0xNDoyNyIgcmVzdWx0VHlwZU5hbWU9ImZoaXI6RW5jb3VudGVyLkxvY2F0aW9uIiB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjkiIGxvY2F0b3I9IjE0OjItMTQ6MjQiIHBhdGg9ImxvY2F0aW9uIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8cmVzdWx0VHlwZVNwZWNpZmllciB4c2k6dHlwZT0iTGlzdFR5cGVTcGVjaWZpZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudFR5cGUgbmFtZT0iZmhpcjpFbmNvdW50ZXIuTG9jYXRpb24iIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9yZXN1bHRUeXBlU3BlY2lmaWVyPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjgiIGxvY2F0b3I9IjE0OjItMTQ6MTUiIHJlc3VsdFR5cGVOYW1lPSJmaGlyOkVuY291bnRlciIgbmFtZT0iT25lRW5jb3VudGVyIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEwIiBsb2NhdG9yPSIxNDoyNiIgcmVzdWx0VHlwZU5hbWU9InQ6SW50ZWdlciIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjMwIiBsb2NhdG9yPSIxNjoxLTE3OjgxIiByZXN1bHRUeXBlTmFtZT0idDpTdHJpbmciIG5hbWU9IkdldE1pZGRsZUluaXRpYWxzIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIzMCI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lIGZ1bmN0aW9uIEdldE1pZGRsZUluaXRpYWxzKG5hbWUgRkhJUi5IdW1hbk5hbWUpOgogIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjI5Ij4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+U3Vic3RyaW5nKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Db21iaW5lKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+bmFtZS5naXZlbjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGdpdmVuPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnJldHVybiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+U3Vic3RyaW5nKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Z2l2ZW48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjEiPiwwLDEpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4sPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPicsICc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOCI+LDMpPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjkiIGxvY2F0b3I9IjE3OjMtMTc6ODEiIHJlc3VsdFR5cGVOYW1lPSJ0OlN0cmluZyIgeHNpOnR5cGU9IlN1YnN0cmluZyI+CiAgICAgICAgICAgIDxzdHJpbmdUb1N1YiBsb2NhbElkPSIyNyIgbG9jYXRvcj0iMTc6MTMtMTc6NzgiIHJlc3VsdFR5cGVOYW1lPSJ0OlN0cmluZyIgeHNpOnR5cGU9IkNvbWJpbmUiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI1IiBsb2NhdG9yPSIxNzoyMS0xNzo3MiIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgPHJlc3VsdFR5cGVTcGVjaWZpZXIgeHNpOnR5cGU9Ikxpc3RUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnRUeXBlIG5hbWU9InQ6U3RyaW5nIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgIDwvcmVzdWx0VHlwZVNwZWNpZmllcj4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxOCIgbG9jYXRvcj0iMTc6MjItMTc6MzciIGFsaWFzPSJnaXZlbiI+CiAgICAgICAgICAgICAgICAgICAgIDxyZXN1bHRUeXBlU3BlY2lmaWVyIHhzaTp0eXBlPSJMaXN0VHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50VHlwZSBuYW1lPSJmaGlyOnN0cmluZyIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICA8L3Jlc3VsdFR5cGVTcGVjaWZpZXI+CiAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjE3IiBsb2NhdG9yPSIxNzoyMi0xNzozMSIgcGF0aD0iZ2l2ZW4iIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZXN1bHRUeXBlU3BlY2lmaWVyIHhzaTp0eXBlPSJMaXN0VHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50VHlwZSBuYW1lPSJmaGlyOnN0cmluZyIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3Jlc3VsdFR5cGVTcGVjaWZpZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0ibmFtZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPHJldHVybiBsb2NhbElkPSIyNCIgbG9jYXRvcj0iMTc6MzktMTc6NzEiPgogICAgICAgICAgICAgICAgICAgICA8cmVzdWx0VHlwZVNwZWNpZmllciB4c2k6dHlwZT0iTGlzdFR5cGVTcGVjaWZpZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudFR5cGUgbmFtZT0idDpTdHJpbmciIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgPC9yZXN1bHRUeXBlU3BlY2lmaWVyPgogICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyMyIgbG9jYXRvcj0iMTc6NDYtMTc6NzEiIHJlc3VsdFR5cGVOYW1lPSJ0OlN0cmluZyIgeHNpOnR5cGU9IlN1YnN0cmluZyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmdUb1N1YiBsb2NhbElkPSIyMCIgbG9jYXRvcj0iMTc6NTYtMTc6NjYiIHJlc3VsdFR5cGVOYW1lPSJ0OlN0cmluZyIgcGF0aD0idmFsdWUiIHNjb3BlPSJnaXZlbiIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdGFydEluZGV4IGxvY2FsSWQ9IjIxIiBsb2NhdG9yPSIxNzo2OCIgcmVzdWx0VHlwZU5hbWU9InQ6SW50ZWdlciIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8bGVuZ3RoIGxvY2FsSWQ9IjIyIiBsb2NhdG9yPSIxNzo3MCIgcmVzdWx0VHlwZU5hbWU9InQ6SW50ZWdlciIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIxIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgIDwvcmV0dXJuPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHNlcGFyYXRvciBsb2NhbElkPSIyNiIgbG9jYXRvcj0iMTc6NzQtMTc6NzciIHJlc3VsdFR5cGVOYW1lPSJ0OlN0cmluZyIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IiwgIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L3N0cmluZ1RvU3ViPgogICAgICAgICAgICA8c3RhcnRJbmRleCBsb2NhbElkPSIyOCIgbG9jYXRvcj0iMTc6ODAiIHJlc3VsdFR5cGVOYW1lPSJ0OkludGVnZXIiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJuYW1lIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjE2IiBsb2NhdG9yPSIxNjo0MC0xNjo1MyIgcmVzdWx0VHlwZU5hbWU9ImZoaXI6SHVtYW5OYW1lIiBuYW1lPSJmaGlyOkh1bWFuTmFtZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjQwIiBsb2NhdG9yPSIyMDoxLTIwOjgxIiByZXN1bHRUeXBlTmFtZT0iZmhpcjpIdW1hbk5hbWUiIG5hbWU9Ik5hbWUiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI0MCI+CiAgICAgICAgICAgICAgIDxhOnM+Ly8gR3JhYiBwYXRpZW50IEZISVIgSHVtYW5OYW1lCmRlZmluZSBOYW1lOiA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIzOSI+CiAgICAgICAgICAgICAgICAgIDxhOnM+c2luZ2xldG9uIGZyb20gPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzgiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzOCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QYXRpZW50Lm5hbWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBuYW1lPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5uYW1lPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dXNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J29mZmljaWFsJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMzkiIGxvY2F0b3I9IjIwOjE0LTIwOjgxIiByZXN1bHRUeXBlTmFtZT0iZmhpcjpIdW1hbk5hbWUiIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzgiIGxvY2F0b3I9IjIwOjI5LTIwOjgxIiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICA8cmVzdWx0VHlwZVNwZWNpZmllciB4c2k6dHlwZT0iTGlzdFR5cGVTcGVjaWZpZXIiPgogICAgICAgICAgICAgICAgICA8ZWxlbWVudFR5cGUgbmFtZT0iZmhpcjpIdW1hbk5hbWUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgPC9yZXN1bHRUeXBlU3BlY2lmaWVyPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjMyIiBsb2NhdG9yPSIyMDozMC0yMDo0NiIgYWxpYXM9Im5hbWUiPgogICAgICAgICAgICAgICAgICA8cmVzdWx0VHlwZVNwZWNpZmllciB4c2k6dHlwZT0iTGlzdFR5cGVTcGVjaWZpZXIiPgogICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudFR5cGUgbmFtZT0iZmhpcjpIdW1hbk5hbWUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgPC9yZXN1bHRUeXBlU3BlY2lmaWVyPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzMSIgbG9jYXRvcj0iMjA6MzAtMjA6NDEiIHBhdGg9Im5hbWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxyZXN1bHRUeXBlU3BlY2lmaWVyIHhzaTp0eXBlPSJMaXN0VHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50VHlwZSBuYW1lPSJmaGlyOkh1bWFuTmFtZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICA8L3Jlc3VsdFR5cGVTcGVjaWZpZXI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iUGF0aWVudCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjM3IiBsb2NhdG9yPSIyMDo0OC0yMDo4MCIgcmVzdWx0VHlwZU5hbWU9InQ6Qm9vbGVhbiIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzUiIGxvY2F0b3I9IjIwOjU0LTIwOjY3IiByZXN1bHRUeXBlTmFtZT0idDpTdHJpbmciIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjM0IiBsb2NhdG9yPSIyMDo1NC0yMDo2MSIgcmVzdWx0VHlwZU5hbWU9ImZoaXI6TmFtZVVzZSIgcGF0aD0idXNlIiBzY29wZT0ibmFtZSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzYiIGxvY2F0b3I9IjIwOjcxLTIwOjgwIiByZXN1bHRUeXBlTmFtZT0idDpTdHJpbmciIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJvZmZpY2lhbCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjQ0IiBsb2NhdG9yPSIyMzoxLTIzOjM2IiByZXN1bHRUeXBlTmFtZT0idDpTdHJpbmciIG5hbWU9Ikxhc3ROYW1lIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iNDQiPgogICAgICAgICAgICAgICA8YTpzPi8vIEV4dHJhY3QgdXNlZnVsIG5hbWUgZWxlbWVudHMKZGVmaW5lIExhc3ROYW1lOiA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI0MyI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDIiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQxIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtOYW1lJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZmFtaWx5PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDMiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNDMiIGxvY2F0b3I9IjIzOjE4LTIzOjM2IiByZXN1bHRUeXBlTmFtZT0idDpTdHJpbmciIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjQyIiBsb2NhdG9yPSIyMzoxOC0yMzozMCIgcmVzdWx0VHlwZU5hbWU9ImZoaXI6c3RyaW5nIiBwYXRoPSJmYW1pbHkiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNDEiIGxvY2F0b3I9IjIzOjE4LTIzOjIzIiByZXN1bHRUeXBlTmFtZT0iZmhpcjpIdW1hbk5hbWUiIG5hbWU9Ik5hbWUiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjQ3IiBsb2NhdG9yPSIyNDoxLTI0OjQ3IiByZXN1bHRUeXBlTmFtZT0idDpTdHJpbmciIG5hbWU9Ik1pZGRsZUluaXRpYWwiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI0NyI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lIE1pZGRsZUluaXRpYWw6IDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjQ2Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5HZXRNaWRkbGVJbml0aWFscyg8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TmFtZSZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI0NiIgbG9jYXRvcj0iMjQ6MjMtMjQ6NDciIHJlc3VsdFR5cGVOYW1lPSJ0OlN0cmluZyIgbmFtZT0iR2V0TWlkZGxlSW5pdGlhbHMiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ1IiBsb2NhdG9yPSIyNDo0MS0yNDo0NiIgcmVzdWx0VHlwZU5hbWU9ImZoaXI6SHVtYW5OYW1lIiBuYW1lPSJOYW1lIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjUzIiBsb2NhdG9yPSIyNToxLTI1OjM5IiByZXN1bHRUeXBlTmFtZT0idDpTdHJpbmciIG5hbWU9IkZpcnN0TmFtZSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjUzIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgRmlyc3ROYW1lOiA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI1MiI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTEiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TmFtZSZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmdpdmVuPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MCI+WzBdPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MiI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI1MiIgbG9jYXRvcj0iMjU6MTktMjU6MzkiIHJlc3VsdFR5cGVOYW1lPSJ0OlN0cmluZyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNTEiIGxvY2F0b3I9IjI1OjE5LTI1OjMzIiByZXN1bHRUeXBlTmFtZT0iZmhpcjpzdHJpbmciIHhzaTp0eXBlPSJJbmRleGVyIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDkiIGxvY2F0b3I9IjI1OjE5LTI1OjMwIiBwYXRoPSJnaXZlbiIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHJlc3VsdFR5cGVTcGVjaWZpZXIgeHNpOnR5cGU9Ikxpc3RUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnRUeXBlIG5hbWU9ImZoaXI6c3RyaW5nIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgIDwvcmVzdWx0VHlwZVNwZWNpZmllcj4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI0OCIgbG9jYXRvcj0iMjU6MTktMjU6MjQiIHJlc3VsdFR5cGVOYW1lPSJmaGlyOkh1bWFuTmFtZSIgbmFtZT0iTmFtZSIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MCIgbG9jYXRvcj0iMjU6MzIiIHJlc3VsdFR5cGVOYW1lPSJ0OkludGVnZXIiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgIDwvc3RhdGVtZW50cz4KPC9saWJyYXJ5Pgo=\"\n },\n {\n \"contentType\": \"application/elm+json\",\n \"data\": \"ewogICJsaWJyYXJ5IjogewogICAgImFubm90YXRpb24iOiBbCiAgICAgIHsKICAgICAgICAidHJhbnNsYXRvclZlcnNpb24iOiAiMy4zLjIiCiAgICAgIH0KICAgIF0sCiAgICAiaWRlbnRpZmllciI6IHsKICAgICAgImlkIjogIkRUUlRlc3QiLAogICAgICAidmVyc2lvbiI6ICIwLjMuMDAwIgogICAgfSwKICAgICJzY2hlbWFJZGVudGlmaWVyIjogewogICAgICAiaWQiOiAidXJuOmhsNy1vcmc6ZWxtIiwKICAgICAgInZlcnNpb24iOiAicjEiCiAgICB9LAogICAgInVzaW5ncyI6IHsKICAgICAgImRlZiI6IFsKICAgICAgICB7CiAgICAgICAgICAibG9jYWxJZGVudGlmaWVyIjogIlN5c3RlbSIsCiAgICAgICAgICAidXJpIjogInVybjpobDctb3JnOmVsbS10eXBlczpyMSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJsb2NhbElkIjogIjEiLAogICAgICAgICAgImxvY2F0b3IiOiAiMjoxLTI6MjYiLAogICAgICAgICAgImxvY2FsSWRlbnRpZmllciI6ICJGSElSIiwKICAgICAgICAgICJ1cmkiOiAiaHR0cDovL2hsNy5vcmcvZmhpciIsCiAgICAgICAgICAidmVyc2lvbiI6ICI0LjAuMSIsCiAgICAgICAgICAiYW5ub3RhdGlvbiI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJ0eXBlIjogIkFubm90YXRpb24iLAogICAgICAgICAgICAgICJzIjogewogICAgICAgICAgICAgICAgInIiOiAiMSIsCiAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICAgICAgICAgInVzaW5nICIKICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICJGSElSIgogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgIiB2ZXJzaW9uICc0LjAuMSciCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgImNvbnRleHRzIjogewogICAgICAiZGVmIjogWwogICAgICAgIHsKICAgICAgICAgICJsb2NhdG9yIjogIjQ6MS00OjE1IiwKICAgICAgICAgICJuYW1lIjogIlBhdGllbnQiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgInN0YXRlbWVudHMiOiB7CiAgICAgICJkZWYiOiBbCiAgICAgICAgewogICAgICAgICAgImxvY2F0b3IiOiAiNDoxLTQ6MTUiLAogICAgICAgICAgIm5hbWUiOiAiUGF0aWVudCIsCiAgICAgICAgICAiY29udGV4dCI6ICJQYXRpZW50IiwKICAgICAgICAgICJleHByZXNzaW9uIjogewogICAgICAgICAgICAidHlwZSI6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgIm9wZXJhbmQiOiB7CiAgICAgICAgICAgICAgImxvY2F0b3IiOiAiNDoxLTQ6MTUiLAogICAgICAgICAgICAgICJkYXRhVHlwZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QYXRpZW50IiwKICAgICAgICAgICAgICAidHlwZSI6ICJSZXRyaWV2ZSIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImxvY2FsSWQiOiAiMyIsCiAgICAgICAgICAibG9jYXRvciI6ICI2OjEtNzoxMyIsCiAgICAgICAgICAibmFtZSI6ICJFbmNvdW50ZXJzIiwKICAgICAgICAgICJjb250ZXh0IjogIlBhdGllbnQiLAogICAgICAgICAgImFjY2Vzc0xldmVsIjogIlB1YmxpYyIsCiAgICAgICAgICAiYW5ub3RhdGlvbiI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJ0eXBlIjogIkFubm90YXRpb24iLAogICAgICAgICAgICAgICJzIjogewogICAgICAgICAgICAgICAgInIiOiAiMyIsCiAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICAgICAgICAgImRlZmluZSAiLAogICAgICAgICAgICAgICAgICAgICAgIlwiRW5jb3VudGVyc1wiIiwKICAgICAgICAgICAgICAgICAgICAgICI6IFxuICAiCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInIiOiAiMiIsCiAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAiWyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkVuY291bnRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIl0iCiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAicmVzdWx0VHlwZVNwZWNpZmllciI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAiZWxlbWVudFR5cGUiOiB7CiAgICAgICAgICAgICAgIm5hbWUiOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5jb3VudGVyIiwKICAgICAgICAgICAgICAidHlwZSI6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZXhwcmVzc2lvbiI6IHsKICAgICAgICAgICAgImxvY2FsSWQiOiAiMiIsCiAgICAgICAgICAgICJsb2NhdG9yIjogIjc6My03OjEzIiwKICAgICAgICAgICAgImRhdGFUeXBlIjogIntodHRwOi8vaGw3Lm9yZy9maGlyfUVuY291bnRlciIsCiAgICAgICAgICAgICJ0eXBlIjogIlJldHJpZXZlIiwKICAgICAgICAgICAgInJlc3VsdFR5cGVTcGVjaWZpZXIiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6IHsKICAgICAgICAgICAgICAgICJuYW1lIjogIntodHRwOi8vaGw3Lm9yZy9maGlyfUVuY291bnRlciIsCiAgICAgICAgICAgICAgICAidHlwZSI6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibG9jYWxJZCI6ICI3IiwKICAgICAgICAgICJsb2NhdG9yIjogIjk6MS0xMDoxNiIsCiAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5jb3VudGVyIiwKICAgICAgICAgICJuYW1lIjogIk9uZUVuY291bnRlciIsCiAgICAgICAgICAiY29udGV4dCI6ICJQYXRpZW50IiwKICAgICAgICAgICJhY2Nlc3NMZXZlbCI6ICJQdWJsaWMiLAogICAgICAgICAgImFubm90YXRpb24iOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAidHlwZSI6ICJBbm5vdGF0aW9uIiwKICAgICAgICAgICAgICAicyI6IHsKICAgICAgICAgICAgICAgICJyIjogIjciLAogICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAiIiwKICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUgIiwKICAgICAgICAgICAgICAgICAgICAgICJcIk9uZUVuY291bnRlclwiIiwKICAgICAgICAgICAgICAgICAgICAgICI6XG5cdCIKICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiciI6ICI2IiwKICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiRW5jb3VudGVyc1wiIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAiWyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJdIgogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgImV4cHJlc3Npb24iOiB7CiAgICAgICAgICAgICJsb2NhbElkIjogIjYiLAogICAgICAgICAgICAibG9jYXRvciI6ICIxMDoyLTEwOjE2IiwKICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogIntodHRwOi8vaGw3Lm9yZy9maGlyfUVuY291bnRlciIsCiAgICAgICAgICAgICJ0eXBlIjogIkluZGV4ZXIiLAogICAgICAgICAgICAib3BlcmFuZCI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibG9jYWxJZCI6ICI0IiwKICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjEwOjItMTA6MTMiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAiRW5jb3VudGVycyIsCiAgICAgICAgICAgICAgICAidHlwZSI6ICJFeHByZXNzaW9uUmVmIiwKICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlU3BlY2lmaWVyIjogewogICAgICAgICAgICAgICAgICAidHlwZSI6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6IHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FbmNvdW50ZXIiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImxvY2FsSWQiOiAiNSIsCiAgICAgICAgICAgICAgICAibG9jYXRvciI6ICIxMDoxNSIsCiAgICAgICAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIwIiwKICAgICAgICAgICAgICAgICJ0eXBlIjogIkxpdGVyYWwiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibG9jYWxJZCI6ICIxNSIsCiAgICAgICAgICAibG9jYXRvciI6ICIxMzoxLTE0OjUwIiwKICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAibmFtZSI6ICJGaXJzdExvY2F0aW9uRGVzY3JpcHRpb24iLAogICAgICAgICAgImNvbnRleHQiOiAiUGF0aWVudCIsCiAgICAgICAgICAiYWNjZXNzTGV2ZWwiOiAiUHVibGljIiwKICAgICAgICAgICJhbm5vdGF0aW9uIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgInR5cGUiOiAiQW5ub3RhdGlvbiIsCiAgICAgICAgICAgICAgInMiOiB7CiAgICAgICAgICAgICAgICAiciI6ICIxNSIsCiAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICAgICAgICAgImRlZmluZSAiLAogICAgICAgICAgICAgICAgICAgICAgIlwiRmlyc3RMb2NhdGlvbkRlc2NyaXB0aW9uXCIiLAogICAgICAgICAgICAgICAgICAgICAgIjpcblx0IgogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJyIjogIjE0IiwKICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMTMiLAogICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIxMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjExIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiOSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJPbmVFbmNvdW50ZXJcIiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICI5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjEyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjEzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc3BsYXkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgIi4iCiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjE0IiwKICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgImV4cHJlc3Npb24iOiB7CiAgICAgICAgICAgICJsb2NhbElkIjogIjE0IiwKICAgICAgICAgICAgImxvY2F0b3IiOiAiMTQ6Mi0xNDo1MCIsCiAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICJwYXRoIjogInZhbHVlIiwKICAgICAgICAgICAgInR5cGUiOiAiUHJvcGVydHkiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICJsb2NhbElkIjogIjEzIiwKICAgICAgICAgICAgICAibG9jYXRvciI6ICIxNDoyLTE0OjQ0IiwKICAgICAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9c3RyaW5nIiwKICAgICAgICAgICAgICAicGF0aCI6ICJkaXNwbGF5IiwKICAgICAgICAgICAgICAidHlwZSI6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjEyIiwKICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjE0OjItMTQ6MzYiLAogICAgICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogIntodHRwOi8vaGw3Lm9yZy9maGlyfVJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAicGF0aCI6ICJsb2NhdGlvbiIsCiAgICAgICAgICAgICAgICAidHlwZSI6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgICAibG9jYWxJZCI6ICIxMSIsCiAgICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjE0OjItMTQ6MjciLAogICAgICAgICAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5jb3VudGVyLkxvY2F0aW9uIiwKICAgICAgICAgICAgICAgICAgInR5cGUiOiAiSW5kZXhlciIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIjogWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjkiLAogICAgICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMTQ6Mi0xNDoyNCIsCiAgICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJsb2NhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0VHlwZVNwZWNpZmllciI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5jb3VudGVyLkxvY2F0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgICAgICAgICAibG9jYWxJZCI6ICI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMTQ6Mi0xNDoxNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FbmNvdW50ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJPbmVFbmNvdW50ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgImxvY2FsSWQiOiAiMTAiLAogICAgICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMTQ6MjYiLAogICAgICAgICAgICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImxvY2FsSWQiOiAiMzAiLAogICAgICAgICAgImxvY2F0b3IiOiAiMTY6MS0xNzo4MSIsCiAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgIm5hbWUiOiAiR2V0TWlkZGxlSW5pdGlhbHMiLAogICAgICAgICAgImNvbnRleHQiOiAiUGF0aWVudCIsCiAgICAgICAgICAiYWNjZXNzTGV2ZWwiOiAiUHVibGljIiwKICAgICAgICAgICJ0eXBlIjogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICJhbm5vdGF0aW9uIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgInR5cGUiOiAiQW5ub3RhdGlvbiIsCiAgICAgICAgICAgICAgInMiOiB7CiAgICAgICAgICAgICAgICAiciI6ICIzMCIsCiAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICAgICAgICAgImRlZmluZSBmdW5jdGlvbiBHZXRNaWRkbGVJbml0aWFscyhuYW1lIEZISVIuSHVtYW5OYW1lKTpcbiAgIgogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJyIjogIjI5IiwKICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMjkiLAogICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdWJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjI3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbWJpbmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMjUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjI1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIxOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjE3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2l2ZW4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnaXZlbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN1YnN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2l2ZW4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIyMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjI2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInLCAnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIyOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiZXhwcmVzc2lvbiI6IHsKICAgICAgICAgICAgImxvY2FsSWQiOiAiMjkiLAogICAgICAgICAgICAibG9jYXRvciI6ICIxNzozLTE3OjgxIiwKICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgInR5cGUiOiAiU3Vic3RyaW5nIiwKICAgICAgICAgICAgInN0cmluZ1RvU3ViIjogewogICAgICAgICAgICAgICJsb2NhbElkIjogIjI3IiwKICAgICAgICAgICAgICAibG9jYXRvciI6ICIxNzoxMy0xNzo3OCIsCiAgICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAidHlwZSI6ICJDb21iaW5lIiwKICAgICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgImxvY2FsSWQiOiAiMjUiLAogICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMTc6MjEtMTc6NzIiLAogICAgICAgICAgICAgICAgInR5cGUiOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgInJlc3VsdFR5cGVTcGVjaWZpZXIiOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIjogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAic291cmNlIjogWwogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgImxvY2FsSWQiOiAiMTgiLAogICAgICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjE3OjIyLTE3OjM3IiwKICAgICAgICAgICAgICAgICAgICAiYWxpYXMiOiAiZ2l2ZW4iLAogICAgICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlU3BlY2lmaWVyIjogewogICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1zdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiI6IHsKICAgICAgICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjE3IiwKICAgICAgICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjE3OjIyLTE3OjMxIiwKICAgICAgICAgICAgICAgICAgICAgICJwYXRoIjogImdpdmVuIiwKICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlU3BlY2lmaWVyIjogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1zdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiOiBbXSwKICAgICAgICAgICAgICAgICJyZXR1cm4iOiB7CiAgICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjI0IiwKICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMTc6MzktMTc6NzEiLAogICAgICAgICAgICAgICAgICAicmVzdWx0VHlwZVNwZWNpZmllciI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogewogICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iOiB7CiAgICAgICAgICAgICAgICAgICAgImxvY2FsSWQiOiAiMjMiLAogICAgICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjE3OjQ2LTE3OjcxIiwKICAgICAgICAgICAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIlN1YnN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgInN0cmluZ1RvU3ViIjogewogICAgICAgICAgICAgICAgICAgICAgImxvY2FsSWQiOiAiMjAiLAogICAgICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMTc6NTYtMTc6NjYiLAogICAgICAgICAgICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICJwYXRoIjogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICJzY29wZSI6ICJnaXZlbiIsCiAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICJzdGFydEluZGV4IjogewogICAgICAgICAgICAgICAgICAgICAgImxvY2FsSWQiOiAiMjEiLAogICAgICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMTc6NjgiLAogICAgICAgICAgICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgImxlbmd0aCI6IHsKICAgICAgICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjIyIiwKICAgICAgICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjE3OjcwIiwKICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjEiLAogICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJzZXBhcmF0b3IiOiB7CiAgICAgICAgICAgICAgICAibG9jYWxJZCI6ICIyNiIsCiAgICAgICAgICAgICAgICAibG9jYXRvciI6ICIxNzo3NC0xNzo3NyIsCiAgICAgICAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgInZhbHVlVHlwZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAidmFsdWUiOiAiLCAiLAogICAgICAgICAgICAgICAgInR5cGUiOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdGFydEluZGV4IjogewogICAgICAgICAgICAgICJsb2NhbElkIjogIjI4IiwKICAgICAgICAgICAgICAibG9jYXRvciI6ICIxNzo4MCIsCiAgICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgInZhbHVlVHlwZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICJ2YWx1ZSI6ICIzIiwKICAgICAgICAgICAgICAidHlwZSI6ICJMaXRlcmFsIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIm9wZXJhbmQiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAibmFtZSI6ICJuYW1lIiwKICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiOiB7CiAgICAgICAgICAgICAgICAibG9jYWxJZCI6ICIxNiIsCiAgICAgICAgICAgICAgICAibG9jYXRvciI6ICIxNjo0MC0xNjo1MyIsCiAgICAgICAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SHVtYW5OYW1lIiwKICAgICAgICAgICAgICAgICJuYW1lIjogIntodHRwOi8vaGw3Lm9yZy9maGlyfUh1bWFuTmFtZSIsCiAgICAgICAgICAgICAgICAidHlwZSI6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibG9jYWxJZCI6ICI0MCIsCiAgICAgICAgICAibG9jYXRvciI6ICIyMDoxLTIwOjgxIiwKICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1IdW1hbk5hbWUiLAogICAgICAgICAgIm5hbWUiOiAiTmFtZSIsCiAgICAgICAgICAiY29udGV4dCI6ICJQYXRpZW50IiwKICAgICAgICAgICJhY2Nlc3NMZXZlbCI6ICJQdWJsaWMiLAogICAgICAgICAgImFubm90YXRpb24iOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAidHlwZSI6ICJBbm5vdGF0aW9uIiwKICAgICAgICAgICAgICAicyI6IHsKICAgICAgICAgICAgICAgICJyIjogIjQwIiwKICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgIi8vIEdyYWIgcGF0aWVudCBGSElSIEh1bWFuTmFtZVxuIiwKICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUgIiwKICAgICAgICAgICAgICAgICAgICAgICJOYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICI6ICIKICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiciI6ICIzOSIsCiAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAic2luZ2xldG9uIGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIzOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIzOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIzMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjMxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGF0aWVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMzciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMzciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIzNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjM0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMzMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIzNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICIzNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiMzYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ29mZmljaWFsJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgImV4cHJlc3Npb24iOiB7CiAgICAgICAgICAgICJsb2NhbElkIjogIjM5IiwKICAgICAgICAgICAgImxvY2F0b3IiOiAiMjA6MTQtMjA6ODEiLAogICAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SHVtYW5OYW1lIiwKICAgICAgICAgICAgInR5cGUiOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICJvcGVyYW5kIjogewogICAgICAgICAgICAgICJsb2NhbElkIjogIjM4IiwKICAgICAgICAgICAgICAibG9jYXRvciI6ICIyMDoyOS0yMDo4MSIsCiAgICAgICAgICAgICAgInR5cGUiOiAiUXVlcnkiLAogICAgICAgICAgICAgICJyZXN1bHRUeXBlU3BlY2lmaWVyIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogewogICAgICAgICAgICAgICAgICAibmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1IdW1hbk5hbWUiLAogICAgICAgICAgICAgICAgICAidHlwZSI6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAic291cmNlIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAibG9jYWxJZCI6ICIzMiIsCiAgICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjIwOjMwLTIwOjQ2IiwKICAgICAgICAgICAgICAgICAgImFsaWFzIjogIm5hbWUiLAogICAgICAgICAgICAgICAgICAicmVzdWx0VHlwZVNwZWNpZmllciI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogewogICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SHVtYW5OYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIjogewogICAgICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjMxIiwKICAgICAgICAgICAgICAgICAgICAibG9jYXRvciI6ICIyMDozMC0yMDo0MSIsCiAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlU3BlY2lmaWVyIjogewogICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1IdW1hbk5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiUGF0aWVudCIsCiAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCI6IFtdLAogICAgICAgICAgICAgICJ3aGVyZSI6IHsKICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjM3IiwKICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjIwOjQ4LTIwOjgwIiwKICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUJvb2xlYW4iLAogICAgICAgICAgICAgICAgInR5cGUiOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgIm9wZXJhbmQiOiBbCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibG9jYWxJZCI6ICIzNSIsCiAgICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMjA6NTQtMjA6NjciLAogICAgICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgICAgICAgImxvY2FsSWQiOiAiMzQiLAogICAgICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMjA6NTQtMjA6NjEiLAogICAgICAgICAgICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogIntodHRwOi8vaGw3Lm9yZy9maGlyfU5hbWVVc2UiLAogICAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAidXNlIiwKICAgICAgICAgICAgICAgICAgICAgICJzY29wZSI6ICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjM2IiwKICAgICAgICAgICAgICAgICAgICAibG9jYXRvciI6ICIyMDo3MS0yMDo4MCIsCiAgICAgICAgICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAib2ZmaWNpYWwiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJsb2NhbElkIjogIjQ0IiwKICAgICAgICAgICJsb2NhdG9yIjogIjIzOjEtMjM6MzYiLAogICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICJuYW1lIjogIkxhc3ROYW1lIiwKICAgICAgICAgICJjb250ZXh0IjogIlBhdGllbnQiLAogICAgICAgICAgImFjY2Vzc0xldmVsIjogIlB1YmxpYyIsCiAgICAgICAgICAiYW5ub3RhdGlvbiI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJ0eXBlIjogIkFubm90YXRpb24iLAogICAgICAgICAgICAgICJzIjogewogICAgICAgICAgICAgICAgInIiOiAiNDQiLAogICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAiLy8gRXh0cmFjdCB1c2VmdWwgbmFtZSBlbGVtZW50c1xuIiwKICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUgIiwKICAgICAgICAgICAgICAgICAgICAgICJMYXN0TmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAiOiAiCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInIiOiAiNDMiLAogICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAiciI6ICI0MiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjQxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiTmFtZVwiIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjQyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhbWlseSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAiLiIKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiNDMiLAogICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiZXhwcmVzc2lvbiI6IHsKICAgICAgICAgICAgImxvY2FsSWQiOiAiNDMiLAogICAgICAgICAgICAibG9jYXRvciI6ICIyMzoxOC0yMzozNiIsCiAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICJwYXRoIjogInZhbHVlIiwKICAgICAgICAgICAgInR5cGUiOiAiUHJvcGVydHkiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICJsb2NhbElkIjogIjQyIiwKICAgICAgICAgICAgICAibG9jYXRvciI6ICIyMzoxOC0yMzozMCIsCiAgICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogIntodHRwOi8vaGw3Lm9yZy9maGlyfXN0cmluZyIsCiAgICAgICAgICAgICAgInBhdGgiOiAiZmFtaWx5IiwKICAgICAgICAgICAgICAidHlwZSI6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjQxIiwKICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjIzOjE4LTIzOjIzIiwKICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1IdW1hbk5hbWUiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAiTmFtZSIsCiAgICAgICAgICAgICAgICAidHlwZSI6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImxvY2FsSWQiOiAiNDciLAogICAgICAgICAgImxvY2F0b3IiOiAiMjQ6MS0yNDo0NyIsCiAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgIm5hbWUiOiAiTWlkZGxlSW5pdGlhbCIsCiAgICAgICAgICAiY29udGV4dCI6ICJQYXRpZW50IiwKICAgICAgICAgICJhY2Nlc3NMZXZlbCI6ICJQdWJsaWMiLAogICAgICAgICAgImFubm90YXRpb24iOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAidHlwZSI6ICJBbm5vdGF0aW9uIiwKICAgICAgICAgICAgICAicyI6IHsKICAgICAgICAgICAgICAgICJyIjogIjQ3IiwKICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgIiIsCiAgICAgICAgICAgICAgICAgICAgICAiZGVmaW5lICIsCiAgICAgICAgICAgICAgICAgICAgICAiTWlkZGxlSW5pdGlhbCIsCiAgICAgICAgICAgICAgICAgICAgICAiOiAiCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInIiOiAiNDYiLAogICAgICAgICAgICAgICAgICAgICJzIjogWwogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkdldE1pZGRsZUluaXRpYWxzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiKCIKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiNDUiLAogICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIk5hbWVcIiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAiKSIKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJleHByZXNzaW9uIjogewogICAgICAgICAgICAibG9jYWxJZCI6ICI0NiIsCiAgICAgICAgICAgICJsb2NhdG9yIjogIjI0OjIzLTI0OjQ3IiwKICAgICAgICAgICAgInJlc3VsdFR5cGVOYW1lIjogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgIm5hbWUiOiAiR2V0TWlkZGxlSW5pdGlhbHMiLAogICAgICAgICAgICAidHlwZSI6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICJvcGVyYW5kIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjQ1IiwKICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjI0OjQxLTI0OjQ2IiwKICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1IdW1hbk5hbWUiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAiTmFtZSIsCiAgICAgICAgICAgICAgICAidHlwZSI6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImxvY2FsSWQiOiAiNTMiLAogICAgICAgICAgImxvY2F0b3IiOiAiMjU6MS0yNTozOSIsCiAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgIm5hbWUiOiAiRmlyc3ROYW1lIiwKICAgICAgICAgICJjb250ZXh0IjogIlBhdGllbnQiLAogICAgICAgICAgImFjY2Vzc0xldmVsIjogIlB1YmxpYyIsCiAgICAgICAgICAiYW5ub3RhdGlvbiI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJ0eXBlIjogIkFubm90YXRpb24iLAogICAgICAgICAgICAgICJzIjogewogICAgICAgICAgICAgICAgInIiOiAiNTMiLAogICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAiIiwKICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUgIiwKICAgICAgICAgICAgICAgICAgICAgICJGaXJzdE5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgIjogIgogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJyIjogIjUyIiwKICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiNTEiLAogICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciI6ICI0OSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjQ4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIk5hbWVcIiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjQ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnaXZlbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiNTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgIi4iCiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJyIjogIjUyIiwKICAgICAgICAgICAgICAgICAgICAgICAgInMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgImV4cHJlc3Npb24iOiB7CiAgICAgICAgICAgICJsb2NhbElkIjogIjUyIiwKICAgICAgICAgICAgImxvY2F0b3IiOiAiMjU6MTktMjU6MzkiLAogICAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAicGF0aCI6ICJ2YWx1ZSIsCiAgICAgICAgICAgICJ0eXBlIjogIlByb3BlcnR5IiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAibG9jYWxJZCI6ICI1MSIsCiAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMjU6MTktMjU6MzMiLAogICAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1zdHJpbmciLAogICAgICAgICAgICAgICJ0eXBlIjogIkluZGV4ZXIiLAogICAgICAgICAgICAgICJvcGVyYW5kIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAibG9jYWxJZCI6ICI0OSIsCiAgICAgICAgICAgICAgICAgICJsb2NhdG9yIjogIjI1OjE5LTI1OjMwIiwKICAgICAgICAgICAgICAgICAgInBhdGgiOiAiZ2l2ZW4iLAogICAgICAgICAgICAgICAgICAidHlwZSI6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlU3BlY2lmaWVyIjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiOiB7CiAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1zdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICAgICAibG9jYWxJZCI6ICI0OCIsCiAgICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMjU6MTktMjU6MjQiLAogICAgICAgICAgICAgICAgICAgICJyZXN1bHRUeXBlTmFtZSI6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1IdW1hbk5hbWUiLAogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk5hbWUiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICJsb2NhbElkIjogIjUwIiwKICAgICAgICAgICAgICAgICAgImxvY2F0b3IiOiAiMjU6MzIiLAogICAgICAgICAgICAgICAgICAicmVzdWx0VHlwZU5hbWUiOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSI6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAidmFsdWUiOiAiMCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIjogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdCiAgICB9CiAgfSwKICAiZXh0ZXJuYWxFcnJvcnMiOiBbXQp9\"\n }\n ],\n \"resourceType\": \"Library\"\n }\n }\n ],\n \"resourceType\": \"Bundle\"\n}" + } + ] + }, + { + "name": "Initial Next Question", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"next-question-initial\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/parameters-questionnaire-next-question-in\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"questionnaire-response\",\n \"resource\": {\n \"resourceType\": \"QuestionnaireResponse\",\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"status\": \"in-progress\",\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"contained\": [\n {\n \"resourceType\": \"Questionnaire\",\n \"id\": \"DinnerOrderAdaptive\",\n \"url\": \"urn:inferno:dtr-test-kit:dinner-order-adaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt-search\"\n ]\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\"\n }\n ]\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{base_url}}/custom/dtr_smart_app/fhir/Questionnaire/$next-question", + "host": [ + "{{base_url}}" + ], + "path": [ + "custom", + "dtr_smart_app", + "fhir", + "Questionnaire", + "$next-question" + ] + } + }, + "response": [ + { + "name": "Example Response", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"next-question-initial\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/parameters-questionnaire-next-question-in\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"questionnaire-response\",\n \"resource\": {\n \"resourceType\": \"QuestionnaireResponse\",\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"status\": \"in-progress\",\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"contained\": [\n {\n \"resourceType\": \"Questionnaire\",\n \"id\": \"DinnerOrderAdaptive\",\n \"url\": \"urn:inferno:dtr-test-kit:dinner-order-adaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt-search\"\n ]\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\"\n }\n ]\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{local_base_url}}/custom/dtr_full_ehr/fhir/Questionnaire/$next-question", + "host": [ + "{{local_base_url}}" + ], + "path": [ + "custom", + "dtr_full_ehr", + "fhir", + "Questionnaire", + "$next-question" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Content-Length", + "value": "6047" + } + ], + "cookie": [], + "body": "{\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"contained\": [\n {\n \"id\": \"DinnerOrderAdaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt\",\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-adapt\"\n ]\n },\n \"text\": {\n \"status\": \"generated\",\n \"div\": \"
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"derivedFrom\": [\n \"urn:inferno:dtr-test-kit:dinner-order-adaptive\"\n ],\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".LastName\"\n }\n }\n ],\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"type\": \"string\",\n \"required\": true\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstName\"\n }\n }\n ],\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstLocationDescription\"\n }\n }\n ],\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"type\": \"group\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"type\": \"choice\",\n \"required\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Hamburger\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n }\n ]\n }\n ],\n \"resourceType\": \"Questionnaire\"\n }\n ],\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"status\": \"in-progress\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"resourceType\": \"QuestionnaireResponse\"\n}" + } + ] + }, + { + "name": "Second Next Question", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"next-question-followup-request\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/parameters-questionnaire-next-question-in\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"questionnaire-response\",\n \"resource\": {\n \"resourceType\": \"QuestionnaireResponse\",\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"status\": \"in-progress\",\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"contained\": [\n {\n \"resourceType\": \"Questionnaire\",\n \"id\": \"DinnerOrderAdaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt\"\n ]\n },\n \"text\": {\n \"status\": \"generated\",\n \"div\": \"
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"derivedFrom\": [\n \"urn:inferno:dtr-test-kit:dinner-order-adaptive\"\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".LastName\"\n }\n }\n ],\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"type\": \"string\",\n \"required\": true\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstName\"\n }\n }\n ],\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstLocationDescription\"\n }\n }\n ],\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"type\": \"group\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"type\": \"choice\",\n \"required\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Hamburger\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ],\n \"item\": [\n {\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"item\": [\n {\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"answer\": [\n {\n \"valueString\": \"Smith\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"answer\": [\n {\n \"valueString\": \"John\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"override\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"item\": [\n {\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"answer\": [\n {\n \"valueString\": \"Home\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"answer\": [\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{base_url}}/custom/dtr_smart_app/fhir/Questionnaire/$next-question", + "host": [ + "{{base_url}}" + ], + "path": [ + "custom", + "dtr_smart_app", + "fhir", + "Questionnaire", + "$next-question" + ] + } + }, + "response": [ + { + "name": "Example Response", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"next-question-followup-request\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/parameters-questionnaire-next-question-in\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"questionnaire-response\",\n \"resource\": {\n \"resourceType\": \"QuestionnaireResponse\",\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"status\": \"in-progress\",\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"contained\": [\n {\n \"resourceType\": \"Questionnaire\",\n \"id\": \"DinnerOrderAdaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt\"\n ]\n },\n \"text\": {\n \"status\": \"generated\",\n \"div\": \"
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"derivedFrom\": [\n \"urn:inferno:dtr-test-kit:dinner-order-adaptive\"\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".LastName\"\n }\n }\n ],\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"type\": \"string\",\n \"required\": true\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstName\"\n }\n }\n ],\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstLocationDescription\"\n }\n }\n ],\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"type\": \"group\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"type\": \"choice\",\n \"required\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Hamburger\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ],\n \"item\": [\n {\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"item\": [\n {\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"answer\": [\n {\n \"valueString\": \"Smith\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"answer\": [\n {\n \"valueString\": \"John\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"override\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"item\": [\n {\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"answer\": [\n {\n \"valueString\": \"Home\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"answer\": [\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{local_base_url}}/custom/dtr_full_ehr/fhir/Questionnaire/$next-question", + "host": [ + "{{local_base_url}}" + ], + "path": [ + "custom", + "dtr_full_ehr", + "fhir", + "Questionnaire", + "$next-question" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Content-Length", + "value": "11096" + } + ], + "cookie": [], + "body": "{\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"contained\": [\n {\n \"id\": \"DinnerOrderAdaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt\",\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-adapt\"\n ]\n },\n \"text\": {\n \"status\": \"generated\",\n \"div\": \"
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"derivedFrom\": [\n \"urn:inferno:dtr-test-kit:dinner-order-adaptive\"\n ],\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".LastName\"\n }\n }\n ],\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"type\": \"string\",\n \"required\": true\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstName\"\n }\n }\n ],\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstLocationDescription\"\n }\n }\n ],\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"type\": \"group\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"type\": \"choice\",\n \"required\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Hamburger\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.2.b\",\n \"text\": \"What would you like on your bean burrito?\",\n \"type\": \"choice\",\n \"required\": false,\n \"repeats\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Cheese\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Pico de Gallo\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Guacamole\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.3\",\n \"text\": \"Any special requests?\",\n \"type\": \"string\",\n \"required\": false\n }\n ]\n }\n ],\n \"resourceType\": \"Questionnaire\"\n }\n ],\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"status\": \"in-progress\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"item\": [\n {\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"item\": [\n {\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueString\": \"Smith\"\n }\n ]\n },\n {\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"override\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueString\": \"John\"\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"item\": [\n {\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueString\": \"Home\"\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n }\n ]\n }\n ],\n \"resourceType\": \"QuestionnaireResponse\"\n}" + } + ] + }, + { + "name": "Final Next Question", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"next-question-final-request\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/parameters-questionnaire-next-question-in\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"questionnaire-response\",\n \"resource\": {\n \"resourceType\": \"QuestionnaireResponse\",\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"status\": \"in-progress\",\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"author\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"contained\": [\n {\n \"resourceType\": \"Questionnaire\",\n \"id\": \"DinnerOrderAdaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt\"\n ]\n },\n \"text\": {\n \"status\": \"generated\",\n \"div\": \"
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"derivedFrom\": [\n \"urn:inferno:dtr-test-kit:dinner-order-adaptive\"\n ],\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".LastName\"\n }\n }\n ],\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"type\": \"string\",\n \"required\": true\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstName\"\n }\n }\n ],\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstLocationDescription\"\n }\n }\n ],\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"type\": \"group\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"type\": \"choice\",\n \"required\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Hamburger\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.2.b\",\n \"text\": \"What would you like on your bean burrito?\",\n \"type\": \"choice\",\n \"required\": false,\n \"repeats\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Cheese\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Pico de Gallo\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Guacamole\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.3\",\n \"text\": \"Any special requests?\",\n \"type\": \"string\",\n \"required\": false\n }\n ]\n }\n ]\n }\n ],\n \"item\": [\n {\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"item\": [\n {\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"answer\": [\n {\n \"valueString\": \"Smith\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"answer\": [\n {\n \"valueString\": \"John\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"override\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"item\": [\n {\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"answer\": [\n {\n \"valueString\": \"Home\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"answer\": [\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3.2.b\",\n \"text\": \"What would you like on your bean burrito?\",\n \"answer\": [\n {\n \"valueCoding\": {\n \"code\": \"Cheese\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"valueCoding\": {\n \"code\": \"Guacamole\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3.3\",\n \"text\": \"Any special requests?\",\n \"answer\": [\n {\n \"valueString\": \"Extra napkins, please.\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{base_url}}/custom/dtr_smart_app/fhir/Questionnaire/$next-question", + "host": [ + "{{base_url}}" + ], + "path": [ + "custom", + "dtr_smart_app", + "fhir", + "Questionnaire", + "$next-question" + ] + } + }, + "response": [ + { + "name": "Example Response", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"resourceType\": \"Parameters\",\n \"id\": \"next-question-final-request\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/parameters-questionnaire-next-question-in\"\n ]\n },\n \"parameter\": [\n {\n \"name\": \"questionnaire-response\",\n \"resource\": {\n \"resourceType\": \"QuestionnaireResponse\",\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"status\": \"in-progress\",\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"author\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"contained\": [\n {\n \"resourceType\": \"Questionnaire\",\n \"id\": \"DinnerOrderAdaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt\"\n ]\n },\n \"text\": {\n \"status\": \"generated\",\n \"div\": \"
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"derivedFrom\": [\n \"urn:inferno:dtr-test-kit:dinner-order-adaptive\"\n ],\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".LastName\"\n }\n }\n ],\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"type\": \"string\",\n \"required\": true\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstName\"\n }\n }\n ],\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstLocationDescription\"\n }\n }\n ],\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"type\": \"group\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"type\": \"choice\",\n \"required\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Hamburger\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.2.b\",\n \"text\": \"What would you like on your bean burrito?\",\n \"type\": \"choice\",\n \"required\": false,\n \"repeats\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Cheese\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Pico de Gallo\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Guacamole\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.3\",\n \"text\": \"Any special requests?\",\n \"type\": \"string\",\n \"required\": false\n }\n ]\n }\n ]\n }\n ],\n \"item\": [\n {\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"item\": [\n {\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"answer\": [\n {\n \"valueString\": \"Smith\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"answer\": [\n {\n \"valueString\": \"John\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"override\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"item\": [\n {\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"answer\": [\n {\n \"valueString\": \"Home\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"answer\": [\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3.2.b\",\n \"text\": \"What would you like on your bean burrito?\",\n \"answer\": [\n {\n \"valueCoding\": {\n \"code\": \"Cheese\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"valueCoding\": {\n \"code\": \"Guacamole\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3.3\",\n \"text\": \"Any special requests?\",\n \"answer\": [\n {\n \"valueString\": \"Extra napkins, please.\",\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\",\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"url\": \"author\",\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{local_base_url}}/custom/dtr_full_ehr/fhir/Questionnaire/$next-question", + "host": [ + "{{local_base_url}}" + ], + "path": [ + "custom", + "dtr_full_ehr", + "fhir", + "Questionnaire", + "$next-question" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Content-Length", + "value": "14006" + } + ], + "cookie": [], + "body": "{\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"contained\": [\n {\n \"id\": \"DinnerOrderAdaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt\"\n ]\n },\n \"text\": {\n \"status\": \"generated\",\n \"div\": \"
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"derivedFrom\": [\n \"urn:inferno:dtr-test-kit:dinner-order-adaptive\"\n ],\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".LastName\"\n }\n }\n ],\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"type\": \"string\",\n \"required\": true\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstName\"\n }\n }\n ],\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstLocationDescription\"\n }\n }\n ],\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"type\": \"group\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"type\": \"choice\",\n \"required\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Hamburger\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.2.b\",\n \"text\": \"What would you like on your bean burrito?\",\n \"type\": \"choice\",\n \"required\": false,\n \"repeats\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Cheese\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Pico de Gallo\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Guacamole\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.3\",\n \"text\": \"Any special requests?\",\n \"type\": \"string\",\n \"required\": false\n }\n ]\n }\n ],\n \"resourceType\": \"Questionnaire\"\n }\n ],\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"status\": \"completed\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"author\": {\n \"reference\": \"Patient/example\"\n },\n \"item\": [\n {\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"item\": [\n {\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueString\": \"Smith\"\n }\n ]\n },\n {\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"override\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueString\": \"John\"\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"item\": [\n {\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueString\": \"Home\"\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.2.b\",\n \"text\": \"What would you like on your bean burrito?\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueCoding\": {\n \"code\": \"Cheese\"\n }\n },\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueCoding\": {\n \"code\": \"Guacamole\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.3\",\n \"text\": \"Any special requests?\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueString\": \"Extra napkins, please.\"\n }\n ]\n }\n ]\n }\n ],\n \"resourceType\": \"QuestionnaireResponse\"\n}" + } + ] + }, + { + "name": "Save QuestionnaireResponse", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\": \"adaptive-dinner-response\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt\"\n ]\n },\n \"contained\": [\n {\n \"id\": \"DinnerOrderAdaptive\",\n \"meta\": {\n \"profile\": [\n \"http://hl7.org/fhir/StructureDefinition/cqf-questionnaire\",\n \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt\"\n ]\n },\n \"text\": {\n \"status\": \"generated\",\n \"div\": \"
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
\"\n },\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive\",\n \"valueBoolean\": true\n },\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/cqf-library\",\n \"valueCanonical\": \"https://madie.cms.gov/Library/DTRTest\"\n }\n ],\n \"name\": \"DinnerOrderAdaptive\",\n \"title\": \"Dinner Order (Adaptive)\",\n \"derivedFrom\": [\n \"urn:inferno:dtr-test-kit:dinner-order-adaptive\"\n ],\n \"status\": \"draft\",\n \"subjectType\": [\n \"Patient\"\n ],\n \"date\": \"2024-05-06\",\n \"publisher\": \"Inferno\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl\",\n \"valueCodeableConcept\": {\n \"coding\": [\n {\n \"system\": \"http://hl7.org/fhir/questionnaire-item-control\",\n \"code\": \"gtable\"\n }\n ]\n }\n }\n ],\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".LastName\"\n }\n }\n ],\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"type\": \"string\",\n \"required\": true\n },\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstName\"\n }\n }\n ],\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"type\": \"group\",\n \"item\": [\n {\n \"extension\": [\n {\n \"url\": \"http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression\",\n \"valueExpression\": {\n \"language\": \"text/cql\",\n \"expression\": \"\\\"DTRTest\\\".FirstLocationDescription\"\n }\n }\n ],\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"type\": \"string\",\n \"required\": true\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"type\": \"group\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"type\": \"choice\",\n \"required\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Hamburger\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.2.b\",\n \"text\": \"What would you like on your bean burrito?\",\n \"type\": \"choice\",\n \"required\": false,\n \"repeats\": true,\n \"answerOption\": [\n {\n \"valueCoding\": {\n \"code\": \"Cheese\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Pico de Gallo\"\n }\n },\n {\n \"valueCoding\": {\n \"code\": \"Guacamole\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.3\",\n \"text\": \"Any special requests?\",\n \"type\": \"string\",\n \"required\": false\n }\n ]\n }\n ],\n \"resourceType\": \"Questionnaire\"\n }\n ],\n \"questionnaire\": \"#DinnerOrderAdaptive\",\n \"status\": \"completed\",\n \"subject\": {\n \"reference\": \"Patient/example\"\n },\n \"authored\": \"2024-10-10T00:00:00Z\",\n \"author\": {\n \"reference\": \"Patient/example\"\n },\n \"item\": [\n {\n \"linkId\": \"PBD\",\n \"text\": \"Patient Information\",\n \"item\": [\n {\n \"linkId\": \"PBD.1\",\n \"text\": \"Last Name:\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueString\": \"Smith\"\n }\n ]\n },\n {\n \"linkId\": \"PBD.2\",\n \"text\": \"First Name:\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"override\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueString\": \"John\"\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"LOC\",\n \"text\": \"Patient's Location\",\n \"item\": [\n {\n \"linkId\": \"LOC.1\",\n \"text\": \"Location\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"auto\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueString\": \"Home\"\n }\n ]\n }\n ]\n },\n {\n \"linkId\": \"3\",\n \"text\": \"Dinner Order\",\n \"item\": [\n {\n \"linkId\": \"3.1\",\n \"text\": \"What would you like for dinner?\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueCoding\": {\n \"code\": \"Bean Burrito\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.2.b\",\n \"text\": \"What would you like on your bean burrito?\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueCoding\": {\n \"code\": \"Cheese\"\n }\n },\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueCoding\": {\n \"code\": \"Guacamole\"\n }\n }\n ]\n },\n {\n \"linkId\": \"3.3\",\n \"text\": \"Any special requests?\",\n \"answer\": [\n {\n \"extension\": [\n {\n \"extension\": [\n {\n \"url\": \"source\",\n \"valueCode\": \"manual\"\n },\n {\n \"extension\": [\n {\n \"url\": \"patient\",\n \"valueReference\": {\n \"reference\": \"Patient/example\"\n }\n }\n ],\n \"url\": \"author\"\n }\n ],\n \"url\": \"http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin\"\n }\n ],\n \"valueString\": \"Extra napkins, please.\"\n }\n ]\n }\n ]\n }\n ],\n \"resourceType\": \"QuestionnaireResponse\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{base_url}}/custom/dtr_smart_app/fhir/QuestionnaireResponse", + "host": [ + "{{base_url}}" + ], + "path": [ + "custom", + "dtr_smart_app", + "fhir", + "QuestionnaireResponse" + ] + } + }, + "response": [] + } + ] } ], "auth": { diff --git a/config/nginx.background.conf b/config/nginx.background.conf index f6d0bb4..ba1148c 100644 --- a/config/nginx.background.conf +++ b/config/nginx.background.conf @@ -68,5 +68,20 @@ http { proxy_pass http://hl7_validator_service:3500/; } + + location /fhirpath/ { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Port $server_port; + proxy_redirect off; + proxy_set_header Connection ''; + proxy_http_version 1.1; + chunked_transfer_encoding off; + proxy_buffering off; + proxy_cache off; + + proxy_pass http://fhirpath:6789/; + } } } diff --git a/docker-compose.background.yml b/docker-compose.background.yml index d9244dc..d9ed2f9 100644 --- a/docker-compose.background.yml +++ b/docker-compose.background.yml @@ -23,6 +23,10 @@ services: # To let the service share your local FHIR package cache, # uncomment the below line # - ~/.fhir:/home/ktor/.fhir + fhirpath: + image: infernocommunity/fhirpath-service + ports: + - "6789:6789" nginx: image: nginx volumes: @@ -32,6 +36,7 @@ services: command: [nginx, '-g', 'daemon off;'] depends_on: - hl7_validator_service + - fhirpath # - fhir_validator_app redis: image: redis diff --git a/docker-compose.yml b/docker-compose.yml index ea0f42d..b7bff9b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,6 +28,10 @@ services: extends: file: docker-compose.background.yml service: hl7_validator_service + fhirpath: + extends: + file: docker-compose.background.yml + service: fhirpath nginx: extends: file: docker-compose.background.yml diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_completion_group.rb b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_completion_group.rb new file mode 100644 index 0000000..0e439ff --- /dev/null +++ b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_completion_group.rb @@ -0,0 +1,23 @@ +require_relative 'dtr_adaptive_questionnaire_next_question_retrieval_group' + +module DaVinciDTRTestKit + class DTRAdaptiveQuestionnaireCompletionGroup < Inferno::TestGroup + id :dtr_adaptive_questionnaire_completion + title 'Completing the Adaptive Questionnaire' + description %( + The client makes a final $next-question call, including the answers to all required questions asked so far. + Inferno will validate that the request conforms to the [next question operation input parameters profile](http://hl7.org/fhir/uv/sdc/StructureDefinition/parameters-questionnaire-next-question-in) + and will update the status of the QuestionnaireResponse resource parameter to `complete`. + Inferno will also validate the completed QuestionnaireResponse conformance. + ) + + config( + options: { + next_question_prompt_title: 'Last Next Question Request' + } + ) + run_as_group + + group from: :dtr_adaptive_questionnaire_next_question_retrieval + end +end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_followup_questions_group.rb b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_followup_questions_group.rb new file mode 100644 index 0000000..27fd3a3 --- /dev/null +++ b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_followup_questions_group.rb @@ -0,0 +1,26 @@ +require_relative 'dtr_adaptive_questionnaire_next_question_retrieval_group' + +module DaVinciDTRTestKit + class DTRAdaptiveQuestionnaireFollowupQuestionsGroup < Inferno::TestGroup + id :dtr_adaptive_questionnaire_followup_questions + title 'Retrieving the Next Question' + description %( + The client makes a subsequent call to request the next question or set of questions + using the $next-question operation, and including the answers to all required questions + in the questionnaire to this point. + Inferno will validate that the request conforms to the [next question operation input parameters profile](http://hl7.org/fhir/uv/sdc/StructureDefinition/parameters-questionnaire-next-question-in) + and will provide the next questions accordingly for the tester to complete and attest to pre-population + and questionnaire rendering. + ) + + config( + options: { + next_question_prompt_title: 'Follow-up Next Question Request' + } + ) + + run_as_group + + group from: :dtr_adaptive_questionnaire_next_question_retrieval + end +end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_next_question_request_test.rb b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_next_question_request_test.rb new file mode 100644 index 0000000..99f40c7 --- /dev/null +++ b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_next_question_request_test.rb @@ -0,0 +1,93 @@ +require_relative '../../urls' + +module DaVinciDTRTestKit + class DTRAdaptiveQuestionnaireNextQuestionRequestTest < Inferno::Test + include URLs + + id :dtr_adaptive_questionnaire_next_question_request + title 'Invoke the $next-question operation' + description %( + Inferno will wait for the client to invoke the $next-question operation to retrieve the next question + or set of questions. + Inferno will validate the request body and update the contained Questionnaire to include + the next question or set of questions. + ) + + input :access_token + + def example_client_jwt_payload_part + Base64.strict_encode64({ inferno_client_id: access_token }.to_json).delete('=') + end + + def request_identification + if config.options[:smart_app] + "eyJhbGciOiJub25lIn0.#{example_client_jwt_payload_part}" + else + access_token + end + end + + def cont_test_description + <<~DESCRIPTION + ### Continuing the Tests + + When the DTR application has finished loading the Questionnaire, + including any clinical data requests to support pre-population, + [Click here](#{resume_pass_url}?token=#{access_token}) to continue. + DESCRIPTION + end + + def next_question_prompt_title + config.options[:next_question_prompt_title] + end + + def next_question_prompt + if next_question_prompt_title&.include?('Initial') + 'Invoke the $next-question operation by sending a POST request to' + elsif next_question_prompt_title&.include?('Last') + 'Answer the remaining questions and then make a final next-question request by sending a POST request to' + else + "Answer the 'What do you want for dinner' question and then make a next-question request by sending a POST " \ + 'request to' + end + end + + def prompt_cont + if next_question_prompt_title&.include?('Initial') + %(Upon receipt, Inferno will provide the first set of questions to complete.) + elsif next_question_prompt_title&.include?('Last') + %(Upon receipt, Inferno will update the status of the QuestionnaireResponse + resource parameter to `complete`.) + else + %(Upon receipt, Inferno will provide the next set of questions to complete + based on previous answers.) + end + end + + run do + wait( + identifier: access_token, + message: <<~MESSAGE + ### #{next_question_prompt_title} + + #{next_question_prompt} + + `#{next_url}` + + #{prompt_cont} + + ### Request Identification + + In order to identify requests for this session, Inferno will look for + an `Authorization` header with value: + + ``` + Bearer #{request_identification} + ``` + + #{cont_test_description if config.options[:accepts_multiple_requests]} + MESSAGE + ) + end + end +end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_next_question_request_validation_test.rb b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_next_question_request_validation_test.rb new file mode 100644 index 0000000..1356f0d --- /dev/null +++ b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_next_question_request_validation_test.rb @@ -0,0 +1,62 @@ +require_relative '../../urls' + +module DaVinciDTRTestKit + class DTRAdaptiveQuestionnaireNextQuestionRequestValidationTest < Inferno::Test + include URLs + + id :dtr_next_question_request_validation + title '$next-question request is valid' + description %( + Per the [OperationDefinition: Adaptive questionnaire next question](https://build.fhir.org/ig/HL7/sdc/OperationDefinition-Questionnaire-next-question.html#root) + section in the [Structured Data Capture IG](http://hl7.org/fhir/uv/sdc/ImplementationGuide/hl7.fhir.uv.sdc), + the request body for the `$next-question` operation should be a FHIR Parameters resource containing a + single parameter with: + - name: `questionnaire-response` + - resource: A `QuestionnaireResponse` resource + + As outlined in the [FHIR Operation Request](https://hl7.org/fhir/r4/operations.html#request) section of the + FHIR specification, if an operation has exactly one input parameter of type Resource, it can also be invoked via + a POST request using that resource as the body (with no additional URL parameters). + + This test validates the structure of the `$next-question` request body. It confirms that the body is either a + Parameters resource or a QuestionnaireResponse resource. + + If it is a Parameters resource, it must contain one parameter named `questionnaire-response` + with a `resource` attribute set to a FHIR QuestionnaireResponse instance, as specified above. + + The QuestionnaireResponse resource's structure and conformance will be validated + in the following test ('Adaptive QuestionnaireResponse is valid'). + ) + + def assert_valid_resource_type(resource) + type = resource.resourceType + valid = ['Parameters', 'QuestionnaireResponse'].include?(type) + assert valid, "Request body not valid. Expected Parameters or QuestionnaireResponse, got #{type}" + end + + def next_request_tag + config.options[:next_tag] + end + + run do + load_tagged_requests next_request_tag + skip_if request.blank?, 'A $next-question request must be made prior to running this test' + + assert request.url == next_url, "Request made to wrong URL: #{request.url}. Should instead be to #{next_url}" + assert_valid_json(request.request_body) + input_params = FHIR.from_contents(request.request_body) + assert input_params.present?, 'Request does not contain a recognized FHIR object' + assert_valid_resource_type(input_params) + + if input_params.is_a?(FHIR::Parameters) + questionnaire_response_params = input_params.parameter.select { |param| param.name == 'questionnaire-response' } + qr_params_count = questionnaire_response_params.length + assert qr_params_count == 1, + "Input parameter must contain one `parameter:questionnaire-response` slice. Found #{qr_params_count}" + + questionnaire_response = questionnaire_response_params.first.resource + assert_resource_type(:questionnaire_response, resource: questionnaire_response) + end + end + end +end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_next_question_retrieval_group.rb b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_next_question_retrieval_group.rb new file mode 100644 index 0000000..eaec8ad --- /dev/null +++ b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_next_question_retrieval_group.rb @@ -0,0 +1,23 @@ +require_relative 'dtr_adaptive_questionnaire_next_question_request_test' +require_relative 'dtr_adaptive_questionnaire_next_question_request_validation_test' +require_relative 'dtr_adaptive_questionnaire_response_validation_test' + +module DaVinciDTRTestKit + class DTRAdaptiveQuestionnaireNextQuestionRetrievalGroup < Inferno::TestGroup + id :dtr_adaptive_questionnaire_next_question_retrieval + title 'Next Question Request and Validation' + description %( + Inferno will wait for the client system to request the next question (or set of questions) using the + $next-question operation and will return an updated QuestionnaireResponse with a contained Questionnaire + that includes the next question (or set of questions) for the tester to complete. + Inferno will then validate the conformance of the request. + ) + + # Test 1: wait for the $next-question request + test from: :dtr_adaptive_questionnaire_next_question_request + # Test 2: validate the $next-question request + test from: :dtr_next_question_request_validation + # Test 3: validate the QuestionnaireResponse in the input parameter + test from: :dtr_adaptive_questionnaire_response_validation + end +end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_response_validation_test.rb b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_response_validation_test.rb new file mode 100644 index 0000000..db0fb33 --- /dev/null +++ b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_response_validation_test.rb @@ -0,0 +1,66 @@ +require_relative '../../urls' +require_relative '../../dtr_questionnaire_response_validation' + +module DaVinciDTRTestKit + class DTRAdaptiveQuestionnaireResponseValidationTest < Inferno::Test + include URLs + include DTRQuestionnaireResponseValidation + + id :dtr_adaptive_questionnaire_response_validation + title 'Adaptive QuestionnaireResponse is valid' + description %( + This test validates the conformance of the Adative QuestionnaireResponse to the + [SDCQuestionnaireResponseAdapt](http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt) + structure. It verifies the presence of mandatory elements and that elements + with required bindings contain appropriate values. + + It also ensures that all required questions are answered, and that the `origin.source` + extension is correct for each answer: + - `PBD.1` (Last Name) and `LOC.1` (Location): `auto` + - `PBD.2` (First Name): `override` + - `3` (all nested dinner questions): `manual` + + Note: For the initial next-question request, only the conformance to the profile is checked + since neither the QuestionnaireResponse nor the contained Questionnaire will have any items, + as no questions are yet known. + ) + + def profile_url + 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt' + end + + def next_request_tag + config.options[:next_tag] + end + + run do + load_tagged_requests next_request_tag + skip_if request.blank?, 'A $next-question request must be made prior to running this test' + + assert request.url == next_url, "Request made to wrong URL: #{request.url}. Should instead be to #{next_url}" + assert_valid_json(request.request_body) + input_params = FHIR.from_contents(request.request_body) + skip_if input_params.blank?, 'Request does not contain a recognized FHIR object' + + questionnaire_response = nil + if input_params.is_a?(FHIR::QuestionnaireResponse) + questionnaire_response = input_params + elsif input_params.is_a?(FHIR::Parameters) + questionnaire_response = input_params.parameter&.find do |param| + param.name == 'questionnaire-response' + end&.resource + end + + skip_if questionnaire_response.nil?, 'QuestionnaireResponse resource not provided.' + verify_basic_conformance(questionnaire_response.to_json, profile_url) + + questionnaire = questionnaire_response.contained.find { |res| res.resourceType == 'Questionnaire' } + check_origin_sources(questionnaire.item, questionnaire_response.item, expected_overrides: ['PBD.2']) + + required_link_ids = extract_required_link_ids(questionnaire.item) + check_answer_presence(questionnaire_response.item, required_link_ids) + + assert(messages.none? { |m| m[:type] == 'error' }, 'QuestionnaireResponse is not correct, see error message(s)') + end + end +end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_full_ehr_adaptive_dinner_questionnaire_workflow_group.rb b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_full_ehr_adaptive_dinner_questionnaire_workflow_group.rb new file mode 100644 index 0000000..8604211 --- /dev/null +++ b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_full_ehr_adaptive_dinner_questionnaire_workflow_group.rb @@ -0,0 +1,76 @@ +require_relative '../../tags' +require_relative 'dtr_full_ehr_adaptive_questionnaire_initial_retrieval_group' +require_relative '../full_ehr/dtr_full_ehr_prepopulation_attestation_test' +require_relative '../full_ehr/dtr_full_ehr_prepopulation_override_attestation_test' +require_relative 'dtr_adaptive_questionnaire_followup_questions_group' +require_relative 'dtr_adaptive_questionnaire_completion_group' + +module DaVinciDTRTestKit + class DTRFullEHRAdaptiveDinnerQuestionnaireWorkflowGroup < Inferno::TestGroup + id :dtr_full_ehr_adaptive_dinner_questionnaire_workflow + title 'Adaptive Questionnaire Workflow' + description %( + This test validates that a DTR Full EHR client can perform a full DTR Adaptive Questionnaire workflow + using a mocked questionnaire requesting what a patient wants for dinner. The client system must + demonstrate their ability to: + + 1. Fetch the adaptive questionnaire package + ([DinnerOrderAdaptive](https://github.com/inferno-framework/davinci-dtr-test-kit/blob/main/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/questionnaire_dinner_order_adaptive.json)) + 2. Fetch the first set of questions and render and pre-populate them appropriately, including: + - pre-populate data as directed by the questionnaire + - display questions only when they are enabled + 3. Answer the initial questions and request additional questions + 4. Complete the questionnaire and provide the completed QuestionnaireResponse + with appropriate indicators for pre-populated and manually-entered data. + ) + + group do + id :dtr_full_ehr_adaptive_questionnaire_retrieval + title 'Retrieving the Adaptive Questionnaire' + description %( + After DTR launch, Inferno will wait for the client system to request a questionnaire using the + $questionnaire-package operation and follow up with an initial $next-question request to retrieve + the first set of questions. + + The initial set of questions will be returned for the tester to complete and attest to pre-population + and questionnaire rendering. + + Inferno will also validate the conformance of the requests. + ) + run_as_group + + group from: :dtr_full_ehr_adaptive_questionnaire_initial_retrieval + group do + id :dtr_full_ehr_initial_questionnaire_rendering + title 'Filling Out the Questionnaire' + description %( + The tester will interact with the questionnaire within their client system + such that pre-population steps are taken, the qustionnaire is rendered, and + they are able to fill it out. The tester will attest that questionnaire pre-population + and rendering directives were followed. + ) + + # Test 1: attest to the pre-population of the name fields + test from: :dtr_full_ehr_prepopulation_attestation + # Test 2: attest to the pre-population and edit of the first name field + test from: :dtr_full_ehr_prepopulation_override_attestation + end + end + + group from: :dtr_adaptive_questionnaire_followup_questions, + config: { + options: { + accepts_multiple_requests: true, + next_tag: "followup_#{CLIENT_NEXT_TAG}" + } + } + + group from: :dtr_adaptive_questionnaire_completion, + config: { + options: { + accepts_multiple_requests: true, + next_tag: "completion_#{CLIENT_NEXT_TAG}" + } + } + end +end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_full_ehr_adaptive_questionnaire_initial_retrieval_group.rb b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_full_ehr_adaptive_questionnaire_initial_retrieval_group.rb new file mode 100644 index 0000000..bc712d8 --- /dev/null +++ b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_full_ehr_adaptive_questionnaire_initial_retrieval_group.rb @@ -0,0 +1,27 @@ +require_relative '../../tags' +require_relative '../full_ehr/dtr_full_ehr_launch_attestation_test' +require_relative 'dtr_full_ehr_adaptive_questionnaire_request_test' +require_relative '../shared/dtr_questionnaire_package_request_validation_test' +require_relative 'dtr_adaptive_questionnaire_next_question_request_validation_test' +require_relative 'dtr_adaptive_questionnaire_response_validation_test' + +module DaVinciDTRTestKit + class DTRFullEHRAdaptiveQuestionnaireInitialRetrievalGroup < Inferno::TestGroup + id :dtr_full_ehr_adaptive_questionnaire_initial_retrieval + title 'Adaptive Questionnaire Package and Initial Questions Retrieval' + + config(options: { next_tag: "initial_#{CLIENT_NEXT_TAG}" }) + run_as_group + + # Test 0: attest to launch + test from: :dtr_full_ehr_launch_attestation + # Test 1: wait for the $questionnaire-package request and initial $next-question request + test from: :dtr_full_ehr_adaptive_questionnaire_request + # Test 2: validate the $questionnaire-package request body + test from: :dtr_questionnaire_package_request_validation + # Test 3: validate the $next-question request body + test from: :dtr_next_question_request_validation + # Test 4: validate the QuestionnaireResponse in the input parameter + test from: :dtr_adaptive_questionnaire_response_validation + end +end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_full_ehr_adaptive_questionnaire_request_test.rb b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_full_ehr_adaptive_questionnaire_request_test.rb new file mode 100644 index 0000000..5127a21 --- /dev/null +++ b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_full_ehr_adaptive_questionnaire_request_test.rb @@ -0,0 +1,63 @@ +require_relative '../../urls' + +module DaVinciDTRTestKit + class DTRFullEHRAdaptiveQuestionnaireRequestTest < Inferno::Test + include URLs + + id :dtr_full_ehr_adaptive_questionnaire_request + title 'Invoke the Questionnaire Package and Initial Next Question Operation' + description %( + This test waits for two sequential client requests: + + 1. **Questionnaire Package Request**: The client should first invoke the `$questionnaire-package` operation + to retrieve the adaptive questionnaire package. Inferno will respond to this request with an empty adaptive + questionnaire. + + 2. **Initial Next Question Request**: After receiving the package, the client should invoke the + `$next-question` operation. Inferno will respond by providing the first set of questions. + ) + + config options: { accepts_multiple_requests: true } + input :access_token + + run do + wait( + identifier: access_token, + message: %( + ### Questionnaire Retrieval + + 1. **Questionnaire Package Request**: + - Invoke the `$questionnaire-package` operation by sending a POST request to the following + endpoint to retrieve the adaptive questionnaire package: + + `#{questionnaire_package_url}`. + + - Inferno will respond with an empty adaptive questionnaire. + + 2. **Initial Next Question Request**: + - After receiving the questionnaire package, invoke the `$next-question` operation by sending + a POST request to the following endpoint to retrieve the first set of questions: + + `#{next_url}`. + + - Inferno will respond with the initial set of questions. + + Inferno will wait for both of these requests to be made. + + ### Request Identification + + In order to identify requests for this session, Inferno will look for + an `Authorization` header with value: + + ``` + Bearer #{access_token} + ``` + + ### Continuing the Tests + + When both requests have been made, [Click here](#{resume_pass_url}?token=#{access_token}) to continue. + ) + ) + end + end +end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_adaptive_questionnaire_initial_retrieval_group.rb b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_adaptive_questionnaire_initial_retrieval_group.rb new file mode 100644 index 0000000..f5c27dd --- /dev/null +++ b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_adaptive_questionnaire_initial_retrieval_group.rb @@ -0,0 +1,24 @@ +require_relative '../../tags' +require_relative 'dtr_smart_app_adaptive_questionnaire_request_test' +require_relative '../shared/dtr_questionnaire_package_request_validation_test' +require_relative 'dtr_adaptive_questionnaire_next_question_request_validation_test' +require_relative 'dtr_adaptive_questionnaire_response_validation_test' + +module DaVinciDTRTestKit + class DTRSmartAppAdaptiveQuestionnaireInitialRetrievalGroup < Inferno::TestGroup + id :dtr_smart_app_adaptive_questionnaire_initial_retrieval + title 'Adaptive Questionnaire Package and Initial Questions Retrieval' + + config(options: { next_tag: "initial_#{CLIENT_NEXT_TAG}" }) + run_as_group + + # Test 1: wait for the $questionnaire-package request and initial $next-question request + test from: :dtr_smart_app_adaptive_questionnaire_request + # Test 2: validate the $questionnaire-package request body + test from: :dtr_questionnaire_package_request_validation + # Test 3: validate the $next-question request body + test from: :dtr_next_question_request_validation + # Test 4: validate the QuestionnaireResponse in the input parameter + test from: :dtr_adaptive_questionnaire_response_validation + end +end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_adaptive_questionnaire_request_test.rb b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_adaptive_questionnaire_request_test.rb new file mode 100644 index 0000000..f20611c --- /dev/null +++ b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_adaptive_questionnaire_request_test.rb @@ -0,0 +1,152 @@ +require_relative '../../urls' + +module DaVinciDTRTestKit + class DTRSmartAppAdaptiveQuestionnaireRequestTest < Inferno::Test + include URLs + + id :dtr_smart_app_adaptive_questionnaire_request + title 'Invoke the Questionnaire Package and Initial Next Question Operation' + description %( + This test waits for two sequential client requests: + + 1. **Questionnaire Package Request**: The client should first invoke the `$questionnaire-package` operation + to retrieve the adaptive questionnaire package. Inferno will respond to this request with an empty adaptive + questionnaire. + + 2. **Initial Next Question Request**: After receiving the package, the client should invoke the + `$next-question` operation. Inferno will respond by providing the first set of questions. + ) + + config options: { accepts_multiple_requests: true } + input :smart_app_launch, + type: 'radio', + title: 'SMART App Launch', + description: 'How will the DTR SMART App launch?', + options: { list_options: [{ label: 'EHR Launch from Inferno', value: 'ehr' }, + { label: 'Standalone Launch', value: 'standalone' }] } + input :client_id + input :launch_uri, + optional: true, + description: 'Required if "Launch from Inferno" is selected' + input :smart_patient_id, + optional: true, + title: 'SMART App Launch Patient ID (Dinner Adaptive)', + type: 'text', + description: %( + Patient instance `id` to be provided by Inferno as the `patient` as a part of the SMART App + Launch. + ), + default: 'pat015' + input :smart_fhir_context, + optional: true, + title: 'SMART App Launch fhirContext (Dinner Adaptive)', + type: 'textarea', + description: %( + References to be provided by Inferno as the `fhirContext` as a part of the SMART App + Launch. These references help determine the behavior of the app. Referenced instances + may be provided in the "EHR-available resources" input. + ), + default: JSON.pretty_generate([{ reference: 'Coverage/cov015' }, + { reference: 'DeviceRequest/devreqe0470' }]) + input :ehr_bundle, + optional: true, + title: 'EHR-available resources (Dinner Adaptive)', + type: 'textarea', + description: %( + Resources available from the EHR needed to drive the dinner adaptive workflow. + Formatted as a FHIR bundle that contains resources, each with an `id` property populated. Each + instance present will be available for retrieval from Inferno at the endpoint: + + ``` + [fhir-base]/[resource type]/[instance id] + ``` + ) + + def example_client_jwt_payload_part + Base64.strict_encode64({ inferno_client_id: client_id }.to_json).delete('=') + end + + run do + # validate relevant inputs and provide warnings if they are bad + warning do + if smart_fhir_context + assert_valid_json(smart_fhir_context, + 'The **SMART App Launch fhirContext** input is not valid JSON, so it will not be included in + the access token response.') + end + end + + warning do + if ehr_bundle + assert_valid_json(ehr_bundle, + 'The **EHR-available resources** input is not valid JSON, so no tester-specified instances + will be available to access from Inferno.') + assert(FHIR.from_contents(ehr_bundle).is_a?(FHIR::Bundle), + 'The **EHR-available resources** input does not contain a FHIR Bundle, so no tester-specified instances + will be available to access from Inferno.') + end + end + + launch_prompt = if smart_app_launch == 'ehr' + %(Launch the DTR SMART App from Inferno by right clicking + [this link](#{launch_uri}?iss=#{fhir_base_url}&launch=#{launch_uri}) + and selecting "Open in new window" or "Open in new tab".) + else + %(Launch the SMART App from your EHR.) + end + inferno_prompt_cont = %(As the DTR app steps through the launch steps, Inferno will wait and respond to the app's + requests for SMART configuration, authorization and access token.) + + wait( + identifier: client_id, + message: %( + ### SMART App Launch + + #{launch_prompt} + + #{inferno_prompt_cont if smart_app_launch == 'ehr'} + + ### Questionnaire Retrieval + + 1. **Questionnaire Package Request**: + - Inferno will expect the SMART App to invoke the DTR Questionnaire Package operation by sending a POST + request to + + `#{questionnaire_package_url}` + + - Inferno will respond with an empty adaptive questionnaire. + + 2. **Initial Next Question Request**: + - After receiving the questionnaire package, invoke the `$next-question` operation by sending + a POST request to the following endpoint to retrieve the first set of questions: + + `#{next_url}`. + + - Inferno will respond with the initial set of questions. + + ### Pre-population + + Inferno will then wait for the client to complete Questionnaire pre-population. The client should make FHIR + GET requests using service base path: + + `#{fhir_base_url}` + + ### Request Identification + + In order to identify requests for this session, Inferno will look for + an `Authorization` header with value: + + ``` + Bearer eyJhbGciOiJub25lIn0.#{example_client_jwt_payload_part}. + ``` + + ### Continuing the Tests + + When the DTR application has finished loading the Questionnaire, + including any clinical data requests to support pre-population, + [Click here](#{resume_pass_url}?client_id=#{client_id}) to continue. + ) + ) + end + end +end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_questionnaire_workflow_group.rb b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_questionnaire_workflow_group.rb index 304aa62..0f745df 100644 --- a/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_questionnaire_workflow_group.rb +++ b/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_questionnaire_workflow_group.rb @@ -1,3 +1,10 @@ +require_relative '../../tags' +require_relative 'dtr_smart_app_adaptive_questionnaire_initial_retrieval_group' +require_relative '../smart_app/dtr_smart_app_prepopulation_attestation_test' +require_relative '../smart_app/dtr_smart_app_prepopulation_override_attestation_test' +require_relative 'dtr_adaptive_questionnaire_followup_questions_group' +require_relative 'dtr_adaptive_questionnaire_completion_group' + module DaVinciDTRTestKit class DTRSmartAppAdaptiveDinnerQuestionnaireWorkflowGroup < Inferno::TestGroup id :dtr_smart_app_adaptive_dinner_questionnaire_workflow @@ -8,6 +15,7 @@ class DTRSmartAppAdaptiveDinnerQuestionnaireWorkflowGroup < Inferno::TestGroup demonstrate their ability to: 1. Fetch the adaptive questionnaire package + ([DinnerOrderAdaptive](https://github.com/inferno-framework/davinci-dtr-test-kit/blob/main/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/questionnaire_dinner_order_adaptive.json)) 2. Fetch the first set of questions and render and pre-populate them appropriately, including: - fetch additional data needed for pre-population - pre-populate data as directed by the questionnaire @@ -16,5 +24,72 @@ class DTRSmartAppAdaptiveDinnerQuestionnaireWorkflowGroup < Inferno::TestGroup 4. Complete the questionnaire and provide the completed QuestionnaireResponse with appropriate indicators for pre-populated and manually-entered data. ) + + config( + options: { + smart_app: true + } + ) + + group do + id :dtr_smart_app_adaptive_questionnaire_retrieval + title 'Retrieving the Adaptive Questionnaire' + description %( + Inferno will wait for the client system to request a questionnaire using the + $questionnaire-package operation and follow up with an initial $next-question request to retrieve + the first set of questions. + + The initial set of questions will be returned for the tester to complete. + + Inferno will then validate the conformance of the requests. + ) + run_as_group + + group from: :dtr_smart_app_adaptive_questionnaire_initial_retrieval + group do + id :dtr_smart_app_initial_questionnaire_rendering + title 'Filling Out the Questionnaire' + description %( + The tester will interact with the questionnaire within their client system + such that pre-population steps are taken, the qustionnaire is rendered, and + they are able to fill it out. The tester will attest that questionnaire pre-population + and rendering directives were followed. + ) + + # Test 1: attest to the pre-population of the name fields + test from: :dtr_smart_app_prepopulation_attestation + # Test 2: attest to the pre-population and edit of the location field + test from: :dtr_smart_app_prepopulation_override_attestation + end + end + + group from: :dtr_adaptive_questionnaire_followup_questions, + config: { + options: { + accepts_multiple_requests: true, + next_tag: "followup_#{CLIENT_NEXT_TAG}" + }, + inputs: { + access_token: { name: :client_id } + } + } + + group from: :dtr_adaptive_questionnaire_completion, + config: { + options: { + accepts_multiple_requests: true, + next_tag: "completion_#{CLIENT_NEXT_TAG}" + }, + inputs: { + access_token: { name: :client_id } + } + } + group from: :dtr_smart_app_saving_questionnaire_response, + config: { + options: { + adaptive: true, + qr_profile_url: 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt' + } + } end end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_questionnaire_workflow_group.rb b/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_questionnaire_workflow_group.rb index 420a5f9..dbce283 100644 --- a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_questionnaire_workflow_group.rb +++ b/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_questionnaire_workflow_group.rb @@ -1,12 +1,10 @@ -require_relative 'dtr_full_ehr_launch_attestation_test' -require_relative 'dtr_full_ehr_dinner_questionnaire_package_request_test' +require_relative '../full_ehr/dtr_full_ehr_launch_attestation_test' +require_relative '../full_ehr/dtr_full_ehr_questionnaire_package_request_test' require_relative '../shared/dtr_questionnaire_package_request_validation_test' -require_relative 'dtr_full_ehr_prepopulation_attestation_test' -require_relative 'dtr_full_ehr_prepopulation_override_attestation_test' -require_relative 'dtr_full_ehr_rendering_enabled_questions_attestation_test' -require_relative 'dtr_full_ehr_store_attestation_test' -require_relative 'dtr_full_ehr_dinner_static_questionnaire_response_conformance_test' -require_relative 'dtr_full_ehr_dinner_static_questionnaire_response_correctness_test' +require_relative '../full_ehr/dtr_full_ehr_prepopulation_attestation_test' +require_relative '../full_ehr/dtr_full_ehr_rendering_enabled_questions_attestation_test' +require_relative '../full_ehr/dtr_full_ehr_prepopulation_override_attestation_test' +require_relative '../full_ehr/dtr_full_ehr_saving_questionnaire_response_group' module DaVinciDTRTestKit class DTRFullEHRStaticDinnerQuestionnaireWorkflowGroup < Inferno::TestGroup @@ -36,9 +34,9 @@ class DTRFullEHRStaticDinnerQuestionnaireWorkflowGroup < Inferno::TestGroup run_as_group # Test 0: attest to launch - test from: :dtr_full_ehr_dinner_static_launch_attestation + test from: :dtr_full_ehr_launch_attestation # Test 1: wait for the $questionnaire-package request - test from: :dtr_full_ehr_dinner_questionnaire_package_request + test from: :dtr_full_ehr_questionnaire_package_request # Test 2: validate the $questionnaire-package body test from: :dtr_questionnaire_package_request_validation end @@ -55,37 +53,23 @@ class DTRFullEHRStaticDinnerQuestionnaireWorkflowGroup < Inferno::TestGroup run_as_group # Test 1: attest to the pre-population of the name fields - test from: :dtr_full_ehr_dinner_static_rendering_prepopulation_attestation + test from: :dtr_full_ehr_prepopulation_attestation # Test 2: attest to the pre-population and edit of the first name field - test from: :dtr_full_ehr_dinner_static_prepopulation_override_attestation + test from: :dtr_full_ehr_prepopulation_override_attestation # Test 3: attest to the display of the toppings questions only when a dinner answer is selected - test from: :dtr_full_ehr_dinner_static_rendering_enabledQs_attestation + test from: :dtr_full_ehr_rendering_enabled_questions_attestation end - group do - id :dtr_full_ehr_static_questionnaire_response - title 'Saving the QuestionnaireResponse' - description %( - The tester will attest to the completion of the questionnaire such that - the results are stored for later use. - ) - input :questionnaire_response, - type: 'textarea', - title: 'Completed QuestionnaireResponse', - optional: true, - description: %( - The QuestionnaireResponse as exported from the EHR after completion of the Questionnaire. IMPORTANT: If - you have not yet run the 'Filling Out the Static Questionnaire' group, leave this blank until you have - done so. Then, run just the 'Saving the QuestionnaireResponse' group and populate this input. - ) - run_as_group - - # Test 1: attest QuestionnaireResponse saved - test from: :dtr_full_ehr_dinner_static_store_attestation - # Test 2: verify basic conformance of the QuestionnaireResponse - test from: :dtr_full_ehr_dinner_static_questionnaire_response_conformance - # Test 3: check workflow-specific details such as pre-population and overrides - test from: :dtr_full_ehr_dinner_static_questionnaire_response_correctness - end + group from: :dtr_full_ehr_saving_questionnaire_response, + config: { + inputs: { + questionnaire_response: { + description: "The QuestionnaireResponse as exported from the EHR after completion of the Questionnaire. + IMPORTANT: If you have not yet run the 'Filling Out the Static Questionnaire' group, leave this blank + until you have done so. Then, run just the 'Saving the QuestionnaireResponse' group and populate + this input." + } + } + } end end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_questionnaire_workflow_group.rb b/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_questionnaire_workflow_group.rb index 7ca91bf..c203ae7 100644 --- a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_questionnaire_workflow_group.rb +++ b/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_questionnaire_workflow_group.rb @@ -1,11 +1,9 @@ require_relative 'dtr_smart_app_dinner_questionnaire_package_request_test' require_relative '../shared/dtr_questionnaire_package_request_validation_test' -require_relative 'dtr_smart_app_prepopulation_attestation_test' -require_relative 'dtr_smart_app_prepopulation_override_attestation_test' -require_relative 'dtr_smart_app_rendering_enabled_questions_attestation_test' -require_relative 'dtr_smart_app_questionnaire_response_save_test' -require_relative '../shared/dtr_questionnaire_response_basic_conformance_test' -require_relative '../shared/dtr_questionnaire_response_pre_population_test' +require_relative '../smart_app/dtr_smart_app_prepopulation_attestation_test' +require_relative '../smart_app/dtr_smart_app_prepopulation_override_attestation_test' +require_relative '../smart_app/dtr_smart_app_rendering_enabled_questions_attestation_test' +require_relative '../smart_app/dtr_smart_app_saving_questionnaire_response_group' module DaVinciDTRTestKit class DTRSmartAppStaticDinnerQuestionnaireWorkflowGroup < Inferno::TestGroup @@ -32,7 +30,7 @@ class DTRSmartAppStaticDinnerQuestionnaireWorkflowGroup < Inferno::TestGroup description %( Inferno will wait for the client system to request a questionnaire using the $questionnaire-package operation and will return a static questionnaire for the - tester to complete. Inferno will then validate the the conformance of the request. + tester to complete. Inferno will then validate the conformance of the request. ) run_as_group @@ -58,33 +56,13 @@ class DTRSmartAppStaticDinnerQuestionnaireWorkflowGroup < Inferno::TestGroup # since the questionnaire asks them to # TODO: once Tom has gotten the reference server hooked up # Test 2: attest to the pre-population of the name fields - test from: :dtr_smart_app_dinner_static_rendering_prepopulation_attestation + test from: :dtr_smart_app_prepopulation_attestation # Test 3: attest to the pre-population and edit of the location field - test from: :dtr_smart_app_dinner_static_prepopulation_override_attestation + test from: :dtr_smart_app_prepopulation_override_attestation # Test 4: attest to the display of the toppings questions only when a dinner answer is selected - test from: :dtr_smart_app_dinner_static_rendering_enabledQs_attestation + test from: :dtr_smart_app_rendering_enabled_questions_attestation end - group do - id :dtr_smart_app_static_questionnaire_response - title 'Saving the QuestionnaireResponse' - description %( - The tester will complete the questionnaire such that a QuestionnaireResponse is stored - back into Inferno's EHR endpoint. The stored QuestionnaireResponse will be evaluated for - conformance, completeness, and correct indicators on pre-populated and manually-overriden - items. - ) - run_as_group - - # Test 1: wait for a QuestionnaireResponse - test from: :dtr_smart_app_static_dinner_questionnaire_response_save, - receives_request: :questionnaire_response_save - # Test 2: validate basic conformance of the QuestionnaireResponse - test from: :dtr_questionnaire_response_basic_conformance, - uses_request: :questionnaire_response_save - # Test 3: validate workflow-specific details such as pre-population and overrides - test from: :dtr_questionnaire_response_pre_population, - uses_request: :questionnaire_response_save - end + group from: :dtr_smart_app_saving_questionnaire_response end end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_launch_attestation_test.rb b/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_launch_attestation_test.rb similarity index 86% rename from lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_launch_attestation_test.rb rename to lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_launch_attestation_test.rb index cbf4907..11242e2 100644 --- a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_launch_attestation_test.rb +++ b/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_launch_attestation_test.rb @@ -2,10 +2,10 @@ require_relative '../../urls' module DaVinciDTRTestKit - class DTRFullEHRStaticDinnerLaunchAttestationTest < Inferno::Test + class DTRFullEHRLaunchAttestationTest < Inferno::Test include URLs - id :dtr_full_ehr_dinner_static_launch_attestation + id :dtr_full_ehr_launch_attestation title 'Launch DTR for a patient that has an official name (Attestation)' description %( Attest that DTR has been launched for a patient with data that will be used for prepopulation. diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_prepopulation_attestation_test.rb b/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_prepopulation_attestation_test.rb similarity index 85% rename from lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_prepopulation_attestation_test.rb rename to lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_prepopulation_attestation_test.rb index fbe07a2..4631460 100644 --- a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_prepopulation_attestation_test.rb +++ b/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_prepopulation_attestation_test.rb @@ -2,10 +2,10 @@ require_relative '../../urls' module DaVinciDTRTestKit - class DTRFullEHRStaticDinnerPrepopulationAttestationTest < Inferno::Test + class DTRFullEHRPrepopulationAttestationTest < Inferno::Test include URLs - id :dtr_full_ehr_dinner_static_rendering_prepopulation_attestation + id :dtr_full_ehr_prepopulation_attestation title 'Check that the client pre-populates the questionnaire (Attestation)' description %( Validate that pre-population of patient name information occurs as expected. diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_prepopulation_override_attestation_test.rb b/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_prepopulation_override_attestation_test.rb similarity index 82% rename from lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_prepopulation_override_attestation_test.rb rename to lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_prepopulation_override_attestation_test.rb index d04ed62..e439340 100644 --- a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_prepopulation_override_attestation_test.rb +++ b/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_prepopulation_override_attestation_test.rb @@ -2,10 +2,10 @@ require_relative '../../urls' module DaVinciDTRTestKit - class DTRFullEHRStaticDinnerPrepopulationOverrideAttestationTest < Inferno::Test + class DTRFullEHRPrepopulationOverrideAttestationTest < Inferno::Test include URLs - id :dtr_full_ehr_dinner_static_prepopulation_override_attestation + id :dtr_full_ehr_prepopulation_override_attestation title 'Validate the user can override pre-populated data (Attestation)' description %( Validate that the user can edit a pre-populated item and replace it with another value. diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_dinner_questionnaire_package_request_test.rb b/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_questionnaire_package_request_test.rb similarity index 90% rename from lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_dinner_questionnaire_package_request_test.rb rename to lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_questionnaire_package_request_test.rb index e6913d6..fb29765 100644 --- a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_dinner_questionnaire_package_request_test.rb +++ b/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_questionnaire_package_request_test.rb @@ -1,11 +1,10 @@ -require 'base64' require_relative '../../urls' module DaVinciDTRTestKit - class DTRFullEHRDinnerQuestionnairePackageRequestTest < Inferno::Test + class DTRFullEHRQuestionnairePackageRequestTest < Inferno::Test include URLs - id :dtr_full_ehr_dinner_questionnaire_package_request + id :dtr_full_ehr_questionnaire_package_request title 'Invoke the DTR Questionnaire Package operation' description %( Inferno will wait for a DTR questionnaire package request from the client. Upon receipt, Inferno will generate and diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_dinner_static_questionnaire_response_conformance_test.rb b/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_questionnaire_response_conformance_test.rb similarity index 54% rename from lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_dinner_static_questionnaire_response_conformance_test.rb rename to lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_questionnaire_response_conformance_test.rb index d51156a..af1b0bf 100644 --- a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_dinner_static_questionnaire_response_conformance_test.rb +++ b/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_questionnaire_response_conformance_test.rb @@ -1,15 +1,19 @@ require_relative '../../dtr_questionnaire_response_validation' module DaVinciDTRTestKit - class DTRFullEHRDinnerStaticQuestionnaireResponseConformanceTest < Inferno::Test + class DTRFullEHRQuestionnaireResponseConformanceTest < Inferno::Test include DTRQuestionnaireResponseValidation - id :dtr_full_ehr_dinner_static_questionnaire_response_conformance + id :dtr_full_ehr_questionnaire_response_conformance title 'QuestionnaireResponse is conformant' + def profile_url + config.options[:qr_profile_url] + end + run do skip_if questionnaire_response.nil?, 'Completed QuestionnaireResponse input was blank' - verify_basic_conformance(questionnaire_response) + verify_basic_conformance(questionnaire_response, profile_url) end end end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_dinner_static_questionnaire_response_correctness_test.rb b/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_questionnaire_response_correctness_test.rb similarity index 59% rename from lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_dinner_static_questionnaire_response_correctness_test.rb rename to lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_questionnaire_response_correctness_test.rb index da68c23..79409ed 100644 --- a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_dinner_static_questionnaire_response_correctness_test.rb +++ b/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_questionnaire_response_correctness_test.rb @@ -1,29 +1,36 @@ require_relative '../../dtr_questionnaire_response_validation' module DaVinciDTRTestKit - class DTRFullEHRDinnerStaticQuestionnaireResponseCorrectnessTest < Inferno::Test + class DTRFullEHRQuestionnaireResponseCorrectnessTest < Inferno::Test include DTRQuestionnaireResponseValidation - id :dtr_full_ehr_dinner_static_questionnaire_response_correctness + id :dtr_full_ehr_questionnaire_response_correctness title 'QuestionnaireResponse is correct for the workflow' description %( The QuestionnaireResponse aligns with the following expectations for the workflow. This includes checks for the presence of the following answers and their appropriate origin source extensions: - - PBD.1 (Last Name): `auto` + - `PBD.1` (Last Name) and `LOC.1` (Location): `auto` - PBD.2 (First Name): `override` - - 3.1 (dinner choice): `manual` + - `3` (all nested dinner questions): `manual` ) run do skip_if questionnaire_response.nil?, 'Completed QuestionnaireResponse input was blank' check_is_questionnaire_response(questionnaire_response) - questionnaire = Fixtures.questionnaire_for_test(id) - # questionnaire = Fixtures.find_questionnaire('DinnerOrderStatic') qr = FHIR.from_contents(questionnaire_response) + questionnaire = if config.options[:adaptive] + qr.contained.find do |res| + res.resourceType == 'Questionnaire' + end + else + Fixtures.questionnaire_for_test(id) + end + # questionnaire = Fixtures.find_questionnaire('DinnerOrderStatic') check_origin_sources(questionnaire.item, qr.item, expected_overrides: ['PBD.2']) - check_answer_presence(qr.item, link_ids: ['PBD.1', 'PBD.2', 'LOC.1']) + required_link_ids = extract_required_link_ids(questionnaire.item) + check_answer_presence(qr.item, required_link_ids) assert(messages.none? { |m| m[:type] == 'error' }, 'QuestionnaireResponse is not correct, see error message(s)') end end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_rendering_enabled_questions_attestation_test.rb b/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_rendering_enabled_questions_attestation_test.rb similarity index 87% rename from lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_rendering_enabled_questions_attestation_test.rb rename to lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_rendering_enabled_questions_attestation_test.rb index e85eb79..3ac2df4 100644 --- a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_rendering_enabled_questions_attestation_test.rb +++ b/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_rendering_enabled_questions_attestation_test.rb @@ -2,10 +2,10 @@ require_relative '../../urls' module DaVinciDTRTestKit - class DTRFullEHRStaticDinnerRenderingAttestationTest < Inferno::Test + class DTRFullEHRRenderingEnabledQuestionsAttestationTest < Inferno::Test include URLs - id :dtr_full_ehr_dinner_static_rendering_enabledQs_attestation + id :dtr_full_ehr_rendering_enabled_questions_attestation title 'Check that the client renders enabled questions appropriately (Attestation)' description %( Validate that the rendering of the questionnaire includes only the "What would you like on..." diff --git a/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_saving_questionnaire_response_group.rb b/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_saving_questionnaire_response_group.rb new file mode 100644 index 0000000..dd97590 --- /dev/null +++ b/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_saving_questionnaire_response_group.rb @@ -0,0 +1,29 @@ +require_relative 'dtr_full_ehr_store_attestation_test' +require_relative 'dtr_full_ehr_questionnaire_response_conformance_test' +require_relative 'dtr_full_ehr_questionnaire_response_correctness_test' + +module DaVinciDTRTestKit + class DTRFullEHRSavingQuestionnaireResponseGroup < Inferno::TestGroup + id :dtr_full_ehr_saving_questionnaire_response + title 'Saving the QuestionnaireResponse' + description %( + The tester will attest to the completion of the questionnaire such that + the results are stored for later use. + ) + input :questionnaire_response, + type: 'textarea', + title: 'Completed QuestionnaireResponse', + optional: true, + description: %( + The QuestionnaireResponse as exported from the EHR after completion of the Questionnaire. + ) + run_as_group + + # Test 1: attest QuestionnaireResponse saved + test from: :dtr_full_ehr_store_attestation + # Test 2: verify basic conformance of the QuestionnaireResponse + test from: :dtr_full_ehr_questionnaire_response_conformance + # Test 3: check workflow-specific details such as pre-population and overrides + test from: :dtr_full_ehr_questionnaire_response_correctness + end +end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_store_attestation_test.rb b/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_store_attestation_test.rb similarity index 87% rename from lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_store_attestation_test.rb rename to lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_store_attestation_test.rb index b622776..2944834 100644 --- a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_store_attestation_test.rb +++ b/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_store_attestation_test.rb @@ -2,10 +2,10 @@ require_relative '../../urls' module DaVinciDTRTestKit - class DTRFullEHRStaticDinnerStoreAttestationTest < Inferno::Test + class DTRFullEHRStoreAttestationTest < Inferno::Test include URLs - id :dtr_full_ehr_dinner_static_store_attestation + id :dtr_full_ehr_store_attestation title 'Complete and Store the QuestionnaireResponse (Attestation)' description %( Attest that the questionnaire has been completed and the response has been persisted diff --git a/lib/davinci_dtr_test_kit/client_groups/shared/dtr_questionnaire_response_basic_conformance_test.rb b/lib/davinci_dtr_test_kit/client_groups/shared/dtr_questionnaire_response_basic_conformance_test.rb index 57c6016..a101f77 100644 --- a/lib/davinci_dtr_test_kit/client_groups/shared/dtr_questionnaire_response_basic_conformance_test.rb +++ b/lib/davinci_dtr_test_kit/client_groups/shared/dtr_questionnaire_response_basic_conformance_test.rb @@ -14,11 +14,15 @@ class DTRQuestionnaireResponseBasicConformanceTest < Inferno::Test to the DTR Questionnaire Response resource profile. ) + def profile_url + config.options[:qr_profile_url] + end + run do assert request.url == questionnaire_response_url, "Request made to wrong URL: #{request.url}. Should instead be to #{questionnaire_response_url}" - verify_basic_conformance(request.request_body) + verify_basic_conformance(request.request_body, profile_url) end end end diff --git a/lib/davinci_dtr_test_kit/client_groups/shared/dtr_questionnaire_response_pre_population_test.rb b/lib/davinci_dtr_test_kit/client_groups/shared/dtr_questionnaire_response_pre_population_test.rb index 7171411..b96286a 100644 --- a/lib/davinci_dtr_test_kit/client_groups/shared/dtr_questionnaire_response_pre_population_test.rb +++ b/lib/davinci_dtr_test_kit/client_groups/shared/dtr_questionnaire_response_pre_population_test.rb @@ -1,5 +1,3 @@ -# frozen_string_literal: true - require_relative '../../dtr_questionnaire_response_validation' require_relative '../../fixtures' @@ -27,9 +25,18 @@ class DTRQuestionnaireResponsePrePopulationTest < Inferno::Test questionnaire_response_json = request.request_body check_is_questionnaire_response(questionnaire_response_json) questionnaire_response = FHIR.from_contents(questionnaire_response_json) - questionnaire = Fixtures.questionnaire_for_test(id) - response_template = Fixtures.questionnaire_response_for_test(id) - validate_questionnaire_pre_population(questionnaire, response_template, questionnaire_response) + if config.options[:adaptive] + questionnaire = questionnaire_response.contained.find { |res| res.resourceType == 'Questionnaire' } + assert questionnaire, 'Adaptive QuestionnaireResponse must have a contained Questionnaire resource.' + check_origin_sources(questionnaire.item, questionnaire_response.item, expected_overrides: ['PBD.2']) + required_link_ids = extract_required_link_ids(questionnaire.item) + check_answer_presence(questionnaire_response.item, required_link_ids) + assert(messages.none? { |m| m[:type] == 'error' }, 'QuestionnaireResponse is not correct, see error message(s)') + else + questionnaire = Fixtures.questionnaire_for_test(id) + response_template = Fixtures.questionnaire_response_for_test(id) + validate_questionnaire_pre_population(questionnaire, response_template, questionnaire_response) + end end end end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_prepopulation_attestation_test.rb b/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_prepopulation_attestation_test.rb similarity index 84% rename from lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_prepopulation_attestation_test.rb rename to lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_prepopulation_attestation_test.rb index 786ec5e..be07fec 100644 --- a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_prepopulation_attestation_test.rb +++ b/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_prepopulation_attestation_test.rb @@ -2,10 +2,10 @@ require_relative '../../urls' module DaVinciDTRTestKit - class DTRSmartAppStaticDinnerPrepopulationAttestationTest < Inferno::Test + class DTRSmartAppPrepopulationAttestationTest < Inferno::Test include URLs - id :dtr_smart_app_dinner_static_rendering_prepopulation_attestation + id :dtr_smart_app_prepopulation_attestation title 'Check that the client pre-populates the questionnaire (Attestation)' description %( Validate that pre-population of patient name information occurs as expected. diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_prepopulation_override_attestation_test.rb b/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_prepopulation_override_attestation_test.rb similarity index 83% rename from lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_prepopulation_override_attestation_test.rb rename to lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_prepopulation_override_attestation_test.rb index 67d7324..e6cc43e 100644 --- a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_prepopulation_override_attestation_test.rb +++ b/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_prepopulation_override_attestation_test.rb @@ -2,10 +2,10 @@ require_relative '../../urls' module DaVinciDTRTestKit - class DTRSmartAppStaticDinnerPrepopulationOverrideAttestationTest < Inferno::Test + class DTRSmartAppPrepopulationOverrideAttestationTest < Inferno::Test include URLs - id :dtr_smart_app_dinner_static_prepopulation_override_attestation + id :dtr_smart_app_prepopulation_override_attestation title 'Validate the user can override pre-populated data (Attestation)' description %( Validate that the user can edit a pre-populated item and replace it with another value. diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_questionnaire_response_save_test.rb b/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_questionnaire_response_save_test.rb similarity index 64% rename from lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_questionnaire_response_save_test.rb rename to lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_questionnaire_response_save_test.rb index 1f17067..ac35e99 100644 --- a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_questionnaire_response_save_test.rb +++ b/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_questionnaire_response_save_test.rb @@ -1,30 +1,40 @@ require_relative '../../urls' module DaVinciDTRTestKit - class DTRSmartAppStaticDinnerQuestionnaireResponseSaveTest < Inferno::Test + class DTRSmartAppQuestionnaireResponseSaveTest < Inferno::Test include URLs - id :dtr_smart_app_static_dinner_questionnaire_response_save + id :dtr_smart_app_questionnaire_response_save title 'Save the QuestionnaireResponse after completing it' description %( Inferno, acting as the EHR, will wait for a request to save the QuestionnaireResponse from the client. ) input :client_id - run do - wait( - identifier: client_id, - message: %( + def prompt + if config.options[:adaptive] + 'Store the completed questionnaire back into the EHR.' + else + <<~DESCRIPTION Complete the questionnaire, leaving the following items unmodified, because a subsequent test will expect their pre-populated values: - First Name - Last Name + DESCRIPTION + end + end + + run do + wait( + identifier: client_id, + message: <<~MESSAGE + #{prompt} Inferno will wait for a POST request at: `#{questionnaire_response_url}` - ) + MESSAGE ) end end diff --git a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_rendering_enabled_questions_attestation_test.rb b/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_rendering_enabled_questions_attestation_test.rb similarity index 87% rename from lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_rendering_enabled_questions_attestation_test.rb rename to lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_rendering_enabled_questions_attestation_test.rb index 9fa12a8..b23d9f2 100644 --- a/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_rendering_enabled_questions_attestation_test.rb +++ b/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_rendering_enabled_questions_attestation_test.rb @@ -2,10 +2,10 @@ require_relative '../../urls' module DaVinciDTRTestKit - class DTRSmartAppStaticDinnerRenderingAttestationTest < Inferno::Test + class DTRSmartAppRenderingEnabledQuestionsAttestationTest < Inferno::Test include URLs - id :dtr_smart_app_dinner_static_rendering_enabledQs_attestation + id :dtr_smart_app_rendering_enabled_questions_attestation title 'Check that the client renders enabled questions appropriately (Attestation)' description %( Validate that the rendering of the questionnaire includes only the "What would you like on..." diff --git a/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_saving_questionnaire_response_group.rb b/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_saving_questionnaire_response_group.rb new file mode 100644 index 0000000..05fc530 --- /dev/null +++ b/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_saving_questionnaire_response_group.rb @@ -0,0 +1,27 @@ +require_relative 'dtr_smart_app_questionnaire_response_save_test' +require_relative '../shared/dtr_questionnaire_response_basic_conformance_test' +require_relative '../shared/dtr_questionnaire_response_pre_population_test' + +module DaVinciDTRTestKit + class DTRSmartAppSavingQuestionnaireResponseGroup < Inferno::TestGroup + id :dtr_smart_app_saving_questionnaire_response + title 'Saving the QuestionnaireResponse' + description %( + The tester will complete the questionnaire such that a QuestionnaireResponse is stored + back into Inferno's EHR endpoint. The stored QuestionnaireResponse will be evaluated for + conformance, completeness, and correct indicators on pre-populated and manually-overriden + items. + ) + run_as_group + + # Test 1: wait for a QuestionnaireResponse + test from: :dtr_smart_app_questionnaire_response_save, + receives_request: :questionnaire_response_save + # Test 2: validate basic conformance of the QuestionnaireResponse + test from: :dtr_questionnaire_response_basic_conformance, + uses_request: :questionnaire_response_save + # Test 3: validate workflow-specific details such as pre-population and overrides + test from: :dtr_questionnaire_response_pre_population, + uses_request: :questionnaire_response_save + end +end diff --git a/lib/davinci_dtr_test_kit/dtr_full_ehr_suite.rb b/lib/davinci_dtr_test_kit/dtr_full_ehr_suite.rb index d9807c3..727fa03 100644 --- a/lib/davinci_dtr_test_kit/dtr_full_ehr_suite.rb +++ b/lib/davinci_dtr_test_kit/dtr_full_ehr_suite.rb @@ -2,6 +2,7 @@ require_relative 'ext/inferno_core/record_response_route' require_relative 'ext/inferno_core/request' require_relative 'client_groups/dinner_static/dtr_full_ehr_questionnaire_workflow_group' +require_relative 'client_groups/dinner_adaptive/dtr_full_ehr_adaptive_dinner_questionnaire_workflow_group' require_relative 'auth_groups/oauth2_authentication_group' require_relative 'mock_payer' require_relative 'version' @@ -45,7 +46,15 @@ class DTRFullEHRSuite < Inferno::TestSuite end end - allow_cors QUESTIONNAIRE_PACKAGE_PATH + allow_cors QUESTIONNAIRE_PACKAGE_PATH, NEXT_PATH + + def self.test_resumes?(test) + !test.config.options[:accepts_multiple_requests] + end + + def self.next_request_tag(test) + test.config.options[:next_tag] + end record_response_route :post, PAYER_TOKEN_PATH, 'dtr_full_ehr_payer_token', method(:payer_token_response) do |request| @@ -53,7 +62,12 @@ class DTRFullEHRSuite < Inferno::TestSuite end record_response_route :post, QUESTIONNAIRE_PACKAGE_PATH, QUESTIONNAIRE_PACKAGE_TAG, - method(:questionnaire_package_response) do |request| + method(:questionnaire_package_response), resumes: method(:test_resumes?) do |request| + DTRFullEHRSuite.extract_bearer_token(request) + end + + record_response_route :post, NEXT_PATH, method(:next_request_tag), method(:client_questionnaire_next_response), + resumes: method(:test_resumes?) do |request| DTRFullEHRSuite.extract_bearer_token(request) end @@ -67,5 +81,6 @@ class DTRFullEHRSuite < Inferno::TestSuite group from: :oauth2_authentication group from: :dtr_full_ehr_static_dinner_questionnaire_workflow + group from: :dtr_full_ehr_adaptive_dinner_questionnaire_workflow end end diff --git a/lib/davinci_dtr_test_kit/dtr_questionnaire_response_validation.rb b/lib/davinci_dtr_test_kit/dtr_questionnaire_response_validation.rb index 4953074..a70bf8c 100644 --- a/lib/davinci_dtr_test_kit/dtr_questionnaire_response_validation.rb +++ b/lib/davinci_dtr_test_kit/dtr_questionnaire_response_validation.rb @@ -20,10 +20,10 @@ def check_is_questionnaire_response(questionnaire_response_json) assert_resource_type(:questionnaire_response, resource: questionnaire_response) end - def verify_basic_conformance(questionnaire_response_json) + def verify_basic_conformance(questionnaire_response_json, profile_url = nil) + profile_url ||= 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaireresponse|2.0.1' check_is_questionnaire_response(questionnaire_response_json) - assert_valid_resource(resource: FHIR.from_contents(questionnaire_response_json), - profile_url: 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaireresponse|2.0.1') + assert_valid_resource(resource: FHIR.from_contents(questionnaire_response_json), profile_url:) end # This only checks answers in the questionnaire response, meaning it does not catch missing answers @@ -55,17 +55,25 @@ def check_origin_source(origin_source, link_id, is_cql_expression, override: fal end end - # This checks presence of all answers if link_ids is nil - def check_answer_presence(items, link_ids: nil) - items.each do |item| - check_answer_presence(item.item, link_ids:) - - if !item.answer&.first&.value.present? && (link_ids.nil? || link_ids.include?(item.linkId)) - add_message('error', "No answer for item #{item.linkId}") + # Ensures that all required questions have been answered. + # If required_link_ids not provided, all questions are treated as optional. + def check_answer_presence(response_items, required_link_ids = []) + required_link_ids.each do |link_id| + item = find_item_by_link_id(response_items, link_id) + unless item&.answer&.any? { |answer| answer.value.present? } + add_message('error', "No answer for item #{link_id}") end end end + def extract_required_link_ids(questionnaire_items) + questionnaire_items.each_with_object([]) do |item, required_link_ids| + required_link_ids << item.linkId if item.required + + required_link_ids.concat(extract_required_link_ids(item.item)) if item.item.present? + end + end + # Requirements: # - Prior to exposing the draft QuestionnaireResponse to the user for completion and/or review, the DTR client # SHALL execute all CQL necessary to resolve the initialExpression, candidateExpression and diff --git a/lib/davinci_dtr_test_kit/dtr_smart_app_suite.rb b/lib/davinci_dtr_test_kit/dtr_smart_app_suite.rb index 2e580fb..c761495 100644 --- a/lib/davinci_dtr_test_kit/dtr_smart_app_suite.rb +++ b/lib/davinci_dtr_test_kit/dtr_smart_app_suite.rb @@ -50,7 +50,15 @@ class DTRSmartAppSuite < Inferno::TestSuite end allow_cors QUESTIONNAIRE_PACKAGE_PATH, QUESTIONNAIRE_RESPONSE_PATH, FHIR_RESOURCE_PATH, FHIR_SEARCH_PATH, - EHR_AUTHORIZE_PATH, EHR_TOKEN_PATH, JKWS_PATH, OPENID_CONFIG_PATH + EHR_AUTHORIZE_PATH, EHR_TOKEN_PATH, JKWS_PATH, OPENID_CONFIG_PATH, NEXT_PATH + + def self.test_resumes?(test) + !test.config.options[:accepts_multiple_requests] + end + + def self.next_request_tag(test) + test.config.options[:next_tag] + end route(:get, '/fhir/metadata', method(:metadata_handler)) @@ -84,6 +92,11 @@ class DTRSmartAppSuite < Inferno::TestSuite DTRSmartAppSuite.extract_client_id_from_bearer_token(request) end + record_response_route :post, NEXT_PATH, method(:next_request_tag), method(:client_questionnaire_next_response), + resumes: method(:test_resumes?) do |request| + DTRSmartAppSuite.extract_client_id_from_bearer_token(request) + end + record_response_route :post, QUESTIONNAIRE_RESPONSE_PATH, 'dtr_smart_app_questionnaire_response', method(:questionnaire_response_response) do |request| DTRSmartAppSuite.extract_client_id_from_bearer_token(request) @@ -118,7 +131,7 @@ class DTRSmartAppSuite < Inferno::TestSuite ) group from: :dtr_smart_app_static_dinner_questionnaire_workflow - # group from: :dtr_smart_app_adaptive_dinner_questionnaire_workflow - TODO + group from: :dtr_smart_app_adaptive_dinner_questionnaire_workflow end group do id :dtr_smart_app_questionnaire_functionality diff --git a/lib/davinci_dtr_test_kit/ext/inferno_core/record_response_route.rb b/lib/davinci_dtr_test_kit/ext/inferno_core/record_response_route.rb index e971128..b2d9b1a 100644 --- a/lib/davinci_dtr_test_kit/ext/inferno_core/record_response_route.rb +++ b/lib/davinci_dtr_test_kit/ext/inferno_core/record_response_route.rb @@ -28,8 +28,10 @@ def build_response_block end # @private - def tags - self.class.singleton_class.instance_variable_get(:@tags) + def tags(test) + raw_tags = self.class.singleton_class.instance_variable_get(:@tags) + evaluated_tags = raw_tags.is_a?(String) ? raw_tags : instance_exec(test, &raw_tags) + Array.wrap(evaluated_tags) end # @private @@ -59,7 +61,7 @@ def persist_request(request, test_run, waiting_result, test) test_session_id: test_run.test_session_id, result_id: waiting_result.id, name: test.config.request_name(test.incoming_request_name), - tags: + tags: tags(test) ) ) end diff --git a/lib/davinci_dtr_test_kit/ext/inferno_core/runnable.rb b/lib/davinci_dtr_test_kit/ext/inferno_core/runnable.rb index 3416325..aaf1e01 100644 --- a/lib/davinci_dtr_test_kit/ext/inferno_core/runnable.rb +++ b/lib/davinci_dtr_test_kit/ext/inferno_core/runnable.rb @@ -24,7 +24,7 @@ def record_response_route(method, path, tags, build_response, resumes: ->(_) { t route_class = Class.new(Inferno::DSL::RecordResponseRoute) do |klass| klass.singleton_class.instance_variable_set(:@build_response_block, build_response) klass.singleton_class.instance_variable_set(:@test_run_identifier_block, block) - klass.singleton_class.instance_variable_set(:@tags, Array.wrap(tags)) + klass.singleton_class.instance_variable_set(:@tags, tags) klass.singleton_class.instance_variable_set(:@resumes, resumes) end diff --git a/lib/davinci_dtr_test_kit/fixtures.rb b/lib/davinci_dtr_test_kit/fixtures.rb index 9568d30..d589bf1 100644 --- a/lib/davinci_dtr_test_kit/fixtures.rb +++ b/lib/davinci_dtr_test_kit/fixtures.rb @@ -21,6 +21,23 @@ module Fixtures ], questionnaire_package: File.join('dinner_static', 'questionnaire_dinner_order_static.json'), questionnaire_response: File.join('dinner_static', 'questionnaire_response_dinner_order_static.json') + }, + { + group_ids: [ + 'dtr_full_ehr_adaptive_questionnaire_retrieval', + 'dtr_smart_app_adaptive_questionnaire_retrieval' + ], + questionnaire_package: File.join('dinner_adaptive', 'questionnaire_dinner_order_adaptive.json'), + next_question: File.join('dinner_adaptive', 'dinner_order_adaptive_next_question_initial.json') + }, + { + group_ids: [ + 'dtr_adaptive_questionnaire_followup_questions' + ], + next_question: { + bean_burrito: File.join('dinner_adaptive', 'dinner_order_adaptive_next_question_burrito.json'), + hamburger: File.join('dinner_adaptive', 'dinner_order_adaptive_next_question_hamburger.json') + } } ].freeze @@ -31,6 +48,11 @@ def questionnaire_package_for_test(full_test_id) get_fixture(full_test_id, :questionnaire_package) end + # full_test_id needs to be the long inferno-generated ID that includes hyphenated ancestor IDs + def next_question_for_test(full_test_id, option = nil) + get_fixture(full_test_id, :next_question, option) + end + # full_test_id needs to be the long inferno-generated ID that includes hyphenated ancestor IDs def questionnaire_response_for_test(full_test_id) get_fixture(full_test_id, :questionnaire_response) @@ -43,10 +65,11 @@ def questionnaire_for_test(full_test_id) private - def get_fixture(full_test_id, fixture_type) + def get_fixture(full_test_id, fixture_type, option = nil) fixture_path = extract_group_ids(full_test_id).filter_map do |group_id| FIXTURE_CONFIG.find { |fc| fc[:group_ids].include?(group_id) }&.dig(fixture_type) end&.first + fixture_path = fixture_path[option.to_sym] if option && fixture_path.is_a?(Hash) FixtureLoader.instance[fixture_path] end diff --git a/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_burrito.json b/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_burrito.json index 6ab1343..bc6af56 100644 --- a/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_burrito.json +++ b/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_burrito.json @@ -4,9 +4,14 @@ "meta": { "profile": [ "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", - "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt" + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt", + "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-adapt" ] }, + "text": { + "status": "generated", + "div": "
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
" + }, "extension": [ { "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive", @@ -17,6 +22,9 @@ "valueCanonical": "https://madie.cms.gov/Library/DTRTest" } ], + "derivedFrom": [ + "urn:inferno:dtr-test-kit:dinner-order-adaptive" + ], "name": "DinnerOrderAdaptive", "title": "Dinner Order (Adaptive)", "status": "draft", @@ -167,4 +175,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_hamburger.json b/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_hamburger.json index 673326c..8cf9e6b 100644 --- a/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_hamburger.json +++ b/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_hamburger.json @@ -4,9 +4,14 @@ "meta": { "profile": [ "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", - "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt" + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt", + "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-adapt" ] }, + "text": { + "status": "generated", + "div": "
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
" + }, "extension": [ { "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive", @@ -17,6 +22,9 @@ "valueCanonical": "https://madie.cms.gov/Library/DTRTest" } ], + "derivedFrom": [ + "urn:inferno:dtr-test-kit:dinner-order-adaptive" + ], "name": "DinnerOrderAdaptive", "title": "Dinner Order (Adaptive)", "status": "draft", @@ -172,4 +180,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_initial.json b/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_initial.json index 7526aa0..469bf64 100644 --- a/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_initial.json +++ b/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_initial.json @@ -4,9 +4,14 @@ "meta": { "profile": [ "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", - "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt" + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt", + "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-adapt" ] }, + "text": { + "status": "generated", + "div": "
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
" + }, "extension": [ { "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive", @@ -17,6 +22,9 @@ "valueCanonical": "https://madie.cms.gov/Library/DTRTest" } ], + "derivedFrom": [ + "urn:inferno:dtr-test-kit:dinner-order-adaptive" + ], "name": "DinnerOrderAdaptive", "title": "Dinner Order (Adaptive)", "status": "draft", @@ -137,4 +145,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/questionnaire_dinner_order_adaptive.json b/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/questionnaire_dinner_order_adaptive.json index 502b412..06b24e9 100644 --- a/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/questionnaire_dinner_order_adaptive.json +++ b/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/questionnaire_dinner_order_adaptive.json @@ -5,10 +5,12 @@ "resource": { "resourceType": "Questionnaire", "id": "DinnerOrderAdaptive", + "url": "urn:inferno:dtr-test-kit:dinner-order-adaptive", "meta": { "profile": [ "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", - "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt-search" + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt-search", + "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-adapt" ] }, "extension": [ @@ -23,7 +25,6 @@ ], "name": "DinnerOrderAdaptive", "title": "Dinner Order (Adaptive)", - "url": "urn:inferno:dtr-test-kit:dinner-order-adaptive", "status": "draft", "subjectType": [ "Patient" @@ -92,4 +93,4 @@ } } ] -} \ No newline at end of file +} diff --git a/lib/davinci_dtr_test_kit/mock_payer.rb b/lib/davinci_dtr_test_kit/mock_payer.rb index b91a54d..3940d8b 100644 --- a/lib/davinci_dtr_test_kit/mock_payer.rb +++ b/lib/davinci_dtr_test_kit/mock_payer.rb @@ -1,5 +1,3 @@ -# frozen_string_literal: true - require_relative 'fixtures' module DaVinciDTRTestKit @@ -12,12 +10,23 @@ def questionnaire_package_response(request, _test = nil, test_result = nil) request.response_body = build_questionnaire_package_response(request, test_result.test_id).to_json end + def client_questionnaire_next_response(request, _test = nil, test_result = nil) + request.status = 200 + request.response_headers = RESPONSE_HEADERS + request.response_body = build_questionnaire_next_response(request, test_result.test_id).to_json + end + def payer_questionnaire_response(request, _test = nil, test_result = nil) - endpoint_input = JSON.parse(test_result.input_json).find { |input| input['name'] == 'custom_endpoint' } - url_input = JSON.parse(test_result.input_json).find { |input| input['name'] == 'url' } - client = FHIR::Client.new(url_input['value']) + session_id = test_result.test_session_id + session_data = Inferno::Repositories::SessionData.new + endpoint_input = session_data.load(test_session_id: session_id, name: 'custom_endpoint') + url_input = session_data.load(test_session_id: session_id, name: 'url') + credentials_input = session_data.load(test_session_id: session_id, name: 'credentials', type: 'oauth_credentials') + + client = FHIR::Client.new(url_input) client.default_json - endpoint = endpoint_input.to_h['value'].nil? ? '/Questionnaire/$questionnaire-package' : endpoint_input['value'] + client.set_bearer_token(credentials_input.access_token) if credentials_input.access_token + endpoint = endpoint_input.nil? ? '/Questionnaire/$questionnaire-package' : endpoint_input payer_response = client.send(:post, endpoint, JSON.parse(request.request_body), { 'Content-Type' => 'application/json' }) @@ -27,9 +36,14 @@ def payer_questionnaire_response(request, _test = nil, test_result = nil) end def questionnaire_next_response(request, _test = nil, test_result = nil) - url_endpoint = JSON.parse(test_result.input_json).find { |input| input['name'] == 'url' } - client = FHIR::Client.new(url_endpoint['value']) + session_id = test_result.test_session_id + session_data = Inferno::Repositories::SessionData.new + url_input = session_data.load(test_session_id: session_id, name: 'url') + credentials_input = session_data.load(test_session_id: session_id, name: 'credentials', type: 'oauth_credentials') + + client = FHIR::Client.new(url_input) client.default_json + client.set_bearer_token(credentials_input.access_token) if credentials_input.access_token payer_response = client.send(:post, '/Questionnaire/$next-question', JSON.parse(request.request_body), { 'Content-Type' => 'application/json' }) @@ -46,11 +60,8 @@ def test_resumes?(test) private def build_questionnaire_package_response(request, test_id) - begin - input_parameters = FHIR.from_contents(request.request_body) - rescue StandardError - return operation_outcome('error', 'invalid', 'No valid input parameters') - end + input_parameters = parse_request_body(request) + return input_parameters if input_parameters.is_a?(FHIR::OperationOutcome) questionnaire_package = Fixtures.questionnaire_package_for_test(test_id) unless questionnaire_package @@ -65,26 +76,85 @@ def build_questionnaire_package_response(request, test_id) return questionnaire_package unless other_questionnaire_params.any? - FHIR::Parameters.new( - parameter: [ - FHIR::Parameters::Parameter.new( - name: 'PackageBundle', - resource: questionnaire_package - ), - FHIR::Parameters::Parameter.new( - name: 'Outcome', - resource: FHIR::OperationOutcome.new( - issue: other_questionnaire_params.map do |param| - outcome_issue('warning', 'not-found', "Questionnaire #{param.valueCanonical} does not exist") - end - ) - ) - ] - ) + package_bundle_param = FHIR::Parameters::Parameter.new(name: 'PackageBundle', resource: questionnaire_package) + issues = other_questionnaire_params.map do |param| + outcome_issue('warning', 'not-found', "Questionnaire #{param.valueCanonical} does not exist") + end + outcome_param = build_outcome_param(issues) + + build_parameters([package_bundle_param, outcome_param]) end - def find_questionnaire_canonical(questionnaire_package) - questionnaire_package&.entry&.find { |e| e.resource.is_a?(FHIR::Questionnaire) }&.resource&.url + def build_questionnaire_next_response(request, test_id) + input_parameters = parse_request_body(request) + return input_parameters if input_parameters.is_a?(FHIR::OperationOutcome) + + questionnaire_response = extract_questionnaire_response(input_parameters) + return questionnaire_response if questionnaire_response.is_a?(FHIR::OperationOutcome) + + questionnaire_response_param = FHIR::Parameters::Parameter.new(name: 'return', resource: questionnaire_response) + + if questionnaire_last_dinner_order_question_present?(questionnaire_response) + # change the questionnaire response status to completed and return the parameters + return handle_last_dinner_order(questionnaire_response) + end + + next_questionnaire = determine_next_questionnaire(questionnaire_response, test_id) + + return missing_next_questionnaire_outcome(test_id) unless next_questionnaire + + update_questionnaire_response(questionnaire_response, next_questionnaire) + + unless questionnaire_in_questionnaire_response_exist?(questionnaire_response, next_questionnaire) + issue = "Questionnaire #{questionnaire_response.questionnaire} does not exist" + outcome_param = build_outcome_param([outcome_issue('warning', 'not-found', issue)]) + questionnaire_response_param.name = 'return' + return build_parameters([questionnaire_response_param, outcome_param]) + end + + questionnaire_response + end + + def extract_questionnaire_response(input_parameters) + if input_parameters.is_a?(FHIR::Parameters) + questionnaire_response_param = find_questionnaire_response(input_parameters) + return questionnaire_response_param if questionnaire_response_param.is_a?(FHIR::OperationOutcome) + + questionnaire_response = questionnaire_response_param.resource + return invalid_next_question_param_resource_outcome unless valid_questionnaire_response?(questionnaire_response) + + questionnaire_response + elsif input_parameters.is_a?(FHIR::QuestionnaireResponse) + input_parameters + else + operation_outcome('error', 'invalid', 'wrong resource type submitted for $next-question request.') + end + end + + def determine_next_questionnaire(questionnaire_response, test_id) + # Retrieve the selected option from the response and determine the next set of questions + if questionnaire_dinner_order_selection_present?(questionnaire_response) + dinner_question_from_selection(questionnaire_response, test_id) + else + Fixtures.next_question_for_test(test_id) + end + end + + def parse_request_body(request) + FHIR.from_contents(request.request_body) + rescue StandardError + operation_outcome('error', 'invalid', 'No valid input parameters') + end + + def build_parameters(parameters) + FHIR::Parameters.new(parameter: parameters) + end + + def build_outcome_param(issues) + FHIR::Parameters::Parameter.new( + name: 'Outcome', + resource: FHIR::OperationOutcome.new(issue: issues) + ) end def operation_outcome(severity, code, text = nil) @@ -96,5 +166,82 @@ def outcome_issue(severity, code, text = nil) issue.details = FHIR::CodeableConcept.new(text:) if text.present? end end + + def find_questionnaire_response(input_parameters) + questionnaire_response_param = input_parameters.try(&:parameter)&.find do |param| + param.name == 'questionnaire-response' + end + return questionnaire_response_param if questionnaire_response_param + + operation_outcome('error', 'business-rule', + 'Input parameter does not have a `parameter:questionnaire-response` slice.') + end + + def valid_questionnaire_response?(questionnaire_response) + questionnaire_response.is_a?(FHIR::QuestionnaireResponse) + end + + def invalid_next_question_param_resource_outcome + issue = 'Input `parameter:questionnaire-response.resource` is missing or not a QuestionnaireResponse.' + operation_outcome('error', 'business-rule', issue) + end + + def missing_next_questionnaire_outcome(test_id) + operation_outcome('error', 'business-rule', "No Questionnaire found for Inferno test #{test_id}") + end + + def handle_last_dinner_order(questionnaire_response) + update_questionnaire_response(questionnaire_response) + questionnaire_response + end + + # Retrieve the selected option from the response and determine the next set of questions + def dinner_question_from_selection(questionnaire_response, test_id) + option = retrieve_dinner_order_selection(questionnaire_response) + unless option + issue = 'Cannot determine next question to return: Dinner order selection answer missing ' + return operation_outcome('error', 'business-rule', issue) + end + + Fixtures.next_question_for_test(test_id, option) + end + + def questionnaire_in_questionnaire_response_exist?(questionnaire_response, next_questionnaire) + questionnaire_response.questionnaire&.include?(next_questionnaire.id) + end + + def questionnaire_dinner_order_selection_present?(questionnaire_response) + # LinkId = 3.1 for the What would you like for dinner? question + path = "contained.where($this is Questionnaire).item.where(linkId = '3').item.where(linkId = '3.1').exists()" + result = evaluator.evaluate_fhirpath(questionnaire_response, path, new) + !!result.first&.dig('element') + end + + def questionnaire_last_dinner_order_question_present?(questionnaire_response) + # LinkId = 3.3 for the Any special requests? question + path = "contained.where($this is Questionnaire).item.where(linkId = '3').item.where(linkId = '3.3').exists()" + result = evaluator.evaluate_fhirpath(questionnaire_response, path, new) + !!result.first&.dig('element') + end + + def retrieve_dinner_order_selection(questionnaire_response) + # LinkId = 3.1 for the What would you like for dinner? question + path = "item.where(linkId = '3').item.where(linkId = '3.1').answer.where(value is Coding).value.code" + result = evaluator.evaluate_fhirpath(questionnaire_response, path, new) + result.first&.dig('element')&.parameterize&.underscore + end + + def update_questionnaire_response(questionnaire_response, next_questionnaire = nil) + if next_questionnaire + questionnaire_response.contained.reject! { |resource| resource.resourceType == 'Questionnaire' } + questionnaire_response.contained << next_questionnaire + else + questionnaire_response.status = 'completed' + end + end + + def find_questionnaire_canonical(questionnaire_package) + questionnaire_package&.entry&.find { |e| e.resource.is_a?(FHIR::Questionnaire) }&.resource&.url + end end end diff --git a/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_next_questionnaire_expressions_test.rb b/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_next_questionnaire_expressions_test.rb index 2551893..38c36d8 100644 --- a/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_next_questionnaire_expressions_test.rb +++ b/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_next_questionnaire_expressions_test.rb @@ -15,7 +15,6 @@ class PayerAdaptiveNextQuestionExpressionsTest < Inferno::Test skip_if scratch[:next_question_questionnaire_responses].nil?, 'No questionnaires returned.' questionnaires = extract_contained_questionnaires(scratch[:next_question_questionnaire_responses]) verify_questionnaire_items(questionnaires, final_cql_test: true) - scratch[:next_question_questionnaire_responses] = nil end end end diff --git a/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_next_response_complete_test.rb b/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_next_response_complete_test.rb index 86f15aa..17866d2 100644 --- a/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_next_response_complete_test.rb +++ b/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_next_response_complete_test.rb @@ -11,6 +11,7 @@ class PayerAdaptiveFormCompleteTest < Inferno::Test assert !scratch[:next_question_questionnaire_responses].nil?, 'No resources to validate.' assert scratch[:next_question_questionnaire_responses].any? { |qr| qr.status == 'completed' }, 'Next request sequence did not result in a completed questionnaire.' + scratch[:next_question_questionnaire_responses] = nil end end end diff --git a/lib/davinci_dtr_test_kit/tags.rb b/lib/davinci_dtr_test_kit/tags.rb index 0d1b857..984ebd1 100644 --- a/lib/davinci_dtr_test_kit/tags.rb +++ b/lib/davinci_dtr_test_kit/tags.rb @@ -1,9 +1,8 @@ -# frozen_string_literal: true - module DaVinciDTRTestKit - QUESTIONNAIRE_TAG = 'payer_server_questionnaire_package' - NEXT_TAG = 'payer_server_adaptive_questionnaire_package' - QUESTIONNAIRE_PACKAGE_TAG = 'dtr_questionnaire_package' - SMART_APP_EHR_REQUEST_TAG = 'dtr_smart_app_ehr_request' - EHR_AUTHORIZE_TAG = 'dtr_smart_app_ehr_authorize' + QUESTIONNAIRE_TAG = 'payer_server_questionnaire_package'.freeze + NEXT_TAG = 'payer_server_adaptive_questionnaire_package'.freeze + QUESTIONNAIRE_PACKAGE_TAG = 'dtr_questionnaire_package'.freeze + CLIENT_NEXT_TAG = 'dtr_questionnaire_next_question'.freeze + SMART_APP_EHR_REQUEST_TAG = 'dtr_smart_app_ehr_request'.freeze + EHR_AUTHORIZE_TAG = 'dtr_smart_app_ehr_authorize'.freeze end diff --git a/spec/davinci_dtr_test_kit/dtr_full_ehr_adaptive_questionnaire_initial_retrieval_group_spec.rb b/spec/davinci_dtr_test_kit/dtr_full_ehr_adaptive_questionnaire_initial_retrieval_group_spec.rb new file mode 100644 index 0000000..efd04bd --- /dev/null +++ b/spec/davinci_dtr_test_kit/dtr_full_ehr_adaptive_questionnaire_initial_retrieval_group_spec.rb @@ -0,0 +1,219 @@ +require_relative '../request_helper' + +RSpec.describe DaVinciDTRTestKit::DTRFullEHRAdaptiveQuestionnaireInitialRetrievalGroup do + include RequestHelpers + + let(:group) { Inferno::Repositories::TestGroups.new.find('dtr_full_ehr_adaptive_questionnaire_initial_retrieval') } + let(:suite_id) { :dtr_full_ehr } + let(:questionnaire_package_url) { "/custom/#{suite_id}/fhir/Questionnaire/$questionnaire-package" } + let(:next_url) { "/custom/#{suite_id}/fhir/Questionnaire/$next-question" } + let(:session_data_repo) { Inferno::Repositories::SessionData.new } + let(:results_repo) { Inferno::Repositories::Results.new } + let(:test_session) { repo_create(:test_session, test_suite_id: suite_id) } + let(:access_token) { 'sample_token' } + let(:next_question_request_body) do + File.read(File.join(__dir__, '..', 'fixtures', 'next_question_initial_input_params_conformant.json')) + end + let(:next_question_request_body_nonconformant) do + File.read(File.join(__dir__, '..', 'fixtures', 'next_question_initial_input_params_nonconformant.json')) + end + let(:next_tag) { "initial#{DaVinciDTRTestKit::CLIENT_NEXT_TAG}" } + + def run(runnable, test_session, inputs = {}) + test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) + test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) + inputs.each do |name, value| + session_data_repo.save( + test_session_id: test_session.id, + name:, + value:, + type: runnable.config.input_type(name) + ) + end + Inferno::TestRunner.new(test_session:, test_run:).run(runnable) + end + + def build_next_request(request_body) + result = repo_create(:result, test_session_id: test_session.id) + repo_create(:request, result_id: result.id, url: next_url, request_body:, + test_session_id: test_session.id, tags: [next_tag]) + end + + describe 'questionnaire package request and initial next question request test' do + let(:runnable) { group.tests.find { |test| test.id.to_s.end_with? 'dtr_full_ehr_adaptive_questionnaire_request' } } + let(:results_repo) { Inferno::Repositories::Results.new } + let(:package_request_body) do + File.read(File.join(__dir__, '..', 'fixtures', 'questionnaire_package_input_params_conformant.json')) + end + let(:resume_pass_url) { "/custom/#{suite_id}/resume_pass?token=#{access_token}" } + + it 'passes if questionnaire package and next question requests are received' do + allow_any_instance_of(DaVinciDTRTestKit::URLs).to(receive(:questionnaire_package_url).and_return('')) + allow_any_instance_of(DaVinciDTRTestKit::URLs).to(receive(:next_url).and_return('')) + allow_any_instance_of(DaVinciDTRTestKit::URLs).to(receive(:resume_pass_url).and_return('')) + + result = run(runnable, test_session, access_token:) + expect(result.result).to eq('wait') + + header 'Authorization', "Bearer #{access_token}" + post(questionnaire_package_url, package_request_body) + expect(last_response.ok?).to be(true) + post(next_url, package_request_body) + expect(last_response.ok?).to be(true) + + get(resume_pass_url) + + result = results_repo.find(result.id) + expect(result.result).to eq('pass') + end + end + + describe 'next question request validation test' do + let(:runnable) do + group.tests.find do |test| + test.id.to_s.end_with? 'dtr_next_question_request_validation' + end + end + + before do + allow_any_instance_of(DaVinciDTRTestKit::URLs).to( + receive(:next_url).and_return(next_url) + ) + allow_any_instance_of(runnable).to receive(:assert_valid_resource).and_return(true) + allow_any_instance_of(runnable).to receive(:next_request_tag).and_return(next_tag) + end + + it 'passes if next question input parameters are conformant' do + build_next_request(next_question_request_body) + + result = run(runnable, test_session) + expect(result.result).to eq('pass'), result.result_message + end + + it 'skips if no next-question request was made' do + result = run(runnable, test_session) + expect(result.result).to eq('skip') + expect(result.result_message).to match(/next-question request must be made prior to running this test/) + end + + it 'fails if next question request body is not a valid json' do + build_next_request('[[') + + result = run(runnable, test_session) + expect(result.result).to eq('fail') + expect(result.result_message).to match(/Invalid JSON/) + end + + it 'fails if next question request body is not a valid FHIR object' do + build_next_request({}.to_json) + + result = run(runnable, test_session) + expect(result.result).to eq('fail') + expect(result.result_message).to match(/does not contain a recognized FHIR object/) + end + + it 'fails if next question request body is not a Parameters resource' do + build_next_request({ resourceType: 'Patient' }.to_json) + + result = run(runnable, test_session) + expect(result.result).to eq('fail') + expect(result.result_message).to match(/Expected Parameters or QuestionnaireResponse/) + end + + it 'fails if next question input parameters resource does not have a questionnaire-response param' do + build_next_request(next_question_request_body_nonconformant) + + result = run(runnable, test_session) + expect(result.result).to eq('fail') + expect(result.result_message).to match(/must contain one `parameter:questionnaire-response` slice/) + end + + it 'fails if the resource for the questionnaire-response param is not QuestionnaireResponse' do + param = FHIR::Parameters::Parameter.new(name: 'questionnaire-response', resource: FHIR::Patient.new) + build_next_request(FHIR::Parameters.new(parameter: [param]).to_json) + + result = run(runnable, test_session) + expect(result.result).to eq('fail') + expect(result.result_message).to match(/Unexpected resource type: expected QuestionnaireResponse/) + end + end + + describe 'adaptive questionnaire response validation test' do + let(:runnable) do + group.tests.find do |test| + test.id.to_s.end_with? 'dtr_adaptive_questionnaire_response_validation' + end + end + + before do + allow_any_instance_of(DaVinciDTRTestKit::URLs).to( + receive(:next_url).and_return(next_url) + ) + allow_any_instance_of(runnable).to receive(:assert_valid_resource).and_return(true) + allow_any_instance_of(runnable).to receive(:next_request_tag).and_return(next_tag) + end + + it 'passes if QuestionnaireResponse is conformant' do + build_next_request(next_question_request_body) + + result = run(runnable, test_session) + expect(result.result).to eq('pass'), result.result_message + end + + it 'skips if no next-question request was made' do + result = run(runnable, test_session) + expect(result.result).to eq('skip') + expect(result.result_message).to match(/next-question request must be made prior to running this test/) + end + + it 'fails if next question request body is not a valid json' do + build_next_request('[[') + + result = run(runnable, test_session) + expect(result.result).to eq('fail') + expect(result.result_message).to match(/Invalid JSON/) + end + + it 'akips if next question request body is not a valid FHIR object' do + build_next_request({}.to_json) + + result = run(runnable, test_session) + expect(result.result).to eq('skip') + expect(result.result_message).to match(/does not contain a recognized FHIR object/) + end + + it 'akips if next question input parameters resource does not have questionnaire-response param slice' do + build_next_request(next_question_request_body_nonconformant) + + result = run(runnable, test_session) + expect(result.result).to eq('skip') + expect(result.result_message).to match(/QuestionnaireResponse resource not provided/) + end + + it 'fails if the answers in the questionnaire response do not have the correct origin.source' do + request_body = File.read(File.join(__dir__, '..', 'fixtures', + 'next_question_input_params_no_origin_extension.json')) + build_next_request(request_body) + + result = run(runnable, test_session) + expect(result.result).to eq('fail') + result_messages_string = results_repo + .current_results_for_test_session_and_runnables(test_session.id, [runnable]) + .first.messages.map(&:message).join + expect(result_messages_string).to match(/Required `origin.source` extension not present on answer/) + end + + it 'fails if a required answer is missing from the questionnaire response' do + request_body = File.read(File.join(__dir__, '..', 'fixtures', + 'next_question_input_params_missing_answer.json')) + build_next_request(request_body) + + result = run(runnable, test_session) + expect(result.result).to eq('fail') + result_messages_string = results_repo + .current_results_for_test_session_and_runnables(test_session.id, [runnable]) + .first.messages.map(&:message).join + expect(result_messages_string).to match(/No answer for item/) + end + end +end diff --git a/spec/fixtures/next_question_initial_input_params_conformant.json b/spec/fixtures/next_question_initial_input_params_conformant.json new file mode 100644 index 0000000..d86b617 --- /dev/null +++ b/spec/fixtures/next_question_initial_input_params_conformant.json @@ -0,0 +1,60 @@ +{ + "resourceType": "Parameters", + "id": "next-question-initial", + "meta": { + "profile": [ + "http://hl7.org/fhir/uv/sdc/StructureDefinition/parameters-questionnaire-next-question-in" + ] + }, + "parameter": [ + { + "name": "questionnaire-response", + "resource": { + "resourceType": "QuestionnaireResponse", + "id": "adaptive-dinner-response", + "meta": { + "profile": [ + "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt" + ] + }, + "status": "in-progress", + "questionnaire": "#DinnerOrderAdaptive", + "subject": { + "reference": "Patient/example" + }, + "authored": "2024-10-10T00:00:00Z", + "contained": [ + { + "resourceType": "Questionnaire", + "id": "DinnerOrderAdaptive", + "url": "urn:inferno:dtr-test-kit:dinner-order-adaptive", + "meta": { + "profile": [ + "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt-search" + ] + }, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive", + "valueBoolean": true + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "https://madie.cms.gov/Library/DTRTest" + } + ], + "name": "DinnerOrderAdaptive", + "title": "Dinner Order (Adaptive)", + "status": "draft", + "subjectType": [ + "Patient" + ], + "date": "2024-05-06", + "publisher": "Inferno" + } + ] + } + } + ] +} diff --git a/spec/fixtures/next_question_initial_input_params_nonconformant.json b/spec/fixtures/next_question_initial_input_params_nonconformant.json new file mode 100644 index 0000000..8820075 --- /dev/null +++ b/spec/fixtures/next_question_initial_input_params_nonconformant.json @@ -0,0 +1,10 @@ +{ + "resourceType": "Parameters", + "id": "next-question-initial", + "meta": { + "profile": [ + "http://hl7.org/fhir/uv/sdc/StructureDefinition/parameters-questionnaire-next-question-in" + ] + }, + "parameter": [] +} diff --git a/spec/fixtures/next_question_input_params_missing_answer.json b/spec/fixtures/next_question_input_params_missing_answer.json new file mode 100644 index 0000000..9d4d88b --- /dev/null +++ b/spec/fixtures/next_question_input_params_missing_answer.json @@ -0,0 +1,263 @@ +{ + "resourceType": "Parameters", + "id": "next-question-followup-request", + "meta": { + "profile": [ + "http://hl7.org/fhir/uv/sdc/StructureDefinition/parameters-questionnaire-next-question-in" + ] + }, + "parameter": [ + { + "name": "questionnaire-response", + "resource": { + "resourceType": "QuestionnaireResponse", + "id": "adaptive-dinner-response", + "meta": { + "profile": [ + "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt" + ] + }, + "status": "in-progress", + "questionnaire": "#DinnerOrderAdaptive", + "subject": { + "reference": "Patient/example" + }, + "authored": "2024-10-10T00:00:00Z", + "contained": [ + { + "resourceType": "Questionnaire", + "id": "DinnerOrderAdaptive", + "meta": { + "profile": [ + "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt" + ] + }, + "text": { + "status": "generated", + "div": "
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
" + }, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive", + "valueBoolean": true + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "https://madie.cms.gov/Library/DTRTest" + } + ], + "derivedFrom": [ + "urn:inferno:dtr-test-kit:dinner-order-adaptive" + ], + "name": "DinnerOrderAdaptive", + "title": "Dinner Order (Adaptive)", + "status": "draft", + "subjectType": [ + "Patient" + ], + "date": "2024-05-06", + "publisher": "Inferno", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "linkId": "PBD", + "text": "Patient Information", + "type": "group", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"DTRTest\".LastName" + } + } + ], + "linkId": "PBD.1", + "text": "Last Name:", + "type": "string", + "required": true + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"DTRTest\".FirstName" + } + } + ], + "linkId": "PBD.2", + "text": "First Name:", + "type": "string", + "required": true + } + ] + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "linkId": "LOC", + "text": "Patient's Location", + "type": "group", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"DTRTest\".FirstLocationDescription" + } + } + ], + "linkId": "LOC.1", + "text": "Location", + "type": "string", + "required": true + } + ] + }, + { + "linkId": "3", + "text": "Dinner Order", + "type": "group", + "item": [ + { + "linkId": "3.1", + "text": "What would you like for dinner?", + "type": "choice", + "required": true, + "answerOption": [ + { + "valueCoding": { + "code": "Hamburger" + } + }, + { + "valueCoding": { + "code": "Bean Burrito" + } + } + ] + } + ] + } + ] + } + ], + "item": [ + { + "linkId": "PBD", + "text": "Patient Information", + "item": [ + { + "linkId": "PBD.1", + "text": "Last Name:", + "answer": [ + { + "valueString": "Smith", + "extension": [ + { + "url": "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin", + "extension": [ + { + "url": "source", + "valueCode": "auto" + } + ] + } + ] + } + ] + }, + { + "linkId": "PBD.2", + "text": "First Name:", + "answer": [ + { + "valueString": "John", + "extension": [ + { + "url": "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin", + "extension": [ + { + "url": "source", + "valueCode": "override" + }, + { + "url": "author", + "extension": [ + { + "url": "patient", + "valueReference": { + "reference": "Patient/example" + } + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "linkId": "LOC", + "text": "Patient's Location", + "item": [ + { + "linkId": "LOC.1", + "text": "Location", + "answer": [ + { + "valueString": "Home", + "extension": [ + { + "url": "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin", + "extension": [ + { + "url": "source", + "valueCode": "auto" + } + ] + } + ] + } + ] + } + ] + } + ] + } + } + ] +} diff --git a/spec/fixtures/next_question_input_params_no_origin_extension.json b/spec/fixtures/next_question_input_params_no_origin_extension.json new file mode 100644 index 0000000..01ce567 --- /dev/null +++ b/spec/fixtures/next_question_input_params_no_origin_extension.json @@ -0,0 +1,278 @@ +{ + "resourceType": "Parameters", + "id": "next-question-final-request", + "meta": { + "profile": [ + "http://hl7.org/fhir/uv/sdc/StructureDefinition/parameters-questionnaire-next-question-in" + ] + }, + "parameter": [ + { + "name": "questionnaire-response", + "resource": { + "resourceType": "QuestionnaireResponse", + "id": "adaptive-dinner-response", + "meta": { + "profile": [ + "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt" + ] + }, + "status": "in-progress", + "questionnaire": "#DinnerOrderAdaptive", + "subject": { + "reference": "Patient/example" + }, + "authored": "2024-10-10T00:00:00Z", + "contained": [ + { + "resourceType": "Questionnaire", + "id": "DinnerOrderAdaptive", + "meta": { + "profile": [ + "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt" + ] + }, + "text": { + "status": "generated", + "div": "
This is an adaptive questionnaire used to determine what a patient would like for dinner, including pre-populated patient information.
" + }, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive", + "valueBoolean": true + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "https://madie.cms.gov/Library/DTRTest" + } + ], + "name": "DinnerOrderAdaptive", + "title": "Dinner Order (Adaptive)", + "derivedFrom": [ + "urn:inferno:dtr-test-kit:dinner-order-adaptive" + ], + "status": "draft", + "subjectType": [ + "Patient" + ], + "date": "2024-05-06", + "publisher": "Inferno", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "linkId": "PBD", + "text": "Patient Information", + "type": "group", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"DTRTest\".LastName" + } + } + ], + "linkId": "PBD.1", + "text": "Last Name:", + "type": "string", + "required": true + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"DTRTest\".FirstName" + } + } + ], + "linkId": "PBD.2", + "text": "First Name:", + "type": "string", + "required": true + } + ] + }, + { + "linkId": "LOC", + "text": "Patient's Location", + "type": "group", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"DTRTest\".FirstLocationDescription" + } + } + ], + "linkId": "LOC.1", + "text": "Location", + "type": "string", + "required": true + } + ] + }, + { + "linkId": "3", + "text": "Dinner Order", + "type": "group", + "item": [ + { + "linkId": "3.1", + "text": "What would you like for dinner?", + "type": "choice", + "required": true, + "answerOption": [ + { + "valueCoding": { + "code": "Hamburger" + } + }, + { + "valueCoding": { + "code": "Bean Burrito" + } + } + ] + }, + { + "linkId": "3.2.b", + "text": "What would you like on your bean burrito?", + "type": "choice", + "required": false, + "repeats": true, + "answerOption": [ + { + "valueCoding": { + "code": "Cheese" + } + }, + { + "valueCoding": { + "code": "Pico de Gallo" + } + }, + { + "valueCoding": { + "code": "Guacamole" + } + } + ] + }, + { + "linkId": "3.3", + "text": "Any special requests?", + "type": "string", + "required": false + } + ] + } + ] + } + ], + "item": [ + { + "linkId": "PBD", + "text": "Patient Information", + "item": [ + { + "linkId": "PBD.1", + "text": "Last Name:", + "answer": [ + { + "valueString": "Smith" + } + ] + }, + { + "linkId": "PBD.2", + "text": "First Name:", + "answer": [ + { + "valueString": "John" + } + ] + } + ] + }, + { + "linkId": "LOC", + "text": "Patient's Location", + "item": [ + { + "linkId": "LOC.1", + "text": "Location", + "answer": [ + { + "valueString": "Home" + } + ] + } + ] + }, + { + "linkId": "3", + "text": "Dinner Order", + "item": [ + { + "linkId": "3.1", + "text": "What would you like for dinner?", + "answer": [ + { + "valueCoding": { + "code": "Bean Burrito" + } + } + ] + }, + { + "linkId": "3.2.b", + "text": "What would you like on your bean burrito?", + "answer": [ + { + "valueCoding": { + "code": "Cheese" + } + }, + { + "valueCoding": { + "code": "Guacamole" + } + } + ] + }, + { + "linkId": "3.3", + "text": "Any special requests?", + "answer": [ + { + "valueString": "Extra napkins, please." + } + ] + } + ] + } + ] + } + } + ] +} diff --git a/spec/request_helper.rb b/spec/request_helper.rb new file mode 100644 index 0000000..0a7ac17 --- /dev/null +++ b/spec/request_helper.rb @@ -0,0 +1,14 @@ +require 'spec_helper' +require 'rack/test' +require 'inferno/apps/web/application' + +module RequestHelpers + include Rack::Test::Methods + def app + Inferno::Web.app + end + + def parsed_body + JSON.parse(last_response.body) + end +end