WHO Immunization Implementation Guide
1.0.0 - release
WHO Immunization Implementation Guide, published by WHO. This guide is not an authorized publication; it is the continuous build for version 1.0.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/WorldHealthOrganization/smart-immunizations/tree/132/merge and changes regularly. See the Directory of published versions
| Draft as of 2026-03-31 |
{
"resourceType" : "Library",
"id" : "IMMZD18SPolioBOPVPlusIPVLogic",
"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;\">IMMZD18SPolioBOPVPlusIPVLogic</td>\n </tr>\n \n\n \n \n <tr>\n <th scope=\"row\"><b>Id: </b></th>\n <td style=\"padding-left: 4px;\">IMMZD18SPolioBOPVPlusIPVLogic</td>\n </tr>\n \n\n \n \n <tr>\n <th scope=\"row\"><b>Version: </b></th>\n <td style=\"padding-left: 4px;\">1.0.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-IMMZD18SPolioBOPVPlusIPVLogic.html\">IMMZD18SPolioBOPVPlusIPVLogic</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\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/7.1.0/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;\">2026-03-31 13:54:17+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>This library defines decision support logic for the IMMZ.D18.S.Polio.bOPV plus IPV schedule table in the Immunization CPG</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 <tr>\n <th scope=\"row\"><b>Related Artifacts: </b></th>\n <td style=\"padding-left: 4px;\">\n \n \n \n <p><b>Dependencies</b></p>\n <ul>\n \n <li><a href=\"Library-WHOCommon.html\">WHOCommon</a></li>\n \n <li><a href=\"Library-IMMZCommon.html\">IMMZCommon</a></li>\n \n <li><a href=\"Library-IMMZConcepts.html\">IMMZConcepts</a></li>\n \n <li><a href=\"Library-IMMZEncounterElements.html\">IMMZEncounterElements</a></li>\n \n <li><a href=\"Library-IMMZD2DTPolioEncounterElements.html\">IMMZD2DTPolioEncounterElements</a></li>\n \n </ul>\n \n \n \n \n \n </td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Parameters: </b></th>\n <td style=\"padding-left: 4px;\">\n <table class=\"grid-dict\">\n <tr><th><b>Name</b></th><th><b>Type</b></th><th><b>Min</b></th><th><b>Max</b></th><th><b>In/Out</b></th></tr>\n \n <tr><th>Today</th><th>date</th><th>0</th><th>1</th><th>In</th></tr>\n \n <tr><th>Patient</th><th>Patient</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>First bOPV dose from the primary series was administered</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>bOPV dose 1</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>bOPV dose 1 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>bOPV dose 1 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>bOPV dose 1 Overdue</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>bOPV dose 1 Expiration</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>First IPV dose from the primary series was administered</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>IPV dose 1</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>IPV dose 1 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>IPV dose 1 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>IPV dose 1 Overdue</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>IPV dose 1 Expiration</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Second bOPV dose from the primary series was administered</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>bOPV dose 2</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>bOPV dose 2 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>bOPV dose 2 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>bOPV dose 2 Overdue</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>bOPV dose 2 Expiration</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Second IPV dose from the primary series was administered</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>IPV dose 2</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>IPV dose 2 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>IPV dose 2 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>IPV dose 2 Overdue</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>IPV dose 2 Expiration</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Third bOPV dose from the primary series was administered. The primary series has been completed</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>bOPV dose 3</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>bOPV dose 3 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>bOPV dose 3 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>bOPV dose 3 Overdue</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>bOPV dose 3 Expiration</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Test Validation</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n \n </table>\n </td>\n </tr>\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\">/*\n * Library: IMMZD18SPolioBOPVPlusIPVLogic (IMMZ.D18.S.Polio.bOPV plus IPV schedule)\n * Schedule Table: Bivalent oral polio vaccine (bOPV) plus inactivated polio vaccine (IPV) schedule\n */\nlibrary IMMZD18SPolioBOPVPlusIPVLogic\n\nusing FHIR version '4.0.1'\ninclude FHIRHelpers version '4.0.1'\n\ninclude WHOCommon called WC\n\ninclude IMMZCommon called Common\ninclude IMMZConcepts called Concepts\n\ninclude IMMZEncounterElements called IE\ninclude IMMZD2DTPolioEncounterElements called Encounter\n\nparameter Today Date default Today()\n\n\ncontext Patient\n\n\n/*\n@output: bOPV dose 1\n@description: Provision of bOPV dose 1\n@trigger: Child's birth\n@pseudo: \n@triggerDate: "Date of birth"\n*/\ndefine "bOPV dose 1":\n not "First bOPV dose from the primary series was administered"\n\n\n/*\n@output: bOPV dose 1 Create\n@create: The preferred schedule is to administer the 3 doses of bOPV starting from the minimum age of 6 weeks, with at least a 4 week-interval between doses.\n*/\ndefine "bOPV dose 1 Create":\n if "bOPV dose 1"\n then 'The preferred schedule is to administer the 3 doses of bOPV starting from the minimum age of 6 weeks, with at least a 4 week-interval between doses.' + '\nDue Date: ' + ToString("bOPV dose 1 Due Date")\n else ''\n\n\n/*\n@dynamicValue: bOPV dose 1 Due Date\n@pseudocode: "Date of birth" + 6 weeks\n*/\ndefine "bOPV dose 1 Due Date":\n if "bOPV dose 1" then Patient.birthDate + 6 weeks\n else null\n\n\n/*\n@dynamicValue: bOPV dose 1 Overdue\n@pseudocode: To be determined by Member States; however, there is no recommended overdue date and individuals are always eligible to be vaccinated.\n*/\ndefine "bOPV dose 1 Overdue":\n null\n\n\n/*\n@dynamicValue: bOPV dose 1 Expiration\n@pseudocode: To be determined by Member States; however, there is no recommended overdue date and individuals are always eligible to be vaccinated.\n*/\ndefine "bOPV dose 1 Expiration":\n null\n\n \n/*\n@complete: First bOPV dose from the primary series was administered\n@pseudocode: Count of vaccines administered (where "Type of dose" = "Primary series" and "Type of poliovirus dose" = "bOPV") = 1\n*/\ndefine "First bOPV dose from the primary series was administered":\n Encounter."Number of Polio bOPV Primary Series Doses Administered" >= 1\n\n\n\n/*\n@output: IPV dose 1\n@description: Provision of IPV dose 1\n@trigger: Child's birth\n@pseudo: \n@triggerDate: "Date of birth"\n*/\ndefine "IPV dose 1":\n not "First IPV dose from the primary series was administered"\n\n\n/*\n@output: IPV dose 1 Create\n@create: The first IPV dose should be administered from a minimum of 14 weeks of age.\n*/\ndefine "IPV dose 1 Create":\n if "IPV dose 1"\n then 'The first IPV dose should be administered from a minimum of 14 weeks of age.' + '\nDue Date: ' + ToString("IPV dose 1 Due Date")\n else ''\n\n\n/*\n@dynamicValue: IPV dose 1 Due Date\n@pseudocode: "Date of birth" + 14 weeks\n*/\ndefine "IPV dose 1 Due Date":\n if "IPV dose 1" then Patient.birthDate + 14 weeks\n else null\n\n\n/*\n@dynamicValue: IPV dose 1 Overdue\n@pseudocode: To be determined by Member States; however, there is no recommended overdue date and individuals are always eligible to be vaccinated.\n*/\ndefine "IPV dose 1 Overdue":\n null\n\n\n/*\n@dynamicValue: IPV dose 1 Expiration\n@pseudocode: To be determined by Member States; however, there is no recommended overdue date and individuals are always eligible to be vaccinated.\n*/\ndefine "IPV dose 1 Expiration":\n null\n\n \n/*\n@complete: First IPV dose from the primary series was administered\n@pseudocode: Count of vaccines administered (where "Type of poliovirus dose" = "IPV") = 1\n*/\ndefine "First IPV dose from the primary series was administered":\n Encounter."Number of Polio IPV Primary Series Doses Administered" >= 1\n\n\n\n/*\n@output: bOPV dose 2\n@description: Provision of bOPV dose 2\n@trigger: First bOPV dose from the primary series was administered\n@pseudo: Count of vaccines administered (where "Type of dose" = "Primary series" and "Type of poliovirus dose" = "bOPV") = 1\n@triggerDate: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "bOPV")\n*/\ndefine "bOPV dose 2":\n "First bOPV dose from the primary series was administered" and not "Second bOPV dose from the primary series was administered"\n\n\n/*\n@output: bOPV dose 2 Create\n@create: The preferred schedule is to administer the 3 doses of bOPV starting from the minimum age of 6 weeks, with at least a 4 week-interval between doses.\n*/\ndefine "bOPV dose 2 Create":\n if "bOPV dose 2"\n then 'The preferred schedule is to administer the 3 doses of bOPV starting from the minimum age of 6 weeks, with at least a 4 week-interval between doses.' + '\nDue Date: ' + ToString("bOPV dose 2 Due Date")\n else ''\n\n\n/*\n@dynamicValue: bOPV dose 2 Due Date\n@pseudocode: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "bOPV") + 4 weeks\n*/\ndefine "bOPV dose 2 Due Date":\n if "bOPV dose 2" then Encounter."Date of Latest bOPV Dose" + 4 weeks\n else null\n\n\n/*\n@dynamicValue: bOPV dose 2 Overdue\n@pseudocode: To be determined by Member States; however, there is no recommended overdue date and individuals are always eligible to be vaccinated.\n*/\ndefine "bOPV dose 2 Overdue":\n null\n\n\n/*\n@dynamicValue: bOPV dose 2 Expiration\n@pseudocode: To be determined by Member States; however, there is no recommended overdue date and individuals are always eligible to be vaccinated.\n*/\ndefine "bOPV dose 2 Expiration":\n null\n\n \n/*\n@complete: Second bOPV dose from the primary series was administered\n@pseudocode: Count of vaccines administered (where "Type of dose" = "Primary series" and "Type of poliovirus dose" = "bOPV") = 2\n*/\ndefine "Second bOPV dose from the primary series was administered":\n Encounter."Number of Polio bOPV Primary Series Doses Administered" >= 2\n\n\n\n/*\n@output: IPV dose 2\n@description: Provision of IPV dose 2\n@trigger: First IPV dose from the primary series was administered\n@pseudo: Count of vaccines administered (where "Type of poliovirus dose" = "IPV") = 1\n@triggerDate: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "IPV")\n*/\ndefine "IPV dose 2":\n "First IPV dose from the primary series was administered" and not "Second IPV dose from the primary series was administered"\n\n\n/*\n@output: IPV dose 2 Create\n@create: The first IPV dose should be administered from a minimum of 14 weeks of age (with the third dose of the diphtheria–tetanus–pertussis vaccine [DTP3] or pentavalent vaccine [penta3]), with the second IPV dose being given at least 4 months later (possibly coinciding with other vaccines administered at 9 months of age).\n*/\ndefine "IPV dose 2 Create":\n if "IPV dose 2"\n then 'The first IPV dose should be administered from a minimum of 14 weeks of age (with the third dose of the diphtheria–tetanus–pertussis vaccine [DTP3] or pentavalent vaccine [penta3]), with the second IPV dose being given at least 4 months later (possibly coinciding with other vaccines administered at 9 months of age).' + '\nDue Date: ' + ToString("IPV dose 2 Due Date")\n else ''\n\n\n/*\n@dynamicValue: IPV dose 2 Due Date\n@pseudocode: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "IPV") + 4 months\n*/\ndefine "IPV dose 2 Due Date":\n if "IPV dose 2" then Encounter."Date of Latest IPV Dose" + 4 months\n else null\n\n\n/*\n@dynamicValue: IPV dose 2 Overdue\n@pseudocode: To be determined by Member States; however, there is no recommended overdue date and individuals are always eligible to be vaccinated.\n*/\ndefine "IPV dose 2 Overdue":\n null\n\n\n/*\n@dynamicValue: IPV dose 2 Expiration\n@pseudocode: To be determined by Member States; however, there is no recommended overdue date and individuals are always eligible to be vaccinated.\n*/\ndefine "IPV dose 2 Expiration":\n null\n\n \n/*\n@complete: Second IPV dose from the primary series was administered\n@pseudocode: Count of vaccines administered (where "Type of poliovirus dose" = "IPV") = 2\n*/\ndefine "Second IPV dose from the primary series was administered":\n Encounter."Number of Polio IPV Primary Series Doses Administered" >= 2\n\n\n\n/*\n@output: bOPV dose 3\n@description: Provision of bOPV dose 3\n@trigger: Second bOPV dose from the primary series was administered\n@pseudo: Count of vaccines administered (where "Type of dose" = "Primary series" and "Type of poliovirus dose" = "bOPV") = 2\n@triggerDate: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "bOPV")\n*/\ndefine "bOPV dose 3":\n "Second bOPV dose from the primary series was administered" and not "Third bOPV dose from the primary series was administered. The primary series has been completed"\n\n\n/*\n@output: bOPV dose 3 Create\n@create: The preferred schedule is to administer the 3 doses of bOPV starting from the minimum age of 6 weeks, with at least a 4 week-interval between doses.\n*/\ndefine "bOPV dose 3 Create":\n if "bOPV dose 3"\n then 'The preferred schedule is to administer the 3 doses of bOPV starting from the minimum age of 6 weeks, with at least a 4 week-interval between doses.' + '\nDue Date: ' + ToString("bOPV dose 3 Due Date")\n else ''\n\n\n/*\n@dynamicValue: bOPV dose 3 Due Date\n@pseudocode: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "bOPV") + 4 weeks\n*/\ndefine "bOPV dose 3 Due Date":\n if "bOPV dose 3" then Encounter."Date of Latest bOPV Dose" + 4 weeks\n else null\n\n\n/*\n@dynamicValue: bOPV dose 3 Overdue\n@pseudocode: To be determined by Member States; however, there is no recommended overdue date and individuals are always eligible to be vaccinated.\n*/\ndefine "bOPV dose 3 Overdue":\n null\n\n\n/*\n@dynamicValue: bOPV dose 3 Expiration\n@pseudocode: To be determined by Member States; however, there is no recommended overdue date and individuals are always eligible to be vaccinated.\n*/\ndefine "bOPV dose 3 Expiration":\n null\n\n \n/*\n@complete: Third bOPV dose from the primary series was administered. The primary series has been completed\n@pseudocode: "Completed the primary vaccination series" = TRUE (where "Vaccine type" = "Poliovirus-containing vaccines")\n*/\ndefine "Third bOPV dose from the primary series was administered. The primary series has been completed":\n Encounter."Number of Polio bOPV Primary Series Doses Administered" >= 3\n\n\n\n/*\n@test: Test expected results based on example patients\n*/\ndefine "Test Validation":\n case\n when Patient.id = 'Polio18.1' then "bOPV dose 1" and "IPV dose 1"\n when Patient.id = 'Polio19.2' then "bOPV dose 1" and "IPV dose 1"\n when Patient.id = 'Polio20.2' then "bOPV dose 1" and "IPV dose 1"\n when Patient.id = 'Polio21.3' then "IPV dose 1" and "bOPV dose 2"\n when Patient.id = 'Polio22.3' then "IPV dose 1" and "bOPV dose 2"\n when Patient.id = 'Polio23.4' then "IPV dose 1" and "bOPV dose 2"\n when Patient.id = 'Polio24.4' then "IPV dose 1" and "bOPV dose 2"\n when Patient.id = 'Polio25.4' then "IPV dose 2" and "bOPV dose 1"\n when Patient.id = 'Polio26.4' then "IPV dose 2" and "bOPV dose 1"\n when Patient.id = 'Polio27.4' then "IPV dose 1" and "bOPV dose 3"\n when Patient.id = 'Polio28.4' then "IPV dose 1" and "bOPV dose 3"\n when Patient.id = 'Polio29.4' then "IPV dose 1" and "bOPV dose 3"\n when Patient.id = 'Polio30.4' then "IPV dose 1" and "bOPV dose 3"\n when Patient.id = 'Polio31.4' then "IPV dose 2" and "bOPV dose 2"\n when Patient.id = 'Polio32.4' then "IPV dose 2" and "bOPV dose 2"\n when Patient.id = 'Polio33.4' then "IPV dose 2" and "bOPV dose 2"\n when Patient.id = 'Polio34.4' then "IPV dose 2" and "bOPV dose 2"\n when Patient.id = 'Polio35.2' then "bOPV dose 1"\n when Patient.id = 'Polio36.3' then "IPV dose 1"\n when Patient.id = 'Polio37.3' then "IPV dose 1"\n when Patient.id = 'Polio38.4' then "IPV dose 2" and "bOPV dose 3"\n when Patient.id = 'Polio39.4' then "IPV dose 2" and "bOPV dose 3"\n when Patient.id = 'Polio40.4' then "IPV dose 2" and "bOPV dose 3"\n when Patient.id = 'Polio41.4' then "IPV dose 2" and "bOPV dose 3"\n when Patient.id = 'Polio42.3' then "bOPV dose 2"\n when Patient.id = 'Polio43.3' then "bOPV dose 2"\n when Patient.id = 'Polio44.3' then "IPV dose 2"\n when Patient.id = 'Polio45.3' then "IPV dose 2"\n when Patient.id = 'Polio46.3' then "bOPV dose 3"\n when Patient.id = 'Polio47.3' then "bOPV dose 3"\n when Patient.id = 'Polio48.1' then "Third bOPV dose from the primary series was administered. The primary series has been completed"\n and "Second IPV dose from the primary series was administered"\n else 'No test case set'\n end\n</code></pre></td></tr>\n </table>\n </td>\n </tr>\n \n \n \n </table>\n</div>\n</div>"
},
"extension" : [
{
"url" : "http://hl7.org/fhir/StructureDefinition/cqf-knowledgeCapability",
"valueCode" : "computable"
}
],
"url" : "http://smart.who.int/immunizations/Library/IMMZD18SPolioBOPVPlusIPVLogic",
"version" : "1.0.0",
"name" : "IMMZD18SPolioBOPVPlusIPVLogic",
"title" : "IMMZD18SPolioBOPVPlusIPVLogic",
"status" : "draft",
"experimental" : false,
"type" : {
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/library-type",
"code" : "logic-library"
}
]
},
"date" : "2026-03-31T13:54:17+00:00",
"publisher" : "WHO",
"contact" : [
{
"name" : "WHO",
"telecom" : [
{
"system" : "url",
"value" : "http://who.int"
}
]
}
],
"description" : "This library defines decision support logic for the IMMZ.D18.S.Polio.bOPV plus IPV schedule table in the Immunization CPG",
"relatedArtifact" : [
{
"type" : "depends-on",
"display" : "Library WC",
"resource" : "http://smart.who.int/immunizations/Library/WHOCommon"
},
{
"type" : "depends-on",
"display" : "Library Common",
"resource" : "http://smart.who.int/immunizations/Library/IMMZCommon"
},
{
"type" : "depends-on",
"display" : "Library Concepts",
"resource" : "http://smart.who.int/immunizations/Library/IMMZConcepts"
},
{
"type" : "depends-on",
"display" : "Library IE",
"resource" : "http://smart.who.int/immunizations/Library/IMMZEncounterElements"
},
{
"type" : "depends-on",
"display" : "Library Encounter",
"resource" : "http://smart.who.int/immunizations/Library/IMMZD2DTPolioEncounterElements"
}
],
"parameter" : [
{
"name" : "Today",
"use" : "in",
"min" : 0,
"max" : "1",
"type" : "date"
},
{
"name" : "Patient",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Patient"
},
{
"name" : "First bOPV dose from the primary series was administered",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "boolean"
},
{
"name" : "bOPV dose 1",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "boolean"
},
{
"name" : "bOPV dose 1 Due Date",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "date"
},
{
"name" : "bOPV dose 1 Create",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "string"
},
{
"name" : "bOPV dose 1 Overdue",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Resource"
},
{
"name" : "bOPV dose 1 Expiration",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Resource"
},
{
"name" : "First IPV dose from the primary series was administered",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "boolean"
},
{
"name" : "IPV dose 1",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "boolean"
},
{
"name" : "IPV dose 1 Due Date",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "date"
},
{
"name" : "IPV dose 1 Create",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "string"
},
{
"name" : "IPV dose 1 Overdue",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Resource"
},
{
"name" : "IPV dose 1 Expiration",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Resource"
},
{
"name" : "Second bOPV dose from the primary series was administered",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "boolean"
},
{
"name" : "bOPV dose 2",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "boolean"
},
{
"name" : "bOPV dose 2 Due Date",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "date"
},
{
"name" : "bOPV dose 2 Create",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "string"
},
{
"name" : "bOPV dose 2 Overdue",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Resource"
},
{
"name" : "bOPV dose 2 Expiration",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Resource"
},
{
"name" : "Second IPV dose from the primary series was administered",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "boolean"
},
{
"name" : "IPV dose 2",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "boolean"
},
{
"name" : "IPV dose 2 Due Date",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "date"
},
{
"name" : "IPV dose 2 Create",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "string"
},
{
"name" : "IPV dose 2 Overdue",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Resource"
},
{
"name" : "IPV dose 2 Expiration",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Resource"
},
{
"name" : "Third bOPV dose from the primary series was administered. The primary series has been completed",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "boolean"
},
{
"name" : "bOPV dose 3",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "boolean"
},
{
"name" : "bOPV dose 3 Due Date",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "date"
},
{
"name" : "bOPV dose 3 Create",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "string"
},
{
"name" : "bOPV dose 3 Overdue",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Resource"
},
{
"name" : "bOPV dose 3 Expiration",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Resource"
},
{
"name" : "Test Validation",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Resource"
}
],
"content" : [
{
"contentType" : "text/cql",
"data" : "LyoKICogTGlicmFyeTogSU1NWkQxOFNQb2xpb0JPUFZQbHVzSVBWTG9naWMgKElNTVouRDE4LlMuUG9saW8uYk9QViBwbHVzIElQViBzY2hlZHVsZSkKICogU2NoZWR1bGUgVGFibGU6IEJpdmFsZW50IG9yYWwgcG9saW8gdmFjY2luZSAoYk9QVikgcGx1cyBpbmFjdGl2YXRlZCBwb2xpbyB2YWNjaW5lIChJUFYpIHNjaGVkdWxlCiAqLwpsaWJyYXJ5IElNTVpEMThTUG9saW9CT1BWUGx1c0lQVkxvZ2ljCgp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwppbmNsdWRlIEZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBXSE9Db21tb24gY2FsbGVkIFdDCgppbmNsdWRlIElNTVpDb21tb24gY2FsbGVkIENvbW1vbgppbmNsdWRlIElNTVpDb25jZXB0cyBjYWxsZWQgQ29uY2VwdHMKCmluY2x1ZGUgSU1NWkVuY291bnRlckVsZW1lbnRzIGNhbGxlZCBJRQppbmNsdWRlIElNTVpEMkRUUG9saW9FbmNvdW50ZXJFbGVtZW50cyBjYWxsZWQgRW5jb3VudGVyCgpwYXJhbWV0ZXIgVG9kYXkgRGF0ZSBkZWZhdWx0IFRvZGF5KCkKCgpjb250ZXh0IFBhdGllbnQKCgovKgpAb3V0cHV0OiBiT1BWIGRvc2UgMQpAZGVzY3JpcHRpb246IFByb3Zpc2lvbiBvZiBiT1BWIGRvc2UgMQpAdHJpZ2dlcjogQ2hpbGQncyBiaXJ0aApAcHNldWRvOiAKQHRyaWdnZXJEYXRlOiAiRGF0ZSBvZiBiaXJ0aCIKKi8KZGVmaW5lICJiT1BWIGRvc2UgMSI6CiAgbm90ICJGaXJzdCBiT1BWIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCIKCgovKgpAb3V0cHV0OiBiT1BWIGRvc2UgMSBDcmVhdGUKQGNyZWF0ZTogVGhlIHByZWZlcnJlZCBzY2hlZHVsZSBpcyB0byBhZG1pbmlzdGVyIHRoZSAzIGRvc2VzIG9mIGJPUFYgc3RhcnRpbmcgZnJvbSB0aGUgbWluaW11bSBhZ2Ugb2YgNiB3ZWVrcywgd2l0aCBhdCBsZWFzdCBhIDQgd2Vlay1pbnRlcnZhbCBiZXR3ZWVuIGRvc2VzLgoqLwpkZWZpbmUgImJPUFYgZG9zZSAxIENyZWF0ZSI6CiAgaWYgImJPUFYgZG9zZSAxIgogIHRoZW4gJ1RoZSBwcmVmZXJyZWQgc2NoZWR1bGUgaXMgdG8gYWRtaW5pc3RlciB0aGUgMyBkb3NlcyBvZiBiT1BWIHN0YXJ0aW5nIGZyb20gdGhlIG1pbmltdW0gYWdlIG9mIDYgd2Vla3MsIHdpdGggYXQgbGVhc3QgYSA0IHdlZWstaW50ZXJ2YWwgYmV0d2VlbiBkb3Nlcy4nICsgJwpEdWUgRGF0ZTogJyArIFRvU3RyaW5nKCJiT1BWIGRvc2UgMSBEdWUgRGF0ZSIpCiAgZWxzZSAnJwoKCi8qCkBkeW5hbWljVmFsdWU6IGJPUFYgZG9zZSAxIER1ZSBEYXRlCkBwc2V1ZG9jb2RlOiAiRGF0ZSBvZiBiaXJ0aCIgKyA2IHdlZWtzCiovCmRlZmluZSAiYk9QViBkb3NlIDEgRHVlIERhdGUiOgogIGlmICJiT1BWIGRvc2UgMSIgdGhlbiBQYXRpZW50LmJpcnRoRGF0ZSArIDYgd2Vla3MKICBlbHNlIG51bGwKCgovKgpAZHluYW1pY1ZhbHVlOiBiT1BWIGRvc2UgMSBPdmVyZHVlCkBwc2V1ZG9jb2RlOiBUbyBiZSBkZXRlcm1pbmVkIGJ5IE1lbWJlciBTdGF0ZXM7IGhvd2V2ZXIsIHRoZXJlIGlzIG5vIHJlY29tbWVuZGVkIG92ZXJkdWUgZGF0ZSBhbmQgaW5kaXZpZHVhbHMgYXJlIGFsd2F5cyBlbGlnaWJsZSB0byBiZSB2YWNjaW5hdGVkLgoqLwpkZWZpbmUgImJPUFYgZG9zZSAxIE92ZXJkdWUiOgogIG51bGwKCgovKgpAZHluYW1pY1ZhbHVlOiBiT1BWIGRvc2UgMSBFeHBpcmF0aW9uCkBwc2V1ZG9jb2RlOiBUbyBiZSBkZXRlcm1pbmVkIGJ5IE1lbWJlciBTdGF0ZXM7IGhvd2V2ZXIsIHRoZXJlIGlzIG5vIHJlY29tbWVuZGVkIG92ZXJkdWUgZGF0ZSBhbmQgaW5kaXZpZHVhbHMgYXJlIGFsd2F5cyBlbGlnaWJsZSB0byBiZSB2YWNjaW5hdGVkLgoqLwpkZWZpbmUgImJPUFYgZG9zZSAxIEV4cGlyYXRpb24iOgogIG51bGwKCiAgCi8qCkBjb21wbGV0ZTogRmlyc3QgYk9QViBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQKQHBzZXVkb2NvZGU6IENvdW50IG9mIHZhY2NpbmVzIGFkbWluaXN0ZXJlZCAod2hlcmUgIlR5cGUgb2YgZG9zZSIgPSAiUHJpbWFyeSBzZXJpZXMiIGFuZCAiVHlwZSBvZiBwb2xpb3ZpcnVzIGRvc2UiID0gImJPUFYiKSA9IDEKKi8KZGVmaW5lICJGaXJzdCBiT1BWIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCI6CiAgRW5jb3VudGVyLiJOdW1iZXIgb2YgUG9saW8gYk9QViBQcmltYXJ5IFNlcmllcyBEb3NlcyBBZG1pbmlzdGVyZWQiID49IDEKCgoKLyoKQG91dHB1dDogSVBWIGRvc2UgMQpAZGVzY3JpcHRpb246IFByb3Zpc2lvbiBvZiBJUFYgZG9zZSAxCkB0cmlnZ2VyOiBDaGlsZCdzIGJpcnRoCkBwc2V1ZG86IApAdHJpZ2dlckRhdGU6ICJEYXRlIG9mIGJpcnRoIgoqLwpkZWZpbmUgIklQViBkb3NlIDEiOgogIG5vdCAiRmlyc3QgSVBWIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCIKCgovKgpAb3V0cHV0OiBJUFYgZG9zZSAxIENyZWF0ZQpAY3JlYXRlOiBUaGUgZmlyc3QgSVBWIGRvc2Ugc2hvdWxkIGJlIGFkbWluaXN0ZXJlZCBmcm9tIGEgbWluaW11bSBvZiAxNCB3ZWVrcyBvZiBhZ2UuCiovCmRlZmluZSAiSVBWIGRvc2UgMSBDcmVhdGUiOgogIGlmICJJUFYgZG9zZSAxIgogIHRoZW4gJ1RoZSBmaXJzdCBJUFYgZG9zZSBzaG91bGQgYmUgYWRtaW5pc3RlcmVkIGZyb20gYSBtaW5pbXVtIG9mIDE0IHdlZWtzIG9mIGFnZS4nICsgJwpEdWUgRGF0ZTogJyArIFRvU3RyaW5nKCJJUFYgZG9zZSAxIER1ZSBEYXRlIikKICBlbHNlICcnCgoKLyoKQGR5bmFtaWNWYWx1ZTogSVBWIGRvc2UgMSBEdWUgRGF0ZQpAcHNldWRvY29kZTogIkRhdGUgb2YgYmlydGgiICsgMTQgd2Vla3MKKi8KZGVmaW5lICJJUFYgZG9zZSAxIER1ZSBEYXRlIjoKICBpZiAiSVBWIGRvc2UgMSIgdGhlbiBQYXRpZW50LmJpcnRoRGF0ZSArIDE0IHdlZWtzCiAgZWxzZSBudWxsCgoKLyoKQGR5bmFtaWNWYWx1ZTogSVBWIGRvc2UgMSBPdmVyZHVlCkBwc2V1ZG9jb2RlOiBUbyBiZSBkZXRlcm1pbmVkIGJ5IE1lbWJlciBTdGF0ZXM7IGhvd2V2ZXIsIHRoZXJlIGlzIG5vIHJlY29tbWVuZGVkIG92ZXJkdWUgZGF0ZSBhbmQgaW5kaXZpZHVhbHMgYXJlIGFsd2F5cyBlbGlnaWJsZSB0byBiZSB2YWNjaW5hdGVkLgoqLwpkZWZpbmUgIklQViBkb3NlIDEgT3ZlcmR1ZSI6CiAgbnVsbAoKCi8qCkBkeW5hbWljVmFsdWU6IElQViBkb3NlIDEgRXhwaXJhdGlvbgpAcHNldWRvY29kZTogVG8gYmUgZGV0ZXJtaW5lZCBieSBNZW1iZXIgU3RhdGVzOyBob3dldmVyLCB0aGVyZSBpcyBubyByZWNvbW1lbmRlZCBvdmVyZHVlIGRhdGUgYW5kIGluZGl2aWR1YWxzIGFyZSBhbHdheXMgZWxpZ2libGUgdG8gYmUgdmFjY2luYXRlZC4KKi8KZGVmaW5lICJJUFYgZG9zZSAxIEV4cGlyYXRpb24iOgogIG51bGwKCiAgCi8qCkBjb21wbGV0ZTogRmlyc3QgSVBWIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZApAcHNldWRvY29kZTogQ291bnQgb2YgdmFjY2luZXMgYWRtaW5pc3RlcmVkICh3aGVyZSAiVHlwZSBvZiBwb2xpb3ZpcnVzIGRvc2UiID0gIklQViIpID0gMQoqLwpkZWZpbmUgIkZpcnN0IElQViBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQiOgogIEVuY291bnRlci4iTnVtYmVyIG9mIFBvbGlvIElQViBQcmltYXJ5IFNlcmllcyBEb3NlcyBBZG1pbmlzdGVyZWQiID49IDEKCgoKLyoKQG91dHB1dDogYk9QViBkb3NlIDIKQGRlc2NyaXB0aW9uOiBQcm92aXNpb24gb2YgYk9QViBkb3NlIDIKQHRyaWdnZXI6IEZpcnN0IGJPUFYgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkCkBwc2V1ZG86IENvdW50IG9mIHZhY2NpbmVzIGFkbWluaXN0ZXJlZCAod2hlcmUgIlR5cGUgb2YgZG9zZSIgPSAiUHJpbWFyeSBzZXJpZXMiIGFuZCAiVHlwZSBvZiBwb2xpb3ZpcnVzIGRvc2UiID0gImJPUFYiKSA9IDEKQHRyaWdnZXJEYXRlOiBMYXRlc3QgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iICh3aGVyZSAiVHlwZSBvZiBwb2xpb3ZpcnVzIGRvc2UiID0gImJPUFYiKQoqLwpkZWZpbmUgImJPUFYgZG9zZSAyIjoKICAiRmlyc3QgYk9QViBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQiIGFuZCBub3QgIlNlY29uZCBiT1BWIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCIKCgovKgpAb3V0cHV0OiBiT1BWIGRvc2UgMiBDcmVhdGUKQGNyZWF0ZTogVGhlIHByZWZlcnJlZCBzY2hlZHVsZSBpcyB0byBhZG1pbmlzdGVyIHRoZSAzIGRvc2VzIG9mIGJPUFYgc3RhcnRpbmcgZnJvbSB0aGUgbWluaW11bSBhZ2Ugb2YgNiB3ZWVrcywgd2l0aCBhdCBsZWFzdCBhIDQgd2Vlay1pbnRlcnZhbCBiZXR3ZWVuIGRvc2VzLgoqLwpkZWZpbmUgImJPUFYgZG9zZSAyIENyZWF0ZSI6CiAgaWYgImJPUFYgZG9zZSAyIgogIHRoZW4gJ1RoZSBwcmVmZXJyZWQgc2NoZWR1bGUgaXMgdG8gYWRtaW5pc3RlciB0aGUgMyBkb3NlcyBvZiBiT1BWIHN0YXJ0aW5nIGZyb20gdGhlIG1pbmltdW0gYWdlIG9mIDYgd2Vla3MsIHdpdGggYXQgbGVhc3QgYSA0IHdlZWstaW50ZXJ2YWwgYmV0d2VlbiBkb3Nlcy4nICsgJwpEdWUgRGF0ZTogJyArIFRvU3RyaW5nKCJiT1BWIGRvc2UgMiBEdWUgRGF0ZSIpCiAgZWxzZSAnJwoKCi8qCkBkeW5hbWljVmFsdWU6IGJPUFYgZG9zZSAyIER1ZSBEYXRlCkBwc2V1ZG9jb2RlOiBMYXRlc3QgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iICh3aGVyZSAiVHlwZSBvZiBwb2xpb3ZpcnVzIGRvc2UiID0gImJPUFYiKSArIDQgd2Vla3MKKi8KZGVmaW5lICJiT1BWIGRvc2UgMiBEdWUgRGF0ZSI6CiAgaWYgImJPUFYgZG9zZSAyIiB0aGVuIEVuY291bnRlci4iRGF0ZSBvZiBMYXRlc3QgYk9QViBEb3NlIiArIDQgd2Vla3MKICBlbHNlIG51bGwKCgovKgpAZHluYW1pY1ZhbHVlOiBiT1BWIGRvc2UgMiBPdmVyZHVlCkBwc2V1ZG9jb2RlOiBUbyBiZSBkZXRlcm1pbmVkIGJ5IE1lbWJlciBTdGF0ZXM7IGhvd2V2ZXIsIHRoZXJlIGlzIG5vIHJlY29tbWVuZGVkIG92ZXJkdWUgZGF0ZSBhbmQgaW5kaXZpZHVhbHMgYXJlIGFsd2F5cyBlbGlnaWJsZSB0byBiZSB2YWNjaW5hdGVkLgoqLwpkZWZpbmUgImJPUFYgZG9zZSAyIE92ZXJkdWUiOgogIG51bGwKCgovKgpAZHluYW1pY1ZhbHVlOiBiT1BWIGRvc2UgMiBFeHBpcmF0aW9uCkBwc2V1ZG9jb2RlOiBUbyBiZSBkZXRlcm1pbmVkIGJ5IE1lbWJlciBTdGF0ZXM7IGhvd2V2ZXIsIHRoZXJlIGlzIG5vIHJlY29tbWVuZGVkIG92ZXJkdWUgZGF0ZSBhbmQgaW5kaXZpZHVhbHMgYXJlIGFsd2F5cyBlbGlnaWJsZSB0byBiZSB2YWNjaW5hdGVkLgoqLwpkZWZpbmUgImJPUFYgZG9zZSAyIEV4cGlyYXRpb24iOgogIG51bGwKCiAgCi8qCkBjb21wbGV0ZTogU2Vjb25kIGJPUFYgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkCkBwc2V1ZG9jb2RlOiBDb3VudCBvZiB2YWNjaW5lcyBhZG1pbmlzdGVyZWQgKHdoZXJlICJUeXBlIG9mIGRvc2UiID0gIlByaW1hcnkgc2VyaWVzIiBhbmQgIlR5cGUgb2YgcG9saW92aXJ1cyBkb3NlIiA9ICJiT1BWIikgPSAyCiovCmRlZmluZSAiU2Vjb25kIGJPUFYgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkIjoKICBFbmNvdW50ZXIuIk51bWJlciBvZiBQb2xpbyBiT1BWIFByaW1hcnkgU2VyaWVzIERvc2VzIEFkbWluaXN0ZXJlZCIgPj0gMgoKCgovKgpAb3V0cHV0OiBJUFYgZG9zZSAyCkBkZXNjcmlwdGlvbjogUHJvdmlzaW9uIG9mIElQViBkb3NlIDIKQHRyaWdnZXI6IEZpcnN0IElQViBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQKQHBzZXVkbzogQ291bnQgb2YgdmFjY2luZXMgYWRtaW5pc3RlcmVkICh3aGVyZSAiVHlwZSBvZiBwb2xpb3ZpcnVzIGRvc2UiID0gIklQViIpID0gMQpAdHJpZ2dlckRhdGU6IExhdGVzdCAiRGF0ZSBhbmQgdGltZSBvZiB2YWNjaW5hdGlvbiIgKHdoZXJlICJUeXBlIG9mIHBvbGlvdmlydXMgZG9zZSIgPSAiSVBWIikKKi8KZGVmaW5lICJJUFYgZG9zZSAyIjoKICAiRmlyc3QgSVBWIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCIgYW5kIG5vdCAiU2Vjb25kIElQViBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQiCgoKLyoKQG91dHB1dDogSVBWIGRvc2UgMiBDcmVhdGUKQGNyZWF0ZTogVGhlIGZpcnN0IElQViBkb3NlIHNob3VsZCBiZSBhZG1pbmlzdGVyZWQgZnJvbSBhIG1pbmltdW0gb2YgMTQgd2Vla3Mgb2YgYWdlICh3aXRoIHRoZSB0aGlyZCBkb3NlIG9mIHRoZSBkaXBodGhlcmlh4oCTdGV0YW51c+KAk3BlcnR1c3NpcyB2YWNjaW5lIFtEVFAzXSBvciBwZW50YXZhbGVudCB2YWNjaW5lIFtwZW50YTNdKSwgd2l0aCB0aGUgc2Vjb25kIElQViBkb3NlIGJlaW5nIGdpdmVuIGF0IGxlYXN0IDQgbW9udGhzIGxhdGVyIChwb3NzaWJseSBjb2luY2lkaW5nIHdpdGggb3RoZXIgdmFjY2luZXMgYWRtaW5pc3RlcmVkIGF0IDkgbW9udGhzIG9mIGFnZSkuCiovCmRlZmluZSAiSVBWIGRvc2UgMiBDcmVhdGUiOgogIGlmICJJUFYgZG9zZSAyIgogIHRoZW4gJ1RoZSBmaXJzdCBJUFYgZG9zZSBzaG91bGQgYmUgYWRtaW5pc3RlcmVkIGZyb20gYSBtaW5pbXVtIG9mIDE0IHdlZWtzIG9mIGFnZSAod2l0aCB0aGUgdGhpcmQgZG9zZSBvZiB0aGUgZGlwaHRoZXJpYeKAk3RldGFudXPigJNwZXJ0dXNzaXMgdmFjY2luZSBbRFRQM10gb3IgcGVudGF2YWxlbnQgdmFjY2luZSBbcGVudGEzXSksIHdpdGggdGhlIHNlY29uZCBJUFYgZG9zZSBiZWluZyBnaXZlbiBhdCBsZWFzdCA0IG1vbnRocyBsYXRlciAocG9zc2libHkgY29pbmNpZGluZyB3aXRoIG90aGVyIHZhY2NpbmVzIGFkbWluaXN0ZXJlZCBhdCA5IG1vbnRocyBvZiBhZ2UpLicgKyAnCkR1ZSBEYXRlOiAnICsgVG9TdHJpbmcoIklQViBkb3NlIDIgRHVlIERhdGUiKQogIGVsc2UgJycKCgovKgpAZHluYW1pY1ZhbHVlOiBJUFYgZG9zZSAyIER1ZSBEYXRlCkBwc2V1ZG9jb2RlOiBMYXRlc3QgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iICh3aGVyZSAiVHlwZSBvZiBwb2xpb3ZpcnVzIGRvc2UiID0gIklQViIpICsgNCBtb250aHMKKi8KZGVmaW5lICJJUFYgZG9zZSAyIER1ZSBEYXRlIjoKICBpZiAiSVBWIGRvc2UgMiIgdGhlbiBFbmNvdW50ZXIuIkRhdGUgb2YgTGF0ZXN0IElQViBEb3NlIiArIDQgbW9udGhzCiAgZWxzZSBudWxsCgoKLyoKQGR5bmFtaWNWYWx1ZTogSVBWIGRvc2UgMiBPdmVyZHVlCkBwc2V1ZG9jb2RlOiBUbyBiZSBkZXRlcm1pbmVkIGJ5IE1lbWJlciBTdGF0ZXM7IGhvd2V2ZXIsIHRoZXJlIGlzIG5vIHJlY29tbWVuZGVkIG92ZXJkdWUgZGF0ZSBhbmQgaW5kaXZpZHVhbHMgYXJlIGFsd2F5cyBlbGlnaWJsZSB0byBiZSB2YWNjaW5hdGVkLgoqLwpkZWZpbmUgIklQViBkb3NlIDIgT3ZlcmR1ZSI6CiAgbnVsbAoKCi8qCkBkeW5hbWljVmFsdWU6IElQViBkb3NlIDIgRXhwaXJhdGlvbgpAcHNldWRvY29kZTogVG8gYmUgZGV0ZXJtaW5lZCBieSBNZW1iZXIgU3RhdGVzOyBob3dldmVyLCB0aGVyZSBpcyBubyByZWNvbW1lbmRlZCBvdmVyZHVlIGRhdGUgYW5kIGluZGl2aWR1YWxzIGFyZSBhbHdheXMgZWxpZ2libGUgdG8gYmUgdmFjY2luYXRlZC4KKi8KZGVmaW5lICJJUFYgZG9zZSAyIEV4cGlyYXRpb24iOgogIG51bGwKCiAgCi8qCkBjb21wbGV0ZTogU2Vjb25kIElQViBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQKQHBzZXVkb2NvZGU6IENvdW50IG9mIHZhY2NpbmVzIGFkbWluaXN0ZXJlZCAod2hlcmUgIlR5cGUgb2YgcG9saW92aXJ1cyBkb3NlIiA9ICJJUFYiKSA9IDIKKi8KZGVmaW5lICJTZWNvbmQgSVBWIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCI6CiAgRW5jb3VudGVyLiJOdW1iZXIgb2YgUG9saW8gSVBWIFByaW1hcnkgU2VyaWVzIERvc2VzIEFkbWluaXN0ZXJlZCIgPj0gMgoKCgovKgpAb3V0cHV0OiBiT1BWIGRvc2UgMwpAZGVzY3JpcHRpb246IFByb3Zpc2lvbiBvZiBiT1BWIGRvc2UgMwpAdHJpZ2dlcjogU2Vjb25kIGJPUFYgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkCkBwc2V1ZG86IENvdW50IG9mIHZhY2NpbmVzIGFkbWluaXN0ZXJlZCAod2hlcmUgIlR5cGUgb2YgZG9zZSIgPSAiUHJpbWFyeSBzZXJpZXMiIGFuZCAiVHlwZSBvZiBwb2xpb3ZpcnVzIGRvc2UiID0gImJPUFYiKSA9IDIKQHRyaWdnZXJEYXRlOiBMYXRlc3QgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iICh3aGVyZSAiVHlwZSBvZiBwb2xpb3ZpcnVzIGRvc2UiID0gImJPUFYiKQoqLwpkZWZpbmUgImJPUFYgZG9zZSAzIjoKICAiU2Vjb25kIGJPUFYgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkIiBhbmQgbm90ICJUaGlyZCBiT1BWIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZC4gVGhlIHByaW1hcnkgc2VyaWVzIGhhcyBiZWVuIGNvbXBsZXRlZCIKCgovKgpAb3V0cHV0OiBiT1BWIGRvc2UgMyBDcmVhdGUKQGNyZWF0ZTogVGhlIHByZWZlcnJlZCBzY2hlZHVsZSBpcyB0byBhZG1pbmlzdGVyIHRoZSAzIGRvc2VzIG9mIGJPUFYgc3RhcnRpbmcgZnJvbSB0aGUgbWluaW11bSBhZ2Ugb2YgNiB3ZWVrcywgd2l0aCBhdCBsZWFzdCBhIDQgd2Vlay1pbnRlcnZhbCBiZXR3ZWVuIGRvc2VzLgoqLwpkZWZpbmUgImJPUFYgZG9zZSAzIENyZWF0ZSI6CiAgaWYgImJPUFYgZG9zZSAzIgogIHRoZW4gJ1RoZSBwcmVmZXJyZWQgc2NoZWR1bGUgaXMgdG8gYWRtaW5pc3RlciB0aGUgMyBkb3NlcyBvZiBiT1BWIHN0YXJ0aW5nIGZyb20gdGhlIG1pbmltdW0gYWdlIG9mIDYgd2Vla3MsIHdpdGggYXQgbGVhc3QgYSA0IHdlZWstaW50ZXJ2YWwgYmV0d2VlbiBkb3Nlcy4nICsgJwpEdWUgRGF0ZTogJyArIFRvU3RyaW5nKCJiT1BWIGRvc2UgMyBEdWUgRGF0ZSIpCiAgZWxzZSAnJwoKCi8qCkBkeW5hbWljVmFsdWU6IGJPUFYgZG9zZSAzIER1ZSBEYXRlCkBwc2V1ZG9jb2RlOiBMYXRlc3QgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iICh3aGVyZSAiVHlwZSBvZiBwb2xpb3ZpcnVzIGRvc2UiID0gImJPUFYiKSArIDQgd2Vla3MKKi8KZGVmaW5lICJiT1BWIGRvc2UgMyBEdWUgRGF0ZSI6CiAgaWYgImJPUFYgZG9zZSAzIiB0aGVuIEVuY291bnRlci4iRGF0ZSBvZiBMYXRlc3QgYk9QViBEb3NlIiArIDQgd2Vla3MKICBlbHNlIG51bGwKCgovKgpAZHluYW1pY1ZhbHVlOiBiT1BWIGRvc2UgMyBPdmVyZHVlCkBwc2V1ZG9jb2RlOiBUbyBiZSBkZXRlcm1pbmVkIGJ5IE1lbWJlciBTdGF0ZXM7IGhvd2V2ZXIsIHRoZXJlIGlzIG5vIHJlY29tbWVuZGVkIG92ZXJkdWUgZGF0ZSBhbmQgaW5kaXZpZHVhbHMgYXJlIGFsd2F5cyBlbGlnaWJsZSB0byBiZSB2YWNjaW5hdGVkLgoqLwpkZWZpbmUgImJPUFYgZG9zZSAzIE92ZXJkdWUiOgogIG51bGwKCgovKgpAZHluYW1pY1ZhbHVlOiBiT1BWIGRvc2UgMyBFeHBpcmF0aW9uCkBwc2V1ZG9jb2RlOiBUbyBiZSBkZXRlcm1pbmVkIGJ5IE1lbWJlciBTdGF0ZXM7IGhvd2V2ZXIsIHRoZXJlIGlzIG5vIHJlY29tbWVuZGVkIG92ZXJkdWUgZGF0ZSBhbmQgaW5kaXZpZHVhbHMgYXJlIGFsd2F5cyBlbGlnaWJsZSB0byBiZSB2YWNjaW5hdGVkLgoqLwpkZWZpbmUgImJPUFYgZG9zZSAzIEV4cGlyYXRpb24iOgogIG51bGwKCiAgCi8qCkBjb21wbGV0ZTogVGhpcmQgYk9QViBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQuIFRoZSBwcmltYXJ5IHNlcmllcyBoYXMgYmVlbiBjb21wbGV0ZWQKQHBzZXVkb2NvZGU6ICJDb21wbGV0ZWQgdGhlIHByaW1hcnkgdmFjY2luYXRpb24gc2VyaWVzIiA9IFRSVUUgKHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIlBvbGlvdmlydXMtY29udGFpbmluZyB2YWNjaW5lcyIpCiovCmRlZmluZSAiVGhpcmQgYk9QViBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQuIFRoZSBwcmltYXJ5IHNlcmllcyBoYXMgYmVlbiBjb21wbGV0ZWQiOgogIEVuY291bnRlci4iTnVtYmVyIG9mIFBvbGlvIGJPUFYgUHJpbWFyeSBTZXJpZXMgRG9zZXMgQWRtaW5pc3RlcmVkIiA+PSAzCgoKCi8qCkB0ZXN0OiBUZXN0IGV4cGVjdGVkIHJlc3VsdHMgYmFzZWQgb24gZXhhbXBsZSBwYXRpZW50cwoqLwpkZWZpbmUgIlRlc3QgVmFsaWRhdGlvbiI6CiAgY2FzZQogICAgd2hlbiBQYXRpZW50LmlkID0gJ1BvbGlvMTguMScgdGhlbiAiYk9QViBkb3NlIDEiIGFuZCAiSVBWIGRvc2UgMSIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdQb2xpbzE5LjInIHRoZW4gImJPUFYgZG9zZSAxIiBhbmQgIklQViBkb3NlIDEiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG9saW8yMC4yJyB0aGVuICJiT1BWIGRvc2UgMSIgYW5kICJJUFYgZG9zZSAxIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1BvbGlvMjEuMycgdGhlbiAiSVBWIGRvc2UgMSIgYW5kICJiT1BWIGRvc2UgMiIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdQb2xpbzIyLjMnIHRoZW4gIklQViBkb3NlIDEiIGFuZCAiYk9QViBkb3NlIDIiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG9saW8yMy40JyB0aGVuICJJUFYgZG9zZSAxIiBhbmQgImJPUFYgZG9zZSAyIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1BvbGlvMjQuNCcgdGhlbiAiSVBWIGRvc2UgMSIgYW5kICJiT1BWIGRvc2UgMiIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdQb2xpbzI1LjQnIHRoZW4gIklQViBkb3NlIDIiIGFuZCAiYk9QViBkb3NlIDEiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG9saW8yNi40JyB0aGVuICJJUFYgZG9zZSAyIiBhbmQgImJPUFYgZG9zZSAxIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1BvbGlvMjcuNCcgdGhlbiAiSVBWIGRvc2UgMSIgYW5kICJiT1BWIGRvc2UgMyIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdQb2xpbzI4LjQnIHRoZW4gIklQViBkb3NlIDEiIGFuZCAiYk9QViBkb3NlIDMiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG9saW8yOS40JyB0aGVuICJJUFYgZG9zZSAxIiBhbmQgImJPUFYgZG9zZSAzIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1BvbGlvMzAuNCcgdGhlbiAiSVBWIGRvc2UgMSIgYW5kICJiT1BWIGRvc2UgMyIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdQb2xpbzMxLjQnIHRoZW4gIklQViBkb3NlIDIiIGFuZCAiYk9QViBkb3NlIDIiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG9saW8zMi40JyB0aGVuICJJUFYgZG9zZSAyIiBhbmQgImJPUFYgZG9zZSAyIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1BvbGlvMzMuNCcgdGhlbiAiSVBWIGRvc2UgMiIgYW5kICJiT1BWIGRvc2UgMiIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdQb2xpbzM0LjQnIHRoZW4gIklQViBkb3NlIDIiIGFuZCAiYk9QViBkb3NlIDIiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG9saW8zNS4yJyB0aGVuICJiT1BWIGRvc2UgMSIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdQb2xpbzM2LjMnIHRoZW4gIklQViBkb3NlIDEiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG9saW8zNy4zJyB0aGVuICJJUFYgZG9zZSAxIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1BvbGlvMzguNCcgdGhlbiAiSVBWIGRvc2UgMiIgYW5kICJiT1BWIGRvc2UgMyIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdQb2xpbzM5LjQnIHRoZW4gIklQViBkb3NlIDIiIGFuZCAiYk9QViBkb3NlIDMiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG9saW80MC40JyB0aGVuICJJUFYgZG9zZSAyIiBhbmQgImJPUFYgZG9zZSAzIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1BvbGlvNDEuNCcgdGhlbiAiSVBWIGRvc2UgMiIgYW5kICJiT1BWIGRvc2UgMyIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdQb2xpbzQyLjMnIHRoZW4gImJPUFYgZG9zZSAyIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1BvbGlvNDMuMycgdGhlbiAiYk9QViBkb3NlIDIiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG9saW80NC4zJyB0aGVuICJJUFYgZG9zZSAyIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1BvbGlvNDUuMycgdGhlbiAiSVBWIGRvc2UgMiIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdQb2xpbzQ2LjMnIHRoZW4gImJPUFYgZG9zZSAzIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1BvbGlvNDcuMycgdGhlbiAiYk9QViBkb3NlIDMiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG9saW80OC4xJyB0aGVuICJUaGlyZCBiT1BWIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZC4gVGhlIHByaW1hcnkgc2VyaWVzIGhhcyBiZWVuIGNvbXBsZXRlZCIKICAgICAgYW5kICJTZWNvbmQgSVBWIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCIKICAgIGVsc2UgJ05vIHRlc3QgY2FzZSBzZXQnCiAgZW5kCg=="
}
]
}