WHO SMART Guidelines - HIV
0.3.0 - ci-build
WHO SMART Guidelines - HIV - Local Development build (v0.3.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
Draft as of 2024-12-06 |
<Library xmlns="http://hl7.org/fhir">
<id value="HIVIND27Logic"/>
<meta>
<profile
value="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary"/>
<profile
value="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary"/>
<profile
value="http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library"/>
<profile
value="http://hl7.org/fhir/uv/cql/StructureDefinition/cql-module"/>
</meta>
<text>
<status value="extensions"/>
<div xmlns="http://www.w3.org/1999/xhtml">
<div>
<table class="grid dict">
<tr>
<th scope="row"><b>Title: </b></th>
<td style="padding-left: 4px;">HIV.IND.27 Logic</td>
</tr>
<tr>
<th scope="row"><b>Id: </b></th>
<td style="padding-left: 4px;">HIVIND27Logic</td>
</tr>
<tr>
<th scope="row"><b>Version: </b></th>
<td style="padding-left: 4px;">0.3.0</td>
</tr>
<tr>
<th scope="row"><b>Url: </b></th>
<td style="padding-left: 4px;"><a href="Library-HIVIND27Logic.html">HIV.IND.27 Logic</a></td>
</tr>
<tr>
<th scope="row"><b>Status: </b></th>
<td style="padding-left: 4px;">draft</td>
</tr>
<tr>
<th scope="row"><b>Experimental: </b></th>
<td style="padding-left: 4px;">true</td>
</tr>
<tr>
<th scope="row"><b>Type: </b></th>
<td style="padding-left: 4px;">
<p style="margin-bottom: 5px;">
<b>system: </b> <span><a href="http://hl7.org/fhir/R4/codesystem-library-type.html">http://terminology.hl7.org/CodeSystem/library-type</a></span>
</p>
<p style="margin-bottom: 5px;">
<b>code: </b> <span>logic-library</span>
</p>
</td>
</tr>
<tr>
<th scope="row"><b>Date: </b></th>
<td style="padding-left: 4px;">2024-12-06 22:28:12+0000</td>
</tr>
<tr>
<th scope="row"><b>Publisher: </b></th>
<td style="padding-left: 4px;">WHO</td>
</tr>
<tr>
<th scope="row"><b>Description: </b></th>
<td style="padding-left: 4px;"><div><p>Number and % of people on ART among all people living with HIV at the end of the reporting period</p>
</div></td>
</tr>
<tr>
<td colspan="2">
<table>
<tr><th><a id="cql-content"><b>Content: </b></a> text/cql</th></tr>
<tr><td><pre><code class="language-cql">/**
* Library: HIV.IND.27 Logic
* Ref No: ART.1
* Short Name: People living with HIV on ART
*
* Definition: Number and % of people on ART among all people living with HIV at the end of the reporting period
*
* Numerator: Number of people on ART at the end of the reporting period (HIV patient monitoring data from, for example, ART registers, patient records or EMRs). For key populations survey data may be required.
* Numerator Calculation: COUNT of clients with "HIV status"='HIV-positive' AND "On ART"=True at reporting period end date
* Numerator Exclusions: Clients with an "HIV treatment outcome" IN 'Lost to follow up', 'Transferred out', 'Death (documented)' at the end of the reporting period
*
* Denominator: 1. To determine treatment coverage: estimated number of people living with HIV (from models, such as Spectrum AIM) | 2. To gauge progress toward the second 95 target: number of people living with HIV who know their HIV status (from surveys or models)
* Denominator Calculation: For treatment coverage: *Estimated number of people living with HIV | | For progress towards 2nd 95 target: *Estimated number of people living with HIV who know their status
* Denominator Exclusions: Clients with an "HIV treatment outcome" IN 'Lost to follow up', 'Transferred out', 'Death (documented)' at the end of the reporting period
*
* Disaggregations:
* • Gender (female, male, other*)
* • Age (0–4, 5–9, 10–14, 15–19, 20–24, 25–29, 30–34, 35–39, 40–44, 45–49, 50+ years)**
* • Key populations (men who have sex with men, people living in prisons and other closed settings, people who inject drugs, sex workers, trans and gender diverse people)***
* • Cities and other administrative regions of epidemiologic importance
*
* Disaggregation Elements: Gender | Age | Key population member type |
*
* Numerator and Denominator Elements:
* HIV status
* On ART
*
* Reference: Consolidated guidelines on person-centred HIV strategic information: strengthening routine data for impact. Geneva: World Health Organization; 2022
*
* Data Concepts:
* HIV.A.DE17: Age | Calculated age (number of years) of the client based on date of birth
* HIV.A.DE18: Gender* | Gender of the client*
* HIV.A.DE19: Female | Client identifies as female
* HIV.A.DE20: Male | Client identifies as male
* HIV.A.DE21: Transgender male | Client identifies as transgender male
* HIV.A.DE22: Transgender female | Client identifies as transgender female
* HIV.A.DE23: Other | Additional category
* HIV.B.DE50: Key population member type* | The type of key population that the client is included in
* HIV.B.DE51: Sex worker | Client is a sex worker
* HIV.B.DE52: Men who have sex with men | Client is a man who has sex with men
* HIV.B.DE53: Trans and gender-diverse people | Client identifies as trans and gender-diverse
* HIV.B.DE54: People who inject drugs | Client is a person who injects drugs
* HIV.B.DE55: People living in prisons and other closed settings | Client lives in a prison or another closed setting
* HIV.B.DE115: HIV status | HIV status reported after applying the national HIV testing algorithm. No single HIV test can provide an HIV-positive diagnosis.
* HIV.B.DE116: HIV-positive | Client is HIV-positive
* HIV.B.DE117: HIV-negative | Client is HIV-negative
* HIV.B.DE118: Unknown | Client has unknown HIV status
* HIV.D.DE38: On ART | Client is currently taking ART
* HIV.E.DE114: Key population member type* | The type of key population that the infant's mother is included in
* HIV.E.DE115: Sex worker | Infant's mother is a sex worker
* HIV.E.DE116: People who inject drugs | Infant's mother is a person who injects drugs
* HIV.E.DE117: Trans and gender-diverse people | Infant's mother identifies as trans and gender-diverse
* HIV.E.DE118: People living in prisons and other closed setting | Infant's mother is in a prison or closed setting
* HIV.H.DE47: On ART | Client is currently taking ART
*
* Additional Context
* - what it measures: Measures progress towards providing ART to all people living with HIV, that is, treatment coverage, taking into account total attrition during the reporting period.
* - rationale: • WHO currently recommends treatment for all people living with HIV to achieve viral suppression. | • This indicator is central to accountability for national health sector strategic plans, effective programme management and donor programming. | • This indicator is essential to measurement of the second 95 target: that 95% of the people who know their HIV-positive status are accessing ART by 2025.
* - method: For the numerator: Generated by determining the number of people living with HIV on ART at the end of the last reporting period plus the number of people living with HIV initiated on ART during the current reporting period, taking into account retention/attrition status by the end of the reporting period. Retention and attrition analysis should be conducted as part of reporting on this indicator. The numerator should NOT INCLUDE people who have stopped treatment, died or were otherwise lost to follow-up during this period. Consistent with methods for defining the total attrition from ART indicator (see ART.2), these status classification categories should be reported separately to the national level and used to calculate the number of people living with HIV who are on ART. | | For the denominator: Epidemiological models such as Spectrum AIM are the preferred source for estimating the number of people living with HIV. Denominator 2 should be consistent with the numerator used for indicator HTS.1 People living with HIV who know their HIV status (first 95 target). The recommended maximum reporting frequency is 12 months. Shorter reporting intervals, for example, three months, are recommended where feasible.
*
* Suggested Scoring Method: proportion | http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/proportion-measure-cqfm
*/
/*
* Profiles:
* - HIVStatusCondition
* - HIVStatusObservation
* - HIVAntiRetroviralTreatment
library HIVIND27Logic
// Included Libraries
using FHIR version '4.0.1'
include HIVCommon version '0.0.1' called HIC
include FHIRHelpers version '4.0.1'
include WHOCommon called WCom
include HIVElements called HE
include HIVIndicatorElements called HIE
include HIVConfig called Config
include HIVConcepts called Concepts
// Indicator Definition
parameter "Measurement Period" Interval<Date> default Interval[@2023-01-01, @2023-01-30]
context Patient
/*
* Many indicator specifications in ANC and Immunization have context as patient.
* I believe these should be unfiltered to get all observations not just those related to a current patient
* Should discuss.
*/
define "Measure Population":
HIE."Has HIV-positive Status"
and exists(HE."On ART H.DE47" A
with [EpisodeOfCare] EOC
such that A.context.references(EOC) and
//Not Transferred out
not (exists(EOC.type T where T ~ Concepts."On ART - HIV.H.DE47")
and EOC.status = 'finished' and EOC.period.toInterval() ends during "Measurement Period")
and not exists (
EOC.statusHistory H
where H.status = 'finished'
and H.period.toInterval() ends during "Measurement Period")
//On ART for at least one day in measurement period
where A.effective.toInterval() starts before end of "Measurement Period"
and A.effective.toInterval() ends after start of "Measurement Period"
//Not Lost to follow up
and (A.effective.toInterval() ends after (end of "Measurement Period" - Config."LTFU Days"))
)
and not HIE."Has death documented"
/*
* As defined by Member States
*/
define "Initial Population":
true
/*
* NOTE: Modeled as a Continuous Variable measure because this is an estimated denominator proportion measure
*/
define function "Measure Observation"(Patient "Patient"):
1
/*
* Disaggregators
*/
define "Administrative Gender Stratifier":
HIE."By Administrative Gender Stratifier"
define "Age Stratifier":
HIE."By Age Stratifier"
define "Geographic Region Stratifier":
HIE."By Geographic Region Stratifier"
define "patientGroups Stratifier":
HIE."patientGroups"
define "Stratification":
HIE."By Administrative Gender Stratifier".code
+ ':' + HIE."By Age Stratifier"
+ ':' + HIE."By Geographic Region Stratifier"
+ Combine(HIE.patientGroups, ':')</code></pre></td></tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table>
<tr><th><b>Content: </b> application/elm+xml</th></tr>
<tr><td><pre><code/></pre></td></tr>
</table>
</td>
</tr>
</table>
</div>
</div>
</text>
<extension
url="http://hl7.org/fhir/StructureDefinition/cqf-knowledgeCapability">
<valueCode value="computable"/>
</extension>
<url value="http://smart.who.int/hiv/Library/HIVIND27Logic"/>
<version value="0.3.0"/>
<name value="HIVIND27Logic"/>
<title value="HIV.IND.27 Logic"/>
<status value="draft"/>
<experimental value="true"/>
<type>
<coding>
<system value="http://terminology.hl7.org/CodeSystem/library-type"/>
<code value="logic-library"/>
</coding>
</type>
<date value="2024-12-06T22:28:12+00:00"/>
<publisher value="WHO"/>
<contact>
<name value="WHO"/>
<telecom>
<system value="url"/>
<value value="http://who.int"/>
</telecom>
</contact>
<description
value="Number and % of people on ART among all people living with HIV at the end of the reporting period"/>
<content>
<contentType value="text/cql"/>
<data
value="LyoqCiAqIExpYnJhcnk6IEhJVi5JTkQuMjcgTG9naWMKICogUmVmIE5vOiBBUlQuMQogKiBTaG9ydCBOYW1lOiBQZW9wbGUgbGl2aW5nIHdpdGggSElWIG9uIEFSVAogKgogKiBEZWZpbml0aW9uOiBOdW1iZXIgYW5kICUgb2YgcGVvcGxlIG9uIEFSVCBhbW9uZyBhbGwgcGVvcGxlIGxpdmluZyB3aXRoIEhJViBhdCB0aGUgZW5kIG9mIHRoZSByZXBvcnRpbmcgcGVyaW9kCiAqCiAqIE51bWVyYXRvcjogTnVtYmVyIG9mIHBlb3BsZSBvbiBBUlQgYXQgdGhlIGVuZCBvZiB0aGUgcmVwb3J0aW5nIHBlcmlvZCAoSElWIHBhdGllbnQgbW9uaXRvcmluZyBkYXRhIGZyb20sIGZvciBleGFtcGxlLCBBUlQgcmVnaXN0ZXJzLCBwYXRpZW50IHJlY29yZHMgb3IgRU1ScykuIEZvciBrZXkgcG9wdWxhdGlvbnMgc3VydmV5IGRhdGEgbWF5IGJlIHJlcXVpcmVkLgogKiBOdW1lcmF0b3IgQ2FsY3VsYXRpb246IENPVU5UIG9mIGNsaWVudHMgd2l0aCAiSElWIHN0YXR1cyI9J0hJVi1wb3NpdGl2ZScgQU5EICJPbiBBUlQiPVRydWUgYXQgcmVwb3J0aW5nIHBlcmlvZCBlbmQgZGF0ZQogKiBOdW1lcmF0b3IgRXhjbHVzaW9uczogQ2xpZW50cyB3aXRoIGFuICJISVYgdHJlYXRtZW50IG91dGNvbWUiIElOICdMb3N0IHRvIGZvbGxvdyB1cCcsICdUcmFuc2ZlcnJlZCBvdXQnLCAnRGVhdGggKGRvY3VtZW50ZWQpJyBhdCB0aGUgZW5kIG9mIHRoZSByZXBvcnRpbmcgcGVyaW9kCiAqCiAqIERlbm9taW5hdG9yOiAxLiBUbyBkZXRlcm1pbmUgdHJlYXRtZW50IGNvdmVyYWdlOiBlc3RpbWF0ZWQgbnVtYmVyIG9mIHBlb3BsZSBsaXZpbmcgd2l0aCBISVYgKGZyb20gbW9kZWxzLCBzdWNoIGFzIFNwZWN0cnVtIEFJTSkgfCAyLiBUbyBnYXVnZSBwcm9ncmVzcyB0b3dhcmQgdGhlIHNlY29uZCA5NSB0YXJnZXQ6IG51bWJlciBvZiBwZW9wbGUgbGl2aW5nIHdpdGggSElWIHdobyBrbm93IHRoZWlyIEhJViBzdGF0dXMgKGZyb20gc3VydmV5cyBvciBtb2RlbHMpCiAqIERlbm9taW5hdG9yIENhbGN1bGF0aW9uOiBGb3IgdHJlYXRtZW50IGNvdmVyYWdlOiAqRXN0aW1hdGVkIG51bWJlciBvZiBwZW9wbGUgbGl2aW5nIHdpdGggSElWIHwgIHwgRm9yIHByb2dyZXNzIHRvd2FyZHMgMm5kIDk1IHRhcmdldDogKkVzdGltYXRlZCBudW1iZXIgb2YgcGVvcGxlIGxpdmluZyB3aXRoIEhJViB3aG8ga25vdyB0aGVpciBzdGF0dXMKICogRGVub21pbmF0b3IgRXhjbHVzaW9uczogQ2xpZW50cyB3aXRoIGFuICJISVYgdHJlYXRtZW50IG91dGNvbWUiIElOICdMb3N0IHRvIGZvbGxvdyB1cCcsICdUcmFuc2ZlcnJlZCBvdXQnLCAnRGVhdGggKGRvY3VtZW50ZWQpJyBhdCB0aGUgZW5kIG9mIHRoZSByZXBvcnRpbmcgcGVyaW9kCiAqCiAqIERpc2FnZ3JlZ2F0aW9uczoKICog4oCiwqBHZW5kZXIgKGZlbWFsZSwgbWFsZSwgb3RoZXIqKSAKICogIOKAoiBBZ2UgKDDigJM0LCA14oCTOSwgMTDigJMxNCwgMTXigJMxOSwgMjDigJMyNCwgMjXigJMyOSwgMzDigJMzNCwgMzXigJMzOSwgNDDigJM0NCwgNDXigJM0OSwgNTArIHllYXJzKSoqIAogKiAg4oCiwqBLZXkgcG9wdWxhdGlvbnMgKG1lbiB3aG8gaGF2ZSBzZXggd2l0aCBtZW4sIHBlb3BsZSBsaXZpbmcgaW4gcHJpc29ucyBhbmQgb3RoZXIgY2xvc2VkIHNldHRpbmdzLCBwZW9wbGUgd2hvIGluamVjdCBkcnVncywgc2V4IHdvcmtlcnMsIHRyYW5zIGFuZCBnZW5kZXIgZGl2ZXJzZSBwZW9wbGUpKioqIAogKiAg4oCiwqBDaXRpZXMgYW5kIG90aGVyIGFkbWluaXN0cmF0aXZlIHJlZ2lvbnMgb2YgZXBpZGVtaW9sb2dpYyBpbXBvcnRhbmNlCiAqCiAqIERpc2FnZ3JlZ2F0aW9uIEVsZW1lbnRzOiBHZW5kZXIgfCBBZ2UgfCBLZXkgcG9wdWxhdGlvbiBtZW1iZXIgdHlwZSB8IAogKgogKiBOdW1lcmF0b3IgYW5kIERlbm9taW5hdG9yIEVsZW1lbnRzOgogKiBISVYgc3RhdHVzIAogKiAgT24gQVJUCiAqCiAqIFJlZmVyZW5jZTogQ29uc29saWRhdGVkIGd1aWRlbGluZXMgb24gcGVyc29uLWNlbnRyZWQgSElWIHN0cmF0ZWdpYyBpbmZvcm1hdGlvbjogc3RyZW5ndGhlbmluZyByb3V0aW5lIGRhdGEgZm9yIGltcGFjdC4gR2VuZXZhOiBXb3JsZCBIZWFsdGggT3JnYW5pemF0aW9uOyAyMDIyCiAqIAogKiBEYXRhIENvbmNlcHRzOgogKiBISVYuQS5ERTE3OiBBZ2UgfCBDYWxjdWxhdGVkIGFnZSAobnVtYmVyIG9mIHllYXJzKSBvZiB0aGUgY2xpZW50IGJhc2VkIG9uIGRhdGUgb2YgYmlydGgKICogSElWLkEuREUxODogR2VuZGVyKiB8IEdlbmRlciBvZiB0aGUgY2xpZW50KgogKiBISVYuQS5ERTE5OiBGZW1hbGUgfCBDbGllbnQgaWRlbnRpZmllcyBhcyBmZW1hbGUKICogSElWLkEuREUyMDogTWFsZSB8IENsaWVudCBpZGVudGlmaWVzIGFzIG1hbGUKICogSElWLkEuREUyMTogVHJhbnNnZW5kZXIgbWFsZSB8IENsaWVudCBpZGVudGlmaWVzIGFzIHRyYW5zZ2VuZGVyIG1hbGUKICogSElWLkEuREUyMjogVHJhbnNnZW5kZXIgZmVtYWxlIHwgQ2xpZW50IGlkZW50aWZpZXMgYXMgdHJhbnNnZW5kZXIgZmVtYWxlCiAqIEhJVi5BLkRFMjM6IE90aGVyIHwgQWRkaXRpb25hbCBjYXRlZ29yeQogKiBISVYuQi5ERTUwOiBLZXkgcG9wdWxhdGlvbiBtZW1iZXIgdHlwZSogfCBUaGUgdHlwZSBvZiBrZXkgcG9wdWxhdGlvbiB0aGF0IHRoZSBjbGllbnQgaXMgaW5jbHVkZWQgaW4KICogSElWLkIuREU1MTogU2V4IHdvcmtlciB8IENsaWVudCBpcyBhIHNleCB3b3JrZXIKICogSElWLkIuREU1MjogTWVuIHdobyBoYXZlIHNleCB3aXRoIG1lbiB8IENsaWVudCBpcyBhIG1hbiB3aG8gaGFzIHNleCB3aXRoIG1lbgogKiBISVYuQi5ERTUzOiBUcmFucyBhbmQgZ2VuZGVyLWRpdmVyc2UgcGVvcGxlIHwgQ2xpZW50IGlkZW50aWZpZXMgYXMgdHJhbnMgYW5kIGdlbmRlci1kaXZlcnNlCiAqIEhJVi5CLkRFNTQ6IFBlb3BsZSB3aG8gaW5qZWN0IGRydWdzIHwgQ2xpZW50IGlzIGEgcGVyc29uIHdobyBpbmplY3RzIGRydWdzCiAqIEhJVi5CLkRFNTU6IFBlb3BsZSBsaXZpbmcgaW4gcHJpc29ucyBhbmQgb3RoZXIgY2xvc2VkIHNldHRpbmdzIHwgQ2xpZW50IGxpdmVzIGluIGEgcHJpc29uIG9yIGFub3RoZXIgY2xvc2VkIHNldHRpbmcKICogSElWLkIuREUxMTU6IEhJViBzdGF0dXMgfCBISVYgc3RhdHVzIHJlcG9ydGVkIGFmdGVyIGFwcGx5aW5nIHRoZSBuYXRpb25hbCBISVYgdGVzdGluZyBhbGdvcml0aG0uIE5vIHNpbmdsZSBISVYgdGVzdCBjYW4gcHJvdmlkZSBhbiBISVYtcG9zaXRpdmUgZGlhZ25vc2lzLgogKiBISVYuQi5ERTExNjogSElWLXBvc2l0aXZlIHwgQ2xpZW50IGlzIEhJVi1wb3NpdGl2ZQogKiBISVYuQi5ERTExNzogSElWLW5lZ2F0aXZlIHwgQ2xpZW50IGlzIEhJVi1uZWdhdGl2ZQogKiBISVYuQi5ERTExODogVW5rbm93biB8IENsaWVudCBoYXMgdW5rbm93biBISVYgc3RhdHVzCiAqIEhJVi5ELkRFMzg6IE9uIEFSVCB8IENsaWVudCBpcyBjdXJyZW50bHkgdGFraW5nIEFSVAogKiBISVYuRS5ERTExNDogS2V5IHBvcHVsYXRpb24gbWVtYmVyIHR5cGUqIHwgVGhlIHR5cGUgb2Yga2V5IHBvcHVsYXRpb24gdGhhdCB0aGUgaW5mYW50J3MgbW90aGVyIGlzIGluY2x1ZGVkIGluCiAqIEhJVi5FLkRFMTE1OiBTZXggd29ya2VyIHwgSW5mYW50J3MgbW90aGVyIGlzIGEgc2V4IHdvcmtlcgogKiBISVYuRS5ERTExNjogUGVvcGxlIHdobyBpbmplY3QgZHJ1Z3MgfCBJbmZhbnQncyBtb3RoZXIgaXMgYSBwZXJzb24gd2hvIGluamVjdHMgZHJ1Z3MKICogSElWLkUuREUxMTc6IFRyYW5zIGFuZCBnZW5kZXItZGl2ZXJzZSBwZW9wbGUgfCBJbmZhbnQncyBtb3RoZXIgaWRlbnRpZmllcyBhcyB0cmFucyBhbmQgZ2VuZGVyLWRpdmVyc2UKICogSElWLkUuREUxMTg6IFBlb3BsZSBsaXZpbmcgaW4gcHJpc29ucyBhbmQgb3RoZXIgY2xvc2VkIHNldHRpbmcgfCBJbmZhbnQncyBtb3RoZXIgaXMgaW4gYSBwcmlzb24gb3IgY2xvc2VkIHNldHRpbmcKICogSElWLkguREU0NzogT24gQVJUIHwgQ2xpZW50IGlzIGN1cnJlbnRseSB0YWtpbmcgQVJUIAogKgogKiBBZGRpdGlvbmFsIENvbnRleHQKICogLSB3aGF0IGl0IG1lYXN1cmVzOiBNZWFzdXJlcyBwcm9ncmVzcyB0b3dhcmRzIHByb3ZpZGluZyBBUlQgdG8gYWxsIHBlb3BsZSBsaXZpbmcgd2l0aCBISVYsIHRoYXQgaXMsIHRyZWF0bWVudCBjb3ZlcmFnZSwgdGFraW5nIGludG8gYWNjb3VudCB0b3RhbCBhdHRyaXRpb24gZHVyaW5nIHRoZSByZXBvcnRpbmcgcGVyaW9kLgogKiAtIHJhdGlvbmFsZTog4oCiwqBXSE8gY3VycmVudGx5IHJlY29tbWVuZHMgdHJlYXRtZW50IGZvciBhbGwgcGVvcGxlIGxpdmluZyB3aXRoIEhJViB0byBhY2hpZXZlIHZpcmFsIHN1cHByZXNzaW9uLiB8IOKAosKgVGhpcyBpbmRpY2F0b3IgaXMgY2VudHJhbCB0byBhY2NvdW50YWJpbGl0eSBmb3IgbmF0aW9uYWwgaGVhbHRoIHNlY3RvciBzdHJhdGVnaWMgcGxhbnMsIGVmZmVjdGl2ZSBwcm9ncmFtbWUgbWFuYWdlbWVudCBhbmQgZG9ub3IgcHJvZ3JhbW1pbmcuIHwg4oCiwqBUaGlzIGluZGljYXRvciBpcyBlc3NlbnRpYWwgdG8gbWVhc3VyZW1lbnQgb2YgdGhlIHNlY29uZCA5NSB0YXJnZXQ6IHRoYXQgOTUlIG9mIHRoZSBwZW9wbGUgd2hvIGtub3cgdGhlaXIgSElWLXBvc2l0aXZlIHN0YXR1cyBhcmUgYWNjZXNzaW5nIEFSVCBieSAyMDI1LgogKiAtIG1ldGhvZDogRm9yIHRoZSBudW1lcmF0b3I6IEdlbmVyYXRlZCBieSBkZXRlcm1pbmluZyB0aGUgbnVtYmVyIG9mIHBlb3BsZSBsaXZpbmcgd2l0aCBISVYgb24gQVJUIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgcmVwb3J0aW5nIHBlcmlvZCBwbHVzIHRoZSBudW1iZXIgb2YgcGVvcGxlIGxpdmluZyB3aXRoIEhJViBpbml0aWF0ZWQgb24gQVJUIGR1cmluZyB0aGUgY3VycmVudCByZXBvcnRpbmcgcGVyaW9kLCB0YWtpbmcgaW50byBhY2NvdW50IHJldGVudGlvbi9hdHRyaXRpb24gc3RhdHVzIGJ5IHRoZSBlbmQgb2YgdGhlIHJlcG9ydGluZyBwZXJpb2QuIFJldGVudGlvbiBhbmQgYXR0cml0aW9uIGFuYWx5c2lzIHNob3VsZCBiZSBjb25kdWN0ZWQgYXMgcGFydCBvZiByZXBvcnRpbmcgb24gdGhpcyBpbmRpY2F0b3IuIFRoZSBudW1lcmF0b3Igc2hvdWxkIE5PVCBJTkNMVURFIHBlb3BsZSB3aG8gaGF2ZSBzdG9wcGVkIHRyZWF0bWVudCwgZGllZCBvciB3ZXJlIG90aGVyd2lzZSBsb3N0IHRvIGZvbGxvdy11cCBkdXJpbmcgdGhpcyBwZXJpb2QuIENvbnNpc3RlbnQgd2l0aCBtZXRob2RzIGZvciBkZWZpbmluZyB0aGUgdG90YWwgYXR0cml0aW9uIGZyb20gQVJUIGluZGljYXRvciAoc2VlIEFSVC4yKSwgdGhlc2Ugc3RhdHVzIGNsYXNzaWZpY2F0aW9uIGNhdGVnb3JpZXMgc2hvdWxkIGJlIHJlcG9ydGVkIHNlcGFyYXRlbHkgdG8gdGhlIG5hdGlvbmFsIGxldmVsIGFuZCB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHBlb3BsZSBsaXZpbmcgd2l0aCBISVYgd2hvIGFyZSBvbiBBUlQuIHwgIHwgRm9yIHRoZSBkZW5vbWluYXRvcjogRXBpZGVtaW9sb2dpY2FsIG1vZGVscyBzdWNoIGFzIFNwZWN0cnVtIEFJTSBhcmUgdGhlIHByZWZlcnJlZCBzb3VyY2UgZm9yIGVzdGltYXRpbmcgdGhlIG51bWJlciBvZiBwZW9wbGUgbGl2aW5nIHdpdGggSElWLiBEZW5vbWluYXRvciAyIHNob3VsZCBiZSBjb25zaXN0ZW50IHdpdGggdGhlIG51bWVyYXRvciB1c2VkIGZvciBpbmRpY2F0b3IgSFRTLjEgUGVvcGxlIGxpdmluZyB3aXRoIEhJViB3aG8ga25vdyB0aGVpciBISVYgc3RhdHVzIChmaXJzdCA5NSB0YXJnZXQpLiBUaGUgcmVjb21tZW5kZWQgbWF4aW11bSByZXBvcnRpbmcgZnJlcXVlbmN5IGlzIDEyIG1vbnRocy4gU2hvcnRlciByZXBvcnRpbmcgaW50ZXJ2YWxzLCBmb3IgZXhhbXBsZSwgdGhyZWUgbW9udGhzLCBhcmUgcmVjb21tZW5kZWQgd2hlcmUgZmVhc2libGUuCiAqIAogKiBTdWdnZXN0ZWQgU2NvcmluZyBNZXRob2Q6IHByb3BvcnRpb24gfCBodHRwOi8vaGw3Lm9yZy9maGlyL3VzL2NxZm1lYXN1cmVzL1N0cnVjdHVyZURlZmluaXRpb24vcHJvcG9ydGlvbi1tZWFzdXJlLWNxZm0KICovCgovKiAKICogUHJvZmlsZXM6CiAqIC0gSElWU3RhdHVzQ29uZGl0aW9uCiAqIC0gSElWU3RhdHVzT2JzZXJ2YXRpb24KICogLSBISVZBbnRpUmV0cm92aXJhbFRyZWF0bWVudAoKbGlicmFyeSBISVZJTkQyN0xvZ2ljCgovLyBJbmNsdWRlZCBMaWJyYXJpZXMKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgSElWQ29tbW9uIHZlcnNpb24gJzAuMC4xJyBjYWxsZWQgSElDCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnCmluY2x1ZGUgV0hPQ29tbW9uIGNhbGxlZCBXQ29tCmluY2x1ZGUgSElWRWxlbWVudHMgY2FsbGVkIEhFCmluY2x1ZGUgSElWSW5kaWNhdG9yRWxlbWVudHMgY2FsbGVkIEhJRQppbmNsdWRlIEhJVkNvbmZpZyBjYWxsZWQgQ29uZmlnCmluY2x1ZGUgSElWQ29uY2VwdHMgY2FsbGVkIENvbmNlcHRzCgovLyBJbmRpY2F0b3IgRGVmaW5pdGlvbgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZT4gZGVmYXVsdCBJbnRlcnZhbFtAMjAyMy0wMS0wMSwgQDIwMjMtMDEtMzBdCgpjb250ZXh0IFBhdGllbnQKLyoKKiBNYW55IGluZGljYXRvciBzcGVjaWZpY2F0aW9ucyBpbiBBTkMgYW5kIEltbXVuaXphdGlvbiBoYXZlIGNvbnRleHQgYXMgcGF0aWVudC4gCiogSSBiZWxpZXZlIHRoZXNlIHNob3VsZCBiZSB1bmZpbHRlcmVkIHRvIGdldCBhbGwgb2JzZXJ2YXRpb25zIG5vdCBqdXN0IHRob3NlIHJlbGF0ZWQgdG8gYSBjdXJyZW50IHBhdGllbnQKKiBTaG91bGQgZGlzY3Vzcy4KKi8KCmRlZmluZSAiTWVhc3VyZSBQb3B1bGF0aW9uIjoKICAgSElFLiJIYXMgSElWLXBvc2l0aXZlIFN0YXR1cyIKICAgYW5kIGV4aXN0cyhIRS4iT24gQVJUIEguREU0NyIgQQogICAgd2l0aCBbRXBpc29kZU9mQ2FyZV0gRU9DCiAgICAgIHN1Y2ggdGhhdCBBLmNvbnRleHQucmVmZXJlbmNlcyhFT0MpIGFuZCAKICAgICAgLy9Ob3QgVHJhbnNmZXJyZWQgb3V0CiAgICAgIG5vdCAoZXhpc3RzKEVPQy50eXBlIFQgd2hlcmUgVCB+IENvbmNlcHRzLiJPbiBBUlQgLSBISVYuSC5ERTQ3IikKICAgICAgYW5kIEVPQy5zdGF0dXMgPSAnZmluaXNoZWQnIGFuZCBFT0MucGVyaW9kLnRvSW50ZXJ2YWwoKSBlbmRzIGR1cmluZyAiTWVhc3VyZW1lbnQgUGVyaW9kIikKICAgICAgYW5kIG5vdCBleGlzdHMgKAogICAgICBFT0Muc3RhdHVzSGlzdG9yeSBICiAgICAgIHdoZXJlIEguc3RhdHVzID0gJ2ZpbmlzaGVkJwogICAgICBhbmQgSC5wZXJpb2QudG9JbnRlcnZhbCgpIGVuZHMgZHVyaW5nICJNZWFzdXJlbWVudCBQZXJpb2QiKQogICAgICAvL09uIEFSVCBmb3IgYXQgbGVhc3Qgb25lIGRheSBpbiBtZWFzdXJlbWVudCBwZXJpb2QKICAgIHdoZXJlIEEuZWZmZWN0aXZlLnRvSW50ZXJ2YWwoKSBzdGFydHMgYmVmb3JlIGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgYW5kIEEuZWZmZWN0aXZlLnRvSW50ZXJ2YWwoKSBlbmRzIGFmdGVyIHN0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgICAvL05vdCBMb3N0IHRvIGZvbGxvdyB1cAoJYW5kIChBLmVmZmVjdGl2ZS50b0ludGVydmFsKCkgZW5kcyBhZnRlciAoZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiIC0gQ29uZmlnLiJMVEZVIERheXMiKSkKICAgKQogICBhbmQgbm90IEhJRS4iSGFzIGRlYXRoIGRvY3VtZW50ZWQiCgoKLyoKICogQXMgZGVmaW5lZCBieSBNZW1iZXIgU3RhdGVzCiAqLwpkZWZpbmUgIkluaXRpYWwgUG9wdWxhdGlvbiI6CiAgdHJ1ZQoKLyoKICogTk9URTogTW9kZWxlZCBhcyBhIENvbnRpbnVvdXMgVmFyaWFibGUgbWVhc3VyZSBiZWNhdXNlIHRoaXMgaXMgYW4gZXN0aW1hdGVkIGRlbm9taW5hdG9yIHByb3BvcnRpb24gbWVhc3VyZQogKi8KCmRlZmluZSBmdW5jdGlvbiAiTWVhc3VyZSBPYnNlcnZhdGlvbiIoUGF0aWVudCAiUGF0aWVudCIpOgogIDEKCi8qCiAqIERpc2FnZ3JlZ2F0b3JzCiAqLwoKZGVmaW5lICJBZG1pbmlzdHJhdGl2ZSBHZW5kZXIgU3RyYXRpZmllciI6CglISUUuIkJ5IEFkbWluaXN0cmF0aXZlIEdlbmRlciBTdHJhdGlmaWVyIgoKZGVmaW5lICJBZ2UgU3RyYXRpZmllciI6CglISUUuIkJ5IEFnZSBTdHJhdGlmaWVyIgoKZGVmaW5lICJHZW9ncmFwaGljIFJlZ2lvbiBTdHJhdGlmaWVyIjoKCUhJRS4iQnkgR2VvZ3JhcGhpYyBSZWdpb24gU3RyYXRpZmllciIKCmRlZmluZSAicGF0aWVudEdyb3VwcyBTdHJhdGlmaWVyIjoKCUhJRS4icGF0aWVudEdyb3VwcyIKCmRlZmluZSAiU3RyYXRpZmljYXRpb24iOgogSElFLiJCeSBBZG1pbmlzdHJhdGl2ZSBHZW5kZXIgU3RyYXRpZmllciIuY29kZSAKICArICc6JyArIEhJRS4iQnkgQWdlIFN0cmF0aWZpZXIiCisgJzonICsgSElFLiJCeSBHZW9ncmFwaGljIFJlZ2lvbiBTdHJhdGlmaWVyIgorIENvbWJpbmUoSElFLnBhdGllbnRHcm91cHMsICc6Jyk="/>
</content>
<content>
<contentType value="application/elm+xml"/>
</content>
</Library>