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
| Active as of 2025-08-22 |
<Library xmlns="http://hl7.org/fhir">
<id value="AHAOverall"/>
<meta>
<profile
value="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary"/>
<profile
value="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-computablelibrary"/>
<profile
value="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary"/>
<profile
value="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-executablelibrary"/>
<profile
value="http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library"/>
<profile
value="http://hl7.org/fhir/uv/cql/StructureDefinition/elm-json-library"/>
<profile
value="http://hl7.org/fhir/uv/cql/StructureDefinition/elm-xml-library"/>
</meta>
<language value="en"/>
<text>
<status value="extensions"/>
<div xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<table class="narrative-table">
<tbody>
<tr>
<th colspan="2" scope="row" class="row-header"><a name="metadata"> </a>Metadata</th>
</tr>
<tr>
<th scope="row" class="row-header">Title</th>
<td class="content-container">AHAOverall</td>
</tr>
<tr>
<th scope="row" class="row-header">Version</th>
<td class="content-container">5.1.000</td>
</tr>
<tr>
<th scope="row" class="row-header">Topic</th>
<td class="content-container">FHIR
</td>
</tr>
<tr>
<th scope="row" class="row-header">Topic</th>
<td class="content-container">CQL
</td>
</tr>
<tr>
<th scope="row" class="row-header">Steward (Publisher)</th>
<td class="content-container">Telligen</td>
</tr>
<tr>
<th scope="row" class="row-header">Description</th>
<td class="content-container"><div><p>This version of the AHAOverall library is patterned after HFCommonDefinitionsQDM library version '3.0.000'</p>
</div></td>
</tr>
<tr>
<th scope="row" class="row-header">Type</th>
<td class="content-container">
<a href="http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html">http://terminology.hl7.org/CodeSystem/library-type</a>#logic-library
</td>
</tr>
<tr>
<th colspan="2" scope="row" class="row-header"><a name="parameters"> </a>Parameters</th>
</tr>
<tr>
<th scope="row" class="row-header">Parameter</th>
<td class="content-container">None</td>
</tr>
<tr>
<th colspan="2" scope="row" class="row-header">Library Content</th>
</tr>
<tr>
<th scope="row" class="row-header">CQL Content</th>
<td>
<a name="cql-content"> </a>
<pre style="border: none;" class="content-container highlight language-cql"><code class="language-cql">/*
NOTE: For use by March 2026 US Realm Connectathon participants for internal use only. Not for use or distribution in commercial products.
*/
library AHAOverall version '5.1.000'
using USQualityCore version '0.1.0-cibuild'
using USCore version '6.1.0-derived'
using FHIR version '4.0.1'
include hl7.fhir.uv.cql.FHIRHelpers version '4.0.1' called FHIRHelpers
include hl7.fhir.uv.cql.FHIRCommon version '2.0.0' called FHIRCommon
include hl7.fhir.us.cql.USCoreCommon version '2.0.0-ballot' called USCoreCommon
include hl7.fhir.us.cql.USCoreElements version '2.0.0-ballot' called USCoreElements
include USQualityCoreCommon version '0.1.0-cibuild' called USQualityCoreCommon
codesystem "SNOMEDCT": 'http://snomed.info/sct'
valueset "Care Services in Long Term Residential Facility": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1014'
valueset "Ejection Fraction": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1134'
valueset "Heart Failure": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.376'
valueset "Heart Transplant": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1178.33'
valueset "Heart Transplant Complications": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1178.56'
valueset "Home Healthcare Services": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1016'
valueset "Left Ventricular Assist Device Complications": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1178.58'
valueset "Left Ventricular Assist Device Placement": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1178.61'
valueset "Moderate or Severe": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1092'
valueset "Moderate or Severe LVSD": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1090'
valueset "Nursing Facility Visit": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1012'
valueset "Office Visit": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1001'
valueset "Outpatient Consultation": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1008'
valueset "Patient Provider Interaction": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1012'
code "Left ventricular systolic dysfunction (disorder)": '134401001' from "SNOMEDCT" display 'Left ventricular systolic dysfunction (disorder)'
parameter "Measurement Period" Interval<DateTime>
default Interval[@2026-01-01T00:00:00.000Z, @2027-01-01T00:00:00.000Z)
context Patient
/*
@description: Returns certain finished encounter types that overlap a Heart Failure condition and are during the measurement period:
* care services in long term residential facility (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1014)
* home healthcare services (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1016)
* nursing facility visits (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1012)
* office visits (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1001)
* outpatient consultation (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1008)
*/
define "Heart Failure Outpatient Encounter":
"Outpatient Encounter" QualifyingEncounter
with ( [Condition: "Heart Failure"] ) HeartFailure
such that HeartFailure.prevalenceInterval ( ) overlaps day of QualifyingEncounter.period
and HeartFailure.isVerified ( )
where QualifyingEncounter.period during day of "Measurement Period"
and QualifyingEncounter.isEncounterFinished ( )
define "Outpatient Encounter":
( [Encounter: "Care Services in Long Term Residential Facility"]
union [Encounter: "Home Healthcare Services"]
union [Encounter: "Nursing Facility Visit"]
union [Encounter: "Office Visit"]
union [Encounter: "Outpatient Consultation"]
)
/*
@description: Returns true if patient has confirmed heart transplant complications that start before the end of a heart failure outpatient encounter with history of moderate or severe LVSD
*/
define "Has Heart Transplant Complications":
exists ( ( [Condition: "Heart Transplant Complications"] ) HeartTransplantComplications
let diagnosisStart: Coalesce(start of HeartTransplantComplications.prevalenceInterval(), HeartTransplantComplications.recordedDate)
with "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter
such that date from diagnosisStart on or before date from end of ModerateOrSevereLVSDHFOutpatientEncounter.period
where HeartTransplantComplications.isVerified ( )
)
/*
@description: Returns true if patient has a completed LVAD placement that starts before the end of a heart failure outpatient encounter with history of moderate or severe LVSD
*/
define "Has Left Ventricular Assist Device":
exists ( [Procedure: "Left Ventricular Assist Device Placement"] LVADPlacement
with "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter
such that LVADPlacement.performed.toInterval ( ) starts before day of end of ModerateOrSevereLVSDHFOutpatientEncounter.period
where LVADPlacement.status = 'completed'
)
/*
@description: Returns true if patient has active LVAD complications that start before the end of a heart failure outpatient encounter with history of moderate or severe LVSD
*/
define "Has Left Ventricular Assist Device Complications":
exists ( ( [Condition: "Left Ventricular Assist Device Complications"] ) LVADComplications
let diagnosisStart: Coalesce(start of LVADComplications.prevalenceInterval(), LVADComplications.recordedDate)
with "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter
such that date from diagnosisStart on or before date from end of ModerateOrSevereLVSDHFOutpatientEncounter.period
where LVADComplications.isVerified ( )
)
/*
@description: Returns certain finished encounter types that occurred during the measurement period:
* office visits (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1001)
* outpatient consultation (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1008)
* nursing facility visits (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1012)
* care services in long term residential facility (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1014)
* home healthcare services (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1016)
* patient provider interactions (http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1012)
*/
define "Qualifying Outpatient Encounter During Measurement Period":
"Outpatient Encounter or Patient Provider Interaction" ValidEncounter
where ValidEncounter.period during day of "Measurement Period"
and ValidEncounter.isEncounterFinished ( )
define "Outpatient Encounter or Patient Provider Interaction":
"Outpatient Encounter"
union [Encounter: "Patient Provider Interaction"]
/*
@description: Returns completed heart tansplant procedures that start before the end of a heart failure outpatient encounter with history of moderate or severe LVSD
*/
define "Has Heart Transplant":
exists ( [Procedure: "Heart Transplant"] HeartTransplant
with "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter
such that HeartTransplant.performed.toInterval ( ) starts before end of ModerateOrSevereLVSDHFOutpatientEncounter.period
where HeartTransplant.status = 'completed'
)
/*
@description: Returns heart failure outpatient encounters that start before the end of a moderate or severe LVSD finding
*/
define "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD":
"Heart Failure Outpatient Encounter" HFOutpatientEncounter
with "Moderate or Severe LVSD Findings" LVSDFindings
such that Coalesce(LVSDFindings.prevalenceInterval(), LVSDFindings.effective.toInterval()) starts before end of HFOutpatientEncounter.period
/*
@description: Returns a union of the following:
* Observations where the final, amended or correction ejection fraction result is <= 40
* Moderate or Severe LVSD conditions where the diagnosis has been confirmed as active
*/
define "Moderate or Severe LVSD Findings":
( [ObservationClinicalResult: "Ejection Fraction"] EjectionFraction
where EjectionFraction.value as Quantity <= 40 '%'
and EjectionFraction.status in { 'final', 'amended', 'corrected' }
)
union ( ( ( [Condition: "Moderate or Severe LVSD"] )
union ( ( [Condition: "Left ventricular systolic dysfunction (disorder)"] ) LVSDDiagnosis
where LVSDDiagnosis.severity in "Moderate or Severe"
) ) ModerateOrSevereLVSD
where ModerateOrSevereLVSD.isVerified ( )
)
/*
@description: Returns true if the patient meets the following criteria:
* 18 years of age or older,
* Has two Qualifying Outpatient Encounters During Measurement Period
* Has a Heart Failure Outpatient Encounter
*/
define "Is Adult With Two Qualifying Outpatient Encounters and One Heart Failure Outpatient Encounter During the Measurement Period":
AgeInYearsAt(date from start of "Measurement Period") >= 18
and exists ( "Qualifying Outpatient Encounter During Measurement Period" Encounter1
with "Qualifying Outpatient Encounter During Measurement Period" Encounter2
such that Encounter2.id !~ Encounter1.id
)
and exists "Heart Failure Outpatient Encounter"
/*
@description: Returns true if the given Encounter is finished
*/
define fluent function isEncounterFinished(Encounter Encounter):
Encounter.status = 'finished'
/*
@description: Returns true if the given MedicationRequest is ordered during the heart failure outpatient encounter with history of moderate or severe LVSD at any point
*/
define fluent function isOrderedDuringHeartFailureOutpatientEncounter(MedicationRequest MedicationRequest):
exists ( "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter
where MedicationRequest.authoredOn during day of ModerateOrSevereLVSDHFOutpatientEncounter.period
and MedicationRequest.status in { 'active', 'completed' }
and MedicationRequest.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }
and not exists ( ["TaskRejected"] TaskReject
where TaskReject.focus.references ( MedicationRequest )
and TaskReject.code ~ USQualityCoreCommon."Fulfill"
)
)
/*
@description: Returns true if the given MedicationNotRequested overlaps after the day of the heart failure outpatient encounter with history of moderate or severe LVSD
*/
define fluent function isMedicationNotRequestedOrderedDuringHeartFailureOutpatientEncounter(MedicationRequest MedicationNotRequested):
exists ( "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter
where MedicationRequest.authoredOn during day of ModerateOrSevereLVSDHFOutpatientEncounter.period
and MedicationRequest.status in { 'completed', 'active' }
and MedicationRequest.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }
and not exists ( ["TaskRejected"] TaskReject
where TaskReject.focus.references ( MedicationRequest )
and TaskReject.code ~ USQualityCoreCommon."Fulfill"
)
)
/*
@description: Returns true if the given Condition overlaps the heart failure outpatient encounter with history of moderate or severe LVSD at any point
*/
define fluent function overlapsHeartFailureOutpatientEncounter(Condition USQualityCore.ConditionEncounterDiagnosis):
exists ( "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter
where Condition.prevalenceInterval ( ) overlaps day of ModerateOrSevereLVSDHFOutpatientEncounter.period
and Condition.isVerified ( )
)
/*
@overloaded
@description: Returns true if the given Condition overlaps after the day of the heart failure outpatient encounter with history of moderate or severe LVSD
*/
define fluent function overlapsAfterHeartFailureOutpatientEncounter(Condition USQualityCore.ConditionEncounterDiagnosis):
exists ( "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter
where Condition.prevalenceInterval ( ) overlaps after day of ModerateOrSevereLVSDHFOutpatientEncounter.period
and Condition.isVerified ( )
)
/*
@overloaded
@description: Returns true if the given Procedure overlaps after the day of the heart failure outpatient encounter with history of moderate or severe LVSD
*/
define fluent function overlapsAfterHeartFailureOutpatientEncounter(Procedure Procedure):
exists ( "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter
where Procedure.performed.toInterval ( ) overlaps after day of ModerateOrSevereLVSDHFOutpatientEncounter.period
and Procedure.status = 'completed'
)
/*
@overloaded
@description: Returns true if the given AllergyIntolerance overlaps after the day of the heart failure outpatient encounter with history of moderate or severe LVSD
*/
define fluent function overlapsAfterHeartFailureOutpatientEncounter(AllergyIntolerance AllergyIntolerance):
exists ( "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter
where Interval[start of AllergyIntolerance.prevalenceInterval ( ), AllergyIntolerance.lastOccurrence]overlaps after day of ModerateOrSevereLVSDHFOutpatientEncounter.period
and AllergyIntolerance.isVerified ( )
)
/*
@overloaded
@description: Returns true if the given MedicationRequest overlaps after the day of the heart failure outpatient encounter with history of moderate or severe LVSD
*/
define fluent function overlapsAfterHeartFailureOutpatientEncounter(MedicationRequest MedicationRequest):
exists ( "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter
where First((collapse(MedicationRequest.dosageInstruction.timing.repeat.bounds DoseTime
return TimingBoundToInterval(MedicationRequest.authoredOn, DoseTime)
)) DrugPeriods
sort by start of $this
) overlaps after day of ModerateOrSevereLVSDHFOutpatientEncounter.period
and MedicationRequest.status in { 'active', 'completed' }
and MedicationRequest.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }
and not exists ( ["TaskRejected"] TaskReject
where TaskReject.focus.references ( MedicationRequest )
and TaskReject.code ~ USQualityCoreCommon."Fulfill"
)
)
/*
@overloaded
@description: Returns true if the given HeartRateObservation overlaps after the day of the heart failure outpatient encounter with history of moderate or severe LVSD
*/
define fluent function overlapsAfterHeartFailureOutpatientEncounter(HeartRateObservation USCore.HeartRateProfile):
exists ( "Heart Failure Outpatient Encounter with History of Moderate or Severe LVSD" ModerateOrSevereLVSDHFOutpatientEncounter
where HeartRateObservation.effective.toInterval ( ) overlaps after day of ModerateOrSevereLVSDHFOutpatientEncounter.period
and HeartRateObservation.status in { 'final', 'amended', 'corrected' }
)
/*
@description: Converts the possible representations of the timing bound to an interval using the given date as an anchor for durations
*/
define function TimingBoundToInterval(startDate System.DateTime, choice Choice<FHIR.Duration, FHIR.Range, FHIR.Period>):
case
when choice is FHIR.Period then
choice as FHIR.Period
when choice is FHIR.Range then
Interval[startDate + (choice.low as Quantity), startDate + (choice.high as Quantity)]
when choice is FHIR.Duration then
Interval[startDate, startDate + (choice as FHIR.Duration))
else
null as Interval<DateTime>
end</code></pre>
</td>
</tr>
<tr>
<th colspan="2" scope="row" class="row-header">Generated using version 0.5.6 of the sample-content-ig Liquid templates</th>
</tr>
</tbody>
</table>
</div>
</text>
<extension
url="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-softwaresystem">
<valueReference>
<reference value="Device/cqf-tooling"/>
</valueReference>
</extension>
<url value="https://madie.cms.gov/Library/AHAOverall"/>
<version value="5.1.000"/>
<name value="AHAOverall"/>
<title value="AHAOverall"/>
<status value="active"/>
<experimental value="false"/>
<type>
<coding>
<system value="http://terminology.hl7.org/CodeSystem/library-type"/>
<code value="logic-library"/>
</coding>
</type>
<date value="2025-08-22T19:19:03+00:00"/>
<publisher value="Telligen"/>
<description
value="This version of the AHAOverall library is patterned after HFCommonDefinitionsQDM library version '3.0.000'"/>
<topic>
<text value="FHIR"/>
</topic>
<topic>
<text value="CQL"/>
</topic>
<content>
<contentType value="text/cql"/>
<data
value="LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBBSEFPdmVyYWxsIHZlcnNpb24gJzUuMS4wMDAnCgp1c2luZyBVU1F1YWxpdHlDb3JlIHZlcnNpb24gJzAuMS4wLWNpYnVpbGQnCnVzaW5nIFVTQ29yZSB2ZXJzaW9uICc2LjEuMC1kZXJpdmVkJwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIGhsNy5maGlyLnV2LmNxbC5GSElSQ29tbW9uIHZlcnNpb24gJzIuMC4wJyBjYWxsZWQgRkhJUkNvbW1vbgppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5VU0NvcmVDb21tb24gdmVyc2lvbiAnMi4wLjAtYmFsbG90JyBjYWxsZWQgVVNDb3JlQ29tbW9uCmluY2x1ZGUgaGw3LmZoaXIudXMuY3FsLlVTQ29yZUVsZW1lbnRzIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIFVTQ29yZUVsZW1lbnRzCgppbmNsdWRlIFVTUXVhbGl0eUNvcmVDb21tb24gdmVyc2lvbiAnMC4xLjAtY2lidWlsZCcgY2FsbGVkIFVTUXVhbGl0eUNvcmVDb21tb24KCmNvZGVzeXN0ZW0gIlNOT01FRENUIjogJ2h0dHA6Ly9zbm9tZWQuaW5mby9zY3QnCgp2YWx1ZXNldCAiQ2FyZSBTZXJ2aWNlcyBpbiBMb25nIFRlcm0gUmVzaWRlbnRpYWwgRmFjaWxpdHkiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMTQnCnZhbHVlc2V0ICJFamVjdGlvbiBGcmFjdGlvbiI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4xMTM0Jwp2YWx1ZXNldCAiSGVhcnQgRmFpbHVyZSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4zNzYnCnZhbHVlc2V0ICJIZWFydCBUcmFuc3BsYW50IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTE3OC4zMycKdmFsdWVzZXQgIkhlYXJ0IFRyYW5zcGxhbnQgQ29tcGxpY2F0aW9ucyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjExNzguNTYnCnZhbHVlc2V0ICJIb21lIEhlYWx0aGNhcmUgU2VydmljZXMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMTYnCnZhbHVlc2V0ICJMZWZ0IFZlbnRyaWN1bGFyIEFzc2lzdCBEZXZpY2UgQ29tcGxpY2F0aW9ucyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjExNzguNTgnCnZhbHVlc2V0ICJMZWZ0IFZlbnRyaWN1bGFyIEFzc2lzdCBEZXZpY2UgUGxhY2VtZW50IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTE3OC42MScKdmFsdWVzZXQgIk1vZGVyYXRlIG9yIFNldmVyZSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4xMDkyJwp2YWx1ZXNldCAiTW9kZXJhdGUgb3IgU2V2ZXJlIExWU0QiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNTI2LjMuMTA5MCcKdmFsdWVzZXQgIk51cnNpbmcgRmFjaWxpdHkgVmlzaXQiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMTInCnZhbHVlc2V0ICJPZmZpY2UgVmlzaXQiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMDEnCnZhbHVlc2V0ICJPdXRwYXRpZW50IENvbnN1bHRhdGlvbiI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDEuMTIuMTAwOCcKdmFsdWVzZXQgIlBhdGllbnQgUHJvdmlkZXIgSW50ZXJhY3Rpb24iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNTI2LjMuMTAxMicKCmNvZGUgIkxlZnQgdmVudHJpY3VsYXIgc3lzdG9saWMgZHlzZnVuY3Rpb24gKGRpc29yZGVyKSI6ICcxMzQ0MDEwMDEnIGZyb20gIlNOT01FRENUIiBkaXNwbGF5ICdMZWZ0IHZlbnRyaWN1bGFyIHN5c3RvbGljIGR5c2Z1bmN0aW9uIChkaXNvcmRlciknCgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZVRpbWU+CiAgZGVmYXVsdCBJbnRlcnZhbFtAMjAyNi0wMS0wMVQwMDowMDowMC4wMDBaLCBAMjAyNy0wMS0wMVQwMDowMDowMC4wMDBaKQoKY29udGV4dCBQYXRpZW50CgovKgpAZGVzY3JpcHRpb246IFJldHVybnMgY2VydGFpbiBmaW5pc2hlZCBlbmNvdW50ZXIgdHlwZXMgdGhhdCBvdmVybGFwIGEgSGVhcnQgRmFpbHVyZSBjb25kaXRpb24gYW5kIGFyZSBkdXJpbmcgdGhlIG1lYXN1cmVtZW50IHBlcmlvZDogCiAgICAgICAgICAgICAgICAqIGNhcmUgc2VydmljZXMgaW4gbG9uZyB0ZXJtIHJlc2lkZW50aWFsIGZhY2lsaXR5IChodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDEuMTIuMTAxNCkKICAgICAgICAgICAgICAgICogaG9tZSBoZWFsdGhjYXJlIHNlcnZpY2VzIChodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDEuMTIuMTAxNikKICAgICAgICAgICAgICAgICogbnVyc2luZyBmYWNpbGl0eSB2aXNpdHMgKGh0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDEyKQogICAgICAgICAgICAgICAgKiBvZmZpY2UgdmlzaXRzIChodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDEuMTIuMTAwMSkKICAgICAgICAgICAgICAgICogb3V0cGF0aWVudCBjb25zdWx0YXRpb24gKGh0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDA4KQoqLwpkZWZpbmUgIkhlYXJ0IEZhaWx1cmUgT3V0cGF0aWVudCBFbmNvdW50ZXIiOgogICJPdXRwYXRpZW50IEVuY291bnRlciIgUXVhbGlmeWluZ0VuY291bnRlcgogICAgd2l0aCAoIFtDb25kaXRpb246ICJIZWFydCBGYWlsdXJlIl0gKSBIZWFydEZhaWx1cmUKICAgICAgc3VjaCB0aGF0IEhlYXJ0RmFpbHVyZS5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIG92ZXJsYXBzIGRheSBvZiBRdWFsaWZ5aW5nRW5jb3VudGVyLnBlcmlvZAogICAgICAgIGFuZCBIZWFydEZhaWx1cmUuaXNWZXJpZmllZCAoICkKICAgIHdoZXJlIFF1YWxpZnlpbmdFbmNvdW50ZXIucGVyaW9kIGR1cmluZyBkYXkgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgYW5kIFF1YWxpZnlpbmdFbmNvdW50ZXIuaXNFbmNvdW50ZXJGaW5pc2hlZCAoICkKCmRlZmluZSAiT3V0cGF0aWVudCBFbmNvdW50ZXIiOgogICggW0VuY291bnRlcjogIkNhcmUgU2VydmljZXMgaW4gTG9uZyBUZXJtIFJlc2lkZW50aWFsIEZhY2lsaXR5Il0KICAgICAgdW5pb24gW0VuY291bnRlcjogIkhvbWUgSGVhbHRoY2FyZSBTZXJ2aWNlcyJdCiAgICAgIHVuaW9uIFtFbmNvdW50ZXI6ICJOdXJzaW5nIEZhY2lsaXR5IFZpc2l0Il0KICAgICAgdW5pb24gW0VuY291bnRlcjogIk9mZmljZSBWaXNpdCJdCiAgICAgIHVuaW9uIFtFbmNvdW50ZXI6ICJPdXRwYXRpZW50IENvbnN1bHRhdGlvbiJdCiAgKSAKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0cnVlIGlmIHBhdGllbnQgaGFzIGNvbmZpcm1lZCBoZWFydCB0cmFuc3BsYW50IGNvbXBsaWNhdGlvbnMgdGhhdCBzdGFydCBiZWZvcmUgdGhlIGVuZCBvZiBhIGhlYXJ0IGZhaWx1cmUgb3V0cGF0aWVudCBlbmNvdW50ZXIgd2l0aCBoaXN0b3J5IG9mIG1vZGVyYXRlIG9yIHNldmVyZSBMVlNEIAoqLwpkZWZpbmUgIkhhcyBIZWFydCBUcmFuc3BsYW50IENvbXBsaWNhdGlvbnMiOgogIGV4aXN0cyAoICggW0NvbmRpdGlvbjogIkhlYXJ0IFRyYW5zcGxhbnQgQ29tcGxpY2F0aW9ucyJdICkgSGVhcnRUcmFuc3BsYW50Q29tcGxpY2F0aW9ucwogICAgICBsZXQgZGlhZ25vc2lzU3RhcnQ6IENvYWxlc2NlKHN0YXJ0IG9mIEhlYXJ0VHJhbnNwbGFudENvbXBsaWNhdGlvbnMucHJldmFsZW5jZUludGVydmFsKCksIEhlYXJ0VHJhbnNwbGFudENvbXBsaWNhdGlvbnMucmVjb3JkZWREYXRlKQogICAgICB3aXRoICJIZWFydCBGYWlsdXJlIE91dHBhdGllbnQgRW5jb3VudGVyIHdpdGggSGlzdG9yeSBvZiBNb2RlcmF0ZSBvciBTZXZlcmUgTFZTRCIgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIKICAgICAgICBzdWNoIHRoYXQgZGF0ZSBmcm9tIGRpYWdub3Npc1N0YXJ0IG9uIG9yIGJlZm9yZSBkYXRlIGZyb20gZW5kIG9mIE1vZGVyYXRlT3JTZXZlcmVMVlNESEZPdXRwYXRpZW50RW5jb3VudGVyLnBlcmlvZAogICAgICB3aGVyZSBIZWFydFRyYW5zcGxhbnRDb21wbGljYXRpb25zLmlzVmVyaWZpZWQgKCApCiAgKQoKLyoKQGRlc2NyaXB0aW9uOiBSZXR1cm5zIHRydWUgaWYgcGF0aWVudCBoYXMgYSBjb21wbGV0ZWQgTFZBRCBwbGFjZW1lbnQgdGhhdCBzdGFydHMgYmVmb3JlIHRoZSBlbmQgb2YgYSBoZWFydCBmYWlsdXJlIG91dHBhdGllbnQgZW5jb3VudGVyIHdpdGggaGlzdG9yeSBvZiBtb2RlcmF0ZSBvciBzZXZlcmUgTFZTRAoqLwpkZWZpbmUgIkhhcyBMZWZ0IFZlbnRyaWN1bGFyIEFzc2lzdCBEZXZpY2UiOgogIGV4aXN0cyAoIFtQcm9jZWR1cmU6ICJMZWZ0IFZlbnRyaWN1bGFyIEFzc2lzdCBEZXZpY2UgUGxhY2VtZW50Il0gTFZBRFBsYWNlbWVudAogICAgICB3aXRoICJIZWFydCBGYWlsdXJlIE91dHBhdGllbnQgRW5jb3VudGVyIHdpdGggSGlzdG9yeSBvZiBNb2RlcmF0ZSBvciBTZXZlcmUgTFZTRCIgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIKICAgICAgICBzdWNoIHRoYXQgTFZBRFBsYWNlbWVudC5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgc3RhcnRzIGJlZm9yZSBkYXkgb2YgZW5kIG9mIE1vZGVyYXRlT3JTZXZlcmVMVlNESEZPdXRwYXRpZW50RW5jb3VudGVyLnBlcmlvZAogICAgICB3aGVyZSBMVkFEUGxhY2VtZW50LnN0YXR1cyA9ICdjb21wbGV0ZWQnCiAgKQoKLyoKQGRlc2NyaXB0aW9uOiBSZXR1cm5zIHRydWUgaWYgcGF0aWVudCBoYXMgYWN0aXZlIExWQUQgY29tcGxpY2F0aW9ucyB0aGF0IHN0YXJ0IGJlZm9yZSB0aGUgZW5kIG9mIGEgaGVhcnQgZmFpbHVyZSBvdXRwYXRpZW50IGVuY291bnRlciB3aXRoIGhpc3Rvcnkgb2YgbW9kZXJhdGUgb3Igc2V2ZXJlIExWU0QKKi8KZGVmaW5lICJIYXMgTGVmdCBWZW50cmljdWxhciBBc3Npc3QgRGV2aWNlIENvbXBsaWNhdGlvbnMiOgogIGV4aXN0cyAoICggW0NvbmRpdGlvbjogIkxlZnQgVmVudHJpY3VsYXIgQXNzaXN0IERldmljZSBDb21wbGljYXRpb25zIl0gKSBMVkFEQ29tcGxpY2F0aW9ucwogICAgICBsZXQgZGlhZ25vc2lzU3RhcnQ6IENvYWxlc2NlKHN0YXJ0IG9mIExWQURDb21wbGljYXRpb25zLnByZXZhbGVuY2VJbnRlcnZhbCgpLCBMVkFEQ29tcGxpY2F0aW9ucy5yZWNvcmRlZERhdGUpCiAgICAgIHdpdGggIkhlYXJ0IEZhaWx1cmUgT3V0cGF0aWVudCBFbmNvdW50ZXIgd2l0aCBIaXN0b3J5IG9mIE1vZGVyYXRlIG9yIFNldmVyZSBMVlNEIiBNb2RlcmF0ZU9yU2V2ZXJlTFZTREhGT3V0cGF0aWVudEVuY291bnRlcgogICAgICAgIHN1Y2ggdGhhdCBkYXRlIGZyb20gZGlhZ25vc2lzU3RhcnQgb24gb3IgYmVmb3JlIGRhdGUgZnJvbSBlbmQgb2YgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIucGVyaW9kCiAgICAgIHdoZXJlIExWQURDb21wbGljYXRpb25zLmlzVmVyaWZpZWQgKCApCiAgKSAgICAgICAgICAgICAKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyBjZXJ0YWluIGZpbmlzaGVkIGVuY291bnRlciB0eXBlcyB0aGF0IG9jY3VycmVkIGR1cmluZyB0aGUgbWVhc3VyZW1lbnQgcGVyaW9kOiAKICAgICAgICAgICAgICAgICogb2ZmaWNlIHZpc2l0cyAoaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMDEpCiAgICAgICAgICAgICAgICAqIG91dHBhdGllbnQgY29uc3VsdGF0aW9uIChodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDEuMTIuMTAwOCkKICAgICAgICAgICAgICAgICogbnVyc2luZyBmYWNpbGl0eSB2aXNpdHMgKGh0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDEyKQogICAgICAgICAgICAgICAgKiBjYXJlIHNlcnZpY2VzIGluIGxvbmcgdGVybSByZXNpZGVudGlhbCBmYWNpbGl0eSAoaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMTQpCiAgICAgICAgICAgICAgICAqIGhvbWUgaGVhbHRoY2FyZSBzZXJ2aWNlcyAoaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMTYpCiAgICAgICAgICAgICAgICAqIHBhdGllbnQgcHJvdmlkZXIgaW50ZXJhY3Rpb25zIChodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4xMDEyKSAKKi8KZGVmaW5lICJRdWFsaWZ5aW5nIE91dHBhdGllbnQgRW5jb3VudGVyIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiOgogICJPdXRwYXRpZW50IEVuY291bnRlciBvciBQYXRpZW50IFByb3ZpZGVyIEludGVyYWN0aW9uIiBWYWxpZEVuY291bnRlcgogICAgd2hlcmUgVmFsaWRFbmNvdW50ZXIucGVyaW9kIGR1cmluZyBkYXkgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgYW5kIFZhbGlkRW5jb3VudGVyLmlzRW5jb3VudGVyRmluaXNoZWQgKCApCgpkZWZpbmUgIk91dHBhdGllbnQgRW5jb3VudGVyIG9yIFBhdGllbnQgUHJvdmlkZXIgSW50ZXJhY3Rpb24iOgogICJPdXRwYXRpZW50IEVuY291bnRlciIKICAgIHVuaW9uIFtFbmNvdW50ZXI6ICJQYXRpZW50IFByb3ZpZGVyIEludGVyYWN0aW9uIl0KCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyBjb21wbGV0ZWQgaGVhcnQgdGFuc3BsYW50IHByb2NlZHVyZXMgdGhhdCBzdGFydCBiZWZvcmUgdGhlIGVuZCBvZiBhIGhlYXJ0IGZhaWx1cmUgb3V0cGF0aWVudCBlbmNvdW50ZXIgd2l0aCBoaXN0b3J5IG9mIG1vZGVyYXRlIG9yIHNldmVyZSBMVlNECiovCmRlZmluZSAiSGFzIEhlYXJ0IFRyYW5zcGxhbnQiOgogIGV4aXN0cyAoIFtQcm9jZWR1cmU6ICJIZWFydCBUcmFuc3BsYW50Il0gSGVhcnRUcmFuc3BsYW50CiAgICAgIHdpdGggIkhlYXJ0IEZhaWx1cmUgT3V0cGF0aWVudCBFbmNvdW50ZXIgd2l0aCBIaXN0b3J5IG9mIE1vZGVyYXRlIG9yIFNldmVyZSBMVlNEIiBNb2RlcmF0ZU9yU2V2ZXJlTFZTREhGT3V0cGF0aWVudEVuY291bnRlcgogICAgICAgIHN1Y2ggdGhhdCBIZWFydFRyYW5zcGxhbnQucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApIHN0YXJ0cyBiZWZvcmUgZW5kIG9mIE1vZGVyYXRlT3JTZXZlcmVMVlNESEZPdXRwYXRpZW50RW5jb3VudGVyLnBlcmlvZAogICAgICB3aGVyZSBIZWFydFRyYW5zcGxhbnQuc3RhdHVzID0gJ2NvbXBsZXRlZCcKICApCgovKgpAZGVzY3JpcHRpb246IFJldHVybnMgaGVhcnQgZmFpbHVyZSBvdXRwYXRpZW50IGVuY291bnRlcnMgdGhhdCBzdGFydCBiZWZvcmUgdGhlIGVuZCBvZiBhIG1vZGVyYXRlIG9yIHNldmVyZSBMVlNEIGZpbmRpbmcKKi8KZGVmaW5lICJIZWFydCBGYWlsdXJlIE91dHBhdGllbnQgRW5jb3VudGVyIHdpdGggSGlzdG9yeSBvZiBNb2RlcmF0ZSBvciBTZXZlcmUgTFZTRCI6CiAgIkhlYXJ0IEZhaWx1cmUgT3V0cGF0aWVudCBFbmNvdW50ZXIiIEhGT3V0cGF0aWVudEVuY291bnRlcgogICAgd2l0aCAiTW9kZXJhdGUgb3IgU2V2ZXJlIExWU0QgRmluZGluZ3MiIExWU0RGaW5kaW5ncwogICAgICBzdWNoIHRoYXQgQ29hbGVzY2UoTFZTREZpbmRpbmdzLnByZXZhbGVuY2VJbnRlcnZhbCgpLCBMVlNERmluZGluZ3MuZWZmZWN0aXZlLnRvSW50ZXJ2YWwoKSkgc3RhcnRzIGJlZm9yZSBlbmQgb2YgSEZPdXRwYXRpZW50RW5jb3VudGVyLnBlcmlvZCAKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyBhIHVuaW9uICBvZiB0aGUgZm9sbG93aW5nOgogICAgICAgICAgICAgICAgKiBPYnNlcnZhdGlvbnMgd2hlcmUgdGhlIGZpbmFsLCBhbWVuZGVkIG9yIGNvcnJlY3Rpb24gZWplY3Rpb24gZnJhY3Rpb24gcmVzdWx0IGlzIDw9IDQwCiAgICAgICAgICAgICAgICAqIE1vZGVyYXRlIG9yIFNldmVyZSBMVlNEIGNvbmRpdGlvbnMgd2hlcmUgdGhlIGRpYWdub3NpcyBoYXMgYmVlbiBjb25maXJtZWQgYXMgYWN0aXZlCiovCmRlZmluZSAiTW9kZXJhdGUgb3IgU2V2ZXJlIExWU0QgRmluZGluZ3MiOgogICggW09ic2VydmF0aW9uQ2xpbmljYWxSZXN1bHQ6ICJFamVjdGlvbiBGcmFjdGlvbiJdIEVqZWN0aW9uRnJhY3Rpb24KICAgICAgd2hlcmUgRWplY3Rpb25GcmFjdGlvbi52YWx1ZSBhcyBRdWFudGl0eSA8PSA0MCAnJScKICAgICAgICBhbmQgRWplY3Rpb25GcmFjdGlvbi5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICApCiAgICB1bmlvbiAoICggKCBbQ29uZGl0aW9uOiAiTW9kZXJhdGUgb3IgU2V2ZXJlIExWU0QiXSApCiAgICAgIHVuaW9uICggKCBbQ29uZGl0aW9uOiAiTGVmdCB2ZW50cmljdWxhciBzeXN0b2xpYyBkeXNmdW5jdGlvbiAoZGlzb3JkZXIpIl0gKSBMVlNERGlhZ25vc2lzCiAgICAgICAgd2hlcmUgTFZTRERpYWdub3Npcy5zZXZlcml0eSBpbiAiTW9kZXJhdGUgb3IgU2V2ZXJlIgogICAgICApICkgTW9kZXJhdGVPclNldmVyZUxWU0QKICAgICAgd2hlcmUgTW9kZXJhdGVPclNldmVyZUxWU0QuaXNWZXJpZmllZCAoICkKICAgICkgCgovKgpAZGVzY3JpcHRpb246IFJldHVybnMgdHJ1ZSBpZiB0aGUgcGF0aWVudCBtZWV0cyB0aGUgZm9sbG93aW5nIGNyaXRlcmlhOgogICAgICAgICAgICAgICAgKiAxOCB5ZWFycyBvZiBhZ2Ugb3Igb2xkZXIsCiAgICAgICAgICAgICAgICAqIEhhcyB0d28gUXVhbGlmeWluZyBPdXRwYXRpZW50IEVuY291bnRlcnMgRHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZAogICAgICAgICAgICAgICAgKiBIYXMgYSBIZWFydCBGYWlsdXJlIE91dHBhdGllbnQgRW5jb3VudGVyCiovCmRlZmluZSAiSXMgQWR1bHQgV2l0aCBUd28gUXVhbGlmeWluZyBPdXRwYXRpZW50IEVuY291bnRlcnMgYW5kIE9uZSBIZWFydCBGYWlsdXJlIE91dHBhdGllbnQgRW5jb3VudGVyIER1cmluZyB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIjoKICBBZ2VJblllYXJzQXQoZGF0ZSBmcm9tIHN0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiKSA+PSAxOAogICAgYW5kIGV4aXN0cyAoICJRdWFsaWZ5aW5nIE91dHBhdGllbnQgRW5jb3VudGVyIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiIEVuY291bnRlcjEKICAgICAgICB3aXRoICJRdWFsaWZ5aW5nIE91dHBhdGllbnQgRW5jb3VudGVyIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiIEVuY291bnRlcjIKICAgICAgICAgIHN1Y2ggdGhhdCBFbmNvdW50ZXIyLmlkICF+IEVuY291bnRlcjEuaWQKICAgICkKICAgIGFuZCBleGlzdHMgIkhlYXJ0IEZhaWx1cmUgT3V0cGF0aWVudCBFbmNvdW50ZXIiICAgCgoKLyoKQGRlc2NyaXB0aW9uOiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIEVuY291bnRlciBpcyBmaW5pc2hlZAoqLwpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIGlzRW5jb3VudGVyRmluaXNoZWQoRW5jb3VudGVyIEVuY291bnRlcik6CiAgRW5jb3VudGVyLnN0YXR1cyA9ICdmaW5pc2hlZCcKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBNZWRpY2F0aW9uUmVxdWVzdCBpcyBvcmRlcmVkIGR1cmluZyB0aGUgaGVhcnQgZmFpbHVyZSBvdXRwYXRpZW50IGVuY291bnRlciB3aXRoIGhpc3Rvcnkgb2YgbW9kZXJhdGUgb3Igc2V2ZXJlIExWU0QgYXQgYW55IHBvaW50CiovCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gaXNPcmRlcmVkRHVyaW5nSGVhcnRGYWlsdXJlT3V0cGF0aWVudEVuY291bnRlcihNZWRpY2F0aW9uUmVxdWVzdCBNZWRpY2F0aW9uUmVxdWVzdCk6CiAgZXhpc3RzICggIkhlYXJ0IEZhaWx1cmUgT3V0cGF0aWVudCBFbmNvdW50ZXIgd2l0aCBIaXN0b3J5IG9mIE1vZGVyYXRlIG9yIFNldmVyZSBMVlNEIiBNb2RlcmF0ZU9yU2V2ZXJlTFZTREhGT3V0cGF0aWVudEVuY291bnRlcgogICAgICB3aGVyZSBNZWRpY2F0aW9uUmVxdWVzdC5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIucGVyaW9kCiAgICAgICAgYW5kIE1lZGljYXRpb25SZXF1ZXN0LnN0YXR1cyBpbiB7ICdhY3RpdmUnLCAnY29tcGxldGVkJyB9CiAgICAgICAgYW5kIE1lZGljYXRpb25SZXF1ZXN0LmludGVudCBpbiB7ICdvcmRlcicsICdvcmlnaW5hbC1vcmRlcicsICdyZWZsZXgtb3JkZXInLCAnZmlsbGVyLW9yZGVyJywgJ2luc3RhbmNlLW9yZGVyJyB9CiAgICAgICAgYW5kIG5vdCBleGlzdHMgKCBbIlRhc2tSZWplY3RlZCJdIFRhc2tSZWplY3QKICAgICAgICAgICAgd2hlcmUgVGFza1JlamVjdC5mb2N1cy5yZWZlcmVuY2VzICggTWVkaWNhdGlvblJlcXVlc3QgKQogICAgICAgICAgICAgIGFuZCBUYXNrUmVqZWN0LmNvZGUgfiBVU1F1YWxpdHlDb3JlQ29tbW9uLiJGdWxmaWxsIgogICAgICAgICkKICApCgovKgpAZGVzY3JpcHRpb246IFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gTWVkaWNhdGlvbk5vdFJlcXVlc3RlZCBvdmVybGFwcyBhZnRlciB0aGUgZGF5IG9mIHRoZSBoZWFydCBmYWlsdXJlIG91dHBhdGllbnQgZW5jb3VudGVyIHdpdGggaGlzdG9yeSBvZiBtb2RlcmF0ZSBvciBzZXZlcmUgTFZTRAoqLwpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIGlzTWVkaWNhdGlvbk5vdFJlcXVlc3RlZE9yZGVyZWREdXJpbmdIZWFydEZhaWx1cmVPdXRwYXRpZW50RW5jb3VudGVyKE1lZGljYXRpb25SZXF1ZXN0IE1lZGljYXRpb25Ob3RSZXF1ZXN0ZWQpOgogIGV4aXN0cyAoICJIZWFydCBGYWlsdXJlIE91dHBhdGllbnQgRW5jb3VudGVyIHdpdGggSGlzdG9yeSBvZiBNb2RlcmF0ZSBvciBTZXZlcmUgTFZTRCIgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIKICAgICAgd2hlcmUgTWVkaWNhdGlvblJlcXVlc3QuYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mIE1vZGVyYXRlT3JTZXZlcmVMVlNESEZPdXRwYXRpZW50RW5jb3VudGVyLnBlcmlvZAogICAgICAgIGFuZCBNZWRpY2F0aW9uUmVxdWVzdC5zdGF0dXMgaW4geyAnY29tcGxldGVkJywgJ2FjdGl2ZScgfQogICAgICAgIGFuZCBNZWRpY2F0aW9uUmVxdWVzdC5pbnRlbnQgaW4geyAnb3JkZXInLCAnb3JpZ2luYWwtb3JkZXInLCAncmVmbGV4LW9yZGVyJywgJ2ZpbGxlci1vcmRlcicsICdpbnN0YW5jZS1vcmRlcicgfQogICAgICAgIGFuZCBub3QgZXhpc3RzICggWyJUYXNrUmVqZWN0ZWQiXSBUYXNrUmVqZWN0CiAgICAgICAgICAgIHdoZXJlIFRhc2tSZWplY3QuZm9jdXMucmVmZXJlbmNlcyAoIE1lZGljYXRpb25SZXF1ZXN0ICkKICAgICAgICAgICAgICBhbmQgVGFza1JlamVjdC5jb2RlIH4gVVNRdWFsaXR5Q29yZUNvbW1vbi4iRnVsZmlsbCIKICAgICAgICApCiAgKQoKLyoKQGRlc2NyaXB0aW9uOiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIENvbmRpdGlvbiBvdmVybGFwcyB0aGUgaGVhcnQgZmFpbHVyZSBvdXRwYXRpZW50IGVuY291bnRlciB3aXRoIGhpc3Rvcnkgb2YgbW9kZXJhdGUgb3Igc2V2ZXJlIExWU0QgYXQgYW55IHBvaW50CiovCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gb3ZlcmxhcHNIZWFydEZhaWx1cmVPdXRwYXRpZW50RW5jb3VudGVyKENvbmRpdGlvbiBVU1F1YWxpdHlDb3JlLkNvbmRpdGlvbkVuY291bnRlckRpYWdub3Npcyk6CiAgZXhpc3RzICggIkhlYXJ0IEZhaWx1cmUgT3V0cGF0aWVudCBFbmNvdW50ZXIgd2l0aCBIaXN0b3J5IG9mIE1vZGVyYXRlIG9yIFNldmVyZSBMVlNEIiBNb2RlcmF0ZU9yU2V2ZXJlTFZTREhGT3V0cGF0aWVudEVuY291bnRlcgogICAgICB3aGVyZSBDb25kaXRpb24ucHJldmFsZW5jZUludGVydmFsICggKSBvdmVybGFwcyBkYXkgb2YgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIucGVyaW9kCiAgICAgICAgYW5kIENvbmRpdGlvbi5pc1ZlcmlmaWVkICggKQogICkKCi8qCkBvdmVybG9hZGVkCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBDb25kaXRpb24gb3ZlcmxhcHMgYWZ0ZXIgdGhlIGRheSBvZiB0aGUgaGVhcnQgZmFpbHVyZSBvdXRwYXRpZW50IGVuY291bnRlciB3aXRoIGhpc3Rvcnkgb2YgbW9kZXJhdGUgb3Igc2V2ZXJlIExWU0QKKi8KZGVmaW5lIGZsdWVudCBmdW5jdGlvbiBvdmVybGFwc0FmdGVySGVhcnRGYWlsdXJlT3V0cGF0aWVudEVuY291bnRlcihDb25kaXRpb24gVVNRdWFsaXR5Q29yZS5Db25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXMpOgogIGV4aXN0cyAoICJIZWFydCBGYWlsdXJlIE91dHBhdGllbnQgRW5jb3VudGVyIHdpdGggSGlzdG9yeSBvZiBNb2RlcmF0ZSBvciBTZXZlcmUgTFZTRCIgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIKICAgICAgd2hlcmUgQ29uZGl0aW9uLnByZXZhbGVuY2VJbnRlcnZhbCAoICkgb3ZlcmxhcHMgYWZ0ZXIgZGF5IG9mIE1vZGVyYXRlT3JTZXZlcmVMVlNESEZPdXRwYXRpZW50RW5jb3VudGVyLnBlcmlvZAogICAgICAgIGFuZCBDb25kaXRpb24uaXNWZXJpZmllZCAoICkKICApCgovKgpAb3ZlcmxvYWRlZApAZGVzY3JpcHRpb246IFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gUHJvY2VkdXJlIG92ZXJsYXBzIGFmdGVyIHRoZSBkYXkgb2YgdGhlIGhlYXJ0IGZhaWx1cmUgb3V0cGF0aWVudCBlbmNvdW50ZXIgd2l0aCBoaXN0b3J5IG9mIG1vZGVyYXRlIG9yIHNldmVyZSBMVlNECiovCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gb3ZlcmxhcHNBZnRlckhlYXJ0RmFpbHVyZU91dHBhdGllbnRFbmNvdW50ZXIoUHJvY2VkdXJlIFByb2NlZHVyZSk6CiAgZXhpc3RzICggIkhlYXJ0IEZhaWx1cmUgT3V0cGF0aWVudCBFbmNvdW50ZXIgd2l0aCBIaXN0b3J5IG9mIE1vZGVyYXRlIG9yIFNldmVyZSBMVlNEIiBNb2RlcmF0ZU9yU2V2ZXJlTFZTREhGT3V0cGF0aWVudEVuY291bnRlcgogICAgICB3aGVyZSBQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApIG92ZXJsYXBzIGFmdGVyIGRheSBvZiBNb2RlcmF0ZU9yU2V2ZXJlTFZTREhGT3V0cGF0aWVudEVuY291bnRlci5wZXJpb2QKICAgICAgICBhbmQgUHJvY2VkdXJlLnN0YXR1cyA9ICdjb21wbGV0ZWQnCiAgKQoKLyoKQG92ZXJsb2FkZWQKQGRlc2NyaXB0aW9uOiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIEFsbGVyZ3lJbnRvbGVyYW5jZSBvdmVybGFwcyBhZnRlciB0aGUgZGF5IG9mIHRoZSBoZWFydCBmYWlsdXJlIG91dHBhdGllbnQgZW5jb3VudGVyIHdpdGggaGlzdG9yeSBvZiBtb2RlcmF0ZSBvciBzZXZlcmUgTFZTRAoqLwpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIG92ZXJsYXBzQWZ0ZXJIZWFydEZhaWx1cmVPdXRwYXRpZW50RW5jb3VudGVyKEFsbGVyZ3lJbnRvbGVyYW5jZSBBbGxlcmd5SW50b2xlcmFuY2UpOgogIGV4aXN0cyAoICJIZWFydCBGYWlsdXJlIE91dHBhdGllbnQgRW5jb3VudGVyIHdpdGggSGlzdG9yeSBvZiBNb2RlcmF0ZSBvciBTZXZlcmUgTFZTRCIgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIKICAgICAgd2hlcmUgSW50ZXJ2YWxbc3RhcnQgb2YgQWxsZXJneUludG9sZXJhbmNlLnByZXZhbGVuY2VJbnRlcnZhbCAoICksIEFsbGVyZ3lJbnRvbGVyYW5jZS5sYXN0T2NjdXJyZW5jZV1vdmVybGFwcyBhZnRlciBkYXkgb2YgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIucGVyaW9kCiAgICAgICAgYW5kIEFsbGVyZ3lJbnRvbGVyYW5jZS5pc1ZlcmlmaWVkICggKQogICkKICAgICAgICAgIAovKgpAb3ZlcmxvYWRlZApAZGVzY3JpcHRpb246IFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gTWVkaWNhdGlvblJlcXVlc3Qgb3ZlcmxhcHMgYWZ0ZXIgdGhlIGRheSBvZiB0aGUgaGVhcnQgZmFpbHVyZSBvdXRwYXRpZW50IGVuY291bnRlciB3aXRoIGhpc3Rvcnkgb2YgbW9kZXJhdGUgb3Igc2V2ZXJlIExWU0QKKi8KZGVmaW5lIGZsdWVudCBmdW5jdGlvbiBvdmVybGFwc0FmdGVySGVhcnRGYWlsdXJlT3V0cGF0aWVudEVuY291bnRlcihNZWRpY2F0aW9uUmVxdWVzdCBNZWRpY2F0aW9uUmVxdWVzdCk6CiAgZXhpc3RzICggIkhlYXJ0IEZhaWx1cmUgT3V0cGF0aWVudCBFbmNvdW50ZXIgd2l0aCBIaXN0b3J5IG9mIE1vZGVyYXRlIG9yIFNldmVyZSBMVlNEIiBNb2RlcmF0ZU9yU2V2ZXJlTFZTREhGT3V0cGF0aWVudEVuY291bnRlcgogICAgICB3aGVyZSBGaXJzdCgoY29sbGFwc2UoTWVkaWNhdGlvblJlcXVlc3QuZG9zYWdlSW5zdHJ1Y3Rpb24udGltaW5nLnJlcGVhdC5ib3VuZHMgRG9zZVRpbWUKICAgICAgICAgICAgcmV0dXJuIFRpbWluZ0JvdW5kVG9JbnRlcnZhbChNZWRpY2F0aW9uUmVxdWVzdC5hdXRob3JlZE9uLCBEb3NlVGltZSkKICAgICAgICApKSBEcnVnUGVyaW9kcwogICAgICAgICAgc29ydCBieSBzdGFydCBvZiAkdGhpcwogICAgICApIG92ZXJsYXBzIGFmdGVyIGRheSBvZiBNb2RlcmF0ZU9yU2V2ZXJlTFZTREhGT3V0cGF0aWVudEVuY291bnRlci5wZXJpb2QKICAgICAgICBhbmQgTWVkaWNhdGlvblJlcXVlc3Quc3RhdHVzIGluIHsgJ2FjdGl2ZScsICdjb21wbGV0ZWQnIH0KICAgICAgICBhbmQgTWVkaWNhdGlvblJlcXVlc3QuaW50ZW50IGluIHsgJ29yZGVyJywgJ29yaWdpbmFsLW9yZGVyJywgJ3JlZmxleC1vcmRlcicsICdmaWxsZXItb3JkZXInLCAnaW5zdGFuY2Utb3JkZXInIH0KICAgICAgICBhbmQgbm90IGV4aXN0cyAoIFsiVGFza1JlamVjdGVkIl0gVGFza1JlamVjdAogICAgICAgICAgICB3aGVyZSBUYXNrUmVqZWN0LmZvY3VzLnJlZmVyZW5jZXMgKCBNZWRpY2F0aW9uUmVxdWVzdCApCiAgICAgICAgICAgICAgYW5kIFRhc2tSZWplY3QuY29kZSB+IFVTUXVhbGl0eUNvcmVDb21tb24uIkZ1bGZpbGwiCiAgICAgICAgKQogICkKCi8qCkBvdmVybG9hZGVkCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBIZWFydFJhdGVPYnNlcnZhdGlvbiBvdmVybGFwcyBhZnRlciB0aGUgZGF5IG9mIHRoZSBoZWFydCBmYWlsdXJlIG91dHBhdGllbnQgZW5jb3VudGVyIHdpdGggaGlzdG9yeSBvZiBtb2RlcmF0ZSBvciBzZXZlcmUgTFZTRAoqLwpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIG92ZXJsYXBzQWZ0ZXJIZWFydEZhaWx1cmVPdXRwYXRpZW50RW5jb3VudGVyKEhlYXJ0UmF0ZU9ic2VydmF0aW9uIFVTQ29yZS5IZWFydFJhdGVQcm9maWxlKToKICBleGlzdHMgKCAiSGVhcnQgRmFpbHVyZSBPdXRwYXRpZW50IEVuY291bnRlciB3aXRoIEhpc3Rvcnkgb2YgTW9kZXJhdGUgb3IgU2V2ZXJlIExWU0QiIE1vZGVyYXRlT3JTZXZlcmVMVlNESEZPdXRwYXRpZW50RW5jb3VudGVyCiAgICAgIHdoZXJlIEhlYXJ0UmF0ZU9ic2VydmF0aW9uLmVmZmVjdGl2ZS50b0ludGVydmFsICggKSBvdmVybGFwcyBhZnRlciBkYXkgb2YgTW9kZXJhdGVPclNldmVyZUxWU0RIRk91dHBhdGllbnRFbmNvdW50ZXIucGVyaW9kCiAgICAgICAgYW5kIEhlYXJ0UmF0ZU9ic2VydmF0aW9uLnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICkKCi8qCkBkZXNjcmlwdGlvbjogQ29udmVydHMgdGhlIHBvc3NpYmxlIHJlcHJlc2VudGF0aW9ucyBvZiB0aGUgdGltaW5nIGJvdW5kIHRvIGFuIGludGVydmFsIHVzaW5nIHRoZSBnaXZlbiBkYXRlIGFzIGFuIGFuY2hvciBmb3IgZHVyYXRpb25zCiovIApkZWZpbmUgZnVuY3Rpb24gVGltaW5nQm91bmRUb0ludGVydmFsKHN0YXJ0RGF0ZSBTeXN0ZW0uRGF0ZVRpbWUsIGNob2ljZSBDaG9pY2U8RkhJUi5EdXJhdGlvbiwgRkhJUi5SYW5nZSwgRkhJUi5QZXJpb2Q+KToKICBjYXNlCiAgICB3aGVuIGNob2ljZSBpcyBGSElSLlBlcmlvZCB0aGVuCiAgICAgICAgY2hvaWNlIGFzIEZISVIuUGVyaW9kCiAgICB3aGVuIGNob2ljZSBpcyBGSElSLlJhbmdlIHRoZW4KICAgICAgICBJbnRlcnZhbFtzdGFydERhdGUgKyAoY2hvaWNlLmxvdyBhcyBRdWFudGl0eSksIHN0YXJ0RGF0ZSArIChjaG9pY2UuaGlnaCBhcyBRdWFudGl0eSldCiAgICB3aGVuIGNob2ljZSBpcyBGSElSLkR1cmF0aW9uIHRoZW4KICAgICAgICBJbnRlcnZhbFtzdGFydERhdGUsIHN0YXJ0RGF0ZSArIChjaG9pY2UgYXMgRkhJUi5EdXJhdGlvbikpCiAgICBlbHNlCgkJbnVsbCBhcyBJbnRlcnZhbDxEYXRlVGltZT4KCWVuZA=="/>
<url value="https://madie.cms.gov/Library-AHAOverall.cql"/>
</content>
</Library>