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
| Draft as of 2026-09-19 |
{
"resourceType" : "Library",
"id" : "CMS22FHIRPCSBPScreeningFollowUp",
"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\">1.1.000</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 CMS22FHIRPCSBPScreeningFollowUp version '1.1.000'\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.CumulativeMedicationDuration version '2.0.0-ballot' called CMD\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 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 "ActCode": 'http://terminology.hl7.org/CodeSystem/v3-ActCode'\ncodesystem "LOINC": 'http://loinc.org'\ncodesystem "SNOMEDCT": 'http://snomed.info/sct'\n\nvalueset "Diagnosis of Hypertension": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.263'\nvalueset "Dietary Recommendations": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.1515'\nvalueset "Encounter to Screen for Blood Pressure": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.1920'\nvalueset "Finding of Elevated Blood Pressure or Hypertension": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1047.514'\nvalueset "Follow Up Within 4 Weeks": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1578'\nvalueset "Follow Up Within 6 Months": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1108.125'\nvalueset "Laboratory Tests for Hypertension": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.1482'\nvalueset "Lifestyle Recommendation": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1581'\nvalueset "Medical Reason": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1007'\nvalueset "Patient Declined": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1582'\nvalueset "Pharmacologic Therapy for Hypertension": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.1577'\nvalueset "Recommendation to Increase Physical Activity": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.1518'\nvalueset "Referral or Counseling for Alcohol Consumption": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1583'\nvalueset "Referral to Primary Care or Alternate Provider": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1580'\nvalueset "Weight Reduction Recommended": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.1510'\n\ncode "Blood pressure panel with all children optional": '85354-9' from "LOINC" display 'Blood pressure panel with all children optional'\ncode "Diastolic blood pressure": '8462-4' from "LOINC" display 'Diastolic blood pressure'\ncode "12 lead EKG panel": '34534-8' from "LOINC" display 'EKG 12 channel panel'\ncode "EKG study": '11524-6' from "LOINC" display 'EKG study'\ncode "Systolic blood pressure": '8480-6' from "LOINC" display 'Systolic blood pressure'\ncode "virtual": 'VR' from "ActCode" display 'virtual'\n\nparameter "Measurement Period" Interval<DateTime>\n default Interval[@2026-01-01T00:00:00.000Z, @2027-01-01T00:00:00.000Z)\n\ncontext Patient\n\ndefine "Initial Population":\n "Qualifying Encounter during Measurement Period" QualifyingEncounter\n where AgeInYearsAt(date from start of "Measurement Period") >= 18\n\ndefine "Denominator":\n "Initial Population"\n\ndefine "Denominator Exclusions":\n "Qualifying Encounter during Measurement Period" QualifyingEncounter\n with [ConditionProblemsHealthConcerns: "Diagnosis of Hypertension"] Hypertension\n such that Hypertension.prevalenceInterval ( ) starts before or on day of QualifyingEncounter.period\n and Hypertension.isVerified ( )\n\ndefine "Numerator":\n "Encounter with Normal Blood Pressure Reading"\n union ( "Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80 and Interventions" )\n union ( "Encounter with First Hypertensive Reading SBP Greater than or Equal to 130 OR DBP Greater than or Equal to 80 and Interventions" )\n union ( "Encounter with Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89 and Interventions" )\n union ( "Encounter with Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90 and Interventions" )\n\ndefine "Denominator Exceptions":\n "Encounter with Medical Reason for Not Obtaining or Patient Declined Blood Pressure Measurement"\n union "Encounter with Order for Hypertension Follow Up Declined by Patient"\n\ndefine "Follow up with Rescreen Within 6 Months":\n [ServiceRequest: "Follow Up Within 6 Months"] FollowUp\n where FollowUp.intent ~ 'order'\n\ndefine "Laboratory Test or ECG for Hypertension":\n ( [ServiceRequest: "12 lead EKG panel"]\n union [ServiceRequest: "EKG study"]\n union [ServiceRequest: "Laboratory Tests for Hypertension"] ) EKGLab\n where EKGLab.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n\ndefine "NonPharmacological Interventions":\n ( [ServiceRequest: "Lifestyle Recommendation"]\n union [ServiceRequest: "Weight Reduction Recommended"]\n union [ServiceRequest: "Dietary Recommendations"]\n union [ServiceRequest: "Recommendation to Increase Physical Activity"]\n union [ServiceRequest: "Referral or Counseling for Alcohol Consumption"] ) NonPharmaInterventions\n where NonPharmaInterventions.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n\ndefine "Encounter with First Hypertensive Reading SBP Greater than or Equal to 130 OR DBP Greater than or Equal to 80 and Interventions":\n "Encounter with First Hypertensive Reading SBP Greater than or Equal to 130 OR DBP Greater than or Equal to 80" FirstHTNEncounter\n with "First Hypertensive Reading Interventions or Referral to Alternate Professional" FirstHTNIntervention\n such that FirstHTNIntervention.authoredOn during day of FirstHTNEncounter.period\n\ndefine "Encounter with Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89 and Interventions":\n ( "Encounter with Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89" SecondHTNEncounterReading\n with "Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89 and Interventions" EncounterInterventions\n such that EncounterInterventions.authoredOn during day of SecondHTNEncounterReading.period\n )\n union ( "Encounter with Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89" SecondHTNEncounterReading\n with "Referral to Alternate or Primary Healthcare Professional for Hypertensive Reading" ReferralForHTN\n such that ReferralForHTN.authoredOn during day of SecondHTNEncounterReading.period\n )\n\ndefine "Encounter with Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90 and Interventions":\n ( "Encounter with Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90" SecondHTNEncounterReading140Over90\n with "Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90 Interventions" SecondHTN140Over90Interventions\n such that SecondHTN140Over90Interventions.authoredOn during day of SecondHTNEncounterReading140Over90.period\n )\n union "Encounter with Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90" SecondHTNEncounterReading140Over90\n with "Referral to Alternate or Primary Healthcare Professional for Hypertensive Reading" ReferralToProfessional\n such that ReferralToProfessional.authoredOn during day of SecondHTNEncounterReading140Over90.period\n\ndefine "First Hypertensive Reading Interventions or Referral to Alternate Professional":\n ( [ServiceRequest: "Follow Up Within 4 Weeks"] FourWeekRescreen\n with "NonPharmacological Interventions" NonPharmInterventionsHTN\n such that FourWeekRescreen.authoredOn during day of "Measurement Period"\n and NonPharmInterventionsHTN.authoredOn during day of "Measurement Period"\n and FourWeekRescreen.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n )\n union ( "Referral to Alternate or Primary Healthcare Professional for Hypertensive Reading" )\n\ndefine "Referral to Alternate or Primary Healthcare Professional for Hypertensive Reading":\n [ServiceRequest: "Referral to Primary Care or Alternate Provider"] Referral\n where Referral.reasonCode in "Finding of Elevated Blood Pressure or Hypertension"\n and Referral.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n\ndefine "Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90 Interventions":\n ( [ServiceRequest: "Follow Up Within 4 Weeks"] WeeksRescreen\n with "Laboratory Test or ECG for Hypertension" ECGLabTest\n such that WeeksRescreen.authoredOn during day of "Measurement Period"\n and ECGLabTest.authoredOn during day of "Measurement Period"\n and WeeksRescreen.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n and ECGLabTest.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n with "NonPharmacological Interventions" HTNInterventions\n such that HTNInterventions.authoredOn during day of "Measurement Period"\n with ["MedicationRequest": "Pharmacologic Therapy for Hypertension"] Medications\n such that Medications.authoredOn during day of "Measurement Period"\n and Medications.status in { 'active', 'completed' }\n )\n\ndefine "Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89 and Interventions":\n "Follow up with Rescreen Within 6 Months" Rescreen2to6\n with "Laboratory Test or ECG for Hypertension" LabECGIntervention\n such that Rescreen2to6.authoredOn during day of "Measurement Period"\n and LabECGIntervention.authoredOn during day of "Measurement Period"\n with "NonPharmacological Interventions" NonPharmSecondIntervention\n such that NonPharmSecondIntervention.authoredOn during day of "Measurement Period"\n\ndefine "Qualifying Encounter during Measurement Period":\n [Encounter: "Encounter to Screen for Blood Pressure"] ValidEncounter\n where ValidEncounter.period ends during day of "Measurement Period"\n and ValidEncounter.status ~ 'finished'\n and ValidEncounter.class !~ "virtual"\n\ndefine "Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80 and Interventions":\n ( "Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80" ElevatedEncounter\n with "Follow up with Rescreen Within 6 Months" Twoto6MonthRescreen\n such that Twoto6MonthRescreen.authoredOn during day of ElevatedEncounter.period\n with "NonPharmacological Interventions" NonPharmInterventions\n such that NonPharmInterventions.authoredOn during day of ElevatedEncounter.period\n )\n union ( "Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80" ElevatedEncounter\n with "Referral to Alternate or Primary Healthcare Professional for Hypertensive Reading" Referral\n such that Referral.authoredOn during day of ElevatedEncounter.period\n )\n\ndefine "Encounter with Normal Blood Pressure Reading":\n "Qualifying Encounter during Measurement Period" QualifyingEncounter\n let EncounterLastBP: Last([USCore.BloodPressureProfile] BloodPressure\n where BloodPressure.effective.toInterval ( ) ends during day of QualifyingEncounter.period\n and BloodPressure.status in { 'final', 'amended', 'corrected' }\n sort by start of effective.toInterval ( )\n )\n where ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Systolic blood pressure"\n )\n ).value in Interval[1 'mm[Hg]', 120 'mm[Hg]' )\n and ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Diastolic blood pressure"\n )\n ).value in Interval[1 'mm[Hg]', 80 'mm[Hg]' )\n\ndefine "Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80":\n "Qualifying Encounter during Measurement Period" QualifyingEncounter\n let EncounterLastBP: Last([USCore.BloodPressureProfile] BloodPressure\n where BloodPressure.effective.toInterval ( ) ends during day of QualifyingEncounter.period\n and BloodPressure.status in { 'final', 'amended', 'corrected' }\n sort by start of effective.toInterval ( )\n )\n where ( ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Systolic blood pressure"\n )\n ).value in Interval[120 'mm[Hg]', 129 'mm[Hg]']\n and ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Diastolic blood pressure"\n )\n ).value in Interval[1 'mm[Hg]', 80 'mm[Hg]' )\n )\n\ndefine "Encounter with Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90":\n ( ( "Qualifying Encounter during Measurement Period" QualifyingEncounter\n let EncounterLastBP: Last([USCore.BloodPressureProfile] BloodPressure\n where BloodPressure.effective.toInterval ( ) ends during day of QualifyingEncounter.period\n and BloodPressure.status in { 'final', 'amended', 'corrected' }\n sort by start of effective.toInterval ( )\n )\n where ( ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Systolic blood pressure"\n )\n ).value > 0 'mm[Hg]'\n and ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Diastolic blood pressure"\n )\n ).value > 0 'mm[Hg]'\n and ( ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Systolic blood pressure"\n )\n ).value >= 140 'mm[Hg]'\n or ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Diastolic blood pressure"\n )\n ).value >= 90 'mm[Hg]'\n )\n )\n )\n intersect "Encounter with Hypertensive Reading Within Year Prior"\n )\n\ndefine "Encounter with Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89":\n ( ( "Qualifying Encounter during Measurement Period" QualifyingEncounter\n let EncounterLastBP: Last([USCore.BloodPressureProfile] BloodPressure\n where BloodPressure.effective.toInterval ( ) ends during day of QualifyingEncounter.period\n and BloodPressure.status in { 'final', 'amended', 'corrected' }\n sort by start of effective.toInterval ( )\n )\n where ( ( ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Systolic blood pressure"\n )\n ).value in Interval[130 'mm[Hg]', 139 'mm[Hg]']\n or ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Diastolic blood pressure"\n )\n ).value in Interval[80 'mm[Hg]', 89 'mm[Hg]']\n )\n and not ( ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Systolic blood pressure"\n )\n ).value >= 140 'mm[Hg]'\n or ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Diastolic blood pressure"\n )\n ).value >= 90 'mm[Hg]'\n )\n )\n )\n intersect "Encounter with Hypertensive Reading Within Year Prior"\n )\n\ndefine "Encounter with First Hypertensive Reading SBP Greater than or Equal to 130 OR DBP Greater than or Equal to 80":\n ( "Qualifying Encounter during Measurement Period" QualifyingEncounter\n let EncounterLastBP: Last([USCore.BloodPressureProfile] BloodPressure\n where BloodPressure.effective.toInterval ( ) ends during day of QualifyingEncounter.period\n and BloodPressure.status in { 'final', 'amended', 'corrected' }\n sort by start of effective.toInterval ( )\n )\n where ( ( ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Systolic blood pressure"\n )\n ).value > 0 'mm[Hg]'\n and ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Diastolic blood pressure"\n )\n ).value > 0 'mm[Hg]'\n )\n and ( ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Systolic blood pressure"\n )\n ).value >= 130 'mm[Hg]'\n or ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Diastolic blood pressure"\n )\n ).value >= 80 'mm[Hg]'\n )\n )\n )\n except "Encounter with Hypertensive Reading Within Year Prior"\n\ndefine "Encounter with Hypertensive Reading Within Year Prior":\n ( "Qualifying Encounter during Measurement Period" QualifyingEncounter\n let EncounterLastBP: Last([USCore.BloodPressureProfile] BloodPressure\n where BloodPressure.effective.toInterval ( ) ends 1 year or less before or on start of QualifyingEncounter.period\n and BloodPressure.status in { 'final', 'amended', 'corrected' }\n sort by start of effective.toInterval ( )\n )\n where ( ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Systolic blood pressure"\n )\n ).value > 0 'mm[Hg]'\n and ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Diastolic blood pressure"\n )\n ).value > 0 'mm[Hg]'\n and ( ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Systolic blood pressure"\n )\n ).value >= 130 'mm[Hg]'\n or ( singleton from ( EncounterLastBP.component C\n where C.code ~ "Diastolic blood pressure"\n )\n ).value >= 80 'mm[Hg]'\n )\n )\n )\n\ndefine "NonPharmacological Intervention Not Ordered":\n ( [ServiceNotRequested: "Lifestyle Recommendation"]\n union [ServiceNotRequested: "Weight Reduction Recommended"]\n union [ServiceNotRequested: "Dietary Recommendations"]\n union [ServiceNotRequested: "Recommendation to Increase Physical Activity"]\n union [ServiceNotRequested: "Referral or Counseling for Alcohol Consumption"] ) NonPharmIntervention\n where NonPharmIntervention.status in { 'active', 'completed', 'on-hold' }\n and NonPharmIntervention.reasonCode in "Patient Declined"\n\ndefine "Encounter with Medical Reason for Not Obtaining or Patient Declined Blood Pressure Measurement":\n "Qualifying Encounter during Measurement Period" QualifyingEncounter\n with ( [ObservationCancelled: code ~ "Blood pressure panel with all children optional"]\n union [ObservationCancelled: code ~ "Systolic blood pressure"]\n union [ObservationCancelled: code ~ "Diastolic blood pressure"] ) NoBPScreen\n such that NoBPScreen.issued during day of QualifyingEncounter.period\n and ( NoBPScreen.notDoneReason () in "Patient Declined"\n or NoBPScreen.notDoneReason () in "Medical Reason"\n )\n\ndefine "Encounter with Order for Hypertension Follow Up Declined by Patient":\n ( ( "Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80" ElevatedBPEncounter\n with ( [ServiceNotRequested: "Referral to Primary Care or Alternate Provider"]\n union [ServiceNotRequested: "Follow Up Within 6 Months"] ) ElevatedBPDeclinedInterventions\n such that ElevatedBPDeclinedInterventions.authoredOn during day of ElevatedBPEncounter.period\n and ElevatedBPDeclinedInterventions.status in { 'active', 'completed', 'on-hold' }\n and ElevatedBPDeclinedInterventions.reasonCode in "Patient Declined"\n )\n union ( "Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80" ElevatedBPEncounter\n with "NonPharmacological Intervention Not Ordered" NotOrdered\n such that NotOrdered.authoredOn during day of ElevatedBPEncounter.period\n )\n union ( "Encounter with First Hypertensive Reading SBP Greater than or Equal to 130 OR DBP Greater than or Equal to 80" FirstHTNEncounter\n with ( [ServiceNotRequested: "Follow Up Within 4 Weeks"]\n union [ServiceNotRequested: "Referral to Primary Care or Alternate Provider"] ) FirstHTNDeclinedInterventions\n such that FirstHTNDeclinedInterventions.authoredOn during day of FirstHTNEncounter.period\n and FirstHTNDeclinedInterventions.status in { 'active', 'completed', 'on-hold' }\n and FirstHTNDeclinedInterventions.reasonCode in "Patient Declined"\n )\n union ( "Encounter with First Hypertensive Reading SBP Greater than or Equal to 130 OR DBP Greater than or Equal to 80" FirstHTNEncounter\n with "NonPharmacological Intervention Not Ordered" NoNonPharm\n such that NoNonPharm.authoredOn during day of FirstHTNEncounter.period\n )\n union ( "Encounter with Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89" SecondHTNEncounter\n with "Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89 Interventions Declined" SecondHTNDeclinedInterventions\n such that SecondHTNDeclinedInterventions.authoredOn during day of SecondHTNEncounter.period\n )\n union ( "Encounter with Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90" SecondHTN140Over90Encounter\n with "Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90 Interventions Declined" SecondHTN140Over90DeclinedInterventions\n such that SecondHTN140Over90DeclinedInterventions.authoredOn during day of SecondHTN140Over90Encounter.period\n )\n )\n\ndefine "Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89 Interventions Declined":\n ( ( [ServiceNotRequested: "Referral to Primary Care or Alternate Provider"]\n union [ServiceNotRequested: "Follow Up Within 6 Months"] ) SecondHTNDeclinedReferralAndFollowUp\n where SecondHTNDeclinedReferralAndFollowUp.status in { 'active', 'completed', 'on-hold' }\n and SecondHTNDeclinedReferralAndFollowUp.reasonCode in "Patient Declined"\n )\n union "Laboratory Test or ECG for Hypertension Not Ordered"\n union "NonPharmacological Intervention Not Ordered"\n\ndefine "Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90 Interventions Declined":\n ( ( ( [ServiceNotRequested: "Referral to Primary Care or Alternate Provider"]\n union [ServiceNotRequested: "Follow Up Within 4 Weeks"] ) SecondHTN140Over90ReferralFollowUpNotDone\n where SecondHTN140Over90ReferralFollowUpNotDone.status in { 'active', 'completed', 'on-hold' }\n and SecondHTN140Over90ReferralFollowUpNotDone.reasonCode in "Patient Declined"\n )\n union ( [MedicationNotRequested: "Pharmacologic Therapy for Hypertension"] MedicationRequestNotOrdered\n where MedicationRequestNotOrdered.status in { 'active', 'completed' }\n )\n union "Laboratory Test or ECG for Hypertension Not Ordered"\n union "NonPharmacological Intervention Not Ordered"\n )\n\ndefine "Laboratory Test or ECG for Hypertension Not Ordered":\n ( [ServiceNotRequested: code = "12 lead EKG panel"]\n union [ServiceNotRequested: code = "EKG study"]\n union [ServiceNotRequested: "Laboratory Tests for Hypertension"] ) LabECGNotDone\n where LabECGNotDone.status in { 'active', 'completed', 'on-hold' }\n and LabECGNotDone.reasonCode in "Patient Declined"\n\ndefine "SDE Ethnicity":\n SDE."SDE Ethnicity"\n\ndefine "SDE Payer":\n SDE."SDE Payer"\n\ndefine "SDE Race":\n SDE."SDE Race"\n\ndefine "SDE Sex":\n SDE."SDE Sex"\n\n/*\n@description: Returns true if the given condition either has no verification status or has a verification status of confirmed, unconfirmed, provisional, or differential\n*/\n\n\ndefine fluent function isVerified(condition Choice<ConditionProblemsHealthConcerns, ConditionEncounterDiagnosis>):\n condition.verificationStatus is not null implies ( condition.verificationStatus ~ Status."confirmed"\n or condition.verificationStatus ~ Status."unconfirmed"\n or condition.verificationStatus ~ Status."provisional"\n or condition.verificationStatus ~ Status."differential"\n )</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/CMS22FHIRPCSBPScreeningFollowUp",
"version" : "1.1.000",
"name" : "CMS22FHIRPCSBPScreeningFollowUp",
"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" : "LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBDTVMyMkZISVJQQ1NCUFNjcmVlbmluZ0ZvbGxvd1VwIHZlcnNpb24gJzEuMS4wMDAnCgp1c2luZyBVU1F1YWxpdHlDb3JlIHZlcnNpb24gJzAuMS4wLWNpYnVpbGQnCnVzaW5nIFVTQ29yZSB2ZXJzaW9uICc2LjEuMC1kZXJpdmVkJwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIGhsNy5maGlyLnV2LmNxbC5GSElSQ29tbW9uIHZlcnNpb24gJzIuMC4wJyBjYWxsZWQgRkhJUkNvbW1vbgppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5DdW11bGF0aXZlTWVkaWNhdGlvbkR1cmF0aW9uIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIENNRAppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5VU0NvcmVDb21tb24gdmVyc2lvbiAnMi4wLjAtYmFsbG90JyBjYWxsZWQgVVNDb3JlQ29tbW9uCmluY2x1ZGUgaGw3LmZoaXIudXMuY3FsLlVTQ29yZUVsZW1lbnRzIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIFVTQ29yZUVsZW1lbnRzCgppbmNsdWRlIFVTUXVhbGl0eUNvcmVDb21tb24gdmVyc2lvbiAnMC4xLjAtY2lidWlsZCcgY2FsbGVkIFVTUXVhbGl0eUNvcmVDb21tb24KaW5jbHVkZSBTdXBwbGVtZW50YWxEYXRhRWxlbWVudHMgdmVyc2lvbiAnNi4xLjAwMCcgY2FsbGVkIFNERQppbmNsdWRlIFN0YXR1cyB2ZXJzaW9uICcyLjEuMDAwJyBjYWxsZWQgU3RhdHVzCgpjb2Rlc3lzdGVtICJBY3RDb2RlIjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjMtQWN0Q29kZScKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKY29kZXN5c3RlbSAiU05PTUVEQ1QiOiAnaHR0cDovL3Nub21lZC5pbmZvL3NjdCcKCnZhbHVlc2V0ICJEaWFnbm9zaXMgb2YgSHlwZXJ0ZW5zaW9uIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjYwMC4yNjMnCnZhbHVlc2V0ICJEaWV0YXJ5IFJlY29tbWVuZGF0aW9ucyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy42MDAuMTUxNScKdmFsdWVzZXQgIkVuY291bnRlciB0byBTY3JlZW4gZm9yIEJsb29kIFByZXNzdXJlIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjYwMC4xOTIwJwp2YWx1ZXNldCAiRmluZGluZyBvZiBFbGV2YXRlZCBCbG9vZCBQcmVzc3VyZSBvciBIeXBlcnRlbnNpb24iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMDQ3LjUxNCcKdmFsdWVzZXQgIkZvbGxvdyBVcCBXaXRoaW4gNCBXZWVrcyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4xNTc4Jwp2YWx1ZXNldCAiRm9sbG93IFVwIFdpdGhpbiA2IE1vbnRocyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjExMDguMTI1Jwp2YWx1ZXNldCAiTGFib3JhdG9yeSBUZXN0cyBmb3IgSHlwZXJ0ZW5zaW9uIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjYwMC4xNDgyJwp2YWx1ZXNldCAiTGlmZXN0eWxlIFJlY29tbWVuZGF0aW9uIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjUyNi4zLjE1ODEnCnZhbHVlc2V0ICJNZWRpY2FsIFJlYXNvbiI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4xMDA3Jwp2YWx1ZXNldCAiUGF0aWVudCBEZWNsaW5lZCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4xNTgyJwp2YWx1ZXNldCAiUGhhcm1hY29sb2dpYyBUaGVyYXB5IGZvciBIeXBlcnRlbnNpb24iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNTI2LjE1NzcnCnZhbHVlc2V0ICJSZWNvbW1lbmRhdGlvbiB0byBJbmNyZWFzZSBQaHlzaWNhbCBBY3Rpdml0eSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy42MDAuMTUxOCcKdmFsdWVzZXQgIlJlZmVycmFsIG9yIENvdW5zZWxpbmcgZm9yIEFsY29ob2wgQ29uc3VtcHRpb24iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNTI2LjMuMTU4MycKdmFsdWVzZXQgIlJlZmVycmFsIHRvIFByaW1hcnkgQ2FyZSBvciBBbHRlcm5hdGUgUHJvdmlkZXIiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNTI2LjMuMTU4MCcKdmFsdWVzZXQgIldlaWdodCBSZWR1Y3Rpb24gUmVjb21tZW5kZWQiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNjAwLjE1MTAnCgpjb2RlICJCbG9vZCBwcmVzc3VyZSBwYW5lbCB3aXRoIGFsbCBjaGlsZHJlbiBvcHRpb25hbCI6ICc4NTM1NC05JyBmcm9tICJMT0lOQyIgZGlzcGxheSAnQmxvb2QgcHJlc3N1cmUgcGFuZWwgd2l0aCBhbGwgY2hpbGRyZW4gb3B0aW9uYWwnCmNvZGUgIkRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSI6ICc4NDYyLTQnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdEaWFzdG9saWMgYmxvb2QgcHJlc3N1cmUnCmNvZGUgIjEyIGxlYWQgRUtHIHBhbmVsIjogJzM0NTM0LTgnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdFS0cgMTIgY2hhbm5lbCBwYW5lbCcKY29kZSAiRUtHIHN0dWR5IjogJzExNTI0LTYnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdFS0cgc3R1ZHknCmNvZGUgIlN5c3RvbGljIGJsb29kIHByZXNzdXJlIjogJzg0ODAtNicgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ1N5c3RvbGljIGJsb29kIHByZXNzdXJlJwpjb2RlICJ2aXJ0dWFsIjogJ1ZSJyBmcm9tICJBY3RDb2RlIiBkaXNwbGF5ICd2aXJ0dWFsJwoKcGFyYW1ldGVyICJNZWFzdXJlbWVudCBQZXJpb2QiIEludGVydmFsPERhdGVUaW1lPgogIGRlZmF1bHQgSW50ZXJ2YWxbQDIwMjYtMDEtMDFUMDA6MDA6MDAuMDAwWiwgQDIwMjctMDEtMDFUMDA6MDA6MDAuMDAwWikKCmNvbnRleHQgUGF0aWVudAoKZGVmaW5lICJJbml0aWFsIFBvcHVsYXRpb24iOgogICJRdWFsaWZ5aW5nIEVuY291bnRlciBkdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIiBRdWFsaWZ5aW5nRW5jb3VudGVyCiAgICB3aGVyZSBBZ2VJblllYXJzQXQoZGF0ZSBmcm9tIHN0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiKSA+PSAxOAoKZGVmaW5lICJEZW5vbWluYXRvciI6CiAgIkluaXRpYWwgUG9wdWxhdGlvbiIKCmRlZmluZSAiRGVub21pbmF0b3IgRXhjbHVzaW9ucyI6CiAgIlF1YWxpZnlpbmcgRW5jb3VudGVyIGR1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiIFF1YWxpZnlpbmdFbmNvdW50ZXIKICAgIHdpdGggW0NvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnM6ICJEaWFnbm9zaXMgb2YgSHlwZXJ0ZW5zaW9uIl0gSHlwZXJ0ZW5zaW9uCiAgICAgIHN1Y2ggdGhhdCBIeXBlcnRlbnNpb24ucHJldmFsZW5jZUludGVydmFsICggKSBzdGFydHMgYmVmb3JlIG9yIG9uIGRheSBvZiBRdWFsaWZ5aW5nRW5jb3VudGVyLnBlcmlvZAogICAgICAgIGFuZCBIeXBlcnRlbnNpb24uaXNWZXJpZmllZCAoICkKCmRlZmluZSAiTnVtZXJhdG9yIjoKICAiRW5jb3VudGVyIHdpdGggTm9ybWFsIEJsb29kIFByZXNzdXJlIFJlYWRpbmciCiAgICB1bmlvbiAoICJFbmNvdW50ZXIgd2l0aCBFbGV2YXRlZCBCbG9vZCBQcmVzc3VyZSBSZWFkaW5nIFNCUCAxMjAgdG8gMTI5IEFORCBEQlAgbGVzcyB0aGFuIDgwIGFuZCBJbnRlcnZlbnRpb25zIiApCiAgICB1bmlvbiAoICJFbmNvdW50ZXIgd2l0aCBGaXJzdCBIeXBlcnRlbnNpdmUgUmVhZGluZyBTQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDEzMCBPUiBEQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDgwIGFuZCBJbnRlcnZlbnRpb25zIiApCiAgICB1bmlvbiAoICJFbmNvdW50ZXIgd2l0aCBTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIDEzMCB0byAxMzkgT1IgREJQIDgwIHRvIDg5IGFuZCBJbnRlcnZlbnRpb25zIiApCiAgICB1bmlvbiAoICJFbmNvdW50ZXIgd2l0aCBTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byAxNDAgT1IgREJQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byA5MCBhbmQgSW50ZXJ2ZW50aW9ucyIgKQoKZGVmaW5lICJEZW5vbWluYXRvciBFeGNlcHRpb25zIjoKICAiRW5jb3VudGVyIHdpdGggTWVkaWNhbCBSZWFzb24gZm9yIE5vdCBPYnRhaW5pbmcgb3IgUGF0aWVudCBEZWNsaW5lZCBCbG9vZCBQcmVzc3VyZSBNZWFzdXJlbWVudCIKICAgIHVuaW9uICJFbmNvdW50ZXIgd2l0aCBPcmRlciBmb3IgSHlwZXJ0ZW5zaW9uIEZvbGxvdyBVcCBEZWNsaW5lZCBieSBQYXRpZW50IgoKZGVmaW5lICJGb2xsb3cgdXAgd2l0aCBSZXNjcmVlbiBXaXRoaW4gNiBNb250aHMiOgogIFtTZXJ2aWNlUmVxdWVzdDogIkZvbGxvdyBVcCBXaXRoaW4gNiBNb250aHMiXSBGb2xsb3dVcAogICAgd2hlcmUgRm9sbG93VXAuaW50ZW50IH4gJ29yZGVyJwoKZGVmaW5lICJMYWJvcmF0b3J5IFRlc3Qgb3IgRUNHIGZvciBIeXBlcnRlbnNpb24iOgogICggW1NlcnZpY2VSZXF1ZXN0OiAiMTIgbGVhZCBFS0cgcGFuZWwiXQogICAgdW5pb24gW1NlcnZpY2VSZXF1ZXN0OiAiRUtHIHN0dWR5Il0KICAgIHVuaW9uIFtTZXJ2aWNlUmVxdWVzdDogIkxhYm9yYXRvcnkgVGVzdHMgZm9yIEh5cGVydGVuc2lvbiJdICkgRUtHTGFiCiAgICB3aGVyZSBFS0dMYWIuaW50ZW50IGluIHsgJ29yZGVyJywgJ29yaWdpbmFsLW9yZGVyJywgJ3JlZmxleC1vcmRlcicsICdmaWxsZXItb3JkZXInLCAnaW5zdGFuY2Utb3JkZXInIH0KCmRlZmluZSAiTm9uUGhhcm1hY29sb2dpY2FsIEludGVydmVudGlvbnMiOgogICggW1NlcnZpY2VSZXF1ZXN0OiAiTGlmZXN0eWxlIFJlY29tbWVuZGF0aW9uIl0KICAgIHVuaW9uIFtTZXJ2aWNlUmVxdWVzdDogIldlaWdodCBSZWR1Y3Rpb24gUmVjb21tZW5kZWQiXQogICAgdW5pb24gW1NlcnZpY2VSZXF1ZXN0OiAiRGlldGFyeSBSZWNvbW1lbmRhdGlvbnMiXQogICAgdW5pb24gW1NlcnZpY2VSZXF1ZXN0OiAiUmVjb21tZW5kYXRpb24gdG8gSW5jcmVhc2UgUGh5c2ljYWwgQWN0aXZpdHkiXQogICAgdW5pb24gW1NlcnZpY2VSZXF1ZXN0OiAiUmVmZXJyYWwgb3IgQ291bnNlbGluZyBmb3IgQWxjb2hvbCBDb25zdW1wdGlvbiJdICkgTm9uUGhhcm1hSW50ZXJ2ZW50aW9ucwogICAgd2hlcmUgTm9uUGhhcm1hSW50ZXJ2ZW50aW9ucy5pbnRlbnQgaW4geyAnb3JkZXInLCAnb3JpZ2luYWwtb3JkZXInLCAncmVmbGV4LW9yZGVyJywgJ2ZpbGxlci1vcmRlcicsICdpbnN0YW5jZS1vcmRlcicgfQoKZGVmaW5lICJFbmNvdW50ZXIgd2l0aCBGaXJzdCBIeXBlcnRlbnNpdmUgUmVhZGluZyBTQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDEzMCBPUiBEQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDgwIGFuZCBJbnRlcnZlbnRpb25zIjoKICAiRW5jb3VudGVyIHdpdGggRmlyc3QgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byAxMzAgT1IgREJQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byA4MCIgRmlyc3RIVE5FbmNvdW50ZXIKICAgIHdpdGggIkZpcnN0IEh5cGVydGVuc2l2ZSBSZWFkaW5nIEludGVydmVudGlvbnMgb3IgUmVmZXJyYWwgdG8gQWx0ZXJuYXRlIFByb2Zlc3Npb25hbCIgRmlyc3RIVE5JbnRlcnZlbnRpb24KICAgICAgc3VjaCB0aGF0IEZpcnN0SFROSW50ZXJ2ZW50aW9uLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiBGaXJzdEhUTkVuY291bnRlci5wZXJpb2QKCmRlZmluZSAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCAxMzAgdG8gMTM5IE9SIERCUCA4MCB0byA4OSBhbmQgSW50ZXJ2ZW50aW9ucyI6CiAgKCAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCAxMzAgdG8gMTM5IE9SIERCUCA4MCB0byA4OSIgU2Vjb25kSFRORW5jb3VudGVyUmVhZGluZwogICAgICB3aXRoICJTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIDEzMCB0byAxMzkgT1IgREJQIDgwIHRvIDg5IGFuZCBJbnRlcnZlbnRpb25zIiBFbmNvdW50ZXJJbnRlcnZlbnRpb25zCiAgICAgICAgc3VjaCB0aGF0IEVuY291bnRlckludGVydmVudGlvbnMuYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mIFNlY29uZEhUTkVuY291bnRlclJlYWRpbmcucGVyaW9kCiAgKQogICAgdW5pb24gKCAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCAxMzAgdG8gMTM5IE9SIERCUCA4MCB0byA4OSIgU2Vjb25kSFRORW5jb3VudGVyUmVhZGluZwogICAgICAgIHdpdGggIlJlZmVycmFsIHRvIEFsdGVybmF0ZSBvciBQcmltYXJ5IEhlYWx0aGNhcmUgUHJvZmVzc2lvbmFsIGZvciBIeXBlcnRlbnNpdmUgUmVhZGluZyIgUmVmZXJyYWxGb3JIVE4KICAgICAgICAgIHN1Y2ggdGhhdCBSZWZlcnJhbEZvckhUTi5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgU2Vjb25kSFRORW5jb3VudGVyUmVhZGluZy5wZXJpb2QKICAgICkKCmRlZmluZSAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gMTQwIE9SIERCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gOTAgYW5kIEludGVydmVudGlvbnMiOgogICggIkVuY291bnRlciB3aXRoIFNlY29uZCBIeXBlcnRlbnNpdmUgUmVhZGluZyBTQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDE0MCBPUiBEQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDkwIiBTZWNvbmRIVE5FbmNvdW50ZXJSZWFkaW5nMTQwT3ZlcjkwCiAgICAgIHdpdGggIlNlY29uZCBIeXBlcnRlbnNpdmUgUmVhZGluZyBTQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDE0MCBPUiBEQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDkwIEludGVydmVudGlvbnMiIFNlY29uZEhUTjE0ME92ZXI5MEludGVydmVudGlvbnMKICAgICAgICBzdWNoIHRoYXQgU2Vjb25kSFROMTQwT3ZlcjkwSW50ZXJ2ZW50aW9ucy5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgU2Vjb25kSFRORW5jb3VudGVyUmVhZGluZzE0ME92ZXI5MC5wZXJpb2QKICApCiAgICB1bmlvbiAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gMTQwIE9SIERCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gOTAiIFNlY29uZEhUTkVuY291bnRlclJlYWRpbmcxNDBPdmVyOTAKICAgICAgd2l0aCAiUmVmZXJyYWwgdG8gQWx0ZXJuYXRlIG9yIFByaW1hcnkgSGVhbHRoY2FyZSBQcm9mZXNzaW9uYWwgZm9yIEh5cGVydGVuc2l2ZSBSZWFkaW5nIiBSZWZlcnJhbFRvUHJvZmVzc2lvbmFsCiAgICAgICAgc3VjaCB0aGF0IFJlZmVycmFsVG9Qcm9mZXNzaW9uYWwuYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mIFNlY29uZEhUTkVuY291bnRlclJlYWRpbmcxNDBPdmVyOTAucGVyaW9kCgpkZWZpbmUgIkZpcnN0IEh5cGVydGVuc2l2ZSBSZWFkaW5nIEludGVydmVudGlvbnMgb3IgUmVmZXJyYWwgdG8gQWx0ZXJuYXRlIFByb2Zlc3Npb25hbCI6CiAgKCBbU2VydmljZVJlcXVlc3Q6ICJGb2xsb3cgVXAgV2l0aGluIDQgV2Vla3MiXSBGb3VyV2Vla1Jlc2NyZWVuCiAgICAgIHdpdGggIk5vblBoYXJtYWNvbG9naWNhbCBJbnRlcnZlbnRpb25zIiBOb25QaGFybUludGVydmVudGlvbnNIVE4KICAgICAgICBzdWNoIHRoYXQgRm91cldlZWtSZXNjcmVlbi5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgICAgIGFuZCBOb25QaGFybUludGVydmVudGlvbnNIVE4uYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgICAgICAgICBhbmQgRm91cldlZWtSZXNjcmVlbi5pbnRlbnQgaW4geyAnb3JkZXInLCAnb3JpZ2luYWwtb3JkZXInLCAncmVmbGV4LW9yZGVyJywgJ2ZpbGxlci1vcmRlcicsICdpbnN0YW5jZS1vcmRlcicgfQogICkKICAgIHVuaW9uICggIlJlZmVycmFsIHRvIEFsdGVybmF0ZSBvciBQcmltYXJ5IEhlYWx0aGNhcmUgUHJvZmVzc2lvbmFsIGZvciBIeXBlcnRlbnNpdmUgUmVhZGluZyIgKQoKZGVmaW5lICJSZWZlcnJhbCB0byBBbHRlcm5hdGUgb3IgUHJpbWFyeSBIZWFsdGhjYXJlIFByb2Zlc3Npb25hbCBmb3IgSHlwZXJ0ZW5zaXZlIFJlYWRpbmciOgogIFtTZXJ2aWNlUmVxdWVzdDogIlJlZmVycmFsIHRvIFByaW1hcnkgQ2FyZSBvciBBbHRlcm5hdGUgUHJvdmlkZXIiXSBSZWZlcnJhbAogICAgd2hlcmUgUmVmZXJyYWwucmVhc29uQ29kZSBpbiAiRmluZGluZyBvZiBFbGV2YXRlZCBCbG9vZCBQcmVzc3VyZSBvciBIeXBlcnRlbnNpb24iCiAgICAgIGFuZCBSZWZlcnJhbC5pbnRlbnQgaW4geyAnb3JkZXInLCAnb3JpZ2luYWwtb3JkZXInLCAncmVmbGV4LW9yZGVyJywgJ2ZpbGxlci1vcmRlcicsICdpbnN0YW5jZS1vcmRlcicgfQoKZGVmaW5lICJTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byAxNDAgT1IgREJQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byA5MCBJbnRlcnZlbnRpb25zIjoKICAoIFtTZXJ2aWNlUmVxdWVzdDogIkZvbGxvdyBVcCBXaXRoaW4gNCBXZWVrcyJdIFdlZWtzUmVzY3JlZW4KICAgICAgd2l0aCAiTGFib3JhdG9yeSBUZXN0IG9yIEVDRyBmb3IgSHlwZXJ0ZW5zaW9uIiBFQ0dMYWJUZXN0CiAgICAgICAgc3VjaCB0aGF0IFdlZWtzUmVzY3JlZW4uYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgICAgICAgICBhbmQgRUNHTGFiVGVzdC5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgICAgIGFuZCBXZWVrc1Jlc2NyZWVuLmludGVudCBpbiB7ICdvcmRlcicsICdvcmlnaW5hbC1vcmRlcicsICdyZWZsZXgtb3JkZXInLCAnZmlsbGVyLW9yZGVyJywgJ2luc3RhbmNlLW9yZGVyJyB9CiAgICAgICAgICBhbmQgRUNHTGFiVGVzdC5pbnRlbnQgaW4geyAnb3JkZXInLCAnb3JpZ2luYWwtb3JkZXInLCAncmVmbGV4LW9yZGVyJywgJ2ZpbGxlci1vcmRlcicsICdpbnN0YW5jZS1vcmRlcicgfQogICAgICB3aXRoICJOb25QaGFybWFjb2xvZ2ljYWwgSW50ZXJ2ZW50aW9ucyIgSFROSW50ZXJ2ZW50aW9ucwogICAgICAgIHN1Y2ggdGhhdCBIVE5JbnRlcnZlbnRpb25zLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgICB3aXRoIFsiTWVkaWNhdGlvblJlcXVlc3QiOiAiUGhhcm1hY29sb2dpYyBUaGVyYXB5IGZvciBIeXBlcnRlbnNpb24iXSBNZWRpY2F0aW9ucwogICAgICAgIHN1Y2ggdGhhdCBNZWRpY2F0aW9ucy5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgICAgIGFuZCBNZWRpY2F0aW9ucy5zdGF0dXMgaW4geyAnYWN0aXZlJywgJ2NvbXBsZXRlZCcgfQogICkKCmRlZmluZSAiU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCAxMzAgdG8gMTM5IE9SIERCUCA4MCB0byA4OSBhbmQgSW50ZXJ2ZW50aW9ucyI6CiAgIkZvbGxvdyB1cCB3aXRoIFJlc2NyZWVuIFdpdGhpbiA2IE1vbnRocyIgUmVzY3JlZW4ydG82CiAgICB3aXRoICJMYWJvcmF0b3J5IFRlc3Qgb3IgRUNHIGZvciBIeXBlcnRlbnNpb24iIExhYkVDR0ludGVydmVudGlvbgogICAgICBzdWNoIHRoYXQgUmVzY3JlZW4ydG82LmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgICAgIGFuZCBMYWJFQ0dJbnRlcnZlbnRpb24uYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgICB3aXRoICJOb25QaGFybWFjb2xvZ2ljYWwgSW50ZXJ2ZW50aW9ucyIgTm9uUGhhcm1TZWNvbmRJbnRlcnZlbnRpb24KICAgICAgc3VjaCB0aGF0IE5vblBoYXJtU2Vjb25kSW50ZXJ2ZW50aW9uLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgoKZGVmaW5lICJRdWFsaWZ5aW5nIEVuY291bnRlciBkdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIjoKICBbRW5jb3VudGVyOiAiRW5jb3VudGVyIHRvIFNjcmVlbiBmb3IgQmxvb2QgUHJlc3N1cmUiXSBWYWxpZEVuY291bnRlcgogICAgd2hlcmUgVmFsaWRFbmNvdW50ZXIucGVyaW9kIGVuZHMgZHVyaW5nIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgICBhbmQgVmFsaWRFbmNvdW50ZXIuc3RhdHVzIH4gJ2ZpbmlzaGVkJwogICAgICBhbmQgVmFsaWRFbmNvdW50ZXIuY2xhc3MgIX4gInZpcnR1YWwiCgpkZWZpbmUgIkVuY291bnRlciB3aXRoIEVsZXZhdGVkIEJsb29kIFByZXNzdXJlIFJlYWRpbmcgU0JQIDEyMCB0byAxMjkgQU5EIERCUCBsZXNzIHRoYW4gODAgYW5kIEludGVydmVudGlvbnMiOgogICggIkVuY291bnRlciB3aXRoIEVsZXZhdGVkIEJsb29kIFByZXNzdXJlIFJlYWRpbmcgU0JQIDEyMCB0byAxMjkgQU5EIERCUCBsZXNzIHRoYW4gODAiIEVsZXZhdGVkRW5jb3VudGVyCiAgICAgIHdpdGggIkZvbGxvdyB1cCB3aXRoIFJlc2NyZWVuIFdpdGhpbiA2IE1vbnRocyIgVHdvdG82TW9udGhSZXNjcmVlbgogICAgICAgIHN1Y2ggdGhhdCBUd290bzZNb250aFJlc2NyZWVuLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiBFbGV2YXRlZEVuY291bnRlci5wZXJpb2QKICAgICAgd2l0aCAiTm9uUGhhcm1hY29sb2dpY2FsIEludGVydmVudGlvbnMiIE5vblBoYXJtSW50ZXJ2ZW50aW9ucwogICAgICAgIHN1Y2ggdGhhdCBOb25QaGFybUludGVydmVudGlvbnMuYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mIEVsZXZhdGVkRW5jb3VudGVyLnBlcmlvZAogICkKICAgIHVuaW9uICggIkVuY291bnRlciB3aXRoIEVsZXZhdGVkIEJsb29kIFByZXNzdXJlIFJlYWRpbmcgU0JQIDEyMCB0byAxMjkgQU5EIERCUCBsZXNzIHRoYW4gODAiIEVsZXZhdGVkRW5jb3VudGVyCiAgICAgICAgd2l0aCAiUmVmZXJyYWwgdG8gQWx0ZXJuYXRlIG9yIFByaW1hcnkgSGVhbHRoY2FyZSBQcm9mZXNzaW9uYWwgZm9yIEh5cGVydGVuc2l2ZSBSZWFkaW5nIiBSZWZlcnJhbAogICAgICAgICAgc3VjaCB0aGF0IFJlZmVycmFsLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiBFbGV2YXRlZEVuY291bnRlci5wZXJpb2QKICAgICkKCmRlZmluZSAiRW5jb3VudGVyIHdpdGggTm9ybWFsIEJsb29kIFByZXNzdXJlIFJlYWRpbmciOgogICJRdWFsaWZ5aW5nIEVuY291bnRlciBkdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIiBRdWFsaWZ5aW5nRW5jb3VudGVyCiAgICBsZXQgRW5jb3VudGVyTGFzdEJQOiBMYXN0KFtVU0NvcmUuQmxvb2RQcmVzc3VyZVByb2ZpbGVdIEJsb29kUHJlc3N1cmUKICAgICAgICB3aGVyZSBCbG9vZFByZXNzdXJlLmVmZmVjdGl2ZS50b0ludGVydmFsICggKSBlbmRzIGR1cmluZyBkYXkgb2YgUXVhbGlmeWluZ0VuY291bnRlci5wZXJpb2QKICAgICAgICAgIGFuZCBCbG9vZFByZXNzdXJlLnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICAgICAgIHNvcnQgYnkgc3RhcnQgb2YgZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApCiAgICApCiAgICB3aGVyZSAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICkKICAgICkudmFsdWUgaW4gSW50ZXJ2YWxbMSAnbW1bSGddJywgMTIwICdtbVtIZ10nICkKICAgICAgYW5kICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgd2hlcmUgQy5jb2RlIH4gIkRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICApCiAgICAgICkudmFsdWUgaW4gSW50ZXJ2YWxbMSAnbW1bSGddJywgODAgJ21tW0hnXScgKQoKZGVmaW5lICJFbmNvdW50ZXIgd2l0aCBFbGV2YXRlZCBCbG9vZCBQcmVzc3VyZSBSZWFkaW5nIFNCUCAxMjAgdG8gMTI5IEFORCBEQlAgbGVzcyB0aGFuIDgwIjoKICAiUXVhbGlmeWluZyBFbmNvdW50ZXIgZHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZCIgUXVhbGlmeWluZ0VuY291bnRlcgogICAgbGV0IEVuY291bnRlckxhc3RCUDogTGFzdChbVVNDb3JlLkJsb29kUHJlc3N1cmVQcm9maWxlXSBCbG9vZFByZXNzdXJlCiAgICAgICAgd2hlcmUgQmxvb2RQcmVzc3VyZS5lZmZlY3RpdmUudG9JbnRlcnZhbCAoICkgZW5kcyBkdXJpbmcgZGF5IG9mIFF1YWxpZnlpbmdFbmNvdW50ZXIucGVyaW9kCiAgICAgICAgICBhbmQgQmxvb2RQcmVzc3VyZS5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICAgICBzb3J0IGJ5IHN0YXJ0IG9mIGVmZmVjdGl2ZS50b0ludGVydmFsICggKQogICAgKQogICAgd2hlcmUgKCAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICAgIHdoZXJlIEMuY29kZSB+ICJTeXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICApCiAgICAgICkudmFsdWUgaW4gSW50ZXJ2YWxbMTIwICdtbVtIZ10nLCAxMjkgJ21tW0hnXSddCiAgICAgICAgYW5kICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiRGlhc3RvbGljIGJsb29kIHByZXNzdXJlIgogICAgICAgICAgKQogICAgICAgICkudmFsdWUgaW4gSW50ZXJ2YWxbMSAnbW1bSGddJywgODAgJ21tW0hnXScgKQogICAgKQoKZGVmaW5lICJFbmNvdW50ZXIgd2l0aCBTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byAxNDAgT1IgREJQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byA5MCI6CiAgKCAoICJRdWFsaWZ5aW5nIEVuY291bnRlciBkdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIiBRdWFsaWZ5aW5nRW5jb3VudGVyCiAgICAgICAgbGV0IEVuY291bnRlckxhc3RCUDogTGFzdChbVVNDb3JlLkJsb29kUHJlc3N1cmVQcm9maWxlXSBCbG9vZFByZXNzdXJlCiAgICAgICAgICAgIHdoZXJlIEJsb29kUHJlc3N1cmUuZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApIGVuZHMgZHVyaW5nIGRheSBvZiBRdWFsaWZ5aW5nRW5jb3VudGVyLnBlcmlvZAogICAgICAgICAgICAgIGFuZCBCbG9vZFByZXNzdXJlLnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICAgICAgICAgICBzb3J0IGJ5IHN0YXJ0IG9mIGVmZmVjdGl2ZS50b0ludGVydmFsICggKQogICAgICAgICkKICAgICAgICB3aGVyZSAoICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgIHdoZXJlIEMuY29kZSB+ICJTeXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICAgICAgKQogICAgICAgICAgKS52YWx1ZSA+IDAgJ21tW0hnXScKICAgICAgICAgICAgYW5kICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgd2hlcmUgQy5jb2RlIH4gIkRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICAgICAgICApCiAgICAgICAgICAgICkudmFsdWUgPiAwICdtbVtIZ10nCiAgICAgICAgICAgIGFuZCAoICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgKS52YWx1ZSA+PSAxNDAgJ21tW0hnXScKICAgICAgICAgICAgICAgIG9yICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIEMuY29kZSB+ICJEaWFzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkudmFsdWUgPj0gOTAgJ21tW0hnXScKICAgICAgICAgICAgKQogICAgICAgICkKICAgICkKICAgICAgaW50ZXJzZWN0ICJFbmNvdW50ZXIgd2l0aCBIeXBlcnRlbnNpdmUgUmVhZGluZyBXaXRoaW4gWWVhciBQcmlvciIKICApCgpkZWZpbmUgIkVuY291bnRlciB3aXRoIFNlY29uZCBIeXBlcnRlbnNpdmUgUmVhZGluZyBTQlAgMTMwIHRvIDEzOSBPUiBEQlAgODAgdG8gODkiOgogICggKCAiUXVhbGlmeWluZyBFbmNvdW50ZXIgZHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZCIgUXVhbGlmeWluZ0VuY291bnRlcgogICAgICAgIGxldCBFbmNvdW50ZXJMYXN0QlA6IExhc3QoW1VTQ29yZS5CbG9vZFByZXNzdXJlUHJvZmlsZV0gQmxvb2RQcmVzc3VyZQogICAgICAgICAgICB3aGVyZSBCbG9vZFByZXNzdXJlLmVmZmVjdGl2ZS50b0ludGVydmFsICggKSBlbmRzIGR1cmluZyBkYXkgb2YgUXVhbGlmeWluZ0VuY291bnRlci5wZXJpb2QKICAgICAgICAgICAgICBhbmQgQmxvb2RQcmVzc3VyZS5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICAgICAgICAgc29ydCBieSBzdGFydCBvZiBlZmZlY3RpdmUudG9JbnRlcnZhbCAoICkKICAgICAgICApCiAgICAgICAgd2hlcmUgKCAoICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgd2hlcmUgQy5jb2RlIH4gIlN5c3RvbGljIGJsb29kIHByZXNzdXJlIgogICAgICAgICAgICAgICkKICAgICAgICAgICAgKS52YWx1ZSBpbiBJbnRlcnZhbFsxMzAgJ21tW0hnXScsIDEzOSAnbW1bSGddJ10KICAgICAgICAgICAgICBvciAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICAgICAgICAgICAgd2hlcmUgQy5jb2RlIH4gIkRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICApLnZhbHVlIGluIEludGVydmFsWzgwICdtbVtIZ10nLCA4OSAnbW1bSGddJ10KICAgICAgICAgICkKICAgICAgICAgICAgYW5kIG5vdCAoICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgKS52YWx1ZSA+PSAxNDAgJ21tW0hnXScKICAgICAgICAgICAgICAgIG9yICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIEMuY29kZSB+ICJEaWFzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkudmFsdWUgPj0gOTAgJ21tW0hnXScKICAgICAgICAgICAgKQogICAgICAgICkKICAgICkKICAgICAgaW50ZXJzZWN0ICJFbmNvdW50ZXIgd2l0aCBIeXBlcnRlbnNpdmUgUmVhZGluZyBXaXRoaW4gWWVhciBQcmlvciIKICApCgpkZWZpbmUgIkVuY291bnRlciB3aXRoIEZpcnN0IEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gMTMwIE9SIERCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gODAiOgogICggIlF1YWxpZnlpbmcgRW5jb3VudGVyIGR1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiIFF1YWxpZnlpbmdFbmNvdW50ZXIKICAgICAgbGV0IEVuY291bnRlckxhc3RCUDogTGFzdChbVVNDb3JlLkJsb29kUHJlc3N1cmVQcm9maWxlXSBCbG9vZFByZXNzdXJlCiAgICAgICAgICB3aGVyZSBCbG9vZFByZXNzdXJlLmVmZmVjdGl2ZS50b0ludGVydmFsICggKSBlbmRzIGR1cmluZyBkYXkgb2YgUXVhbGlmeWluZ0VuY291bnRlci5wZXJpb2QKICAgICAgICAgICAgYW5kIEJsb29kUHJlc3N1cmUuc3RhdHVzIGluIHsgJ2ZpbmFsJywgJ2FtZW5kZWQnLCAnY29ycmVjdGVkJyB9CiAgICAgICAgICBzb3J0IGJ5IHN0YXJ0IG9mIGVmZmVjdGl2ZS50b0ludGVydmFsICggKQogICAgICApCiAgICAgIHdoZXJlICggKCAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICkKICAgICAgICAgICkudmFsdWUgPiAwICdtbVtIZ10nCiAgICAgICAgICAgIGFuZCAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICAgICAgICAgIHdoZXJlIEMuY29kZSB+ICJEaWFzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICAgKQogICAgICAgICAgICApLnZhbHVlID4gMCAnbW1bSGddJwogICAgICAgICkKICAgICAgICAgIGFuZCAoICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgd2hlcmUgQy5jb2RlIH4gIlN5c3RvbGljIGJsb29kIHByZXNzdXJlIgogICAgICAgICAgICAgICkKICAgICAgICAgICAgKS52YWx1ZSA+PSAxMzAgJ21tW0hnXScKICAgICAgICAgICAgICBvciAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICAgICAgICAgICAgd2hlcmUgQy5jb2RlIH4gIkRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICApLnZhbHVlID49IDgwICdtbVtIZ10nCiAgICAgICAgICApCiAgICAgICkKICApCiAgICBleGNlcHQgIkVuY291bnRlciB3aXRoIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFdpdGhpbiBZZWFyIFByaW9yIgoKZGVmaW5lICJFbmNvdW50ZXIgd2l0aCBIeXBlcnRlbnNpdmUgUmVhZGluZyBXaXRoaW4gWWVhciBQcmlvciI6CiAgKCAiUXVhbGlmeWluZyBFbmNvdW50ZXIgZHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZCIgUXVhbGlmeWluZ0VuY291bnRlcgogICAgICBsZXQgRW5jb3VudGVyTGFzdEJQOiBMYXN0KFtVU0NvcmUuQmxvb2RQcmVzc3VyZVByb2ZpbGVdIEJsb29kUHJlc3N1cmUKICAgICAgICAgIHdoZXJlIEJsb29kUHJlc3N1cmUuZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApIGVuZHMgMSB5ZWFyIG9yIGxlc3MgYmVmb3JlIG9yIG9uIHN0YXJ0IG9mIFF1YWxpZnlpbmdFbmNvdW50ZXIucGVyaW9kCiAgICAgICAgICAgIGFuZCBCbG9vZFByZXNzdXJlLnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICAgICAgICAgc29ydCBieSBzdGFydCBvZiBlZmZlY3RpdmUudG9JbnRlcnZhbCAoICkKICAgICAgKQogICAgICB3aGVyZSAoICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICApCiAgICAgICAgKS52YWx1ZSA+IDAgJ21tW0hnXScKICAgICAgICAgIGFuZCAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiRGlhc3RvbGljIGJsb29kIHByZXNzdXJlIgogICAgICAgICAgICApCiAgICAgICAgICApLnZhbHVlID4gMCAnbW1bSGddJwogICAgICAgICAgYW5kICggKCBzaW5nbGV0b24gZnJvbSAoIEVuY291bnRlckxhc3RCUC5jb21wb25lbnQgQwogICAgICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICAgKQogICAgICAgICAgICApLnZhbHVlID49IDEzMCAnbW1bSGddJwogICAgICAgICAgICAgIG9yICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiRGlhc3RvbGljIGJsb29kIHByZXNzdXJlIgogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICkudmFsdWUgPj0gODAgJ21tW0hnXScKICAgICAgICAgICkKICAgICAgKQogICkKCmRlZmluZSAiTm9uUGhhcm1hY29sb2dpY2FsIEludGVydmVudGlvbiBOb3QgT3JkZXJlZCI6CiAgKCBbU2VydmljZU5vdFJlcXVlc3RlZDogIkxpZmVzdHlsZSBSZWNvbW1lbmRhdGlvbiJdCiAgICB1bmlvbiBbU2VydmljZU5vdFJlcXVlc3RlZDogIldlaWdodCBSZWR1Y3Rpb24gUmVjb21tZW5kZWQiXQogICAgdW5pb24gW1NlcnZpY2VOb3RSZXF1ZXN0ZWQ6ICJEaWV0YXJ5IFJlY29tbWVuZGF0aW9ucyJdCiAgICB1bmlvbiBbU2VydmljZU5vdFJlcXVlc3RlZDogIlJlY29tbWVuZGF0aW9uIHRvIEluY3JlYXNlIFBoeXNpY2FsIEFjdGl2aXR5Il0KICAgIHVuaW9uIFtTZXJ2aWNlTm90UmVxdWVzdGVkOiAiUmVmZXJyYWwgb3IgQ291bnNlbGluZyBmb3IgQWxjb2hvbCBDb25zdW1wdGlvbiJdICkgTm9uUGhhcm1JbnRlcnZlbnRpb24KICAgIHdoZXJlIE5vblBoYXJtSW50ZXJ2ZW50aW9uLnN0YXR1cyBpbiB7ICdhY3RpdmUnLCAnY29tcGxldGVkJywgJ29uLWhvbGQnIH0KICAgICAgYW5kIE5vblBoYXJtSW50ZXJ2ZW50aW9uLnJlYXNvbkNvZGUgaW4gIlBhdGllbnQgRGVjbGluZWQiCgpkZWZpbmUgIkVuY291bnRlciB3aXRoIE1lZGljYWwgUmVhc29uIGZvciBOb3QgT2J0YWluaW5nIG9yIFBhdGllbnQgRGVjbGluZWQgQmxvb2QgUHJlc3N1cmUgTWVhc3VyZW1lbnQiOgogICJRdWFsaWZ5aW5nIEVuY291bnRlciBkdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIiBRdWFsaWZ5aW5nRW5jb3VudGVyCiAgICB3aXRoICggW09ic2VydmF0aW9uQ2FuY2VsbGVkOiBjb2RlIH4gIkJsb29kIHByZXNzdXJlIHBhbmVsIHdpdGggYWxsIGNoaWxkcmVuIG9wdGlvbmFsIl0KICAgICAgdW5pb24gW09ic2VydmF0aW9uQ2FuY2VsbGVkOiBjb2RlIH4gIlN5c3RvbGljIGJsb29kIHByZXNzdXJlIl0KICAgICAgdW5pb24gW09ic2VydmF0aW9uQ2FuY2VsbGVkOiBjb2RlIH4gIkRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSJdICkgTm9CUFNjcmVlbgogICAgICBzdWNoIHRoYXQgTm9CUFNjcmVlbi5pc3N1ZWQgZHVyaW5nIGRheSBvZiBRdWFsaWZ5aW5nRW5jb3VudGVyLnBlcmlvZAogICAgICAgIGFuZCAoIE5vQlBTY3JlZW4ubm90RG9uZVJlYXNvbiAoKSBpbiAiUGF0aWVudCBEZWNsaW5lZCIKICAgICAgICAgICAgb3IgTm9CUFNjcmVlbi5ub3REb25lUmVhc29uICgpIGluICJNZWRpY2FsIFJlYXNvbiIKICAgICAgICApCgpkZWZpbmUgIkVuY291bnRlciB3aXRoIE9yZGVyIGZvciBIeXBlcnRlbnNpb24gRm9sbG93IFVwIERlY2xpbmVkIGJ5IFBhdGllbnQiOgogICggKCAiRW5jb3VudGVyIHdpdGggRWxldmF0ZWQgQmxvb2QgUHJlc3N1cmUgUmVhZGluZyBTQlAgMTIwIHRvIDEyOSBBTkQgREJQIGxlc3MgdGhhbiA4MCIgRWxldmF0ZWRCUEVuY291bnRlcgogICAgICAgIHdpdGggKCBbU2VydmljZU5vdFJlcXVlc3RlZDogIlJlZmVycmFsIHRvIFByaW1hcnkgQ2FyZSBvciBBbHRlcm5hdGUgUHJvdmlkZXIiXQogICAgICAgICAgdW5pb24gW1NlcnZpY2VOb3RSZXF1ZXN0ZWQ6ICJGb2xsb3cgVXAgV2l0aGluIDYgTW9udGhzIl0gKSBFbGV2YXRlZEJQRGVjbGluZWRJbnRlcnZlbnRpb25zCiAgICAgICAgICBzdWNoIHRoYXQgRWxldmF0ZWRCUERlY2xpbmVkSW50ZXJ2ZW50aW9ucy5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgRWxldmF0ZWRCUEVuY291bnRlci5wZXJpb2QKICAgICAgICAgICAgYW5kIEVsZXZhdGVkQlBEZWNsaW5lZEludGVydmVudGlvbnMuc3RhdHVzIGluIHsgJ2FjdGl2ZScsICdjb21wbGV0ZWQnLCAnb24taG9sZCcgfQogICAgICAgICAgICBhbmQgRWxldmF0ZWRCUERlY2xpbmVkSW50ZXJ2ZW50aW9ucy5yZWFzb25Db2RlIGluICJQYXRpZW50IERlY2xpbmVkIgogICAgKQogICAgICB1bmlvbiAoICJFbmNvdW50ZXIgd2l0aCBFbGV2YXRlZCBCbG9vZCBQcmVzc3VyZSBSZWFkaW5nIFNCUCAxMjAgdG8gMTI5IEFORCBEQlAgbGVzcyB0aGFuIDgwIiBFbGV2YXRlZEJQRW5jb3VudGVyCiAgICAgICAgICB3aXRoICJOb25QaGFybWFjb2xvZ2ljYWwgSW50ZXJ2ZW50aW9uIE5vdCBPcmRlcmVkIiBOb3RPcmRlcmVkCiAgICAgICAgICAgIHN1Y2ggdGhhdCBOb3RPcmRlcmVkLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiBFbGV2YXRlZEJQRW5jb3VudGVyLnBlcmlvZAogICAgICApCiAgICAgIHVuaW9uICggIkVuY291bnRlciB3aXRoIEZpcnN0IEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gMTMwIE9SIERCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gODAiIEZpcnN0SFRORW5jb3VudGVyCiAgICAgICAgICB3aXRoICggW1NlcnZpY2VOb3RSZXF1ZXN0ZWQ6ICJGb2xsb3cgVXAgV2l0aGluIDQgV2Vla3MiXQogICAgICAgICAgICB1bmlvbiBbU2VydmljZU5vdFJlcXVlc3RlZDogIlJlZmVycmFsIHRvIFByaW1hcnkgQ2FyZSBvciBBbHRlcm5hdGUgUHJvdmlkZXIiXSApIEZpcnN0SFRORGVjbGluZWRJbnRlcnZlbnRpb25zCiAgICAgICAgICAgIHN1Y2ggdGhhdCBGaXJzdEhUTkRlY2xpbmVkSW50ZXJ2ZW50aW9ucy5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgRmlyc3RIVE5FbmNvdW50ZXIucGVyaW9kCiAgICAgICAgICAgICAgYW5kIEZpcnN0SFRORGVjbGluZWRJbnRlcnZlbnRpb25zLnN0YXR1cyBpbiB7ICdhY3RpdmUnLCAnY29tcGxldGVkJywgJ29uLWhvbGQnIH0KICAgICAgICAgICAgICBhbmQgRmlyc3RIVE5EZWNsaW5lZEludGVydmVudGlvbnMucmVhc29uQ29kZSBpbiAiUGF0aWVudCBEZWNsaW5lZCIKICAgICAgKQogICAgICB1bmlvbiAoICJFbmNvdW50ZXIgd2l0aCBGaXJzdCBIeXBlcnRlbnNpdmUgUmVhZGluZyBTQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDEzMCBPUiBEQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDgwIiBGaXJzdEhUTkVuY291bnRlcgogICAgICAgICAgd2l0aCAiTm9uUGhhcm1hY29sb2dpY2FsIEludGVydmVudGlvbiBOb3QgT3JkZXJlZCIgTm9Ob25QaGFybQogICAgICAgICAgICBzdWNoIHRoYXQgTm9Ob25QaGFybS5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgRmlyc3RIVE5FbmNvdW50ZXIucGVyaW9kCiAgICAgICkKICAgICAgdW5pb24gKCAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCAxMzAgdG8gMTM5IE9SIERCUCA4MCB0byA4OSIgU2Vjb25kSFRORW5jb3VudGVyCiAgICAgICAgICB3aXRoICJTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIDEzMCB0byAxMzkgT1IgREJQIDgwIHRvIDg5IEludGVydmVudGlvbnMgRGVjbGluZWQiIFNlY29uZEhUTkRlY2xpbmVkSW50ZXJ2ZW50aW9ucwogICAgICAgICAgICBzdWNoIHRoYXQgU2Vjb25kSFRORGVjbGluZWRJbnRlcnZlbnRpb25zLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiBTZWNvbmRIVE5FbmNvdW50ZXIucGVyaW9kCiAgICAgICkKICAgICAgdW5pb24gKCAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gMTQwIE9SIERCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gOTAiIFNlY29uZEhUTjE0ME92ZXI5MEVuY291bnRlcgogICAgICAgICAgd2l0aCAiU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gMTQwIE9SIERCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gOTAgSW50ZXJ2ZW50aW9ucyBEZWNsaW5lZCIgU2Vjb25kSFROMTQwT3ZlcjkwRGVjbGluZWRJbnRlcnZlbnRpb25zCiAgICAgICAgICAgIHN1Y2ggdGhhdCBTZWNvbmRIVE4xNDBPdmVyOTBEZWNsaW5lZEludGVydmVudGlvbnMuYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mIFNlY29uZEhUTjE0ME92ZXI5MEVuY291bnRlci5wZXJpb2QKICAgICAgKQogICkKCmRlZmluZSAiU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCAxMzAgdG8gMTM5IE9SIERCUCA4MCB0byA4OSBJbnRlcnZlbnRpb25zIERlY2xpbmVkIjoKICAoICggW1NlcnZpY2VOb3RSZXF1ZXN0ZWQ6ICJSZWZlcnJhbCB0byBQcmltYXJ5IENhcmUgb3IgQWx0ZXJuYXRlIFByb3ZpZGVyIl0KICAgICAgdW5pb24gW1NlcnZpY2VOb3RSZXF1ZXN0ZWQ6ICJGb2xsb3cgVXAgV2l0aGluIDYgTW9udGhzIl0gKSBTZWNvbmRIVE5EZWNsaW5lZFJlZmVycmFsQW5kRm9sbG93VXAKICAgICAgd2hlcmUgU2Vjb25kSFRORGVjbGluZWRSZWZlcnJhbEFuZEZvbGxvd1VwLnN0YXR1cyBpbiB7ICdhY3RpdmUnLCAnY29tcGxldGVkJywgJ29uLWhvbGQnIH0KICAgICAgICBhbmQgU2Vjb25kSFRORGVjbGluZWRSZWZlcnJhbEFuZEZvbGxvd1VwLnJlYXNvbkNvZGUgaW4gIlBhdGllbnQgRGVjbGluZWQiCiAgKQogICAgdW5pb24gIkxhYm9yYXRvcnkgVGVzdCBvciBFQ0cgZm9yIEh5cGVydGVuc2lvbiBOb3QgT3JkZXJlZCIKICAgIHVuaW9uICJOb25QaGFybWFjb2xvZ2ljYWwgSW50ZXJ2ZW50aW9uIE5vdCBPcmRlcmVkIgoKZGVmaW5lICJTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byAxNDAgT1IgREJQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byA5MCBJbnRlcnZlbnRpb25zIERlY2xpbmVkIjoKICAoICggKCBbU2VydmljZU5vdFJlcXVlc3RlZDogIlJlZmVycmFsIHRvIFByaW1hcnkgQ2FyZSBvciBBbHRlcm5hdGUgUHJvdmlkZXIiXQogICAgICAgIHVuaW9uIFtTZXJ2aWNlTm90UmVxdWVzdGVkOiAiRm9sbG93IFVwIFdpdGhpbiA0IFdlZWtzIl0gKSBTZWNvbmRIVE4xNDBPdmVyOTBSZWZlcnJhbEZvbGxvd1VwTm90RG9uZQogICAgICAgIHdoZXJlIFNlY29uZEhUTjE0ME92ZXI5MFJlZmVycmFsRm9sbG93VXBOb3REb25lLnN0YXR1cyBpbiB7ICdhY3RpdmUnLCAnY29tcGxldGVkJywgJ29uLWhvbGQnIH0KICAgICAgICAgIGFuZCBTZWNvbmRIVE4xNDBPdmVyOTBSZWZlcnJhbEZvbGxvd1VwTm90RG9uZS5yZWFzb25Db2RlIGluICJQYXRpZW50IERlY2xpbmVkIgogICAgKQogICAgICB1bmlvbiAoIFtNZWRpY2F0aW9uTm90UmVxdWVzdGVkOiAiUGhhcm1hY29sb2dpYyBUaGVyYXB5IGZvciBIeXBlcnRlbnNpb24iXSBNZWRpY2F0aW9uUmVxdWVzdE5vdE9yZGVyZWQKICAgICAgICAgIHdoZXJlIE1lZGljYXRpb25SZXF1ZXN0Tm90T3JkZXJlZC5zdGF0dXMgaW4geyAnYWN0aXZlJywgJ2NvbXBsZXRlZCcgfQogICAgICApCiAgICAgIHVuaW9uICJMYWJvcmF0b3J5IFRlc3Qgb3IgRUNHIGZvciBIeXBlcnRlbnNpb24gTm90IE9yZGVyZWQiCiAgICAgIHVuaW9uICJOb25QaGFybWFjb2xvZ2ljYWwgSW50ZXJ2ZW50aW9uIE5vdCBPcmRlcmVkIgogICkKCmRlZmluZSAiTGFib3JhdG9yeSBUZXN0IG9yIEVDRyBmb3IgSHlwZXJ0ZW5zaW9uIE5vdCBPcmRlcmVkIjoKICAoIFtTZXJ2aWNlTm90UmVxdWVzdGVkOiBjb2RlID0gIjEyIGxlYWQgRUtHIHBhbmVsIl0KICAgIHVuaW9uIFtTZXJ2aWNlTm90UmVxdWVzdGVkOiBjb2RlID0gIkVLRyBzdHVkeSJdCiAgICB1bmlvbiBbU2VydmljZU5vdFJlcXVlc3RlZDogIkxhYm9yYXRvcnkgVGVzdHMgZm9yIEh5cGVydGVuc2lvbiJdICkgTGFiRUNHTm90RG9uZQogICAgd2hlcmUgTGFiRUNHTm90RG9uZS5zdGF0dXMgaW4geyAnYWN0aXZlJywgJ2NvbXBsZXRlZCcsICdvbi1ob2xkJyB9CiAgICAgIGFuZCBMYWJFQ0dOb3REb25lLnJlYXNvbkNvZGUgaW4gIlBhdGllbnQgRGVjbGluZWQiCgpkZWZpbmUgIlNERSBFdGhuaWNpdHkiOgogIFNERS4iU0RFIEV0aG5pY2l0eSIKCmRlZmluZSAiU0RFIFBheWVyIjoKICBTREUuIlNERSBQYXllciIKCmRlZmluZSAiU0RFIFJhY2UiOgogIFNERS4iU0RFIFJhY2UiCgpkZWZpbmUgIlNERSBTZXgiOgogIFNERS4iU0RFIFNleCIKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBjb25kaXRpb24gZWl0aGVyIGhhcyBubyB2ZXJpZmljYXRpb24gc3RhdHVzIG9yIGhhcyBhIHZlcmlmaWNhdGlvbiBzdGF0dXMgb2YgY29uZmlybWVkLCB1bmNvbmZpcm1lZCwgcHJvdmlzaW9uYWwsIG9yIGRpZmZlcmVudGlhbAoqLwoKCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gaXNWZXJpZmllZChjb25kaXRpb24gQ2hvaWNlPENvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnMsIENvbmRpdGlvbkVuY291bnRlckRpYWdub3Npcz4pOgogIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgaXMgbm90IG51bGwgaW1wbGllcyAoIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgfiBTdGF0dXMuImNvbmZpcm1lZCIKICAgICAgb3IgY29uZGl0aW9uLnZlcmlmaWNhdGlvblN0YXR1cyB+IFN0YXR1cy4idW5jb25maXJtZWQiCiAgICAgIG9yIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgfiBTdGF0dXMuInByb3Zpc2lvbmFsIgogICAgICBvciBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIH4gU3RhdHVzLiJkaWZmZXJlbnRpYWwiCiAgKQ==",
"url" : "https://madie.cms.gov/Library-CMS22FHIRPCSBPScreeningFollowUp.cql"
}
]
}