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 2025-01-02 |
{
"resourceType" : "Library",
"id" : "HIVC7DTLogic",
"meta" : {
"profile" : [
🔗 "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary"🔗 ,
"http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary"🔗 ,
"http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library"🔗 ,
"http://hl7.org/fhir/uv/cql/StructureDefinition/cql-module"
]
},
"text" : {
"status" : "extensions",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n<div>\n <table class=\"grid dict\">\n \n \n <tr>\n <th scope=\"row\"><b>Title: </b></th>\n <td style=\"padding-left: 4px;\">HIV.C7.DT Logic</td>\n </tr>\n \n\n \n \n <tr>\n <th scope=\"row\"><b>Id: </b></th>\n <td style=\"padding-left: 4px;\">HIVC7DTLogic</td>\n </tr>\n \n\n \n \n <tr>\n <th scope=\"row\"><b>Version: </b></th>\n <td style=\"padding-left: 4px;\">0.3.0</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Url: </b></th>\n <td style=\"padding-left: 4px;\"><a href=\"Library-HIVC7DTLogic.html\">HIV.C7.DT Logic</a></td>\n </tr>\n \n\n \n\n \n\n \n <tr>\n <th scope=\"row\"><b>Status: </b></th>\n <td style=\"padding-left: 4px;\">draft</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Experimental: </b></th>\n <td style=\"padding-left: 4px;\">true</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Type: </b></th>\n <td style=\"padding-left: 4px;\">\n \n \n \n <p style=\"margin-bottom: 5px;\">\n <b>system: </b> <span><a href=\"http://terminology.hl7.org/6.0.2/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a></span>\n </p>\n \n \n <p style=\"margin-bottom: 5px;\">\n <b>code: </b> <span>logic-library</span>\n </p>\n \n \n \n \n \n </td>\n </tr>\n \n\n \n\n \n <tr>\n <th scope=\"row\"><b>Date: </b></th>\n <td style=\"padding-left: 4px;\">2025-01-02 00:27:00+0000</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Publisher: </b></th>\n <td style=\"padding-left: 4px;\">WHO</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Description: </b></th>\n <td style=\"padding-left: 4px;\"><div><p>HIV.C7.DT Logic</p>\n</div></td>\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 <tr>\n <td colspan=\"2\">\n <table>\n <tr><th><a id=\"cql-content\"><b>Content: </b></a> text/cql</th></tr>\n <tr><td><pre><code class=\"language-cql\">/**\nLibrary: HIV.C7.DT Logic\n\n@DecisionID: HIV.C7.DT\n@BusinessRule: Check suitability for PrEP or PEP\n@Trigger: HIV.C7 Check suitability for PrEP or PEP\n@HitPolicy: Rule Order\n@Description: Check suitability for PrEP or PEP\n\nData Concepts:\n * HIV.B.DE49: Key population member | Client is a member of a key population that has an increased risk of HIV\n * 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.\n * HIV.C.DE31: PEP history | The client's history in taking post-exposure prophylaxis (PEP) for HIV prevention\n * HIV.C.DE36: Signs of substantial risk of HIV infection | Signs the client is at a substantial risk of HIV infection\n * HIV.C.DE55: Sex partners HIV treatment status | Treatment adherence of client's sex partner for partners that are HIV-positive\n * HIV.C.DE106: Estimated creatinine clearance | Estimated creatinine clearance of the client returned from lab in mL/min\n * HIV.C.DE112: Contraindications to PrEP usage | Listing of contraindications to pre-exposure prophylaxis (PrEP)\n * HIV.C.DE117: Probable recent exposure to HIV | When the client is reported to have had probable recent exposure to HIV\n * HIV.Config.DE12: HIV burden of the setting | HIV burden of the setting (high or low) based on the national HIV prevalence or where the HIV prevalence and/or incidence in a geographical setting is higher than national prevalence and, therefore, needs priority in the HIV response\n * HIV.H.DE34: HIV status of partner or contact | HIV status of the partner or contact given by the index case\n\nConsolidated guidelines on HIV prevention, testing, treatment, service delivery and monitoring: recommendations for a public health approach (2021) Chapter 5: Advanced HIV Disease. Figure 5.1: Algorithm for providing a package of care for people with advanced HIV disease.\n*/\n\nlibrary HIVC7DTLogic\n \nusing FHIR version '4.0.1'\n\ninclude HIVCommon version '0.0.1' called HIC\ninclude HIVConcepts called Concepts\ninclude HIVConfig called Config\ninclude HIVEncounterElements called Elements\ninclude FHIRHelpers version '4.0.1'\n\ninclude WHOCommon called WCom\n\n/*\n @input "HIV Status"\n @pseudocode: "HIV status"='HIV-negative'\n */\ndefine "HIV negative":\n exists(\n Elements."HIV Status Observation" O\n where O.value ~ Concepts."HIV-negative"\n )\n\n/*\n @input "HIV Status"\n @pseudocode: "HIV status"='HIV-negative'\n */\ndefine "HIV negative or unknown":\n exists(\n Elements."HIV Status Observation" O\n where O.value ~ Concepts."HIV-negative" or\n O.value ~ Concepts."Unknown"\n )\n\n\n/*\n @input "Estimated creatinine clearance"\n @pseudocode: "Estimated creatinine clearance" ≥ 60 mL/min\n */\ndefine "Estimated creatinine clearance ≥ 60 mL/min":\n exists(\n Elements."Estimated creatinine clearance" O\n where FHIRHelpers.ToInteger(O.value) >= 60\n )\n\n/*\n @input "Estimated creatinine clearance"\n @pseudocode: "Estimated creatinine clearance" < 60 mL/min\n */\ndefine "Estimated creatinine clearance < 60 mL/min":\n exists(\n Elements."Estimated creatinine clearance" O\n where FHIRHelpers.ToInteger(O.value) < 60\n )\n\n/*\n @input "Acute HIV infection symptoms"\n @pseudocode: "Acute HIV infection symptoms"=False\n */\ndefine "No symptoms of Acute HIV infection":\n not(exists(\n Elements."Contraindications to PrEP usage" O\n where O.value ~ Concepts."Acute HIV infection symptoms - HIV.C.DE116"\n ))\n\n/*\n @input "Acute HIV infection symptoms"\n @pseudocode: "Acute HIV infection symptoms"=True\n */\ndefine "Symptoms of Acute HIV infection":\n exists(\n Elements."Contraindications to PrEP usage" O\n where O.value ~ Concepts."Acute HIV infection symptoms - HIV.C.DE116"\n )\n\n/*\n @input: "Probable recent exposure to HIV"\n @pseudocode: "Probable recent exposure to HIV"=False\n */\ndefine "No probable recent exposure to HIV":\n not(exists(\n Elements."Contraindications to PrEP usage" O\n where O.value ~ Concepts."Probable recent exposure to HIV"\n ))\n\n/*\n @input: "Probable recent exposure to HIV"\n @pseudocode: "Probable recent exposure to HIV"=True\n */\ndefine "Probable recent exposure to HIV":\n exists(\n Elements."Contraindications to PrEP usage" O\n where O.value ~ Concepts."Probable recent exposure to HIV"\n )\n\n/*\n @input: "Contraindications to PrEP usage"\n @pseudocode: "Contraindications to PrEP usage" is NULL\n */\ndefine "No contraindications to PrEP usage":\n not(exists(\n Elements."Contraindications to PrEP usage" O\n ))\n\n/*\n @input: "Contraindications to PrEP usage"\n @pseudocode: "Contraindications to PrEP usage" is NOT NULL\n */\ndefine "Contraindications to PrEP usage":\n exists(\n Elements."Contraindications to PrEP usage" O\n )\n\n/*\n @input: "Contraindications to PrEP usage"\n @pseudocode: "Contraindications to PrEP usage"='Tenofovir disoproxil fumarate (TDF)'\n */\ndefine "TDF allergy or contraindication":\n exists(\n Elements."Contraindications to PrEP usage" O\n where O.value ~ Concepts."Tenofovir disoproxil fumarate TDF allergy or contraindication"\n )\n\n/*\n @input: "HIV status of partner or contact"\n @pseudocode: "HIV status of partner or contact"='HIV-positive'\n */\ndefine "HIV status of partner or contact is positive":\n exists(\n Elements."HIV status of partner or contact" O\n where O.value ~ Concepts."HIV-positive"\n )\n\n/*\n @input: "Sex partner's HIV treatment status"\n @pseudocode: "Sex partner's HIV treatment status"='Partner is not virally suppressed'\n */\ndefine "Sex partner is on HIV treatment and not virally suppressed":\n exists(\n Elements."Sex partners HIV treatment status" O\n where O.value ~ Concepts."Partner is not virally suppressed"\n )\n\n/*\n @input: "Key population member"\n @pseudocode: "Key population member"=True\n */\ndefine "Is Key population member":\n Elements."Is Key population member B.DE49"\n\n /*\n @input: "Signs of substantial risk of HIV infection"\n @pseudocode: "HIV burden of the setting"='High HIV burden setting'\n */\ndefine "HIV burden of setting is high HIV burden setting":\n Config."HIV burden of setting" ~ Concepts."High HIV burden setting"\n\n/*\n @input: "Signs of substantial risk of HIV infection"\n @pseudocode: "Signs of substantial risk of HIV infection"='PrEP requested by client'\n */\ndefine "PrEP requested by client":\n exists(\n Elements."Signs of substantial risk of HIV infection C.DE36" O\n where O.value ~ Concepts."PrEP requested by client - HIV.C.DE40"\n )\n\n/*\n @input: "Signs of substantial risk of HIV infection"\n @pseudocode: "Signs of substantial risk of HIV infection"='A sexual partner in the past 6 months had one or more HIV risk factors'\n */\ndefine "A sexual partner in the past 6 months had one or more HIV risk factors":\n exists(\n Elements."Signs of substantial risk of HIV infection C.DE36" O\n where O.value ~ Concepts."A sexual partner in the past 6 months had one or more HIV risk factors - HIV.C.DE39"\n )\n\n/*\n @input: "Signs of substantial risk of HIV infection"\n @pseudocode: "Signs of substantial risk of HIV infection"='STI in the past 6 months'\n */\ndefine "STI in the past 6 months":\n exists(\n Elements."Signs of substantial risk of HIV infection C.DE36" O\n where O.value ~ Concepts."STI in the past 6 months - HIV.C.DE38"\n )\n\n/*\n @input: "Signs of substantial risk of HIV infection"\n @pseudocode: "Signs of substantial risk of HIV infection"='No condom use during sex with more than one partner in the past 6 months'\n */\ndefine "No condom use during sex with more than one partner in the past 6 months":\n exists(\n Elements."Signs of substantial risk of HIV infection C.DE36" O\n where O.value ~ Concepts."No condom use during sex with more than one partner in the past 6 months - HIV.C.DE37"\n )\n\n/*\n @input: "PEP history"\n @pseudocode: "PEP history"='Repeat user'\n */\ndefine "Repeat PEP user":\n exists(\n Elements."PEP history" O\n where O.value ~ Concepts."Repeat user"\n )\n\n/*\n @output "Suitable for PrEP"\n */\ndefine "Suitable for PrEP":\n case\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "PrEP requested by client"\n then true\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "HIV status of partner or contact is positive" and\n "Sex partner is on HIV treatment and not virally suppressed"\n then true\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "Is Key population member" and\n "PrEP requested by client"\n then true\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "Is Key population member" and\n "A sexual partner in the past 6 months had one or more HIV risk factors"\n then true\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "Is Key population member" and\n "STI in the past 6 months"\n then true\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "Is Key population member" and\n "Repeat PEP user"\n then true\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "Is Key population member" and\n "No condom use during sex with more than one partner in the past 6 months"\n then true\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "HIV burden of setting is high HIV burden setting" and\n "PrEP requested by client"\n then true\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "HIV burden of setting is high HIV burden setting" and\n "A sexual partner in the past 6 months had one or more HIV risk factors"\n then true\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "HIV burden of setting is high HIV burden setting" and\n "STI in the past 6 months"\n then true\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "HIV burden of setting is high HIV burden setting" and\n "Repeat PEP user"\n then true\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "HIV burden of setting is high HIV burden setting" and\n "No condom use during sex with more than one partner in the past 6 months"\n then true\n when "HIV negative or unknown" and\n "Symptoms of Acute HIV infection"\n then false\n when "HIV negative or unknown" and\n "Probable recent exposure to HIV"\n then false\n when "HIV negative" and\n "TDF allergy or contraindication"\n then false\n when "HIV negative" and\n "Contraindications to PrEP usage"\n then false\n when "HIV negative" and\n "Estimated creatinine clearance < 60 mL/min"\n then false\n else null\n end\n\ndefine "Not suitable for PrEP":\n not(IsNull("Suitable for PrEP")) and not("Suitable for PrEP")\n\n/*\n @dynamicValue: Guidance\n */\ndefine "Guidance":\n case\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "PrEP requested by client"\n then 'Counsel client on PrEP. Based on answers given, client is suitable for PrEP.'\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "HIV status of partner or contact is positive" and\n "Sex partner is on HIV treatment and not virally suppressed"\n then 'Counsel client on PrEP. Based on answers given, client is suitable for PrEP.\n\nPrEP can protect the HIV-negative partner in a serodiscordant relationship when the HIV-positive partner is either not on antiretroviral therapy (ART) or has not yet achieved viral suppression.'\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "Is Key population member" and\n "PrEP requested by client"\n then 'Counsel client on PrEP. Based on answers given, client is suitable for PrEP.'\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "Is Key population member" and\n "A sexual partner in the past 6 months had one or more HIV risk factors"\n then 'Counsel client on PrEP. Based on answers given, client is suitable for PrEP.\n\nPrEP services provide a unique opportunity to screen for hepatitis B and hepatitis C infection and thus address multiple public health issues. Hepatitis B is endemic in some parts of the world where there is also a high burden of HIV. Testing oral PrEP users for hepatitis B surface antigen (HBsAg) once, at PrEP initiation, is preferred and has several advantages in these settings. Rapid point-of-care tests are available for HBsAg, and WHO has prequalified several rapid diagnostic tests.'\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "Is Key population member" and\n "STI in the past 6 months"\n then 'Counsel client on PrEP. Based on answers given, client is suitable for PrEP.\n\nRecently diagnosed STIs are often indicators of risk of sexual acquisition of HIV. The predictive value of STI indicators varies by region, the type of STI and a person\\'s demographic characteristics. A new diagnosis of syphilis or genital herpes is a strong predictor of HIV risk among men who have sex with men in most settings and among heterosexual men and women in areas of high HIV prevalence. PrEP services should be prioritized; local epidemiology will be essential to guide decisions about when to offer PrEP and to which populations.'\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "Is Key population member" and\n "Repeat PEP user"\n then 'Counsel client on PrEP. Based on answers given, client is suitable for PrEP.\n\nPeople may be subject to ongoing high risk of exposure to HIV, leading to multiple prescriptions for PEP. In such situations, health-care providers should discuss with their clients the potential benefits of transitioning to HIV PrEP.'\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "Is Key population member" and\n "No condom use during sex with more than one partner in the past 6 months"\n then 'Counsel client on PrEP. Based on answers given, PrEP is suitable for client.\n\nInconsistent use of condoms (male or female), including an intention to use condoms during sex with some occasional omissions or accidents, increases HIV risk. Social desirability bias in reporting condom use may occur, so PrEP could be considered for people reporting any intercourse without a condom or concerns about their future use of condoms. For example, someone who reports a desire to stop using condoms may be already having sex without condoms.'\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "HIV burden of setting is high HIV burden setting" and\n "PrEP requested by client"\n then 'Counsel client on PrEP. Based on answers given, client is suitable for PrEP.'\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "HIV burden of setting is high HIV burden setting" and\n "A sexual partner in the past 6 months had one or more HIV risk factors"\n then 'Counsel client on PrEP. Based on answers given, client is suitable for PrEP.'\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "HIV burden of setting is high HIV burden setting" and\n "STI in the past 6 months"\n then 'Counsel client on PrEP. Based on answers given, PrEP is suitable for client.\n\nRecently diagnosed STIs are often indicators of risk of sexual acquisition of HIV. The predictive value of STI indicators varies by region, the type of STI and a person\\'s demographic characteristics. A new diagnosis of syphilis or genital herpes is a strong predictor of HIV risk among men who have sex with men in most settings and among heterosexual men and women in areas of high HIV prevalence. PrEP services should be prioritized; local epidemiology will be essential to guide decisions about when to offer PrEP and to which populations.'\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "HIV burden of setting is high HIV burden setting" and\n "Repeat PEP user"\n then 'Counsel client on PrEP. Based on answers given, client is suitable for PrEP.'\n when "HIV negative" and \n "Estimated creatinine clearance ≥ 60 mL/min" and\n "No symptoms of Acute HIV infection" and\n "No probable recent exposure to HIV" and\n "No contraindications to PrEP usage" and\n "HIV burden of setting is high HIV burden setting" and\n "No condom use during sex with more than one partner in the past 6 months"\n then 'Counsel client on PrEP. Based on answers given, client is suitable for PrEP.'\n when "HIV negative or unknown" and\n "Symptoms of Acute HIV infection"\n then 'Client is ineligible for PrEP based on answers given.'\n when "HIV negative or unknown" and\n "Probable recent exposure to HIV"\n then 'Client is ineligible for PrEP based on answers given. Counsel client on risk and prevention. \n\nIf the person has had a recent high-risk HIV exposure (such as within the past 72 hours) they can be offered PEP and transition to PrEP after the completion of PEP and following additional HIV testing.\n\nThe following types of exposure may warrant HIV PEP.\n• Body fluids: blood, blood-stained saliva, breast-milk, genital secretions; cerebrospinal, amniotic, peritoneal, synovial, pericardial or pleural fluids. Although these fluids carry a high risk of HIV infection, this list is not exhaustive. All cases should be assessed clinically, and the health care workers should decide whether the actual exposure constitutes a significant risk.\n• Types of exposure: (1) mucous membrane from sexual exposure; splashes to the eye, nose, or oral cavity and (2) parenteral exposures.\nExposure that does not require HIV PEP includes:\n• when the exposed individual is already HIV positive;\n• when the source is established to be HIV negative; and\n• exposure to bodily fluids that do not pose a significant risk: tears, non-blood-stained saliva, urine and sweat.\n\nPeople may be subject to ongoing high risk of exposure to HIV, leading to multiple prescriptions for PEP. In such situations, health-care providers should discuss with their clients the potential benefits of transitioning to HIV PrEP.'\n when "HIV negative" and\n "TDF allergy or contraindication"\n then 'Client is ineligible for PrEP based on answers given. Counsel client on risk and prevention.'\n when "HIV negative" and\n "Contraindications to PrEP usage"\n then 'Client is ineligible for PrEP based on answers given. Counsel client on risk and prevention.'\n when "HIV negative" and\n "Estimated creatinine clearance < 60 mL/min"\n then 'Client is ineligible for PrEP based on answers given. Counsel client on risk and prevention.\n\nMeasurement of kidney function will depend on age and comorbidities. See Table 2. of source: Suggested procedures for measuring kidney function for TDF-containing oral PrEP\n\nMeasuring kidney function is optional for those aged under 30 years without kidney-related comorbidities.\n\nIndividuals aged 30 years and older without comorbidities may be screened once, at or within one to three months of oral PrEP initiation. Depending on available resources, this can be considered optional for those aged 30–49 years, particularly those aged 30–39, given the low risk of kidney impairment.\n\nMore frequent screening (every 6–12 months) is suggested for individuals with comorbidities, those aged 50 years and older, and those with a previous kidney function test result suggesting at least a mild reduction in function (eGFR <90 mL/min per 1.73 m^2).\n\nWaiting for kidney function test results should not delay initiation or continuation of oral PrEP.'\n else null\n end\n</code></pre></td></tr>\n </table>\n </td>\n </tr>\n \n \n \n \n \n <tr>\n <td colspan=\"2\">\n <table>\n <tr><th><b>Content: </b> application/elm+xml</th></tr>\n <tr><td><pre><code/></pre></td></tr>\n </table>\n </td>\n </tr>\n \n \n </table>\n</div>\n</div>"
},
"extension" : [
{
"url" : "http://hl7.org/fhir/StructureDefinition/cqf-knowledgeCapability",
"valueCode" : "computable"
}
],
"url" : "http://smart.who.int/hiv/Library/HIVC7DTLogic",
"version" : "0.3.0",
"name" : "HIVC7DTLogic",
"title" : "HIV.C7.DT Logic",
"status" : "draft",
"experimental" : true,
"type" : {
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/library-type",
"code" : "logic-library"
}
]
},
"date" : "2025-01-02T00:27:00+00:00",
"publisher" : "WHO",
"contact" : [
{
"name" : "WHO",
"telecom" : [
{
"system" : "url",
"value" : "http://who.int"
}
]
}
],
"description" : "HIV.C7.DT Logic",
"content" : [
{
"contentType" : "text/cql",
"data" : "LyoqCkxpYnJhcnk6IEhJVi5DNy5EVCBMb2dpYwoKQERlY2lzaW9uSUQ6IEhJVi5DNy5EVApAQnVzaW5lc3NSdWxlOiBDaGVjayBzdWl0YWJpbGl0eSBmb3IgUHJFUCBvciBQRVAKQFRyaWdnZXI6IEhJVi5DNyBDaGVjayBzdWl0YWJpbGl0eSBmb3IgUHJFUCBvciBQRVAKQEhpdFBvbGljeTogUnVsZSBPcmRlcgpARGVzY3JpcHRpb246IENoZWNrIHN1aXRhYmlsaXR5IGZvciBQckVQIG9yIFBFUAoKRGF0YSBDb25jZXB0czoKICogSElWLkIuREU0OTogS2V5IHBvcHVsYXRpb24gbWVtYmVyIHwgQ2xpZW50IGlzIGEgbWVtYmVyIG9mIGEga2V5IHBvcHVsYXRpb24gdGhhdCBoYXMgYW4gaW5jcmVhc2VkIHJpc2sgb2YgSElWCiAqIEhJVi5CLkRFMTE1OiBISVYgc3RhdHVzIHwgSElWIHN0YXR1cyByZXBvcnRlZCBhZnRlciBhcHBseWluZyB0aGUgbmF0aW9uYWwgSElWIHRlc3RpbmcgYWxnb3JpdGhtLiBObyBzaW5nbGUgSElWIHRlc3QgY2FuIHByb3ZpZGUgYW4gSElWLXBvc2l0aXZlIGRpYWdub3Npcy4KICogSElWLkMuREUzMTogUEVQIGhpc3RvcnkgfCBUaGUgY2xpZW50J3MgaGlzdG9yeSBpbiB0YWtpbmcgcG9zdC1leHBvc3VyZSBwcm9waHlsYXhpcyAoUEVQKSBmb3IgSElWIHByZXZlbnRpb24KICogSElWLkMuREUzNjogU2lnbnMgb2Ygc3Vic3RhbnRpYWwgcmlzayBvZiBISVYgaW5mZWN0aW9uIHwgU2lnbnMgdGhlIGNsaWVudCBpcyBhdCBhIHN1YnN0YW50aWFsIHJpc2sgb2YgSElWIGluZmVjdGlvbgogKiBISVYuQy5ERTU1OiBTZXggcGFydG5lcnMgSElWIHRyZWF0bWVudCBzdGF0dXMgfCBUcmVhdG1lbnQgYWRoZXJlbmNlIG9mIGNsaWVudCdzIHNleCBwYXJ0bmVyIGZvciBwYXJ0bmVycyB0aGF0IGFyZSBISVYtcG9zaXRpdmUKICogSElWLkMuREUxMDY6IEVzdGltYXRlZCBjcmVhdGluaW5lIGNsZWFyYW5jZSB8IEVzdGltYXRlZCBjcmVhdGluaW5lIGNsZWFyYW5jZSBvZiB0aGUgY2xpZW50IHJldHVybmVkIGZyb20gbGFiIGluIG1ML21pbgogKiBISVYuQy5ERTExMjogQ29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSB8IExpc3Rpbmcgb2YgY29udHJhaW5kaWNhdGlvbnMgdG8gcHJlLWV4cG9zdXJlIHByb3BoeWxheGlzIChQckVQKQogKiBISVYuQy5ERTExNzogUHJvYmFibGUgcmVjZW50IGV4cG9zdXJlIHRvIEhJViB8IFdoZW4gdGhlIGNsaWVudCBpcyByZXBvcnRlZCB0byBoYXZlIGhhZCBwcm9iYWJsZSByZWNlbnQgZXhwb3N1cmUgdG8gSElWCiAqIEhJVi5Db25maWcuREUxMjogSElWIGJ1cmRlbiBvZiB0aGUgc2V0dGluZyB8IEhJViBidXJkZW4gb2YgdGhlIHNldHRpbmcgKGhpZ2ggb3IgbG93KSBiYXNlZCBvbiB0aGUgbmF0aW9uYWwgSElWIHByZXZhbGVuY2Ugb3Igd2hlcmUgdGhlIEhJViBwcmV2YWxlbmNlIGFuZC9vciBpbmNpZGVuY2UgaW4gYSBnZW9ncmFwaGljYWwgc2V0dGluZyBpcyBoaWdoZXIgdGhhbiBuYXRpb25hbCBwcmV2YWxlbmNlIGFuZCwgdGhlcmVmb3JlLCBuZWVkcyBwcmlvcml0eSBpbiB0aGUgSElWIHJlc3BvbnNlCiAqIEhJVi5ILkRFMzQ6IEhJViBzdGF0dXMgb2YgcGFydG5lciBvciBjb250YWN0IHwgSElWIHN0YXR1cyBvZiB0aGUgcGFydG5lciBvciBjb250YWN0IGdpdmVuIGJ5IHRoZSBpbmRleCBjYXNlCgpDb25zb2xpZGF0ZWQgZ3VpZGVsaW5lcyBvbiBISVYgcHJldmVudGlvbiwgdGVzdGluZywgdHJlYXRtZW50LCBzZXJ2aWNlIGRlbGl2ZXJ5IGFuZCBtb25pdG9yaW5nOiByZWNvbW1lbmRhdGlvbnMgZm9yIGEgcHVibGljIGhlYWx0aCBhcHByb2FjaCAoMjAyMSkgQ2hhcHRlciA1OiBBZHZhbmNlZCBISVYgRGlzZWFzZS4gRmlndXJlIDUuMTogQWxnb3JpdGhtIGZvciBwcm92aWRpbmcgYSBwYWNrYWdlIG9mIGNhcmUgZm9yIHBlb3BsZSB3aXRoIGFkdmFuY2VkIEhJViBkaXNlYXNlLgoqLwoKbGlicmFyeSBISVZDN0RUTG9naWMKIAp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBISVZDb21tb24gdmVyc2lvbiAnMC4wLjEnIGNhbGxlZCBISUMKaW5jbHVkZSBISVZDb25jZXB0cyBjYWxsZWQgQ29uY2VwdHMKaW5jbHVkZSBISVZDb25maWcgY2FsbGVkIENvbmZpZwppbmNsdWRlIEhJVkVuY291bnRlckVsZW1lbnRzIGNhbGxlZCBFbGVtZW50cwppbmNsdWRlIEZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBXSE9Db21tb24gY2FsbGVkIFdDb20KCi8qCiBAaW5wdXQgIkhJViBTdGF0dXMiCiBAcHNldWRvY29kZTogIkhJViBzdGF0dXMiPSdISVYtbmVnYXRpdmUnCiAqLwpkZWZpbmUgIkhJViBuZWdhdGl2ZSI6CiAgZXhpc3RzKAogICAgRWxlbWVudHMuIkhJViBTdGF0dXMgT2JzZXJ2YXRpb24iIE8KICAgICAgICB3aGVyZSBPLnZhbHVlIH4gQ29uY2VwdHMuIkhJVi1uZWdhdGl2ZSIKICApCgovKgogQGlucHV0ICJISVYgU3RhdHVzIgogQHBzZXVkb2NvZGU6ICJISVYgc3RhdHVzIj0nSElWLW5lZ2F0aXZlJwogKi8KZGVmaW5lICJISVYgbmVnYXRpdmUgb3IgdW5rbm93biI6CiAgZXhpc3RzKAogICAgRWxlbWVudHMuIkhJViBTdGF0dXMgT2JzZXJ2YXRpb24iIE8KICAgICAgICB3aGVyZSBPLnZhbHVlIH4gQ29uY2VwdHMuIkhJVi1uZWdhdGl2ZSIgb3IKICAgICAgICAgIE8udmFsdWUgfiBDb25jZXB0cy4iVW5rbm93biIKICApCgoKLyoKIEBpbnB1dCAiRXN0aW1hdGVkIGNyZWF0aW5pbmUgY2xlYXJhbmNlIgogQHBzZXVkb2NvZGU6ICJFc3RpbWF0ZWQgY3JlYXRpbmluZSBjbGVhcmFuY2UiIOKJpSA2MCBtTC9taW4KICovCmRlZmluZSAiRXN0aW1hdGVkIGNyZWF0aW5pbmUgY2xlYXJhbmNlIOKJpSA2MCBtTC9taW4iOgogIGV4aXN0cygKICAgIEVsZW1lbnRzLiJFc3RpbWF0ZWQgY3JlYXRpbmluZSBjbGVhcmFuY2UiIE8KICAgICAgd2hlcmUgRkhJUkhlbHBlcnMuVG9JbnRlZ2VyKE8udmFsdWUpID49IDYwCiAgKQoKLyoKIEBpbnB1dCAiRXN0aW1hdGVkIGNyZWF0aW5pbmUgY2xlYXJhbmNlIgogQHBzZXVkb2NvZGU6ICJFc3RpbWF0ZWQgY3JlYXRpbmluZSBjbGVhcmFuY2UiIDwgNjAgbUwvbWluCiAqLwpkZWZpbmUgIkVzdGltYXRlZCBjcmVhdGluaW5lIGNsZWFyYW5jZSA8IDYwIG1ML21pbiI6CiAgZXhpc3RzKAogICAgRWxlbWVudHMuIkVzdGltYXRlZCBjcmVhdGluaW5lIGNsZWFyYW5jZSIgTwogICAgICB3aGVyZSBGSElSSGVscGVycy5Ub0ludGVnZXIoTy52YWx1ZSkgPCA2MAogICkKCi8qCiBAaW5wdXQgIkFjdXRlIEhJViBpbmZlY3Rpb24gc3ltcHRvbXMiCiBAcHNldWRvY29kZTogIkFjdXRlIEhJViBpbmZlY3Rpb24gc3ltcHRvbXMiPUZhbHNlCiAqLwpkZWZpbmUgIk5vIHN5bXB0b21zIG9mIEFjdXRlIEhJViBpbmZlY3Rpb24iOgogIG5vdChleGlzdHMoCiAgICBFbGVtZW50cy4iQ29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSIgTwogICAgICB3aGVyZSBPLnZhbHVlIH4gQ29uY2VwdHMuIkFjdXRlIEhJViBpbmZlY3Rpb24gc3ltcHRvbXMgLSBISVYuQy5ERTExNiIKICApKQoKLyoKIEBpbnB1dCAiQWN1dGUgSElWIGluZmVjdGlvbiBzeW1wdG9tcyIKIEBwc2V1ZG9jb2RlOiAiQWN1dGUgSElWIGluZmVjdGlvbiBzeW1wdG9tcyI9VHJ1ZQogKi8KZGVmaW5lICJTeW1wdG9tcyBvZiBBY3V0ZSBISVYgaW5mZWN0aW9uIjoKICBleGlzdHMoCiAgICBFbGVtZW50cy4iQ29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSIgTwogICAgICB3aGVyZSBPLnZhbHVlIH4gQ29uY2VwdHMuIkFjdXRlIEhJViBpbmZlY3Rpb24gc3ltcHRvbXMgLSBISVYuQy5ERTExNiIKICApCgovKgogQGlucHV0OiAiUHJvYmFibGUgcmVjZW50IGV4cG9zdXJlIHRvIEhJViIKIEBwc2V1ZG9jb2RlOiAiUHJvYmFibGUgcmVjZW50IGV4cG9zdXJlIHRvIEhJViI9RmFsc2UKICovCmRlZmluZSAiTm8gcHJvYmFibGUgcmVjZW50IGV4cG9zdXJlIHRvIEhJViI6CiAgbm90KGV4aXN0cygKICAgIEVsZW1lbnRzLiJDb250cmFpbmRpY2F0aW9ucyB0byBQckVQIHVzYWdlIiBPCiAgICAgIHdoZXJlIE8udmFsdWUgfiBDb25jZXB0cy4iUHJvYmFibGUgcmVjZW50IGV4cG9zdXJlIHRvIEhJViIKICApKQoKLyoKIEBpbnB1dDogIlByb2JhYmxlIHJlY2VudCBleHBvc3VyZSB0byBISVYiCiBAcHNldWRvY29kZTogIlByb2JhYmxlIHJlY2VudCBleHBvc3VyZSB0byBISVYiPVRydWUKICovCmRlZmluZSAiUHJvYmFibGUgcmVjZW50IGV4cG9zdXJlIHRvIEhJViI6CiAgZXhpc3RzKAogICAgRWxlbWVudHMuIkNvbnRyYWluZGljYXRpb25zIHRvIFByRVAgdXNhZ2UiIE8KICAgICAgd2hlcmUgTy52YWx1ZSB+IENvbmNlcHRzLiJQcm9iYWJsZSByZWNlbnQgZXhwb3N1cmUgdG8gSElWIgogICkKCi8qCiBAaW5wdXQ6ICJDb250cmFpbmRpY2F0aW9ucyB0byBQckVQIHVzYWdlIgogQHBzZXVkb2NvZGU6ICJDb250cmFpbmRpY2F0aW9ucyB0byBQckVQIHVzYWdlIiBpcyBOVUxMCiAqLwpkZWZpbmUgIk5vIGNvbnRyYWluZGljYXRpb25zIHRvIFByRVAgdXNhZ2UiOgogIG5vdChleGlzdHMoCiAgICBFbGVtZW50cy4iQ29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSIgTwogICkpCgovKgogQGlucHV0OiAiQ29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSIKIEBwc2V1ZG9jb2RlOiAiQ29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSIgaXMgTk9UIE5VTEwKICovCmRlZmluZSAiQ29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSI6CiAgZXhpc3RzKAogICAgRWxlbWVudHMuIkNvbnRyYWluZGljYXRpb25zIHRvIFByRVAgdXNhZ2UiIE8KICApCgovKgogQGlucHV0OiAiQ29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSIKIEBwc2V1ZG9jb2RlOiAiQ29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSI9J1Rlbm9mb3ZpciBkaXNvcHJveGlsIGZ1bWFyYXRlIChUREYpJwogKi8KZGVmaW5lICJUREYgYWxsZXJneSBvciBjb250cmFpbmRpY2F0aW9uIjoKICBleGlzdHMoCiAgICBFbGVtZW50cy4iQ29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSIgTwogICAgICB3aGVyZSBPLnZhbHVlIH4gQ29uY2VwdHMuIlRlbm9mb3ZpciBkaXNvcHJveGlsIGZ1bWFyYXRlIFRERiBhbGxlcmd5IG9yIGNvbnRyYWluZGljYXRpb24iCiAgKQoKLyoKIEBpbnB1dDogIkhJViBzdGF0dXMgb2YgcGFydG5lciBvciBjb250YWN0IgogQHBzZXVkb2NvZGU6ICJISVYgc3RhdHVzIG9mIHBhcnRuZXIgb3IgY29udGFjdCI9J0hJVi1wb3NpdGl2ZScKICovCmRlZmluZSAiSElWIHN0YXR1cyBvZiBwYXJ0bmVyIG9yIGNvbnRhY3QgaXMgcG9zaXRpdmUiOgogIGV4aXN0cygKICAgIEVsZW1lbnRzLiJISVYgc3RhdHVzIG9mIHBhcnRuZXIgb3IgY29udGFjdCIgTwogICAgICB3aGVyZSBPLnZhbHVlIH4gQ29uY2VwdHMuIkhJVi1wb3NpdGl2ZSIKICApCgovKgogQGlucHV0OiAiU2V4IHBhcnRuZXIncyBISVYgdHJlYXRtZW50IHN0YXR1cyIKIEBwc2V1ZG9jb2RlOiAiU2V4IHBhcnRuZXIncyBISVYgdHJlYXRtZW50IHN0YXR1cyI9J1BhcnRuZXIgaXMgbm90IHZpcmFsbHkgc3VwcHJlc3NlZCcKICovCmRlZmluZSAiU2V4IHBhcnRuZXIgaXMgb24gSElWIHRyZWF0bWVudCBhbmQgbm90IHZpcmFsbHkgc3VwcHJlc3NlZCI6CiAgZXhpc3RzKAogICAgRWxlbWVudHMuIlNleCBwYXJ0bmVycyBISVYgdHJlYXRtZW50IHN0YXR1cyIgTwogICAgICB3aGVyZSBPLnZhbHVlIH4gQ29uY2VwdHMuIlBhcnRuZXIgaXMgbm90IHZpcmFsbHkgc3VwcHJlc3NlZCIKICApCgovKgogQGlucHV0OiAiS2V5IHBvcHVsYXRpb24gbWVtYmVyIgogQHBzZXVkb2NvZGU6ICJLZXkgcG9wdWxhdGlvbiBtZW1iZXIiPVRydWUKICovCmRlZmluZSAiSXMgS2V5IHBvcHVsYXRpb24gbWVtYmVyIjoKICBFbGVtZW50cy4iSXMgS2V5IHBvcHVsYXRpb24gbWVtYmVyIEIuREU0OSIKCiAvKgogIEBpbnB1dDogIlNpZ25zIG9mIHN1YnN0YW50aWFsIHJpc2sgb2YgSElWIGluZmVjdGlvbiIKICBAcHNldWRvY29kZTogIkhJViBidXJkZW4gb2YgdGhlIHNldHRpbmciPSdIaWdoIEhJViBidXJkZW4gc2V0dGluZycKICAqLwpkZWZpbmUgIkhJViBidXJkZW4gb2Ygc2V0dGluZyBpcyBoaWdoIEhJViBidXJkZW4gc2V0dGluZyI6CiAgQ29uZmlnLiJISVYgYnVyZGVuIG9mIHNldHRpbmciIH4gQ29uY2VwdHMuIkhpZ2ggSElWIGJ1cmRlbiBzZXR0aW5nIgoKLyoKIEBpbnB1dDogIlNpZ25zIG9mIHN1YnN0YW50aWFsIHJpc2sgb2YgSElWIGluZmVjdGlvbiIKIEBwc2V1ZG9jb2RlOiAiU2lnbnMgb2Ygc3Vic3RhbnRpYWwgcmlzayBvZiBISVYgaW5mZWN0aW9uIj0nUHJFUCByZXF1ZXN0ZWQgYnkgY2xpZW50JwogKi8KZGVmaW5lICJQckVQIHJlcXVlc3RlZCBieSBjbGllbnQiOgogIGV4aXN0cygKICAgIEVsZW1lbnRzLiJTaWducyBvZiBzdWJzdGFudGlhbCByaXNrIG9mIEhJViBpbmZlY3Rpb24gQy5ERTM2IiBPCiAgICAgIHdoZXJlIE8udmFsdWUgfiBDb25jZXB0cy4iUHJFUCByZXF1ZXN0ZWQgYnkgY2xpZW50IC0gSElWLkMuREU0MCIKICApCgovKgogQGlucHV0OiAiU2lnbnMgb2Ygc3Vic3RhbnRpYWwgcmlzayBvZiBISVYgaW5mZWN0aW9uIgogQHBzZXVkb2NvZGU6ICJTaWducyBvZiBzdWJzdGFudGlhbCByaXNrIG9mIEhJViBpbmZlY3Rpb24iPSdBIHNleHVhbCBwYXJ0bmVyIGluIHRoZSBwYXN0IDYgbW9udGhzIGhhZCBvbmUgb3IgbW9yZSBISVYgcmlzayBmYWN0b3JzJwogKi8KZGVmaW5lICJBIHNleHVhbCBwYXJ0bmVyIGluIHRoZSBwYXN0IDYgbW9udGhzIGhhZCBvbmUgb3IgbW9yZSBISVYgcmlzayBmYWN0b3JzIjoKICBleGlzdHMoCiAgICBFbGVtZW50cy4iU2lnbnMgb2Ygc3Vic3RhbnRpYWwgcmlzayBvZiBISVYgaW5mZWN0aW9uIEMuREUzNiIgTwogICAgICB3aGVyZSBPLnZhbHVlIH4gQ29uY2VwdHMuIkEgc2V4dWFsIHBhcnRuZXIgaW4gdGhlIHBhc3QgNiBtb250aHMgaGFkIG9uZSBvciBtb3JlIEhJViByaXNrIGZhY3RvcnMgLSBISVYuQy5ERTM5IgogICkKCi8qCiBAaW5wdXQ6ICJTaWducyBvZiBzdWJzdGFudGlhbCByaXNrIG9mIEhJViBpbmZlY3Rpb24iCiBAcHNldWRvY29kZTogIlNpZ25zIG9mIHN1YnN0YW50aWFsIHJpc2sgb2YgSElWIGluZmVjdGlvbiI9J1NUSSBpbiB0aGUgcGFzdCA2IG1vbnRocycKICovCmRlZmluZSAiU1RJIGluIHRoZSBwYXN0IDYgbW9udGhzIjoKICBleGlzdHMoCiAgICBFbGVtZW50cy4iU2lnbnMgb2Ygc3Vic3RhbnRpYWwgcmlzayBvZiBISVYgaW5mZWN0aW9uIEMuREUzNiIgTwogICAgICB3aGVyZSBPLnZhbHVlIH4gQ29uY2VwdHMuIlNUSSBpbiB0aGUgcGFzdCA2IG1vbnRocyAtIEhJVi5DLkRFMzgiCiAgKQoKLyoKIEBpbnB1dDogIlNpZ25zIG9mIHN1YnN0YW50aWFsIHJpc2sgb2YgSElWIGluZmVjdGlvbiIKIEBwc2V1ZG9jb2RlOiAiU2lnbnMgb2Ygc3Vic3RhbnRpYWwgcmlzayBvZiBISVYgaW5mZWN0aW9uIj0nTm8gY29uZG9tIHVzZSBkdXJpbmcgc2V4IHdpdGggbW9yZSB0aGFuIG9uZSBwYXJ0bmVyIGluIHRoZSBwYXN0IDYgbW9udGhzJwogKi8KZGVmaW5lICJObyBjb25kb20gdXNlIGR1cmluZyBzZXggd2l0aCBtb3JlIHRoYW4gb25lIHBhcnRuZXIgaW4gdGhlIHBhc3QgNiBtb250aHMiOgogIGV4aXN0cygKICAgIEVsZW1lbnRzLiJTaWducyBvZiBzdWJzdGFudGlhbCByaXNrIG9mIEhJViBpbmZlY3Rpb24gQy5ERTM2IiBPCiAgICAgIHdoZXJlIE8udmFsdWUgfiBDb25jZXB0cy4iTm8gY29uZG9tIHVzZSBkdXJpbmcgc2V4IHdpdGggbW9yZSB0aGFuIG9uZSBwYXJ0bmVyIGluIHRoZSBwYXN0IDYgbW9udGhzIC0gSElWLkMuREUzNyIKICApCgovKgogQGlucHV0OiAiUEVQIGhpc3RvcnkiCiBAcHNldWRvY29kZTogIlBFUCBoaXN0b3J5Ij0nUmVwZWF0IHVzZXInCiAqLwpkZWZpbmUgIlJlcGVhdCBQRVAgdXNlciI6CiAgZXhpc3RzKAogICAgRWxlbWVudHMuIlBFUCBoaXN0b3J5IiBPCiAgICAgIHdoZXJlIE8udmFsdWUgfiBDb25jZXB0cy4iUmVwZWF0IHVzZXIiCiAgKQoKLyoKIEBvdXRwdXQgIlN1aXRhYmxlIGZvciBQckVQIgogKi8KZGVmaW5lICJTdWl0YWJsZSBmb3IgUHJFUCI6CiAgY2FzZQogICAgd2hlbiAiSElWIG5lZ2F0aXZlIiBhbmQgCiAgICAgICAgICJFc3RpbWF0ZWQgY3JlYXRpbmluZSBjbGVhcmFuY2Ug4omlIDYwIG1ML21pbiIgYW5kCiAgICAgICAgICJObyBzeW1wdG9tcyBvZiBBY3V0ZSBISVYgaW5mZWN0aW9uIiBhbmQKICAgICAgICAgIk5vIHByb2JhYmxlIHJlY2VudCBleHBvc3VyZSB0byBISVYiIGFuZAogICAgICAgICAiTm8gY29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSIgYW5kCiAgICAgICAgICJQckVQIHJlcXVlc3RlZCBieSBjbGllbnQiCiAgICAgIHRoZW4gdHJ1ZQogICAgd2hlbiAiSElWIG5lZ2F0aXZlIiBhbmQgCiAgICAgICAgICJFc3RpbWF0ZWQgY3JlYXRpbmluZSBjbGVhcmFuY2Ug4omlIDYwIG1ML21pbiIgYW5kCiAgICAgICAgICJObyBzeW1wdG9tcyBvZiBBY3V0ZSBISVYgaW5mZWN0aW9uIiBhbmQKICAgICAgICAgIk5vIHByb2JhYmxlIHJlY2VudCBleHBvc3VyZSB0byBISVYiIGFuZAogICAgICAgICAiTm8gY29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSIgYW5kCiAgICAgICAgICJISVYgc3RhdHVzIG9mIHBhcnRuZXIgb3IgY29udGFjdCBpcyBwb3NpdGl2ZSIgYW5kCiAgICAgICAgICJTZXggcGFydG5lciBpcyBvbiBISVYgdHJlYXRtZW50IGFuZCBub3QgdmlyYWxseSBzdXBwcmVzc2VkIgogICAgICB0aGVuIHRydWUKICAgIHdoZW4gIkhJViBuZWdhdGl2ZSIgYW5kIAogICAgICAgICAiRXN0aW1hdGVkIGNyZWF0aW5pbmUgY2xlYXJhbmNlIOKJpSA2MCBtTC9taW4iIGFuZAogICAgICAgICAiTm8gc3ltcHRvbXMgb2YgQWN1dGUgSElWIGluZmVjdGlvbiIgYW5kCiAgICAgICAgICJObyBwcm9iYWJsZSByZWNlbnQgZXhwb3N1cmUgdG8gSElWIiBhbmQKICAgICAgICAgIk5vIGNvbnRyYWluZGljYXRpb25zIHRvIFByRVAgdXNhZ2UiIGFuZAogICAgICAgICAiSXMgS2V5IHBvcHVsYXRpb24gbWVtYmVyIiBhbmQKICAgICAgICAgIlByRVAgcmVxdWVzdGVkIGJ5IGNsaWVudCIKICAgICAgdGhlbiB0cnVlCiAgICB3aGVuICJISVYgbmVnYXRpdmUiIGFuZCAKICAgICAgICAgIkVzdGltYXRlZCBjcmVhdGluaW5lIGNsZWFyYW5jZSDiiaUgNjAgbUwvbWluIiBhbmQKICAgICAgICAgIk5vIHN5bXB0b21zIG9mIEFjdXRlIEhJViBpbmZlY3Rpb24iIGFuZAogICAgICAgICAiTm8gcHJvYmFibGUgcmVjZW50IGV4cG9zdXJlIHRvIEhJViIgYW5kCiAgICAgICAgICJObyBjb250cmFpbmRpY2F0aW9ucyB0byBQckVQIHVzYWdlIiBhbmQKICAgICAgICAgIklzIEtleSBwb3B1bGF0aW9uIG1lbWJlciIgYW5kCiAgICAgICAgICJBIHNleHVhbCBwYXJ0bmVyIGluIHRoZSBwYXN0IDYgbW9udGhzIGhhZCBvbmUgb3IgbW9yZSBISVYgcmlzayBmYWN0b3JzIgogICAgICB0aGVuIHRydWUKICAgIHdoZW4gIkhJViBuZWdhdGl2ZSIgYW5kIAogICAgICAgICAiRXN0aW1hdGVkIGNyZWF0aW5pbmUgY2xlYXJhbmNlIOKJpSA2MCBtTC9taW4iIGFuZAogICAgICAgICAiTm8gc3ltcHRvbXMgb2YgQWN1dGUgSElWIGluZmVjdGlvbiIgYW5kCiAgICAgICAgICJObyBwcm9iYWJsZSByZWNlbnQgZXhwb3N1cmUgdG8gSElWIiBhbmQKICAgICAgICAgIk5vIGNvbnRyYWluZGljYXRpb25zIHRvIFByRVAgdXNhZ2UiIGFuZAogICAgICAgICAiSXMgS2V5IHBvcHVsYXRpb24gbWVtYmVyIiBhbmQKICAgICAgICAgIlNUSSBpbiB0aGUgcGFzdCA2IG1vbnRocyIKICAgICAgdGhlbiB0cnVlCiAgICB3aGVuICJISVYgbmVnYXRpdmUiIGFuZCAKICAgICAgICAgIkVzdGltYXRlZCBjcmVhdGluaW5lIGNsZWFyYW5jZSDiiaUgNjAgbUwvbWluIiBhbmQKICAgICAgICAgIk5vIHN5bXB0b21zIG9mIEFjdXRlIEhJViBpbmZlY3Rpb24iIGFuZAogICAgICAgICAiTm8gcHJvYmFibGUgcmVjZW50IGV4cG9zdXJlIHRvIEhJViIgYW5kCiAgICAgICAgICJObyBjb250cmFpbmRpY2F0aW9ucyB0byBQckVQIHVzYWdlIiBhbmQKICAgICAgICAgIklzIEtleSBwb3B1bGF0aW9uIG1lbWJlciIgYW5kCiAgICAgICAgICJSZXBlYXQgUEVQIHVzZXIiCiAgICAgIHRoZW4gdHJ1ZQogICAgd2hlbiAiSElWIG5lZ2F0aXZlIiBhbmQgCiAgICAgICAgICJFc3RpbWF0ZWQgY3JlYXRpbmluZSBjbGVhcmFuY2Ug4omlIDYwIG1ML21pbiIgYW5kCiAgICAgICAgICJObyBzeW1wdG9tcyBvZiBBY3V0ZSBISVYgaW5mZWN0aW9uIiBhbmQKICAgICAgICAgIk5vIHByb2JhYmxlIHJlY2VudCBleHBvc3VyZSB0byBISVYiIGFuZAogICAgICAgICAiTm8gY29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSIgYW5kCiAgICAgICAgICJJcyBLZXkgcG9wdWxhdGlvbiBtZW1iZXIiIGFuZAogICAgICAgICAiTm8gY29uZG9tIHVzZSBkdXJpbmcgc2V4IHdpdGggbW9yZSB0aGFuIG9uZSBwYXJ0bmVyIGluIHRoZSBwYXN0IDYgbW9udGhzIgogICAgICB0aGVuIHRydWUKICAgIHdoZW4gIkhJViBuZWdhdGl2ZSIgYW5kIAogICAgICAgICAiRXN0aW1hdGVkIGNyZWF0aW5pbmUgY2xlYXJhbmNlIOKJpSA2MCBtTC9taW4iIGFuZAogICAgICAgICAiTm8gc3ltcHRvbXMgb2YgQWN1dGUgSElWIGluZmVjdGlvbiIgYW5kCiAgICAgICAgICJObyBwcm9iYWJsZSByZWNlbnQgZXhwb3N1cmUgdG8gSElWIiBhbmQKICAgICAgICAgIk5vIGNvbnRyYWluZGljYXRpb25zIHRvIFByRVAgdXNhZ2UiIGFuZAogICAgICAgICAiSElWIGJ1cmRlbiBvZiBzZXR0aW5nIGlzIGhpZ2ggSElWIGJ1cmRlbiBzZXR0aW5nIiBhbmQKICAgICAgICAgIlByRVAgcmVxdWVzdGVkIGJ5IGNsaWVudCIKICAgICAgdGhlbiB0cnVlCiAgICB3aGVuICJISVYgbmVnYXRpdmUiIGFuZCAKICAgICAgICAgIkVzdGltYXRlZCBjcmVhdGluaW5lIGNsZWFyYW5jZSDiiaUgNjAgbUwvbWluIiBhbmQKICAgICAgICAgIk5vIHN5bXB0b21zIG9mIEFjdXRlIEhJViBpbmZlY3Rpb24iIGFuZAogICAgICAgICAiTm8gcHJvYmFibGUgcmVjZW50IGV4cG9zdXJlIHRvIEhJViIgYW5kCiAgICAgICAgICJObyBjb250cmFpbmRpY2F0aW9ucyB0byBQckVQIHVzYWdlIiBhbmQKICAgICAgICAgIkhJViBidXJkZW4gb2Ygc2V0dGluZyBpcyBoaWdoIEhJViBidXJkZW4gc2V0dGluZyIgYW5kCiAgICAgICAgICJBIHNleHVhbCBwYXJ0bmVyIGluIHRoZSBwYXN0IDYgbW9udGhzIGhhZCBvbmUgb3IgbW9yZSBISVYgcmlzayBmYWN0b3JzIgogICAgICB0aGVuIHRydWUKICAgIHdoZW4gIkhJViBuZWdhdGl2ZSIgYW5kIAogICAgICAgICAiRXN0aW1hdGVkIGNyZWF0aW5pbmUgY2xlYXJhbmNlIOKJpSA2MCBtTC9taW4iIGFuZAogICAgICAgICAiTm8gc3ltcHRvbXMgb2YgQWN1dGUgSElWIGluZmVjdGlvbiIgYW5kCiAgICAgICAgICJObyBwcm9iYWJsZSByZWNlbnQgZXhwb3N1cmUgdG8gSElWIiBhbmQKICAgICAgICAgIk5vIGNvbnRyYWluZGljYXRpb25zIHRvIFByRVAgdXNhZ2UiIGFuZAogICAgICAgICAiSElWIGJ1cmRlbiBvZiBzZXR0aW5nIGlzIGhpZ2ggSElWIGJ1cmRlbiBzZXR0aW5nIiBhbmQKICAgICAgICAgIlNUSSBpbiB0aGUgcGFzdCA2IG1vbnRocyIKICAgICAgdGhlbiB0cnVlCiAgICB3aGVuICJISVYgbmVnYXRpdmUiIGFuZCAKICAgICAgICAgIkVzdGltYXRlZCBjcmVhdGluaW5lIGNsZWFyYW5jZSDiiaUgNjAgbUwvbWluIiBhbmQKICAgICAgICAgIk5vIHN5bXB0b21zIG9mIEFjdXRlIEhJViBpbmZlY3Rpb24iIGFuZAogICAgICAgICAiTm8gcHJvYmFibGUgcmVjZW50IGV4cG9zdXJlIHRvIEhJViIgYW5kCiAgICAgICAgICJObyBjb250cmFpbmRpY2F0aW9ucyB0byBQckVQIHVzYWdlIiBhbmQKICAgICAgICAgIkhJViBidXJkZW4gb2Ygc2V0dGluZyBpcyBoaWdoIEhJViBidXJkZW4gc2V0dGluZyIgYW5kCiAgICAgICAgICJSZXBlYXQgUEVQIHVzZXIiCiAgICAgIHRoZW4gdHJ1ZQogICAgd2hlbiAiSElWIG5lZ2F0aXZlIiBhbmQgCiAgICAgICAgICJFc3RpbWF0ZWQgY3JlYXRpbmluZSBjbGVhcmFuY2Ug4omlIDYwIG1ML21pbiIgYW5kCiAgICAgICAgICJObyBzeW1wdG9tcyBvZiBBY3V0ZSBISVYgaW5mZWN0aW9uIiBhbmQKICAgICAgICAgIk5vIHByb2JhYmxlIHJlY2VudCBleHBvc3VyZSB0byBISVYiIGFuZAogICAgICAgICAiTm8gY29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSIgYW5kCiAgICAgICAgICJISVYgYnVyZGVuIG9mIHNldHRpbmcgaXMgaGlnaCBISVYgYnVyZGVuIHNldHRpbmciIGFuZAogICAgICAgICAiTm8gY29uZG9tIHVzZSBkdXJpbmcgc2V4IHdpdGggbW9yZSB0aGFuIG9uZSBwYXJ0bmVyIGluIHRoZSBwYXN0IDYgbW9udGhzIgogICAgICB0aGVuIHRydWUKICAgIHdoZW4gIkhJViBuZWdhdGl2ZSBvciB1bmtub3duIiBhbmQKICAgICAgICAgIlN5bXB0b21zIG9mIEFjdXRlIEhJViBpbmZlY3Rpb24iCiAgICAgIHRoZW4gZmFsc2UKICAgIHdoZW4gIkhJViBuZWdhdGl2ZSBvciB1bmtub3duIiBhbmQKICAgICAgICAgIlByb2JhYmxlIHJlY2VudCBleHBvc3VyZSB0byBISVYiCiAgICAgIHRoZW4gZmFsc2UKICAgIHdoZW4gIkhJViBuZWdhdGl2ZSIgYW5kCiAgICAgICAgICJUREYgYWxsZXJneSBvciBjb250cmFpbmRpY2F0aW9uIgogICAgICB0aGVuIGZhbHNlCiAgICB3aGVuICJISVYgbmVnYXRpdmUiIGFuZAogICAgICAgICAiQ29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSIKICAgICAgdGhlbiBmYWxzZQogICAgd2hlbiAiSElWIG5lZ2F0aXZlIiBhbmQKICAgICAgICAgIkVzdGltYXRlZCBjcmVhdGluaW5lIGNsZWFyYW5jZSA8IDYwIG1ML21pbiIKICAgICAgdGhlbiBmYWxzZQogICAgZWxzZSBudWxsCiAgZW5kCgpkZWZpbmUgIk5vdCBzdWl0YWJsZSBmb3IgUHJFUCI6CiAgbm90KElzTnVsbCgiU3VpdGFibGUgZm9yIFByRVAiKSkgYW5kIG5vdCgiU3VpdGFibGUgZm9yIFByRVAiKQoKLyoKIEBkeW5hbWljVmFsdWU6IEd1aWRhbmNlCiAqLwpkZWZpbmUgIkd1aWRhbmNlIjoKICBjYXNlCiAgICB3aGVuICJISVYgbmVnYXRpdmUiIGFuZCAKICAgICAgICAgIkVzdGltYXRlZCBjcmVhdGluaW5lIGNsZWFyYW5jZSDiiaUgNjAgbUwvbWluIiBhbmQKICAgICAgICAgIk5vIHN5bXB0b21zIG9mIEFjdXRlIEhJViBpbmZlY3Rpb24iIGFuZAogICAgICAgICAiTm8gcHJvYmFibGUgcmVjZW50IGV4cG9zdXJlIHRvIEhJViIgYW5kCiAgICAgICAgICJObyBjb250cmFpbmRpY2F0aW9ucyB0byBQckVQIHVzYWdlIiBhbmQKICAgICAgICAgIlByRVAgcmVxdWVzdGVkIGJ5IGNsaWVudCIKICAgICAgdGhlbiAnQ291bnNlbCBjbGllbnQgb24gUHJFUC4gQmFzZWQgb24gYW5zd2VycyBnaXZlbiwgY2xpZW50IGlzIHN1aXRhYmxlIGZvciBQckVQLicKICAgIHdoZW4gIkhJViBuZWdhdGl2ZSIgYW5kIAogICAgICAgICAiRXN0aW1hdGVkIGNyZWF0aW5pbmUgY2xlYXJhbmNlIOKJpSA2MCBtTC9taW4iIGFuZAogICAgICAgICAiTm8gc3ltcHRvbXMgb2YgQWN1dGUgSElWIGluZmVjdGlvbiIgYW5kCiAgICAgICAgICJObyBwcm9iYWJsZSByZWNlbnQgZXhwb3N1cmUgdG8gSElWIiBhbmQKICAgICAgICAgIk5vIGNvbnRyYWluZGljYXRpb25zIHRvIFByRVAgdXNhZ2UiIGFuZAogICAgICAgICAiSElWIHN0YXR1cyBvZiBwYXJ0bmVyIG9yIGNvbnRhY3QgaXMgcG9zaXRpdmUiIGFuZAogICAgICAgICAiU2V4IHBhcnRuZXIgaXMgb24gSElWIHRyZWF0bWVudCBhbmQgbm90IHZpcmFsbHkgc3VwcHJlc3NlZCIKICAgICAgdGhlbiAnQ291bnNlbCBjbGllbnQgb24gUHJFUC4gQmFzZWQgb24gYW5zd2VycyBnaXZlbiwgY2xpZW50IGlzIHN1aXRhYmxlIGZvciBQckVQLgoKUHJFUCBjYW4gcHJvdGVjdCB0aGUgSElWLW5lZ2F0aXZlIHBhcnRuZXIgaW4gYSBzZXJvZGlzY29yZGFudCByZWxhdGlvbnNoaXAgd2hlbiB0aGUgSElWLXBvc2l0aXZlIHBhcnRuZXIgaXMgZWl0aGVyIG5vdCBvbiBhbnRpcmV0cm92aXJhbCB0aGVyYXB5IChBUlQpIG9yIGhhcyBub3QgeWV0IGFjaGlldmVkIHZpcmFsIHN1cHByZXNzaW9uLicKICAgIHdoZW4gIkhJViBuZWdhdGl2ZSIgYW5kIAogICAgICAgICAiRXN0aW1hdGVkIGNyZWF0aW5pbmUgY2xlYXJhbmNlIOKJpSA2MCBtTC9taW4iIGFuZAogICAgICAgICAiTm8gc3ltcHRvbXMgb2YgQWN1dGUgSElWIGluZmVjdGlvbiIgYW5kCiAgICAgICAgICJObyBwcm9iYWJsZSByZWNlbnQgZXhwb3N1cmUgdG8gSElWIiBhbmQKICAgICAgICAgIk5vIGNvbnRyYWluZGljYXRpb25zIHRvIFByRVAgdXNhZ2UiIGFuZAogICAgICAgICAiSXMgS2V5IHBvcHVsYXRpb24gbWVtYmVyIiBhbmQKICAgICAgICAgIlByRVAgcmVxdWVzdGVkIGJ5IGNsaWVudCIKICAgICAgdGhlbiAnQ291bnNlbCBjbGllbnQgb24gUHJFUC4gQmFzZWQgb24gYW5zd2VycyBnaXZlbiwgY2xpZW50IGlzIHN1aXRhYmxlIGZvciBQckVQLicKICAgIHdoZW4gIkhJViBuZWdhdGl2ZSIgYW5kIAogICAgICAgICAiRXN0aW1hdGVkIGNyZWF0aW5pbmUgY2xlYXJhbmNlIOKJpSA2MCBtTC9taW4iIGFuZAogICAgICAgICAiTm8gc3ltcHRvbXMgb2YgQWN1dGUgSElWIGluZmVjdGlvbiIgYW5kCiAgICAgICAgICJObyBwcm9iYWJsZSByZWNlbnQgZXhwb3N1cmUgdG8gSElWIiBhbmQKICAgICAgICAgIk5vIGNvbnRyYWluZGljYXRpb25zIHRvIFByRVAgdXNhZ2UiIGFuZAogICAgICAgICAiSXMgS2V5IHBvcHVsYXRpb24gbWVtYmVyIiBhbmQKICAgICAgICAgIkEgc2V4dWFsIHBhcnRuZXIgaW4gdGhlIHBhc3QgNiBtb250aHMgaGFkIG9uZSBvciBtb3JlIEhJViByaXNrIGZhY3RvcnMiCiAgICAgIHRoZW4gJ0NvdW5zZWwgY2xpZW50IG9uIFByRVAuIEJhc2VkIG9uIGFuc3dlcnMgZ2l2ZW4sIGNsaWVudCBpcyBzdWl0YWJsZSBmb3IgUHJFUC4KClByRVAgc2VydmljZXMgcHJvdmlkZSBhIHVuaXF1ZSBvcHBvcnR1bml0eSB0byBzY3JlZW4gZm9yIGhlcGF0aXRpcyBCIGFuZCBoZXBhdGl0aXMgQyBpbmZlY3Rpb24gYW5kIHRodXMgYWRkcmVzcyBtdWx0aXBsZSBwdWJsaWMgaGVhbHRoIGlzc3Vlcy4gSGVwYXRpdGlzIEIgaXMgZW5kZW1pYyBpbiBzb21lIHBhcnRzIG9mIHRoZSB3b3JsZCB3aGVyZSB0aGVyZSBpcyBhbHNvIGEgaGlnaCBidXJkZW4gb2YgSElWLiBUZXN0aW5nIG9yYWwgUHJFUCB1c2VycyBmb3IgaGVwYXRpdGlzIEIgc3VyZmFjZSBhbnRpZ2VuIChIQnNBZykgb25jZSwgYXQgUHJFUCBpbml0aWF0aW9uLCBpcyBwcmVmZXJyZWQgYW5kIGhhcyBzZXZlcmFsIGFkdmFudGFnZXMgaW4gdGhlc2Ugc2V0dGluZ3MuIFJhcGlkIHBvaW50LW9mLWNhcmUgdGVzdHMgYXJlIGF2YWlsYWJsZSBmb3IgSEJzQWcsIGFuZCBXSE8gaGFzIHByZXF1YWxpZmllZCBzZXZlcmFsIHJhcGlkIGRpYWdub3N0aWMgdGVzdHMuJwogICAgd2hlbiAiSElWIG5lZ2F0aXZlIiBhbmQgCiAgICAgICAgICJFc3RpbWF0ZWQgY3JlYXRpbmluZSBjbGVhcmFuY2Ug4omlIDYwIG1ML21pbiIgYW5kCiAgICAgICAgICJObyBzeW1wdG9tcyBvZiBBY3V0ZSBISVYgaW5mZWN0aW9uIiBhbmQKICAgICAgICAgIk5vIHByb2JhYmxlIHJlY2VudCBleHBvc3VyZSB0byBISVYiIGFuZAogICAgICAgICAiTm8gY29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSIgYW5kCiAgICAgICAgICJJcyBLZXkgcG9wdWxhdGlvbiBtZW1iZXIiIGFuZAogICAgICAgICAiU1RJIGluIHRoZSBwYXN0IDYgbW9udGhzIgogICAgICB0aGVuICdDb3Vuc2VsIGNsaWVudCBvbiBQckVQLiBCYXNlZCBvbiBhbnN3ZXJzIGdpdmVuLCBjbGllbnQgaXMgc3VpdGFibGUgZm9yIFByRVAuCgpSZWNlbnRseSBkaWFnbm9zZWQgU1RJcyBhcmUgb2Z0ZW4gaW5kaWNhdG9ycyBvZiByaXNrIG9mIHNleHVhbCBhY3F1aXNpdGlvbiBvZiBISVYuIFRoZSBwcmVkaWN0aXZlIHZhbHVlIG9mIFNUSSBpbmRpY2F0b3JzIHZhcmllcyBieSByZWdpb24sIHRoZSB0eXBlIG9mIFNUSSBhbmQgYSBwZXJzb25cJ3MgZGVtb2dyYXBoaWMgY2hhcmFjdGVyaXN0aWNzLiBBIG5ldyBkaWFnbm9zaXMgb2Ygc3lwaGlsaXMgb3IgZ2VuaXRhbCBoZXJwZXMgaXMgYSBzdHJvbmcgcHJlZGljdG9yIG9mIEhJViByaXNrIGFtb25nIG1lbiB3aG8gaGF2ZSBzZXggd2l0aCBtZW4gaW4gbW9zdCBzZXR0aW5ncyBhbmQgYW1vbmcgaGV0ZXJvc2V4dWFsIG1lbiBhbmQgd29tZW4gaW4gYXJlYXMgb2YgaGlnaCBISVYgcHJldmFsZW5jZS4gUHJFUCBzZXJ2aWNlcyBzaG91bGQgYmUgcHJpb3JpdGl6ZWQ7IGxvY2FsIGVwaWRlbWlvbG9neSB3aWxsIGJlIGVzc2VudGlhbCB0byBndWlkZSBkZWNpc2lvbnMgYWJvdXQgd2hlbiB0byBvZmZlciBQckVQIGFuZCB0byB3aGljaCBwb3B1bGF0aW9ucy4nCiAgICB3aGVuICJISVYgbmVnYXRpdmUiIGFuZCAKICAgICAgICAgIkVzdGltYXRlZCBjcmVhdGluaW5lIGNsZWFyYW5jZSDiiaUgNjAgbUwvbWluIiBhbmQKICAgICAgICAgIk5vIHN5bXB0b21zIG9mIEFjdXRlIEhJViBpbmZlY3Rpb24iIGFuZAogICAgICAgICAiTm8gcHJvYmFibGUgcmVjZW50IGV4cG9zdXJlIHRvIEhJViIgYW5kCiAgICAgICAgICJObyBjb250cmFpbmRpY2F0aW9ucyB0byBQckVQIHVzYWdlIiBhbmQKICAgICAgICAgIklzIEtleSBwb3B1bGF0aW9uIG1lbWJlciIgYW5kCiAgICAgICAgICJSZXBlYXQgUEVQIHVzZXIiCiAgICAgIHRoZW4gJ0NvdW5zZWwgY2xpZW50IG9uIFByRVAuIEJhc2VkIG9uIGFuc3dlcnMgZ2l2ZW4sIGNsaWVudCBpcyBzdWl0YWJsZSBmb3IgUHJFUC4KClBlb3BsZSBtYXkgYmUgc3ViamVjdCB0byBvbmdvaW5nIGhpZ2ggcmlzayBvZiBleHBvc3VyZSB0byBISVYsIGxlYWRpbmcgdG8gbXVsdGlwbGUgcHJlc2NyaXB0aW9ucyBmb3IgUEVQLiBJbiBzdWNoIHNpdHVhdGlvbnMsIGhlYWx0aC1jYXJlIHByb3ZpZGVycyBzaG91bGQgZGlzY3VzcyB3aXRoIHRoZWlyIGNsaWVudHMgdGhlIHBvdGVudGlhbCBiZW5lZml0cyBvZiB0cmFuc2l0aW9uaW5nIHRvIEhJViBQckVQLicKICAgIHdoZW4gIkhJViBuZWdhdGl2ZSIgYW5kIAogICAgICAgICAiRXN0aW1hdGVkIGNyZWF0aW5pbmUgY2xlYXJhbmNlIOKJpSA2MCBtTC9taW4iIGFuZAogICAgICAgICAiTm8gc3ltcHRvbXMgb2YgQWN1dGUgSElWIGluZmVjdGlvbiIgYW5kCiAgICAgICAgICJObyBwcm9iYWJsZSByZWNlbnQgZXhwb3N1cmUgdG8gSElWIiBhbmQKICAgICAgICAgIk5vIGNvbnRyYWluZGljYXRpb25zIHRvIFByRVAgdXNhZ2UiIGFuZAogICAgICAgICAiSXMgS2V5IHBvcHVsYXRpb24gbWVtYmVyIiBhbmQKICAgICAgICAgIk5vIGNvbmRvbSB1c2UgZHVyaW5nIHNleCB3aXRoIG1vcmUgdGhhbiBvbmUgcGFydG5lciBpbiB0aGUgcGFzdCA2IG1vbnRocyIKICAgICAgdGhlbiAnQ291bnNlbCBjbGllbnQgb24gUHJFUC4gIEJhc2VkIG9uIGFuc3dlcnMgZ2l2ZW4sIFByRVAgaXMgc3VpdGFibGUgZm9yIGNsaWVudC4KCkluY29uc2lzdGVudCB1c2Ugb2YgY29uZG9tcyAobWFsZSBvciBmZW1hbGUpLCBpbmNsdWRpbmcgYW4gaW50ZW50aW9uIHRvIHVzZSBjb25kb21zIGR1cmluZyBzZXggd2l0aCBzb21lIG9jY2FzaW9uYWwgb21pc3Npb25zIG9yIGFjY2lkZW50cywgaW5jcmVhc2VzIEhJViByaXNrLiBTb2NpYWwgZGVzaXJhYmlsaXR5IGJpYXMgaW4gcmVwb3J0aW5nIGNvbmRvbSB1c2UgbWF5IG9jY3VyLCBzbyBQckVQIGNvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIHBlb3BsZSByZXBvcnRpbmcgYW55IGludGVyY291cnNlIHdpdGhvdXQgYSBjb25kb20gb3IgY29uY2VybnMgYWJvdXQgdGhlaXIgZnV0dXJlIHVzZSBvZiBjb25kb21zLiBGb3IgZXhhbXBsZSwgc29tZW9uZSB3aG8gcmVwb3J0cyBhIGRlc2lyZSB0byBzdG9wIHVzaW5nIGNvbmRvbXMgbWF5IGJlIGFscmVhZHkgaGF2aW5nIHNleCB3aXRob3V0IGNvbmRvbXMuJwogICAgd2hlbiAiSElWIG5lZ2F0aXZlIiBhbmQgCiAgICAgICAgICJFc3RpbWF0ZWQgY3JlYXRpbmluZSBjbGVhcmFuY2Ug4omlIDYwIG1ML21pbiIgYW5kCiAgICAgICAgICJObyBzeW1wdG9tcyBvZiBBY3V0ZSBISVYgaW5mZWN0aW9uIiBhbmQKICAgICAgICAgIk5vIHByb2JhYmxlIHJlY2VudCBleHBvc3VyZSB0byBISVYiIGFuZAogICAgICAgICAiTm8gY29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSIgYW5kCiAgICAgICAgICJISVYgYnVyZGVuIG9mIHNldHRpbmcgaXMgaGlnaCBISVYgYnVyZGVuIHNldHRpbmciIGFuZAogICAgICAgICAiUHJFUCByZXF1ZXN0ZWQgYnkgY2xpZW50IgogICAgICB0aGVuICdDb3Vuc2VsIGNsaWVudCBvbiBQckVQLiBCYXNlZCBvbiBhbnN3ZXJzIGdpdmVuLCBjbGllbnQgaXMgc3VpdGFibGUgZm9yIFByRVAuJwogICAgd2hlbiAiSElWIG5lZ2F0aXZlIiBhbmQgCiAgICAgICAgICJFc3RpbWF0ZWQgY3JlYXRpbmluZSBjbGVhcmFuY2Ug4omlIDYwIG1ML21pbiIgYW5kCiAgICAgICAgICJObyBzeW1wdG9tcyBvZiBBY3V0ZSBISVYgaW5mZWN0aW9uIiBhbmQKICAgICAgICAgIk5vIHByb2JhYmxlIHJlY2VudCBleHBvc3VyZSB0byBISVYiIGFuZAogICAgICAgICAiTm8gY29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSIgYW5kCiAgICAgICAgICJISVYgYnVyZGVuIG9mIHNldHRpbmcgaXMgaGlnaCBISVYgYnVyZGVuIHNldHRpbmciIGFuZAogICAgICAgICAiQSBzZXh1YWwgcGFydG5lciBpbiB0aGUgcGFzdCA2IG1vbnRocyBoYWQgb25lIG9yIG1vcmUgSElWIHJpc2sgZmFjdG9ycyIKICAgICAgdGhlbiAnQ291bnNlbCBjbGllbnQgb24gUHJFUC4gQmFzZWQgb24gYW5zd2VycyBnaXZlbiwgY2xpZW50IGlzIHN1aXRhYmxlIGZvciBQckVQLicKICAgIHdoZW4gIkhJViBuZWdhdGl2ZSIgYW5kIAogICAgICAgICAiRXN0aW1hdGVkIGNyZWF0aW5pbmUgY2xlYXJhbmNlIOKJpSA2MCBtTC9taW4iIGFuZAogICAgICAgICAiTm8gc3ltcHRvbXMgb2YgQWN1dGUgSElWIGluZmVjdGlvbiIgYW5kCiAgICAgICAgICJObyBwcm9iYWJsZSByZWNlbnQgZXhwb3N1cmUgdG8gSElWIiBhbmQKICAgICAgICAgIk5vIGNvbnRyYWluZGljYXRpb25zIHRvIFByRVAgdXNhZ2UiIGFuZAogICAgICAgICAiSElWIGJ1cmRlbiBvZiBzZXR0aW5nIGlzIGhpZ2ggSElWIGJ1cmRlbiBzZXR0aW5nIiBhbmQKICAgICAgICAgIlNUSSBpbiB0aGUgcGFzdCA2IG1vbnRocyIKICAgICAgdGhlbiAnQ291bnNlbCBjbGllbnQgb24gUHJFUC4gQmFzZWQgb24gYW5zd2VycyBnaXZlbiwgUHJFUCBpcyBzdWl0YWJsZSBmb3IgY2xpZW50LgoKUmVjZW50bHkgZGlhZ25vc2VkIFNUSXMgYXJlIG9mdGVuIGluZGljYXRvcnMgb2YgcmlzayBvZiBzZXh1YWwgYWNxdWlzaXRpb24gb2YgSElWLiBUaGUgcHJlZGljdGl2ZSB2YWx1ZSBvZiBTVEkgaW5kaWNhdG9ycyB2YXJpZXMgYnkgcmVnaW9uLCB0aGUgdHlwZSBvZiBTVEkgYW5kIGEgcGVyc29uXCdzIGRlbW9ncmFwaGljIGNoYXJhY3RlcmlzdGljcy4gQSBuZXcgZGlhZ25vc2lzIG9mIHN5cGhpbGlzIG9yIGdlbml0YWwgaGVycGVzIGlzIGEgc3Ryb25nIHByZWRpY3RvciBvZiBISVYgcmlzayBhbW9uZyBtZW4gd2hvIGhhdmUgc2V4IHdpdGggbWVuIGluIG1vc3Qgc2V0dGluZ3MgYW5kIGFtb25nIGhldGVyb3NleHVhbCBtZW4gYW5kIHdvbWVuIGluIGFyZWFzIG9mIGhpZ2ggSElWIHByZXZhbGVuY2UuIFByRVAgc2VydmljZXMgc2hvdWxkIGJlIHByaW9yaXRpemVkOyBsb2NhbCBlcGlkZW1pb2xvZ3kgd2lsbCBiZSBlc3NlbnRpYWwgdG8gZ3VpZGUgZGVjaXNpb25zIGFib3V0IHdoZW4gdG8gb2ZmZXIgUHJFUCBhbmQgdG8gd2hpY2ggcG9wdWxhdGlvbnMuJwogICAgd2hlbiAiSElWIG5lZ2F0aXZlIiBhbmQgCiAgICAgICAgICJFc3RpbWF0ZWQgY3JlYXRpbmluZSBjbGVhcmFuY2Ug4omlIDYwIG1ML21pbiIgYW5kCiAgICAgICAgICJObyBzeW1wdG9tcyBvZiBBY3V0ZSBISVYgaW5mZWN0aW9uIiBhbmQKICAgICAgICAgIk5vIHByb2JhYmxlIHJlY2VudCBleHBvc3VyZSB0byBISVYiIGFuZAogICAgICAgICAiTm8gY29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSIgYW5kCiAgICAgICAgICJISVYgYnVyZGVuIG9mIHNldHRpbmcgaXMgaGlnaCBISVYgYnVyZGVuIHNldHRpbmciIGFuZAogICAgICAgICAiUmVwZWF0IFBFUCB1c2VyIgogICAgICB0aGVuICdDb3Vuc2VsIGNsaWVudCBvbiBQckVQLiBCYXNlZCBvbiBhbnN3ZXJzIGdpdmVuLCBjbGllbnQgaXMgc3VpdGFibGUgZm9yIFByRVAuJwogICAgd2hlbiAiSElWIG5lZ2F0aXZlIiBhbmQgCiAgICAgICAgICJFc3RpbWF0ZWQgY3JlYXRpbmluZSBjbGVhcmFuY2Ug4omlIDYwIG1ML21pbiIgYW5kCiAgICAgICAgICJObyBzeW1wdG9tcyBvZiBBY3V0ZSBISVYgaW5mZWN0aW9uIiBhbmQKICAgICAgICAgIk5vIHByb2JhYmxlIHJlY2VudCBleHBvc3VyZSB0byBISVYiIGFuZAogICAgICAgICAiTm8gY29udHJhaW5kaWNhdGlvbnMgdG8gUHJFUCB1c2FnZSIgYW5kCiAgICAgICAgICJISVYgYnVyZGVuIG9mIHNldHRpbmcgaXMgaGlnaCBISVYgYnVyZGVuIHNldHRpbmciIGFuZAogICAgICAgICAiTm8gY29uZG9tIHVzZSBkdXJpbmcgc2V4IHdpdGggbW9yZSB0aGFuIG9uZSBwYXJ0bmVyIGluIHRoZSBwYXN0IDYgbW9udGhzIgogICAgICB0aGVuICdDb3Vuc2VsIGNsaWVudCBvbiBQckVQLiBCYXNlZCBvbiBhbnN3ZXJzIGdpdmVuLCBjbGllbnQgaXMgc3VpdGFibGUgZm9yIFByRVAuJwogICAgd2hlbiAiSElWIG5lZ2F0aXZlIG9yIHVua25vd24iIGFuZAogICAgICAgICAiU3ltcHRvbXMgb2YgQWN1dGUgSElWIGluZmVjdGlvbiIKICAgICAgdGhlbiAnQ2xpZW50IGlzIGluZWxpZ2libGUgZm9yIFByRVAgYmFzZWQgb24gYW5zd2VycyBnaXZlbi4nCiAgICB3aGVuICJISVYgbmVnYXRpdmUgb3IgdW5rbm93biIgYW5kCiAgICAgICAgICJQcm9iYWJsZSByZWNlbnQgZXhwb3N1cmUgdG8gSElWIgogICAgICB0aGVuICdDbGllbnQgaXMgaW5lbGlnaWJsZSBmb3IgUHJFUCBiYXNlZCBvbiBhbnN3ZXJzIGdpdmVuLiAgQ291bnNlbCBjbGllbnQgb24gcmlzayBhbmQgcHJldmVudGlvbi4gIAoKSWYgdGhlIHBlcnNvbiBoYXMgaGFkIGEgcmVjZW50IGhpZ2gtcmlzayBISVYgZXhwb3N1cmUgKHN1Y2ggYXMgd2l0aGluIHRoZSBwYXN0IDcyIGhvdXJzKSB0aGV5IGNhbiBiZSBvZmZlcmVkIFBFUCBhbmQgdHJhbnNpdGlvbiB0byBQckVQIGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mIFBFUCBhbmQgZm9sbG93aW5nIGFkZGl0aW9uYWwgSElWIHRlc3RpbmcuCgpUaGUgZm9sbG93aW5nIHR5cGVzIG9mIGV4cG9zdXJlIG1heSB3YXJyYW50IEhJViBQRVAuCuKAoiBCb2R5IGZsdWlkczogYmxvb2QsIGJsb29kLXN0YWluZWQgc2FsaXZhLCBicmVhc3QtbWlsaywgZ2VuaXRhbCBzZWNyZXRpb25zOyBjZXJlYnJvc3BpbmFsLCBhbW5pb3RpYywgcGVyaXRvbmVhbCwgc3lub3ZpYWwsIHBlcmljYXJkaWFsIG9yIHBsZXVyYWwgZmx1aWRzLiBBbHRob3VnaCB0aGVzZSBmbHVpZHMgY2FycnkgYSBoaWdoIHJpc2sgb2YgSElWIGluZmVjdGlvbiwgdGhpcyBsaXN0IGlzIG5vdCBleGhhdXN0aXZlLiBBbGwgY2FzZXMgc2hvdWxkIGJlIGFzc2Vzc2VkIGNsaW5pY2FsbHksIGFuZCB0aGUgaGVhbHRoIGNhcmUgd29ya2VycyBzaG91bGQgZGVjaWRlIHdoZXRoZXIgdGhlIGFjdHVhbCBleHBvc3VyZSBjb25zdGl0dXRlcyBhIHNpZ25pZmljYW50IHJpc2suCuKAoiBUeXBlcyBvZiBleHBvc3VyZTogKDEpIG11Y291cyBtZW1icmFuZSBmcm9tIHNleHVhbCBleHBvc3VyZTsgc3BsYXNoZXMgdG8gdGhlIGV5ZSwgbm9zZSwgb3Igb3JhbCBjYXZpdHkgYW5kICgyKSBwYXJlbnRlcmFsIGV4cG9zdXJlcy4KRXhwb3N1cmUgdGhhdCBkb2VzIG5vdCByZXF1aXJlIEhJViBQRVAgaW5jbHVkZXM6CuKAoiB3aGVuIHRoZSBleHBvc2VkIGluZGl2aWR1YWwgaXMgYWxyZWFkeSBISVYgcG9zaXRpdmU7CuKAoiB3aGVuIHRoZSBzb3VyY2UgaXMgZXN0YWJsaXNoZWQgdG8gYmUgSElWIG5lZ2F0aXZlOyBhbmQK4oCiIGV4cG9zdXJlIHRvIGJvZGlseSBmbHVpZHMgdGhhdCBkbyBub3QgcG9zZSBhIHNpZ25pZmljYW50IHJpc2s6IHRlYXJzLCBub24tYmxvb2Qtc3RhaW5lZCBzYWxpdmEsIHVyaW5lIGFuZCBzd2VhdC4KClBlb3BsZSBtYXkgYmUgc3ViamVjdCB0byBvbmdvaW5nIGhpZ2ggcmlzayBvZiBleHBvc3VyZSB0byBISVYsIGxlYWRpbmcgdG8gbXVsdGlwbGUgcHJlc2NyaXB0aW9ucyBmb3IgUEVQLiBJbiBzdWNoIHNpdHVhdGlvbnMsIGhlYWx0aC1jYXJlIHByb3ZpZGVycyBzaG91bGQgZGlzY3VzcyB3aXRoIHRoZWlyIGNsaWVudHMgdGhlIHBvdGVudGlhbCBiZW5lZml0cyBvZiB0cmFuc2l0aW9uaW5nIHRvIEhJViBQckVQLicKICAgIHdoZW4gIkhJViBuZWdhdGl2ZSIgYW5kCiAgICAgICAgICJUREYgYWxsZXJneSBvciBjb250cmFpbmRpY2F0aW9uIgogICAgICB0aGVuICdDbGllbnQgaXMgaW5lbGlnaWJsZSBmb3IgUHJFUCBiYXNlZCBvbiBhbnN3ZXJzIGdpdmVuLiBDb3Vuc2VsIGNsaWVudCBvbiByaXNrIGFuZCBwcmV2ZW50aW9uLicKICAgIHdoZW4gIkhJViBuZWdhdGl2ZSIgYW5kCiAgICAgICAgICJDb250cmFpbmRpY2F0aW9ucyB0byBQckVQIHVzYWdlIgogICAgICB0aGVuICdDbGllbnQgaXMgaW5lbGlnaWJsZSBmb3IgUHJFUCBiYXNlZCBvbiBhbnN3ZXJzIGdpdmVuLiBDb3Vuc2VsIGNsaWVudCBvbiByaXNrIGFuZCBwcmV2ZW50aW9uLicKICAgIHdoZW4gIkhJViBuZWdhdGl2ZSIgYW5kCiAgICAgICAgICJFc3RpbWF0ZWQgY3JlYXRpbmluZSBjbGVhcmFuY2UgPCA2MCBtTC9taW4iCiAgICAgIHRoZW4gJ0NsaWVudCBpcyBpbmVsaWdpYmxlIGZvciBQckVQIGJhc2VkIG9uIGFuc3dlcnMgZ2l2ZW4uICBDb3Vuc2VsIGNsaWVudCBvbiByaXNrIGFuZCBwcmV2ZW50aW9uLgoKTWVhc3VyZW1lbnQgb2Yga2lkbmV5IGZ1bmN0aW9uIHdpbGwgZGVwZW5kIG9uIGFnZSBhbmQgY29tb3JiaWRpdGllcy4gIFNlZSBUYWJsZSAyLiBvZiBzb3VyY2U6IFN1Z2dlc3RlZCBwcm9jZWR1cmVzIGZvciBtZWFzdXJpbmcga2lkbmV5IGZ1bmN0aW9uIGZvciBUREYtY29udGFpbmluZyBvcmFsIFByRVAKCk1lYXN1cmluZyBraWRuZXkgZnVuY3Rpb24gaXMgb3B0aW9uYWwgZm9yIHRob3NlIGFnZWQgdW5kZXIgMzAgeWVhcnMgd2l0aG91dCBraWRuZXktcmVsYXRlZCBjb21vcmJpZGl0aWVzLgoKSW5kaXZpZHVhbHMgYWdlZCAzMCB5ZWFycyBhbmQgb2xkZXIgd2l0aG91dCBjb21vcmJpZGl0aWVzIG1heSBiZSBzY3JlZW5lZCBvbmNlLCBhdCBvciB3aXRoaW4gb25lIHRvIHRocmVlIG1vbnRocyBvZiBvcmFsIFByRVAgaW5pdGlhdGlvbi4gRGVwZW5kaW5nIG9uIGF2YWlsYWJsZSByZXNvdXJjZXMsIHRoaXMgY2FuIGJlIGNvbnNpZGVyZWQgb3B0aW9uYWwgZm9yIHRob3NlIGFnZWQgMzDigJM0OSB5ZWFycywgcGFydGljdWxhcmx5IHRob3NlIGFnZWQgMzDigJMzOSwgZ2l2ZW4gdGhlIGxvdyByaXNrIG9mIGtpZG5leSBpbXBhaXJtZW50LgoKTW9yZSBmcmVxdWVudCBzY3JlZW5pbmcgKGV2ZXJ5IDbigJMxMiBtb250aHMpIGlzIHN1Z2dlc3RlZCBmb3IgaW5kaXZpZHVhbHMgd2l0aCBjb21vcmJpZGl0aWVzLCB0aG9zZSBhZ2VkIDUwIHllYXJzIGFuZCBvbGRlciwgYW5kIHRob3NlIHdpdGggYSBwcmV2aW91cyBraWRuZXkgZnVuY3Rpb24gdGVzdCByZXN1bHQgc3VnZ2VzdGluZyBhdCBsZWFzdCBhIG1pbGQgcmVkdWN0aW9uIGluIGZ1bmN0aW9uIChlR0ZSIDw5MCBtTC9taW4gcGVyIDEuNzMgbV4yKS4KCldhaXRpbmcgZm9yIGtpZG5leSBmdW5jdGlvbiB0ZXN0IHJlc3VsdHMgc2hvdWxkIG5vdCBkZWxheSBpbml0aWF0aW9uIG9yIGNvbnRpbnVhdGlvbiBvZiBvcmFsIFByRVAuJwogICAgZWxzZSBudWxsCiAgZW5kCg=="
},
{
"contentType" : "application/elm+xml"
}
]
}