Draft dQM CMS Content Implementation Guide
2025.1.0 - CI Build

Draft dQM CMS Content Implementation Guide, published by cqframework. This guide is not an authorized publication; it is the continuous build for version 2025.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/cqframework/dqm-content-cms-2025/ and changes regularly. See the Directory of published versions

: CMSFHIR529HybridHospitalWideReadmission - JSON Representation

Draft as of 2026-09-19

Raw json | Download

{
  "resourceType" : "Library",
  "id" : "CMSFHIR529HybridHospitalWideReadmission",
  "text" : {
    "status" : "extensions",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n  <table class=\"narrative-table\">\n    <tbody>\n<tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\"><a name=\"metadata\"> </a>Metadata</th>\n\n\n</tr>\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Version</th>\n\n\n\n<td class=\"content-container\">0.6.001</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Status</th>\n\n\n\n<td class=\"content-container\">Draft</td>\n\n\n</tr>\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<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Type</th>\n\n\n\n<td class=\"content-container\">\n    <a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a>#logic-library\n\n\n</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\"><a name=\"parameters\"> </a>Parameters</th>\n\n\n</tr>\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Parameter</th>\n\n\n\n<td class=\"content-container\">None</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n  <tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\">Library Content</th>\n\n\n</tr>\n  \n    \n    <tr>\n      <th scope=\"row\" class=\"row-header\">CQL Content</th>\n      <td>\n        <a name=\"cql-content\"> </a>\n        <pre style=\"border: none;\" class=\"content-container highlight language-cql\"><code class=\"language-cql\">/*\nNOTE: For use by March 2026 US Realm Connectathon participants for internal use only. Not for use or distribution in commercial products.\n*/\nlibrary CMSFHIR529HybridHospitalWideReadmission version '0.6.001'\n\nusing USQualityCore version '0.1.0-cibuild'\nusing USCore version '6.1.0-derived'\nusing FHIR version '4.0.1'\n\ninclude hl7.fhir.uv.cql.FHIRHelpers version '4.0.1' called FHIRHelpers\ninclude hl7.fhir.uv.cql.FHIRCommon version '2.0.0' called FHIRCommon\ninclude hl7.fhir.us.cql.USCoreCommon version '2.0.0-ballot' called USCoreCommon\ninclude hl7.fhir.us.cql.USCoreElements version '2.0.0-ballot' called USCoreElements\n\ninclude CQMCommon version '5.1.000' called CQMCommon\ninclude USQualityCoreCommon version '0.1.0-cibuild' called USQualityCoreCommon\ninclude SupplementalDataElements version '6.1.000' called SDE\ninclude Status version '2.1.000' called Status\n\ncodesystem &quot;LOINC&quot;: 'http://loinc.org'\n\nvalueset &quot;Bicarbonate lab test&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1045.139'\nvalueset &quot;Creatinine lab test&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.2363'\nvalueset &quot;Encounter Inpatient&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307'\nvalueset &quot;Glucose lab test&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1045.134'\nvalueset &quot;Hematocrit lab test&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1045.114'\nvalueset &quot;Non Invasive Oxygen Therapy by Nasal Cannula or Mask&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1248.209'\nvalueset &quot;Non Invasive Oxygen Therapy Device Codes&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1170.57'\nvalueset &quot;Medicare Advantage payer&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1104.12'\nvalueset &quot;Medicare FFS payer&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1104.10'\nvalueset &quot;Oxygen Saturation by Pulse Oximetry&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1045.151'\nvalueset &quot;Potassium lab test&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1045.117'\nvalueset &quot;Sodium lab test&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1045.119'\nvalueset &quot;White blood cells count lab test&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1045.129'\n\ncode &quot;Systolic blood pressure&quot;: '8480-6' from &quot;LOINC&quot; display 'Systolic BP'\n\nparameter &quot;Measurement Period&quot; Interval&lt;DateTime&gt;\n  default Interval[@2026-01-01T00:00:00.000Z, @2027-01-01T00:00:00.000Z)\n\ncontext Patient\n\ndefine &quot;Initial Population&quot;:\n  &quot;Inpatient Encounters&quot;\n\ndefine &quot;Inpatient Encounters&quot;:\n  [Encounter: &quot;Encounter Inpatient&quot;] InpatientEncounter\n    with ( [Coverage: &quot;Medicare FFS payer&quot;]\n      union [Coverage: &quot;Medicare Advantage payer&quot;] ) MedicarePayer\n      such that ( InpatientEncounter.hospitalizationWithObservationAndOutpatientSurgeryService ( ).lengthInDays ( ) ) &lt; 365\n        and InpatientEncounter.status = 'finished'\n        and AgeInYearsAt(date from start of InpatientEncounter.period) &gt;= 65\n        and InpatientEncounter.period ends during day of &quot;Measurement Period&quot;\n\ndefine &quot;SDE Encounter With First Body Temperature&quot;:\n  &quot;Inpatient Encounters&quot; EncounterInpatient\n    let FirstTemperature: First([USCore.BodyTemperatureProfile] Temperature\n        where Temperature.effective.earliest() during EncounterInpatient.hospitalizationWithObservationAndOutpatientSurgeryService()\n          and Temperature.status in { 'final', 'amended', 'corrected' }\n          and Temperature.value is not null\n        sort by effective.earliest()\n    )\n    return {\n      EncounterId: EncounterInpatient.id,\n      FirstTemperatureResult: FirstTemperature.value as Quantity,\n      Timing: FirstTemperature.effective.earliest ( )\n    }\n\ndefine &quot;SDE Encounter With First Heart Rate&quot;:\n  &quot;Inpatient Encounters&quot; EncounterInpatient\n    let FirstHeartRate: First([USCore.HeartRateProfile] HeartRate\n        where HeartRate.effective.earliest() during EncounterInpatient.hospitalizationWithObservationAndOutpatientSurgeryService()\n          and HeartRate.status in { 'final', 'amended', 'corrected' }\n          and HeartRate.value is not null\n        sort by effective.earliest()\n    )\n    return {\n      EncounterId: EncounterInpatient.id,\n      FirstHeartRateResult: FirstHeartRate.value as Quantity,\n      Timing: FirstHeartRate.effective.earliest ( )\n    }\n\ndefine &quot;SDE Encounter With First Oxygen Saturation&quot;:\n  &quot;Inpatient Encounters&quot; EncounterInpatient\n    let FirstOxygenSat: First([&quot;USCore.PulseOximetryProfile&quot;: &quot;Oxygen Saturation by Pulse Oximetry&quot;] O2Saturation\n        where O2Saturation.effective.earliest() during EncounterInpatient.hospitalizationWithObservationAndOutpatientSurgeryService()\n          and O2Saturation.status in { 'final', 'amended', 'corrected' }\n          and O2Saturation.value is not null\n        sort by effective.earliest()\n    )\n    return {\n      EncounterId: EncounterInpatient.id,\n      FirstOxygenSatResult: FirstOxygenSat.value as Quantity,\n      Timing: FirstOxygenSat.effective.earliest ( )\n    }\n\ndefine &quot;SDE Encounter With First Respiratory Rate&quot;:\n  &quot;Inpatient Encounters&quot; EncounterInpatient\n    let FirstRespRate: First([USCore.RespiratoryRateProfile] Respirations\n        where Respirations.effective.earliest() during EncounterInpatient.hospitalizationWithObservationAndOutpatientSurgeryService()\n          and Respirations.status in { 'final', 'amended', 'corrected' }\n          and Respirations.value is not null\n        sort by effective.earliest()\n    )\n    return {\n      EncounterId: EncounterInpatient.id,\n      FirstRespRateResult: FirstRespRate.value as Quantity,\n      Timing: FirstRespRate.effective.earliest ( )\n    }\n\ndefine &quot;SDE Encounter With First Systolic Blood Pressure&quot;:\n  &quot;Inpatient Encounters&quot; EncounterInpatient\n    let FirstSystolicBP: First([&quot;USCore.BloodPressureProfile&quot;] BP\n        where BP.effective.earliest() during EncounterInpatient.hospitalizationWithObservationAndOutpatientSurgeryService()\n          and BP.status in { 'final', 'amended', 'corrected' }\n          and BP.component.value is not null\n        sort by effective.earliest()\n    )\n    return {\n      EncounterId: EncounterInpatient.id,\n      FirstSBPResult: FirstSystolicBP.component C\n        where C.code ~ &quot;Systolic blood pressure&quot;\n        return C.value as Quantity,\n      Timing: FirstSystolicBP.effective.earliest ( )\n    }\n\ndefine &quot;SDE Encounter With First Bicarbonate Lab Test&quot;:\n  &quot;Inpatient Encounters&quot; EncounterInpatient\n    let FirstBicarbonateLab: First([&quot;LaboratoryResultObservation&quot;: &quot;Bicarbonate lab test&quot;] bicarbonatelab\n        where bicarbonatelab.effective.earliest() during EncounterInpatient.hospitalizationWithObservationAndOutpatientSurgeryService()\n          and bicarbonatelab.status in { 'final', 'amended', 'corrected' }\n          and bicarbonatelab.value is not null\n        sort by effective.earliest()\n    )\n    return {\n      EncounterId: EncounterInpatient.id,\n      FirstResult: FirstBicarbonateLab.value as Quantity,\n      Timing: FirstBicarbonateLab.issued\n    }\n\ndefine &quot;SDE Encounter With First Creatinine Lab Test&quot;:\n  &quot;Inpatient Encounters&quot; EncounterInpatient\n    let FirstCreatinineLab: First([&quot;LaboratoryResultObservation&quot;: &quot;Creatinine lab test&quot;] CreatinineLab\n        where CreatinineLab.effective.earliest() during EncounterInpatient.hospitalizationWithObservationAndOutpatientSurgeryService()\n          and CreatinineLab.status in { 'final', 'amended', 'corrected' }\n          and CreatinineLab.value is not null\n        sort by effective.earliest()\n    )\n    return {\n      EncounterId: EncounterInpatient.id,\n      FirstResult: FirstCreatinineLab.value as Quantity,\n      Timing: FirstCreatinineLab.issued\n    }\n\ndefine &quot;SDE Encounter With First Glucose Lab Test&quot;:\n  &quot;Inpatient Encounters&quot; EncounterInpatient\n    let FirstGlucoseLab: First([&quot;LaboratoryResultObservation&quot;: &quot;Glucose lab test&quot;] GlucoseLab\n        where GlucoseLab.effective.earliest() during EncounterInpatient.hospitalizationWithObservationAndOutpatientSurgeryService()\n          and GlucoseLab.status in { 'final', 'amended', 'corrected' }\n          and GlucoseLab.value is not null\n        sort by effective.earliest()\n    )\n    return {\n      EncounterId: EncounterInpatient.id,\n      FirstResult: FirstGlucoseLab.value as Quantity,\n      Timing: FirstGlucoseLab.issued\n    }\n\ndefine &quot;SDE Encounter With First Hematocrit Lab Test&quot;:\n  &quot;Inpatient Encounters&quot; EncounterInpatient\n    let FirstHematocritLab: First([&quot;LaboratoryResultObservation&quot;: &quot;Hematocrit lab test&quot;] HematocritLab\n        where HematocritLab.effective.earliest() during EncounterInpatient.hospitalizationWithObservationAndOutpatientSurgeryService()\n          and HematocritLab.status in { 'final', 'amended', 'corrected' }\n          and HematocritLab.value is not null\n        sort by effective.earliest()\n    )\n    return {\n      EncounterId: EncounterInpatient.id,\n      FirstResult: FirstHematocritLab.value as Quantity,\n      Timing: FirstHematocritLab.issued\n    }\n\ndefine &quot;SDE Encounter With First Potassium Lab Test&quot;:\n  &quot;Inpatient Encounters&quot; EncounterInpatient\n    let FirstPotassiumLab: First([&quot;LaboratoryResultObservation&quot;: &quot;Potassium lab test&quot;] PotassiumLab\n        where PotassiumLab.effective.earliest() during EncounterInpatient.hospitalizationWithObservationAndOutpatientSurgeryService()\n          and PotassiumLab.status in { 'final', 'amended', 'corrected' }\n          and PotassiumLab.value is not null\n        sort by effective.earliest()\n    )\n    return {\n      EncounterId: EncounterInpatient.id,\n      FirstResult: FirstPotassiumLab.value as Quantity,\n      Timing: FirstPotassiumLab.issued\n    }\n\ndefine &quot;SDE Encounter With First Sodium Lab Test&quot;:\n  &quot;Inpatient Encounters&quot; EncounterInpatient\n    let FirstSodiumLab: First([&quot;LaboratoryResultObservation&quot;: &quot;Sodium lab test&quot;] SodiumLab\n        where SodiumLab.effective.earliest() during EncounterInpatient.hospitalizationWithObservationAndOutpatientSurgeryService()\n          and SodiumLab.status in { 'final', 'amended', 'corrected' }\n          and SodiumLab.value is not null\n        sort by effective.earliest()\n    )\n    return {\n      EncounterId: EncounterInpatient.id,\n      FirstResult: FirstSodiumLab.value as Quantity,\n      Timing: FirstSodiumLab.issued\n    }\n\ndefine &quot;SDE Encounter With First White Blood Cells Lab Test&quot;:\n  &quot;Inpatient Encounters&quot; EncounterInpatient\n    let FirstWhiteBloodCellLab: First([&quot;LaboratoryResultObservation&quot;: &quot;White blood cells count lab test&quot;] WhiteBloodCellLab\n        where WhiteBloodCellLab.effective.earliest() during EncounterInpatient.hospitalizationWithObservationAndOutpatientSurgeryService()\n          and WhiteBloodCellLab.status in { 'final', 'amended', 'corrected' }\n          and WhiteBloodCellLab.value is not null\n        sort by effective.earliest()\n    )\n    return {\n      EncounterId: EncounterInpatient.id,\n      FirstResult: FirstWhiteBloodCellLab.value as Quantity,\n      Timing: FirstWhiteBloodCellLab.issued\n    }\n\ndefine &quot;SDE Encounter With First Weight Recorded&quot;:\n  &quot;Inpatient Encounters&quot; EncounterInpatient\n    let FirstWeight: First([&quot;USCore.BodyWeightProfile&quot;] WeightExam\n        where WeightExam.effective.earliest() during EncounterInpatient.hospitalizationWithObservationAndOutpatientSurgeryService()\n          and WeightExam.status in { 'final', 'amended', 'corrected' }\n          and WeightExam.value is not null\n        sort by effective.earliest()\n    )\n    return {\n      EncounterId: EncounterInpatient.id,\n      FirstResult: FirstWeight.value as Quantity,\n      Timing: FirstWeight.effective.earliest ( )\n    }\n\ndefine &quot;SDE Encounter With Oxygen 60 Minutes Or Less Prior To ED Admission Or During ED&quot;:\n  &quot;Initial Population&quot; EncounterInpatient\n    where exists ( ( [ServiceRequest: &quot;Non Invasive Oxygen Therapy by Nasal Cannula or Mask&quot;]\n        union [ServiceRequest: &quot;Non Invasive Oxygen Therapy Device Codes&quot;] ) OxygenTherapyOrder\n        where ( OxygenTherapyOrder.authoredOn during EncounterInpatient.edVisit ( ).period\n            or OxygenTherapyOrder.authoredOn 60 minutes or less before or on start of EncounterInpatient.edVisit ( ).period\n        )\n          and OxygenTherapyOrder.status in { 'active', 'completed' }\n          and OxygenTherapyOrder.intent = 'order'\n        return {\n          EncounterId: EncounterInpatient.id,\n          OrderStatus: OxygenTherapyOrder.status,\n          OrderTiming: OxygenTherapyOrder.authoredOn\n        }\n    )\n      or exists ( [Procedure: &quot;Non Invasive Oxygen Therapy by Nasal Cannula or Mask&quot;] OxygenAdminInterv\n          where ( OxygenAdminInterv.performed.toInterval ( ) starts during EncounterInpatient.edVisit ( ).period\n              or OxygenAdminInterv.performed.toInterval ( ) 60 minutes or less before or on start of EncounterInpatient.edVisit ( ).period\n          )\n            and OxygenAdminInterv.status = 'completed'\n          return {\n            EncounterId: EncounterInpatient.id,\n            EDEncounterTiming: EncounterInpatient.edVisit ( ).period,\n            PerformedStatus: OxygenAdminInterv.status,\n            PerformedTiming: OxygenAdminInterv.performed.toInterval ( )\n          }\n      )\n\ndefine &quot;SDE Ethnicity&quot;:\n  SDE.&quot;SDE Ethnicity&quot;\n\ndefine &quot;SDE Payer&quot;:\n  SDE.&quot;SDE Payer&quot;\n\ndefine &quot;SDE Race&quot;:\n  SDE.&quot;SDE Race&quot;\n\ndefine &quot;SDE Sex&quot;:\n  SDE.&quot;SDE Sex&quot;</code></pre>\n      </td>\n    </tr>\n    \n  \n\n\n\n<tr>\n  <th colspan=\"2\" scope=\"row\" class=\"row-header\">Generated using version 0.5.6 of the sample-content-ig Liquid templates</th>\n</tr>\n\n    </tbody>\n  </table>\n</div>"
  },
  "extension" : [
    {
      "url" : "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-softwaresystem",
      "valueReference" : {
        "reference" : "Device/cqf-tooling"
      }
    }
  ],
  "url" : "https://madie.cms.gov/Library/CMSFHIR529HybridHospitalWideReadmission",
  "version" : "0.6.001",
  "name" : "CMSFHIR529HybridHospitalWideReadmission",
  "status" : "draft",
  "type" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/library-type",
        "code" : "logic-library"
      }
    ]
  },
  "date" : "2026-09-19T16:31:14+00:00",
  "content" : [
    {
      "contentType" : "text/cql",
      "data" : "LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBDTVNGSElSNTI5SHlicmlkSG9zcGl0YWxXaWRlUmVhZG1pc3Npb24gdmVyc2lvbiAnMC42LjAwMScKCnVzaW5nIFVTUXVhbGl0eUNvcmUgdmVyc2lvbiAnMC4xLjAtY2lidWlsZCcKdXNpbmcgVVNDb3JlIHZlcnNpb24gJzYuMS4wLWRlcml2ZWQnCnVzaW5nIEZISVIgdmVyc2lvbiAnNC4wLjEnCgppbmNsdWRlIGhsNy5maGlyLnV2LmNxbC5GSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMScgY2FsbGVkIEZISVJIZWxwZXJzCmluY2x1ZGUgaGw3LmZoaXIudXYuY3FsLkZISVJDb21tb24gdmVyc2lvbiAnMi4wLjAnIGNhbGxlZCBGSElSQ29tbW9uCmluY2x1ZGUgaGw3LmZoaXIudXMuY3FsLlVTQ29yZUNvbW1vbiB2ZXJzaW9uICcyLjAuMC1iYWxsb3QnIGNhbGxlZCBVU0NvcmVDb21tb24KaW5jbHVkZSBobDcuZmhpci51cy5jcWwuVVNDb3JlRWxlbWVudHMgdmVyc2lvbiAnMi4wLjAtYmFsbG90JyBjYWxsZWQgVVNDb3JlRWxlbWVudHMKCmluY2x1ZGUgQ1FNQ29tbW9uIHZlcnNpb24gJzUuMS4wMDAnIGNhbGxlZCBDUU1Db21tb24KaW5jbHVkZSBVU1F1YWxpdHlDb3JlQ29tbW9uIHZlcnNpb24gJzAuMS4wLWNpYnVpbGQnIGNhbGxlZCBVU1F1YWxpdHlDb3JlQ29tbW9uCmluY2x1ZGUgU3VwcGxlbWVudGFsRGF0YUVsZW1lbnRzIHZlcnNpb24gJzYuMS4wMDAnIGNhbGxlZCBTREUKaW5jbHVkZSBTdGF0dXMgdmVyc2lvbiAnMi4xLjAwMCcgY2FsbGVkIFN0YXR1cwoKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKCnZhbHVlc2V0ICJCaWNhcmJvbmF0ZSBsYWIgdGVzdCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEwNDUuMTM5Jwp2YWx1ZXNldCAiQ3JlYXRpbmluZSBsYWIgdGVzdCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy42NjYuNS4yMzYzJwp2YWx1ZXNldCAiRW5jb3VudGVyIElucGF0aWVudCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy42NjYuNS4zMDcnCnZhbHVlc2V0ICJHbHVjb3NlIGxhYiB0ZXN0IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTA0NS4xMzQnCnZhbHVlc2V0ICJIZW1hdG9jcml0IGxhYiB0ZXN0IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTA0NS4xMTQnCnZhbHVlc2V0ICJOb24gSW52YXNpdmUgT3h5Z2VuIFRoZXJhcHkgYnkgTmFzYWwgQ2FubnVsYSBvciBNYXNrIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTI0OC4yMDknCnZhbHVlc2V0ICJOb24gSW52YXNpdmUgT3h5Z2VuIFRoZXJhcHkgRGV2aWNlIENvZGVzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTE3MC41NycKdmFsdWVzZXQgIk1lZGljYXJlIEFkdmFudGFnZSBwYXllciI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjExMDQuMTInCnZhbHVlc2V0ICJNZWRpY2FyZSBGRlMgcGF5ZXIiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMTA0LjEwJwp2YWx1ZXNldCAiT3h5Z2VuIFNhdHVyYXRpb24gYnkgUHVsc2UgT3hpbWV0cnkiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMDQ1LjE1MScKdmFsdWVzZXQgIlBvdGFzc2l1bSBsYWIgdGVzdCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEwNDUuMTE3Jwp2YWx1ZXNldCAiU29kaXVtIGxhYiB0ZXN0IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTA0NS4xMTknCnZhbHVlc2V0ICJXaGl0ZSBibG9vZCBjZWxscyBjb3VudCBsYWIgdGVzdCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEwNDUuMTI5JwoKY29kZSAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiOiAnODQ4MC02JyBmcm9tICJMT0lOQyIgZGlzcGxheSAnU3lzdG9saWMgQlAnCgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZVRpbWU+CiAgZGVmYXVsdCBJbnRlcnZhbFtAMjAyNi0wMS0wMVQwMDowMDowMC4wMDBaLCBAMjAyNy0wMS0wMVQwMDowMDowMC4wMDBaKQoKY29udGV4dCBQYXRpZW50CgpkZWZpbmUgIkluaXRpYWwgUG9wdWxhdGlvbiI6CiAgIklucGF0aWVudCBFbmNvdW50ZXJzIgoKZGVmaW5lICJJbnBhdGllbnQgRW5jb3VudGVycyI6CiAgW0VuY291bnRlcjogIkVuY291bnRlciBJbnBhdGllbnQiXSBJbnBhdGllbnRFbmNvdW50ZXIKICAgIHdpdGggKCBbQ292ZXJhZ2U6ICJNZWRpY2FyZSBGRlMgcGF5ZXIiXQogICAgICB1bmlvbiBbQ292ZXJhZ2U6ICJNZWRpY2FyZSBBZHZhbnRhZ2UgcGF5ZXIiXSApIE1lZGljYXJlUGF5ZXIKICAgICAgc3VjaCB0aGF0ICggSW5wYXRpZW50RW5jb3VudGVyLmhvc3BpdGFsaXphdGlvbldpdGhPYnNlcnZhdGlvbkFuZE91dHBhdGllbnRTdXJnZXJ5U2VydmljZSAoICkubGVuZ3RoSW5EYXlzICggKSApIDwgMzY1CiAgICAgICAgYW5kIElucGF0aWVudEVuY291bnRlci5zdGF0dXMgPSAnZmluaXNoZWQnCiAgICAgICAgYW5kIEFnZUluWWVhcnNBdChkYXRlIGZyb20gc3RhcnQgb2YgSW5wYXRpZW50RW5jb3VudGVyLnBlcmlvZCkgPj0gNjUKICAgICAgICBhbmQgSW5wYXRpZW50RW5jb3VudGVyLnBlcmlvZCBlbmRzIGR1cmluZyBkYXkgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKCmRlZmluZSAiU0RFIEVuY291bnRlciBXaXRoIEZpcnN0IEJvZHkgVGVtcGVyYXR1cmUiOgogICJJbnBhdGllbnQgRW5jb3VudGVycyIgRW5jb3VudGVySW5wYXRpZW50CiAgICBsZXQgRmlyc3RUZW1wZXJhdHVyZTogRmlyc3QoW1VTQ29yZS5Cb2R5VGVtcGVyYXR1cmVQcm9maWxlXSBUZW1wZXJhdHVyZQogICAgICAgIHdoZXJlIFRlbXBlcmF0dXJlLmVmZmVjdGl2ZS5lYXJsaWVzdCgpIGR1cmluZyBFbmNvdW50ZXJJbnBhdGllbnQuaG9zcGl0YWxpemF0aW9uV2l0aE9ic2VydmF0aW9uQW5kT3V0cGF0aWVudFN1cmdlcnlTZXJ2aWNlKCkKICAgICAgICAgIGFuZCBUZW1wZXJhdHVyZS5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICAgICAgIGFuZCBUZW1wZXJhdHVyZS52YWx1ZSBpcyBub3QgbnVsbAogICAgICAgIHNvcnQgYnkgZWZmZWN0aXZlLmVhcmxpZXN0KCkKICAgICkKICAgIHJldHVybiB7CiAgICAgIEVuY291bnRlcklkOiBFbmNvdW50ZXJJbnBhdGllbnQuaWQsCiAgICAgIEZpcnN0VGVtcGVyYXR1cmVSZXN1bHQ6IEZpcnN0VGVtcGVyYXR1cmUudmFsdWUgYXMgUXVhbnRpdHksCiAgICAgIFRpbWluZzogRmlyc3RUZW1wZXJhdHVyZS5lZmZlY3RpdmUuZWFybGllc3QgKCApCiAgICB9CgpkZWZpbmUgIlNERSBFbmNvdW50ZXIgV2l0aCBGaXJzdCBIZWFydCBSYXRlIjoKICAiSW5wYXRpZW50IEVuY291bnRlcnMiIEVuY291bnRlcklucGF0aWVudAogICAgbGV0IEZpcnN0SGVhcnRSYXRlOiBGaXJzdChbVVNDb3JlLkhlYXJ0UmF0ZVByb2ZpbGVdIEhlYXJ0UmF0ZQogICAgICAgIHdoZXJlIEhlYXJ0UmF0ZS5lZmZlY3RpdmUuZWFybGllc3QoKSBkdXJpbmcgRW5jb3VudGVySW5wYXRpZW50Lmhvc3BpdGFsaXphdGlvbldpdGhPYnNlcnZhdGlvbkFuZE91dHBhdGllbnRTdXJnZXJ5U2VydmljZSgpCiAgICAgICAgICBhbmQgSGVhcnRSYXRlLnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICAgICAgICAgYW5kIEhlYXJ0UmF0ZS52YWx1ZSBpcyBub3QgbnVsbAogICAgICAgIHNvcnQgYnkgZWZmZWN0aXZlLmVhcmxpZXN0KCkKICAgICkKICAgIHJldHVybiB7CiAgICAgIEVuY291bnRlcklkOiBFbmNvdW50ZXJJbnBhdGllbnQuaWQsCiAgICAgIEZpcnN0SGVhcnRSYXRlUmVzdWx0OiBGaXJzdEhlYXJ0UmF0ZS52YWx1ZSBhcyBRdWFudGl0eSwKICAgICAgVGltaW5nOiBGaXJzdEhlYXJ0UmF0ZS5lZmZlY3RpdmUuZWFybGllc3QgKCApCiAgICB9CgpkZWZpbmUgIlNERSBFbmNvdW50ZXIgV2l0aCBGaXJzdCBPeHlnZW4gU2F0dXJhdGlvbiI6CiAgIklucGF0aWVudCBFbmNvdW50ZXJzIiBFbmNvdW50ZXJJbnBhdGllbnQKICAgIGxldCBGaXJzdE94eWdlblNhdDogRmlyc3QoWyJVU0NvcmUuUHVsc2VPeGltZXRyeVByb2ZpbGUiOiAiT3h5Z2VuIFNhdHVyYXRpb24gYnkgUHVsc2UgT3hpbWV0cnkiXSBPMlNhdHVyYXRpb24KICAgICAgICB3aGVyZSBPMlNhdHVyYXRpb24uZWZmZWN0aXZlLmVhcmxpZXN0KCkgZHVyaW5nIEVuY291bnRlcklucGF0aWVudC5ob3NwaXRhbGl6YXRpb25XaXRoT2JzZXJ2YXRpb25BbmRPdXRwYXRpZW50U3VyZ2VyeVNlcnZpY2UoKQogICAgICAgICAgYW5kIE8yU2F0dXJhdGlvbi5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICAgICAgIGFuZCBPMlNhdHVyYXRpb24udmFsdWUgaXMgbm90IG51bGwKICAgICAgICBzb3J0IGJ5IGVmZmVjdGl2ZS5lYXJsaWVzdCgpCiAgICApCiAgICByZXR1cm4gewogICAgICBFbmNvdW50ZXJJZDogRW5jb3VudGVySW5wYXRpZW50LmlkLAogICAgICBGaXJzdE94eWdlblNhdFJlc3VsdDogRmlyc3RPeHlnZW5TYXQudmFsdWUgYXMgUXVhbnRpdHksCiAgICAgIFRpbWluZzogRmlyc3RPeHlnZW5TYXQuZWZmZWN0aXZlLmVhcmxpZXN0ICggKQogICAgfQoKZGVmaW5lICJTREUgRW5jb3VudGVyIFdpdGggRmlyc3QgUmVzcGlyYXRvcnkgUmF0ZSI6CiAgIklucGF0aWVudCBFbmNvdW50ZXJzIiBFbmNvdW50ZXJJbnBhdGllbnQKICAgIGxldCBGaXJzdFJlc3BSYXRlOiBGaXJzdChbVVNDb3JlLlJlc3BpcmF0b3J5UmF0ZVByb2ZpbGVdIFJlc3BpcmF0aW9ucwogICAgICAgIHdoZXJlIFJlc3BpcmF0aW9ucy5lZmZlY3RpdmUuZWFybGllc3QoKSBkdXJpbmcgRW5jb3VudGVySW5wYXRpZW50Lmhvc3BpdGFsaXphdGlvbldpdGhPYnNlcnZhdGlvbkFuZE91dHBhdGllbnRTdXJnZXJ5U2VydmljZSgpCiAgICAgICAgICBhbmQgUmVzcGlyYXRpb25zLnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICAgICAgICAgYW5kIFJlc3BpcmF0aW9ucy52YWx1ZSBpcyBub3QgbnVsbAogICAgICAgIHNvcnQgYnkgZWZmZWN0aXZlLmVhcmxpZXN0KCkKICAgICkKICAgIHJldHVybiB7CiAgICAgIEVuY291bnRlcklkOiBFbmNvdW50ZXJJbnBhdGllbnQuaWQsCiAgICAgIEZpcnN0UmVzcFJhdGVSZXN1bHQ6IEZpcnN0UmVzcFJhdGUudmFsdWUgYXMgUXVhbnRpdHksCiAgICAgIFRpbWluZzogRmlyc3RSZXNwUmF0ZS5lZmZlY3RpdmUuZWFybGllc3QgKCApCiAgICB9CgpkZWZpbmUgIlNERSBFbmNvdW50ZXIgV2l0aCBGaXJzdCBTeXN0b2xpYyBCbG9vZCBQcmVzc3VyZSI6CiAgIklucGF0aWVudCBFbmNvdW50ZXJzIiBFbmNvdW50ZXJJbnBhdGllbnQKICAgIGxldCBGaXJzdFN5c3RvbGljQlA6IEZpcnN0KFsiVVNDb3JlLkJsb29kUHJlc3N1cmVQcm9maWxlIl0gQlAKICAgICAgICB3aGVyZSBCUC5lZmZlY3RpdmUuZWFybGllc3QoKSBkdXJpbmcgRW5jb3VudGVySW5wYXRpZW50Lmhvc3BpdGFsaXphdGlvbldpdGhPYnNlcnZhdGlvbkFuZE91dHBhdGllbnRTdXJnZXJ5U2VydmljZSgpCiAgICAgICAgICBhbmQgQlAuc3RhdHVzIGluIHsgJ2ZpbmFsJywgJ2FtZW5kZWQnLCAnY29ycmVjdGVkJyB9CiAgICAgICAgICBhbmQgQlAuY29tcG9uZW50LnZhbHVlIGlzIG5vdCBudWxsCiAgICAgICAgc29ydCBieSBlZmZlY3RpdmUuZWFybGllc3QoKQogICAgKQogICAgcmV0dXJuIHsKICAgICAgRW5jb3VudGVySWQ6IEVuY291bnRlcklucGF0aWVudC5pZCwKICAgICAgRmlyc3RTQlBSZXN1bHQ6IEZpcnN0U3lzdG9saWNCUC5jb21wb25lbnQgQwogICAgICAgIHdoZXJlIEMuY29kZSB+ICJTeXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICByZXR1cm4gQy52YWx1ZSBhcyBRdWFudGl0eSwKICAgICAgVGltaW5nOiBGaXJzdFN5c3RvbGljQlAuZWZmZWN0aXZlLmVhcmxpZXN0ICggKQogICAgfQoKZGVmaW5lICJTREUgRW5jb3VudGVyIFdpdGggRmlyc3QgQmljYXJib25hdGUgTGFiIFRlc3QiOgogICJJbnBhdGllbnQgRW5jb3VudGVycyIgRW5jb3VudGVySW5wYXRpZW50CiAgICBsZXQgRmlyc3RCaWNhcmJvbmF0ZUxhYjogRmlyc3QoWyJMYWJvcmF0b3J5UmVzdWx0T2JzZXJ2YXRpb24iOiAiQmljYXJib25hdGUgbGFiIHRlc3QiXSBiaWNhcmJvbmF0ZWxhYgogICAgICAgIHdoZXJlIGJpY2FyYm9uYXRlbGFiLmVmZmVjdGl2ZS5lYXJsaWVzdCgpIGR1cmluZyBFbmNvdW50ZXJJbnBhdGllbnQuaG9zcGl0YWxpemF0aW9uV2l0aE9ic2VydmF0aW9uQW5kT3V0cGF0aWVudFN1cmdlcnlTZXJ2aWNlKCkKICAgICAgICAgIGFuZCBiaWNhcmJvbmF0ZWxhYi5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICAgICAgIGFuZCBiaWNhcmJvbmF0ZWxhYi52YWx1ZSBpcyBub3QgbnVsbAogICAgICAgIHNvcnQgYnkgZWZmZWN0aXZlLmVhcmxpZXN0KCkKICAgICkKICAgIHJldHVybiB7CiAgICAgIEVuY291bnRlcklkOiBFbmNvdW50ZXJJbnBhdGllbnQuaWQsCiAgICAgIEZpcnN0UmVzdWx0OiBGaXJzdEJpY2FyYm9uYXRlTGFiLnZhbHVlIGFzIFF1YW50aXR5LAogICAgICBUaW1pbmc6IEZpcnN0QmljYXJib25hdGVMYWIuaXNzdWVkCiAgICB9CgpkZWZpbmUgIlNERSBFbmNvdW50ZXIgV2l0aCBGaXJzdCBDcmVhdGluaW5lIExhYiBUZXN0IjoKICAiSW5wYXRpZW50IEVuY291bnRlcnMiIEVuY291bnRlcklucGF0aWVudAogICAgbGV0IEZpcnN0Q3JlYXRpbmluZUxhYjogRmlyc3QoWyJMYWJvcmF0b3J5UmVzdWx0T2JzZXJ2YXRpb24iOiAiQ3JlYXRpbmluZSBsYWIgdGVzdCJdIENyZWF0aW5pbmVMYWIKICAgICAgICB3aGVyZSBDcmVhdGluaW5lTGFiLmVmZmVjdGl2ZS5lYXJsaWVzdCgpIGR1cmluZyBFbmNvdW50ZXJJbnBhdGllbnQuaG9zcGl0YWxpemF0aW9uV2l0aE9ic2VydmF0aW9uQW5kT3V0cGF0aWVudFN1cmdlcnlTZXJ2aWNlKCkKICAgICAgICAgIGFuZCBDcmVhdGluaW5lTGFiLnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICAgICAgICAgYW5kIENyZWF0aW5pbmVMYWIudmFsdWUgaXMgbm90IG51bGwKICAgICAgICBzb3J0IGJ5IGVmZmVjdGl2ZS5lYXJsaWVzdCgpCiAgICApCiAgICByZXR1cm4gewogICAgICBFbmNvdW50ZXJJZDogRW5jb3VudGVySW5wYXRpZW50LmlkLAogICAgICBGaXJzdFJlc3VsdDogRmlyc3RDcmVhdGluaW5lTGFiLnZhbHVlIGFzIFF1YW50aXR5LAogICAgICBUaW1pbmc6IEZpcnN0Q3JlYXRpbmluZUxhYi5pc3N1ZWQKICAgIH0KCmRlZmluZSAiU0RFIEVuY291bnRlciBXaXRoIEZpcnN0IEdsdWNvc2UgTGFiIFRlc3QiOgogICJJbnBhdGllbnQgRW5jb3VudGVycyIgRW5jb3VudGVySW5wYXRpZW50CiAgICBsZXQgRmlyc3RHbHVjb3NlTGFiOiBGaXJzdChbIkxhYm9yYXRvcnlSZXN1bHRPYnNlcnZhdGlvbiI6ICJHbHVjb3NlIGxhYiB0ZXN0Il0gR2x1Y29zZUxhYgogICAgICAgIHdoZXJlIEdsdWNvc2VMYWIuZWZmZWN0aXZlLmVhcmxpZXN0KCkgZHVyaW5nIEVuY291bnRlcklucGF0aWVudC5ob3NwaXRhbGl6YXRpb25XaXRoT2JzZXJ2YXRpb25BbmRPdXRwYXRpZW50U3VyZ2VyeVNlcnZpY2UoKQogICAgICAgICAgYW5kIEdsdWNvc2VMYWIuc3RhdHVzIGluIHsgJ2ZpbmFsJywgJ2FtZW5kZWQnLCAnY29ycmVjdGVkJyB9CiAgICAgICAgICBhbmQgR2x1Y29zZUxhYi52YWx1ZSBpcyBub3QgbnVsbAogICAgICAgIHNvcnQgYnkgZWZmZWN0aXZlLmVhcmxpZXN0KCkKICAgICkKICAgIHJldHVybiB7CiAgICAgIEVuY291bnRlcklkOiBFbmNvdW50ZXJJbnBhdGllbnQuaWQsCiAgICAgIEZpcnN0UmVzdWx0OiBGaXJzdEdsdWNvc2VMYWIudmFsdWUgYXMgUXVhbnRpdHksCiAgICAgIFRpbWluZzogRmlyc3RHbHVjb3NlTGFiLmlzc3VlZAogICAgfQoKZGVmaW5lICJTREUgRW5jb3VudGVyIFdpdGggRmlyc3QgSGVtYXRvY3JpdCBMYWIgVGVzdCI6CiAgIklucGF0aWVudCBFbmNvdW50ZXJzIiBFbmNvdW50ZXJJbnBhdGllbnQKICAgIGxldCBGaXJzdEhlbWF0b2NyaXRMYWI6IEZpcnN0KFsiTGFib3JhdG9yeVJlc3VsdE9ic2VydmF0aW9uIjogIkhlbWF0b2NyaXQgbGFiIHRlc3QiXSBIZW1hdG9jcml0TGFiCiAgICAgICAgd2hlcmUgSGVtYXRvY3JpdExhYi5lZmZlY3RpdmUuZWFybGllc3QoKSBkdXJpbmcgRW5jb3VudGVySW5wYXRpZW50Lmhvc3BpdGFsaXphdGlvbldpdGhPYnNlcnZhdGlvbkFuZE91dHBhdGllbnRTdXJnZXJ5U2VydmljZSgpCiAgICAgICAgICBhbmQgSGVtYXRvY3JpdExhYi5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICAgICAgIGFuZCBIZW1hdG9jcml0TGFiLnZhbHVlIGlzIG5vdCBudWxsCiAgICAgICAgc29ydCBieSBlZmZlY3RpdmUuZWFybGllc3QoKQogICAgKQogICAgcmV0dXJuIHsKICAgICAgRW5jb3VudGVySWQ6IEVuY291bnRlcklucGF0aWVudC5pZCwKICAgICAgRmlyc3RSZXN1bHQ6IEZpcnN0SGVtYXRvY3JpdExhYi52YWx1ZSBhcyBRdWFudGl0eSwKICAgICAgVGltaW5nOiBGaXJzdEhlbWF0b2NyaXRMYWIuaXNzdWVkCiAgICB9CgpkZWZpbmUgIlNERSBFbmNvdW50ZXIgV2l0aCBGaXJzdCBQb3Rhc3NpdW0gTGFiIFRlc3QiOgogICJJbnBhdGllbnQgRW5jb3VudGVycyIgRW5jb3VudGVySW5wYXRpZW50CiAgICBsZXQgRmlyc3RQb3Rhc3NpdW1MYWI6IEZpcnN0KFsiTGFib3JhdG9yeVJlc3VsdE9ic2VydmF0aW9uIjogIlBvdGFzc2l1bSBsYWIgdGVzdCJdIFBvdGFzc2l1bUxhYgogICAgICAgIHdoZXJlIFBvdGFzc2l1bUxhYi5lZmZlY3RpdmUuZWFybGllc3QoKSBkdXJpbmcgRW5jb3VudGVySW5wYXRpZW50Lmhvc3BpdGFsaXphdGlvbldpdGhPYnNlcnZhdGlvbkFuZE91dHBhdGllbnRTdXJnZXJ5U2VydmljZSgpCiAgICAgICAgICBhbmQgUG90YXNzaXVtTGFiLnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICAgICAgICAgYW5kIFBvdGFzc2l1bUxhYi52YWx1ZSBpcyBub3QgbnVsbAogICAgICAgIHNvcnQgYnkgZWZmZWN0aXZlLmVhcmxpZXN0KCkKICAgICkKICAgIHJldHVybiB7CiAgICAgIEVuY291bnRlcklkOiBFbmNvdW50ZXJJbnBhdGllbnQuaWQsCiAgICAgIEZpcnN0UmVzdWx0OiBGaXJzdFBvdGFzc2l1bUxhYi52YWx1ZSBhcyBRdWFudGl0eSwKICAgICAgVGltaW5nOiBGaXJzdFBvdGFzc2l1bUxhYi5pc3N1ZWQKICAgIH0KCmRlZmluZSAiU0RFIEVuY291bnRlciBXaXRoIEZpcnN0IFNvZGl1bSBMYWIgVGVzdCI6CiAgIklucGF0aWVudCBFbmNvdW50ZXJzIiBFbmNvdW50ZXJJbnBhdGllbnQKICAgIGxldCBGaXJzdFNvZGl1bUxhYjogRmlyc3QoWyJMYWJvcmF0b3J5UmVzdWx0T2JzZXJ2YXRpb24iOiAiU29kaXVtIGxhYiB0ZXN0Il0gU29kaXVtTGFiCiAgICAgICAgd2hlcmUgU29kaXVtTGFiLmVmZmVjdGl2ZS5lYXJsaWVzdCgpIGR1cmluZyBFbmNvdW50ZXJJbnBhdGllbnQuaG9zcGl0YWxpemF0aW9uV2l0aE9ic2VydmF0aW9uQW5kT3V0cGF0aWVudFN1cmdlcnlTZXJ2aWNlKCkKICAgICAgICAgIGFuZCBTb2RpdW1MYWIuc3RhdHVzIGluIHsgJ2ZpbmFsJywgJ2FtZW5kZWQnLCAnY29ycmVjdGVkJyB9CiAgICAgICAgICBhbmQgU29kaXVtTGFiLnZhbHVlIGlzIG5vdCBudWxsCiAgICAgICAgc29ydCBieSBlZmZlY3RpdmUuZWFybGllc3QoKQogICAgKQogICAgcmV0dXJuIHsKICAgICAgRW5jb3VudGVySWQ6IEVuY291bnRlcklucGF0aWVudC5pZCwKICAgICAgRmlyc3RSZXN1bHQ6IEZpcnN0U29kaXVtTGFiLnZhbHVlIGFzIFF1YW50aXR5LAogICAgICBUaW1pbmc6IEZpcnN0U29kaXVtTGFiLmlzc3VlZAogICAgfQoKZGVmaW5lICJTREUgRW5jb3VudGVyIFdpdGggRmlyc3QgV2hpdGUgQmxvb2QgQ2VsbHMgTGFiIFRlc3QiOgogICJJbnBhdGllbnQgRW5jb3VudGVycyIgRW5jb3VudGVySW5wYXRpZW50CiAgICBsZXQgRmlyc3RXaGl0ZUJsb29kQ2VsbExhYjogRmlyc3QoWyJMYWJvcmF0b3J5UmVzdWx0T2JzZXJ2YXRpb24iOiAiV2hpdGUgYmxvb2QgY2VsbHMgY291bnQgbGFiIHRlc3QiXSBXaGl0ZUJsb29kQ2VsbExhYgogICAgICAgIHdoZXJlIFdoaXRlQmxvb2RDZWxsTGFiLmVmZmVjdGl2ZS5lYXJsaWVzdCgpIGR1cmluZyBFbmNvdW50ZXJJbnBhdGllbnQuaG9zcGl0YWxpemF0aW9uV2l0aE9ic2VydmF0aW9uQW5kT3V0cGF0aWVudFN1cmdlcnlTZXJ2aWNlKCkKICAgICAgICAgIGFuZCBXaGl0ZUJsb29kQ2VsbExhYi5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICAgICAgIGFuZCBXaGl0ZUJsb29kQ2VsbExhYi52YWx1ZSBpcyBub3QgbnVsbAogICAgICAgIHNvcnQgYnkgZWZmZWN0aXZlLmVhcmxpZXN0KCkKICAgICkKICAgIHJldHVybiB7CiAgICAgIEVuY291bnRlcklkOiBFbmNvdW50ZXJJbnBhdGllbnQuaWQsCiAgICAgIEZpcnN0UmVzdWx0OiBGaXJzdFdoaXRlQmxvb2RDZWxsTGFiLnZhbHVlIGFzIFF1YW50aXR5LAogICAgICBUaW1pbmc6IEZpcnN0V2hpdGVCbG9vZENlbGxMYWIuaXNzdWVkCiAgICB9CgpkZWZpbmUgIlNERSBFbmNvdW50ZXIgV2l0aCBGaXJzdCBXZWlnaHQgUmVjb3JkZWQiOgogICJJbnBhdGllbnQgRW5jb3VudGVycyIgRW5jb3VudGVySW5wYXRpZW50CiAgICBsZXQgRmlyc3RXZWlnaHQ6IEZpcnN0KFsiVVNDb3JlLkJvZHlXZWlnaHRQcm9maWxlIl0gV2VpZ2h0RXhhbQogICAgICAgIHdoZXJlIFdlaWdodEV4YW0uZWZmZWN0aXZlLmVhcmxpZXN0KCkgZHVyaW5nIEVuY291bnRlcklucGF0aWVudC5ob3NwaXRhbGl6YXRpb25XaXRoT2JzZXJ2YXRpb25BbmRPdXRwYXRpZW50U3VyZ2VyeVNlcnZpY2UoKQogICAgICAgICAgYW5kIFdlaWdodEV4YW0uc3RhdHVzIGluIHsgJ2ZpbmFsJywgJ2FtZW5kZWQnLCAnY29ycmVjdGVkJyB9CiAgICAgICAgICBhbmQgV2VpZ2h0RXhhbS52YWx1ZSBpcyBub3QgbnVsbAogICAgICAgIHNvcnQgYnkgZWZmZWN0aXZlLmVhcmxpZXN0KCkKICAgICkKICAgIHJldHVybiB7CiAgICAgIEVuY291bnRlcklkOiBFbmNvdW50ZXJJbnBhdGllbnQuaWQsCiAgICAgIEZpcnN0UmVzdWx0OiBGaXJzdFdlaWdodC52YWx1ZSBhcyBRdWFudGl0eSwKICAgICAgVGltaW5nOiBGaXJzdFdlaWdodC5lZmZlY3RpdmUuZWFybGllc3QgKCApCiAgICB9CgpkZWZpbmUgIlNERSBFbmNvdW50ZXIgV2l0aCBPeHlnZW4gNjAgTWludXRlcyBPciBMZXNzIFByaW9yIFRvIEVEIEFkbWlzc2lvbiBPciBEdXJpbmcgRUQiOgogICJJbml0aWFsIFBvcHVsYXRpb24iIEVuY291bnRlcklucGF0aWVudAogICAgd2hlcmUgZXhpc3RzICggKCBbU2VydmljZVJlcXVlc3Q6ICJOb24gSW52YXNpdmUgT3h5Z2VuIFRoZXJhcHkgYnkgTmFzYWwgQ2FubnVsYSBvciBNYXNrIl0KICAgICAgICB1bmlvbiBbU2VydmljZVJlcXVlc3Q6ICJOb24gSW52YXNpdmUgT3h5Z2VuIFRoZXJhcHkgRGV2aWNlIENvZGVzIl0gKSBPeHlnZW5UaGVyYXB5T3JkZXIKICAgICAgICB3aGVyZSAoIE94eWdlblRoZXJhcHlPcmRlci5hdXRob3JlZE9uIGR1cmluZyBFbmNvdW50ZXJJbnBhdGllbnQuZWRWaXNpdCAoICkucGVyaW9kCiAgICAgICAgICAgIG9yIE94eWdlblRoZXJhcHlPcmRlci5hdXRob3JlZE9uIDYwIG1pbnV0ZXMgb3IgbGVzcyBiZWZvcmUgb3Igb24gc3RhcnQgb2YgRW5jb3VudGVySW5wYXRpZW50LmVkVmlzaXQgKCApLnBlcmlvZAogICAgICAgICkKICAgICAgICAgIGFuZCBPeHlnZW5UaGVyYXB5T3JkZXIuc3RhdHVzIGluIHsgJ2FjdGl2ZScsICdjb21wbGV0ZWQnIH0KICAgICAgICAgIGFuZCBPeHlnZW5UaGVyYXB5T3JkZXIuaW50ZW50ID0gJ29yZGVyJwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBFbmNvdW50ZXJJZDogRW5jb3VudGVySW5wYXRpZW50LmlkLAogICAgICAgICAgT3JkZXJTdGF0dXM6IE94eWdlblRoZXJhcHlPcmRlci5zdGF0dXMsCiAgICAgICAgICBPcmRlclRpbWluZzogT3h5Z2VuVGhlcmFweU9yZGVyLmF1dGhvcmVkT24KICAgICAgICB9CiAgICApCiAgICAgIG9yIGV4aXN0cyAoIFtQcm9jZWR1cmU6ICJOb24gSW52YXNpdmUgT3h5Z2VuIFRoZXJhcHkgYnkgTmFzYWwgQ2FubnVsYSBvciBNYXNrIl0gT3h5Z2VuQWRtaW5JbnRlcnYKICAgICAgICAgIHdoZXJlICggT3h5Z2VuQWRtaW5JbnRlcnYucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApIHN0YXJ0cyBkdXJpbmcgRW5jb3VudGVySW5wYXRpZW50LmVkVmlzaXQgKCApLnBlcmlvZAogICAgICAgICAgICAgIG9yIE94eWdlbkFkbWluSW50ZXJ2LnBlcmZvcm1lZC50b0ludGVydmFsICggKSA2MCBtaW51dGVzIG9yIGxlc3MgYmVmb3JlIG9yIG9uIHN0YXJ0IG9mIEVuY291bnRlcklucGF0aWVudC5lZFZpc2l0ICggKS5wZXJpb2QKICAgICAgICAgICkKICAgICAgICAgICAgYW5kIE94eWdlbkFkbWluSW50ZXJ2LnN0YXR1cyA9ICdjb21wbGV0ZWQnCiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBFbmNvdW50ZXJJZDogRW5jb3VudGVySW5wYXRpZW50LmlkLAogICAgICAgICAgICBFREVuY291bnRlclRpbWluZzogRW5jb3VudGVySW5wYXRpZW50LmVkVmlzaXQgKCApLnBlcmlvZCwKICAgICAgICAgICAgUGVyZm9ybWVkU3RhdHVzOiBPeHlnZW5BZG1pbkludGVydi5zdGF0dXMsCiAgICAgICAgICAgIFBlcmZvcm1lZFRpbWluZzogT3h5Z2VuQWRtaW5JbnRlcnYucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApCiAgICAgICAgICB9CiAgICAgICkKCmRlZmluZSAiU0RFIEV0aG5pY2l0eSI6CiAgU0RFLiJTREUgRXRobmljaXR5IgoKZGVmaW5lICJTREUgUGF5ZXIiOgogIFNERS4iU0RFIFBheWVyIgoKZGVmaW5lICJTREUgUmFjZSI6CiAgU0RFLiJTREUgUmFjZSIKCmRlZmluZSAiU0RFIFNleCI6CiAgU0RFLiJTREUgU2V4Ig==",
      "url" : "https://madie.cms.gov/Library-CMSFHIR529HybridHospitalWideReadmission.cql"
    }
  ]
}