<?xml version="1.0" encoding="UTF-8"?>

<Library xmlns="http://hl7.org/fhir">
  <id value="IMMZD18SRotavirusLogic"/>
  <meta>
    <profile value="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary"/>
    <profile value="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary"/>
    <profile value="http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library"/>
    <profile value="http://hl7.org/fhir/uv/cql/StructureDefinition/cql-module"/>
  </meta>
  <text>
    <status value="extensions"/><div xmlns="http://www.w3.org/1999/xhtml">
<div>
    <table class="grid dict">
        
        
        <tr>
            <th scope="row"><b>Title: </b></th>
            <td style="padding-left: 4px;">IMMZD18SRotavirusLogic</td>
        </tr>
        

        
        
        <tr>
            <th scope="row"><b>Id: </b></th>
            <td style="padding-left: 4px;">IMMZD18SRotavirusLogic</td>
        </tr>
        

        
        
        <tr>
            <th scope="row"><b>Version: </b></th>
            <td style="padding-left: 4px;">1.0.0</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Url: </b></th>
            <td style="padding-left: 4px;"><a href="Library-IMMZD18SRotavirusLogic.html">IMMZD18SRotavirusLogic</a></td>
        </tr>
        

        

        

        
        <tr>
            <th scope="row"><b>Status: </b></th>
            <td style="padding-left: 4px;">draft</td>
        </tr>
        

        

        
        <tr>
            <th scope="row"><b>Type: </b></th>
            <td style="padding-left: 4px;">
                
                    
                        
                        <p style="margin-bottom: 5px;">
                            <b>system: </b> <span><a href="http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html">http://terminology.hl7.org/CodeSystem/library-type</a></span>
                        </p>
                        
                        
                        <p style="margin-bottom: 5px;">
                            <b>code: </b> <span>logic-library</span>
                        </p>
                        
                        
                    
                
                
            </td>
        </tr>
        

        

        
        <tr>
            <th scope="row"><b>Date: </b></th>
            <td style="padding-left: 4px;">2026-03-31 13:54:17+0000</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Publisher: </b></th>
            <td style="padding-left: 4px;">WHO</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Description: </b></th>
            <td style="padding-left: 4px;"><div><p>This library defines decision support logic for the IMMZ.D18.S.Rotavirus schedule table in the Immunization CPG</p>
</div></td>
        </tr>
        

        

        

        

        

        

        

        

        

        

        

        
        <tr>
            <th scope="row"><b>Related Artifacts: </b></th>
            <td style="padding-left: 4px;">
                
                
                
                <p><b>Dependencies</b></p>
                <ul>
                  
                    <li><a href="Library-WHOCommon.html">WHOCommon</a></li>
                  
                    <li><a href="Library-IMMZCommon.html">IMMZCommon</a></li>
                  
                    <li><a href="Library-IMMZConcepts.html">IMMZConcepts</a></li>
                  
                    <li><a href="Library-IMMZEncounterElements.html">IMMZEncounterElements</a></li>
                  
                    <li><a href="Library-IMMZD2DTRotavirusEncounterElements.html">IMMZD2DTRotavirusEncounterElements</a></li>
                  
                </ul>
                
                
                
                
                
            </td>
        </tr>
        

        
        <tr>
          <th scope="row"><b>Parameters: </b></th>
          <td style="padding-left: 4px;">
            <table class="grid-dict">
              <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>
              
                <tr><th>Today</th><th>date</th><th>0</th><th>1</th><th>In</th></tr>
              
                <tr><th>Patient</th><th>Patient</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 1 Expiration</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>First rotavirus dose from the primary series was administered</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 1</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 1 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 1 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 1 Overdue</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 2 Expiration</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Second rotavirus dose from the primary series was administered</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 2</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 2 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 2 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 2 Overdue</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 3 Expiration</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Third rotavirus dose from the primary series was administered</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 3</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 3 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 3 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 3 Overdue</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Test Validation</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>
              
            </table>
          </td>
        </tr>
        

        

        
        
        <tr>
          <td colspan="2">
            <table>
              <tr><th><a id="cql-content"><b>Content: </b></a> text/cql</th></tr>
              <tr><td><pre><code class="language-cql">/*
 * Library: IMMZD18SRotavirusLogic (IMMZ.D18.S.Rotavirus schedule)
 * Schedule Table: IMMZ.D18.S.Rotavirus schedule
 */
library IMMZD18SRotavirusLogic

using FHIR version '4.0.1'
include FHIRHelpers version '4.0.1'

include WHOCommon called WC

include IMMZCommon called Common
include IMMZConcepts called Concepts

include IMMZEncounterElements called IE
include IMMZD2DTRotavirusEncounterElements called Encounter

parameter Today Date default Today()


context Patient


/*
@output: Rotavirus dose 1
@description: Provision of the rotavirus first dose
@trigger: Child's birth
@pseudo: 
@triggerDate: &quot;Date of birth&quot;
*/
define &quot;Rotavirus dose 1&quot;:
  Encounter.&quot;No rotavirus primary series doses were administered&quot;
  and &quot;Rotavirus dose 1 Expiration&quot; after day of Today
  and not &quot;First rotavirus dose from the primary series was administered&quot;


/*
@output: Rotavirus dose 1 Create
@create: WHO recommends that the first dose of rotavirus vaccine be administered as soon as possible after 6 weeks of age.
*/
define &quot;Rotavirus dose 1 Create&quot;:
  if &quot;Rotavirus dose 1&quot;
  then 'WHO recommends that the first dose of rotavirus vaccine be administered as soon as possible after 6 weeks of age.' + '
Due Date: ' + ToString(&quot;Rotavirus dose 1 Due Date&quot;) + '
Expiration: ' + ToString(&quot;Rotavirus dose 1 Expiration&quot;)
  else ''


/*
@dynamicValue: Rotavirus dose 1 Due Date
@pseudocode: &quot;Date of birth&quot; + 6 weeks
*/
define &quot;Rotavirus dose 1 Due Date&quot;:
  if &quot;Rotavirus dose 1&quot; then Patient.birthDate + 6 weeks
  else null


/*
@dynamicValue: Rotavirus dose 1 Overdue
@pseudocode: To be determined by Member States; however, there is no recommended overdue date.
*/
define &quot;Rotavirus dose 1 Overdue&quot;:
  null


/*
@dynamicValue: Rotavirus dose 1 Expiration
@pseudocode: &quot;Date of birth&quot; + 24 months
*/
define &quot;Rotavirus dose 1 Expiration&quot;:
  Patient.birthDate + 24 months

  
/*
@complete: First rotavirus dose from the primary series was administered
@pseudocode: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot;) = 1
*/
define &quot;First rotavirus dose from the primary series was administered&quot;:
  Encounter.&quot;One rotavirus primary series dose was administered&quot;



/*
@output: Rotavirus dose 2
@description: Provision of the rotavirus second dose
@trigger: First rotavirus dose from the primary series was administered
@pseudo: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot;) = 1
@triggerDate: Latest &quot;Date and time of vaccination&quot; where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot;
*/
define &quot;Rotavirus dose 2&quot;:
  &quot;First rotavirus dose from the primary series was administered&quot;
  and &quot;Rotavirus dose 2 Expiration&quot; after day of Today
  and not &quot;Second rotavirus dose from the primary series was administered&quot;


/*
@output: Rotavirus dose 2 Create
@create: A minimum interval of 4 weeks should be maintained between doses.
*/
define &quot;Rotavirus dose 2 Create&quot;:
  if &quot;Rotavirus dose 2&quot;
  then 'A minimum interval of 4 weeks should be maintained between doses.' + '
Due Date: ' + ToString(&quot;Rotavirus dose 2 Due Date&quot;) + '
Expiration: ' + ToString(&quot;Rotavirus dose 2 Expiration&quot;)
  else ''


/*
@dynamicValue: Rotavirus dose 2 Due Date
@pseudocode: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot;) + 4 weeks
*/
define &quot;Rotavirus dose 2 Due Date&quot;:
  if &quot;Rotavirus dose 2&quot; then Encounter.&quot;Date of Latest Rotavirus Dose&quot; + 4 weeks
  else null


/*
@dynamicValue: Rotavirus dose 2 Overdue
@pseudocode: To be determined by Member States; however, there is no recommended overdue date.
*/
define &quot;Rotavirus dose 2 Overdue&quot;:
  null


/*
@dynamicValue: Rotavirus dose 2 Expiration
@pseudocode: &quot;Date of birth&quot; + 24 months
*/
define &quot;Rotavirus dose 2 Expiration&quot;:
  Patient.birthDate + 24 months

  
/*
@complete: Second rotavirus dose from the primary series was administered
@pseudocode: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot;) = 2
*/
define &quot;Second rotavirus dose from the primary series was administered&quot;:
  Encounter.&quot;Two rotavirus primary series doses were administered&quot;



/*
@output: Rotavirus dose 3
@description: Provision of a rotavirus third dose
@trigger: For a series containing more than two doses, two rotavirus primary series doses of mixed series or a series with unknown vaccine products were administered
@pseudo: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot;and &quot;Type of dose&quot; = &quot;Primary series&quot; ) = 2 
AND &quot;Vaccine brand&quot; (where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot; AND &quot;Dose number&quot; = 1) ≠ &quot;Vaccine brand&quot; (where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot; AND &quot;Dose number&quot; = 2) OR &quot;Total doses in series&quot; &gt; 2
@triggerDate: Latest &quot;Date and time of vaccination&quot; where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot;
*/
define &quot;Rotavirus dose 3&quot;:
  &quot;Second rotavirus dose from the primary series was administered&quot;
  and (
    Encounter.&quot;The series administered to the client is a mixed series or a series with unknown vaccine products&quot;
    or Encounter.&quot;The series contain more than two doses&quot;
  )
  and &quot;Rotavirus dose 3 Expiration&quot; after day of Today
  and not &quot;Third rotavirus dose from the primary series was administered&quot;


/*
@output: Rotavirus dose 3 Create
@create: For a mixed series or a series with any unknown vaccine products, a total of 3 doses of rotavirus vaccine should be administered for a complete vaccination series.
RotaTeq, Rotavac and Rotasiil should be administered in a 3-dose schedule.
*/
define &quot;Rotavirus dose 3 Create&quot;:
  if &quot;Rotavirus dose 3&quot;
  then 'For a mixed series or a series with any unknown vaccine products, a total of 3 doses of rotavirus vaccine should be administered for a complete vaccination series.
RotaTeq, Rotavac and Rotasiil should be administered in a 3-dose schedule.' + '
Due Date: ' + ToString(&quot;Rotavirus dose 3 Due Date&quot;) + '
Expiration: ' + ToString(&quot;Rotavirus dose 3 Expiration&quot;)
  else ''


/*
@dynamicValue: Rotavirus dose 3 Due Date
@pseudocode: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot;) + 4 weeks
*/
define &quot;Rotavirus dose 3 Due Date&quot;:
  if &quot;Rotavirus dose 3&quot; then Encounter.&quot;Date of Latest Rotavirus Dose&quot; + 4 weeks
  else null


/*
@dynamicValue: Rotavirus dose 3 Overdue
@pseudocode: To be determined by Member States; however, there is no recommended overdue date.
*/
define &quot;Rotavirus dose 3 Overdue&quot;:
  null


/*
@dynamicValue: Rotavirus dose 3 Expiration
@pseudocode: &quot;Date of birth&quot; + 24 months
*/
define &quot;Rotavirus dose 3 Expiration&quot;:
  Patient.birthDate + 24 months

  
/*
@complete: Third rotavirus dose from the primary series was administered
@pseudocode: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot;) = 3
*/
define &quot;Third rotavirus dose from the primary series was administered&quot;:
  Encounter.&quot;Three rotavirus primary series doses were administered&quot;



/*
@test: Test expected results based on example patients
*/
define &quot;Test Validation&quot;:
  case
    when Patient.id = 'Rotavirus07.1' then &quot;Rotavirus dose 1&quot;
    when Patient.id = 'Rotavirus08.3' then &quot;Rotavirus dose 1&quot;
    when Patient.id = 'Rotavirus09.3' then &quot;Rotavirus dose 1&quot;
    when Patient.id = 'Rotavirus10.3' then &quot;Rotavirus dose 2&quot;
    when Patient.id = 'Rotavirus11.3' then &quot;Rotavirus dose 2&quot;
    when Patient.id = 'Rotavirus12.4' then &quot;Rotavirus dose 3&quot;
    when Patient.id = 'Rotavirus13.4' then &quot;Rotavirus dose 3&quot;
    when Patient.id = 'Rotavirus14.5' then &quot;Rotavirus dose 3&quot;
    when Patient.id = 'Rotavirus15.5' then &quot;Rotavirus dose 3&quot;
    when Patient.id = 'Rotavirus16.4' then &quot;Second rotavirus dose from the primary series was administered&quot; and not &quot;Rotavirus dose 3&quot;
    when Patient.id = 'Rotavirus17.1' then &quot;Third rotavirus dose from the primary series was administered&quot;
    when Patient.id = 'Rotavirus18.1' then not &quot;Rotavirus dose 1&quot;
    else 'No test case set'
  end
</code></pre></td></tr>
            </table>
          </td>
        </tr>
        
        
        
    </table>
</div>
</div>
  </text>
  <extension url="http://hl7.org/fhir/StructureDefinition/cqf-knowledgeCapability">
    <valueCode value="computable"/>
  </extension>
  <url value="http://smart.who.int/immunizations/Library/IMMZD18SRotavirusLogic"/>
  <version value="1.0.0"/>
  <name value="IMMZD18SRotavirusLogic"/>
  <title value="IMMZD18SRotavirusLogic"/>
  <status value="draft"/>
  <experimental value="false"/>
  <type>
    <coding>
      <system value="http://terminology.hl7.org/CodeSystem/library-type"/>
      <code value="logic-library"/>
    </coding>
  </type>
  <date value="2026-03-31T13:54:17+00:00"/>
  <publisher value="WHO"/>
  <contact>
    <name value="WHO"/>
    <telecom>
      <system value="url"/>
      <value value="http://who.int"/>
    </telecom>
  </contact>
  <description value="This library defines decision support logic for the IMMZ.D18.S.Rotavirus schedule table in the Immunization CPG"/>
  <relatedArtifact>
    <type value="depends-on"/>
    <display value="Library WC"/>
    <resource value="http://smart.who.int/immunizations/Library/WHOCommon"/>
  </relatedArtifact>
  <relatedArtifact>
    <type value="depends-on"/>
    <display value="Library Common"/>
    <resource value="http://smart.who.int/immunizations/Library/IMMZCommon"/>
  </relatedArtifact>
  <relatedArtifact>
    <type value="depends-on"/>
    <display value="Library Concepts"/>
    <resource value="http://smart.who.int/immunizations/Library/IMMZConcepts"/>
  </relatedArtifact>
  <relatedArtifact>
    <type value="depends-on"/>
    <display value="Library IE"/>
    <resource value="http://smart.who.int/immunizations/Library/IMMZEncounterElements"/>
  </relatedArtifact>
  <relatedArtifact>
    <type value="depends-on"/>
    <display value="Library Encounter"/>
    <resource value="http://smart.who.int/immunizations/Library/IMMZD2DTRotavirusEncounterElements"/>
  </relatedArtifact>
  <parameter>
    <name value="Today"/>
    <use value="in"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="Patient"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Patient"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 1 Expiration"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="First rotavirus dose from the primary series was administered"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 1"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 1 Due Date"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 1 Create"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="string"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 1 Overdue"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Resource"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 2 Expiration"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="Second rotavirus dose from the primary series was administered"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 2"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 2 Due Date"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 2 Create"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="string"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 2 Overdue"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Resource"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 3 Expiration"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="Third rotavirus dose from the primary series was administered"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 3"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 3 Due Date"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 3 Create"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="string"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 3 Overdue"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Resource"/>
  </parameter>
  <parameter>
    <name value="Test Validation"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Resource"/>
  </parameter>
  <content>
    <contentType value="text/cql"/>
    <data value="LyoKICogTGlicmFyeTogSU1NWkQxOFNSb3RhdmlydXNMb2dpYyAoSU1NWi5EMTguUy5Sb3RhdmlydXMgc2NoZWR1bGUpCiAqIFNjaGVkdWxlIFRhYmxlOiBJTU1aLkQxOC5TLlJvdGF2aXJ1cyBzY2hlZHVsZQogKi8KbGlicmFyeSBJTU1aRDE4U1JvdGF2aXJ1c0xvZ2ljCgp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwppbmNsdWRlIEZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBXSE9Db21tb24gY2FsbGVkIFdDCgppbmNsdWRlIElNTVpDb21tb24gY2FsbGVkIENvbW1vbgppbmNsdWRlIElNTVpDb25jZXB0cyBjYWxsZWQgQ29uY2VwdHMKCmluY2x1ZGUgSU1NWkVuY291bnRlckVsZW1lbnRzIGNhbGxlZCBJRQppbmNsdWRlIElNTVpEMkRUUm90YXZpcnVzRW5jb3VudGVyRWxlbWVudHMgY2FsbGVkIEVuY291bnRlcgoKcGFyYW1ldGVyIFRvZGF5IERhdGUgZGVmYXVsdCBUb2RheSgpCgoKY29udGV4dCBQYXRpZW50CgoKLyoKQG91dHB1dDogUm90YXZpcnVzIGRvc2UgMQpAZGVzY3JpcHRpb246IFByb3Zpc2lvbiBvZiB0aGUgcm90YXZpcnVzIGZpcnN0IGRvc2UKQHRyaWdnZXI6IENoaWxkJ3MgYmlydGgKQHBzZXVkbzogCkB0cmlnZ2VyRGF0ZTogIkRhdGUgb2YgYmlydGgiCiovCmRlZmluZSAiUm90YXZpcnVzIGRvc2UgMSI6CiAgRW5jb3VudGVyLiJObyByb3RhdmlydXMgcHJpbWFyeSBzZXJpZXMgZG9zZXMgd2VyZSBhZG1pbmlzdGVyZWQiCiAgYW5kICJSb3RhdmlydXMgZG9zZSAxIEV4cGlyYXRpb24iIGFmdGVyIGRheSBvZiBUb2RheQogIGFuZCBub3QgIkZpcnN0IHJvdGF2aXJ1cyBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQiCgoKLyoKQG91dHB1dDogUm90YXZpcnVzIGRvc2UgMSBDcmVhdGUKQGNyZWF0ZTogV0hPIHJlY29tbWVuZHMgdGhhdCB0aGUgZmlyc3QgZG9zZSBvZiByb3RhdmlydXMgdmFjY2luZSBiZSBhZG1pbmlzdGVyZWQgYXMgc29vbiBhcyBwb3NzaWJsZSBhZnRlciA2IHdlZWtzIG9mIGFnZS4KKi8KZGVmaW5lICJSb3RhdmlydXMgZG9zZSAxIENyZWF0ZSI6CiAgaWYgIlJvdGF2aXJ1cyBkb3NlIDEiCiAgdGhlbiAnV0hPIHJlY29tbWVuZHMgdGhhdCB0aGUgZmlyc3QgZG9zZSBvZiByb3RhdmlydXMgdmFjY2luZSBiZSBhZG1pbmlzdGVyZWQgYXMgc29vbiBhcyBwb3NzaWJsZSBhZnRlciA2IHdlZWtzIG9mIGFnZS4nICsgJwpEdWUgRGF0ZTogJyArIFRvU3RyaW5nKCJSb3RhdmlydXMgZG9zZSAxIER1ZSBEYXRlIikgKyAnCkV4cGlyYXRpb246ICcgKyBUb1N0cmluZygiUm90YXZpcnVzIGRvc2UgMSBFeHBpcmF0aW9uIikKICBlbHNlICcnCgoKLyoKQGR5bmFtaWNWYWx1ZTogUm90YXZpcnVzIGRvc2UgMSBEdWUgRGF0ZQpAcHNldWRvY29kZTogIkRhdGUgb2YgYmlydGgiICsgNiB3ZWVrcwoqLwpkZWZpbmUgIlJvdGF2aXJ1cyBkb3NlIDEgRHVlIERhdGUiOgogIGlmICJSb3RhdmlydXMgZG9zZSAxIiB0aGVuIFBhdGllbnQuYmlydGhEYXRlICsgNiB3ZWVrcwogIGVsc2UgbnVsbAoKCi8qCkBkeW5hbWljVmFsdWU6IFJvdGF2aXJ1cyBkb3NlIDEgT3ZlcmR1ZQpAcHNldWRvY29kZTogVG8gYmUgZGV0ZXJtaW5lZCBieSBNZW1iZXIgU3RhdGVzOyBob3dldmVyLCB0aGVyZSBpcyBubyByZWNvbW1lbmRlZCBvdmVyZHVlIGRhdGUuCiovCmRlZmluZSAiUm90YXZpcnVzIGRvc2UgMSBPdmVyZHVlIjoKICBudWxsCgoKLyoKQGR5bmFtaWNWYWx1ZTogUm90YXZpcnVzIGRvc2UgMSBFeHBpcmF0aW9uCkBwc2V1ZG9jb2RlOiAiRGF0ZSBvZiBiaXJ0aCIgKyAyNCBtb250aHMKKi8KZGVmaW5lICJSb3RhdmlydXMgZG9zZSAxIEV4cGlyYXRpb24iOgogIFBhdGllbnQuYmlydGhEYXRlICsgMjQgbW9udGhzCgogIAovKgpAY29tcGxldGU6IEZpcnN0IHJvdGF2aXJ1cyBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQKQHBzZXVkb2NvZGU6IENvdW50IG9mIHZhY2NpbmVzIGFkbWluaXN0ZXJlZCAod2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiUm90YXZpcnVzIHZhY2NpbmVzIiBhbmQgIlR5cGUgb2YgZG9zZSIgPSAiUHJpbWFyeSBzZXJpZXMiKSA9IDEKKi8KZGVmaW5lICJGaXJzdCByb3RhdmlydXMgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkIjoKICBFbmNvdW50ZXIuIk9uZSByb3RhdmlydXMgcHJpbWFyeSBzZXJpZXMgZG9zZSB3YXMgYWRtaW5pc3RlcmVkIgoKCgovKgpAb3V0cHV0OiBSb3RhdmlydXMgZG9zZSAyCkBkZXNjcmlwdGlvbjogUHJvdmlzaW9uIG9mIHRoZSByb3RhdmlydXMgc2Vjb25kIGRvc2UKQHRyaWdnZXI6IEZpcnN0IHJvdGF2aXJ1cyBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQKQHBzZXVkbzogQ291bnQgb2YgdmFjY2luZXMgYWRtaW5pc3RlcmVkICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJSb3RhdmlydXMgdmFjY2luZXMiIGFuZCAiVHlwZSBvZiBkb3NlIiA9ICJQcmltYXJ5IHNlcmllcyIpID0gMQpAdHJpZ2dlckRhdGU6IExhdGVzdCAiRGF0ZSBhbmQgdGltZSBvZiB2YWNjaW5hdGlvbiIgd2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiUm90YXZpcnVzIHZhY2NpbmVzIgoqLwpkZWZpbmUgIlJvdGF2aXJ1cyBkb3NlIDIiOgogICJGaXJzdCByb3RhdmlydXMgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkIgogIGFuZCAiUm90YXZpcnVzIGRvc2UgMiBFeHBpcmF0aW9uIiBhZnRlciBkYXkgb2YgVG9kYXkKICBhbmQgbm90ICJTZWNvbmQgcm90YXZpcnVzIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCIKCgovKgpAb3V0cHV0OiBSb3RhdmlydXMgZG9zZSAyIENyZWF0ZQpAY3JlYXRlOiBBIG1pbmltdW0gaW50ZXJ2YWwgb2YgNCB3ZWVrcyBzaG91bGQgYmUgbWFpbnRhaW5lZCBiZXR3ZWVuIGRvc2VzLgoqLwpkZWZpbmUgIlJvdGF2aXJ1cyBkb3NlIDIgQ3JlYXRlIjoKICBpZiAiUm90YXZpcnVzIGRvc2UgMiIKICB0aGVuICdBIG1pbmltdW0gaW50ZXJ2YWwgb2YgNCB3ZWVrcyBzaG91bGQgYmUgbWFpbnRhaW5lZCBiZXR3ZWVuIGRvc2VzLicgKyAnCkR1ZSBEYXRlOiAnICsgVG9TdHJpbmcoIlJvdGF2aXJ1cyBkb3NlIDIgRHVlIERhdGUiKSArICcKRXhwaXJhdGlvbjogJyArIFRvU3RyaW5nKCJSb3RhdmlydXMgZG9zZSAyIEV4cGlyYXRpb24iKQogIGVsc2UgJycKCgovKgpAZHluYW1pY1ZhbHVlOiBSb3RhdmlydXMgZG9zZSAyIER1ZSBEYXRlCkBwc2V1ZG9jb2RlOiBMYXRlc3QgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJSb3RhdmlydXMgdmFjY2luZXMiKSArIDQgd2Vla3MKKi8KZGVmaW5lICJSb3RhdmlydXMgZG9zZSAyIER1ZSBEYXRlIjoKICBpZiAiUm90YXZpcnVzIGRvc2UgMiIgdGhlbiBFbmNvdW50ZXIuIkRhdGUgb2YgTGF0ZXN0IFJvdGF2aXJ1cyBEb3NlIiArIDQgd2Vla3MKICBlbHNlIG51bGwKCgovKgpAZHluYW1pY1ZhbHVlOiBSb3RhdmlydXMgZG9zZSAyIE92ZXJkdWUKQHBzZXVkb2NvZGU6IFRvIGJlIGRldGVybWluZWQgYnkgTWVtYmVyIFN0YXRlczsgaG93ZXZlciwgdGhlcmUgaXMgbm8gcmVjb21tZW5kZWQgb3ZlcmR1ZSBkYXRlLgoqLwpkZWZpbmUgIlJvdGF2aXJ1cyBkb3NlIDIgT3ZlcmR1ZSI6CiAgbnVsbAoKCi8qCkBkeW5hbWljVmFsdWU6IFJvdGF2aXJ1cyBkb3NlIDIgRXhwaXJhdGlvbgpAcHNldWRvY29kZTogIkRhdGUgb2YgYmlydGgiICsgMjQgbW9udGhzCiovCmRlZmluZSAiUm90YXZpcnVzIGRvc2UgMiBFeHBpcmF0aW9uIjoKICBQYXRpZW50LmJpcnRoRGF0ZSArIDI0IG1vbnRocwoKICAKLyoKQGNvbXBsZXRlOiBTZWNvbmQgcm90YXZpcnVzIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZApAcHNldWRvY29kZTogQ291bnQgb2YgdmFjY2luZXMgYWRtaW5pc3RlcmVkICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJSb3RhdmlydXMgdmFjY2luZXMiIGFuZCAiVHlwZSBvZiBkb3NlIiA9ICJQcmltYXJ5IHNlcmllcyIpID0gMgoqLwpkZWZpbmUgIlNlY29uZCByb3RhdmlydXMgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkIjoKICBFbmNvdW50ZXIuIlR3byByb3RhdmlydXMgcHJpbWFyeSBzZXJpZXMgZG9zZXMgd2VyZSBhZG1pbmlzdGVyZWQiCgoKCi8qCkBvdXRwdXQ6IFJvdGF2aXJ1cyBkb3NlIDMKQGRlc2NyaXB0aW9uOiBQcm92aXNpb24gb2YgYSByb3RhdmlydXMgdGhpcmQgZG9zZQpAdHJpZ2dlcjogRm9yIGEgc2VyaWVzIGNvbnRhaW5pbmcgbW9yZSB0aGFuIHR3byBkb3NlcywgdHdvIHJvdGF2aXJ1cyBwcmltYXJ5IHNlcmllcyBkb3NlcyBvZiBtaXhlZCBzZXJpZXMgb3IgYSBzZXJpZXMgd2l0aCB1bmtub3duIHZhY2NpbmUgcHJvZHVjdHMgd2VyZSBhZG1pbmlzdGVyZWQKQHBzZXVkbzogQ291bnQgb2YgdmFjY2luZXMgYWRtaW5pc3RlcmVkICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJSb3RhdmlydXMgdmFjY2luZXMiYW5kICJUeXBlIG9mIGRvc2UiID0gIlByaW1hcnkgc2VyaWVzIiApID0gMiAKQU5EICJWYWNjaW5lIGJyYW5kIiAod2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiUm90YXZpcnVzIHZhY2NpbmVzIiBBTkQgIkRvc2UgbnVtYmVyIiA9IDEpIOKJoCAiVmFjY2luZSBicmFuZCIgKHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIlJvdGF2aXJ1cyB2YWNjaW5lcyIgQU5EICJEb3NlIG51bWJlciIgPSAyKSBPUiAiVG90YWwgZG9zZXMgaW4gc2VyaWVzIiA+IDIKQHRyaWdnZXJEYXRlOiBMYXRlc3QgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iIHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIlJvdGF2aXJ1cyB2YWNjaW5lcyIKKi8KZGVmaW5lICJSb3RhdmlydXMgZG9zZSAzIjoKICAiU2Vjb25kIHJvdGF2aXJ1cyBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQiCiAgYW5kICgKICAgIEVuY291bnRlci4iVGhlIHNlcmllcyBhZG1pbmlzdGVyZWQgdG8gdGhlIGNsaWVudCBpcyBhIG1peGVkIHNlcmllcyBvciBhIHNlcmllcyB3aXRoIHVua25vd24gdmFjY2luZSBwcm9kdWN0cyIKICAgIG9yIEVuY291bnRlci4iVGhlIHNlcmllcyBjb250YWluIG1vcmUgdGhhbiB0d28gZG9zZXMiCiAgKQogIGFuZCAiUm90YXZpcnVzIGRvc2UgMyBFeHBpcmF0aW9uIiBhZnRlciBkYXkgb2YgVG9kYXkKICBhbmQgbm90ICJUaGlyZCByb3RhdmlydXMgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkIgoKCi8qCkBvdXRwdXQ6IFJvdGF2aXJ1cyBkb3NlIDMgQ3JlYXRlCkBjcmVhdGU6IEZvciBhIG1peGVkIHNlcmllcyBvciBhIHNlcmllcyB3aXRoIGFueSB1bmtub3duIHZhY2NpbmUgcHJvZHVjdHMsIGEgdG90YWwgb2YgMyBkb3NlcyBvZiByb3RhdmlydXMgdmFjY2luZSBzaG91bGQgYmUgYWRtaW5pc3RlcmVkIGZvciBhIGNvbXBsZXRlIHZhY2NpbmF0aW9uIHNlcmllcy4KUm90YVRlcSwgUm90YXZhYyBhbmQgUm90YXNpaWwgc2hvdWxkIGJlIGFkbWluaXN0ZXJlZCBpbiBhIDMtZG9zZSBzY2hlZHVsZS4KKi8KZGVmaW5lICJSb3RhdmlydXMgZG9zZSAzIENyZWF0ZSI6CiAgaWYgIlJvdGF2aXJ1cyBkb3NlIDMiCiAgdGhlbiAnRm9yIGEgbWl4ZWQgc2VyaWVzIG9yIGEgc2VyaWVzIHdpdGggYW55IHVua25vd24gdmFjY2luZSBwcm9kdWN0cywgYSB0b3RhbCBvZiAzIGRvc2VzIG9mIHJvdGF2aXJ1cyB2YWNjaW5lIHNob3VsZCBiZSBhZG1pbmlzdGVyZWQgZm9yIGEgY29tcGxldGUgdmFjY2luYXRpb24gc2VyaWVzLgpSb3RhVGVxLCBSb3RhdmFjIGFuZCBSb3Rhc2lpbCBzaG91bGQgYmUgYWRtaW5pc3RlcmVkIGluIGEgMy1kb3NlIHNjaGVkdWxlLicgKyAnCkR1ZSBEYXRlOiAnICsgVG9TdHJpbmcoIlJvdGF2aXJ1cyBkb3NlIDMgRHVlIERhdGUiKSArICcKRXhwaXJhdGlvbjogJyArIFRvU3RyaW5nKCJSb3RhdmlydXMgZG9zZSAzIEV4cGlyYXRpb24iKQogIGVsc2UgJycKCgovKgpAZHluYW1pY1ZhbHVlOiBSb3RhdmlydXMgZG9zZSAzIER1ZSBEYXRlCkBwc2V1ZG9jb2RlOiBMYXRlc3QgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJSb3RhdmlydXMgdmFjY2luZXMiKSArIDQgd2Vla3MKKi8KZGVmaW5lICJSb3RhdmlydXMgZG9zZSAzIER1ZSBEYXRlIjoKICBpZiAiUm90YXZpcnVzIGRvc2UgMyIgdGhlbiBFbmNvdW50ZXIuIkRhdGUgb2YgTGF0ZXN0IFJvdGF2aXJ1cyBEb3NlIiArIDQgd2Vla3MKICBlbHNlIG51bGwKCgovKgpAZHluYW1pY1ZhbHVlOiBSb3RhdmlydXMgZG9zZSAzIE92ZXJkdWUKQHBzZXVkb2NvZGU6IFRvIGJlIGRldGVybWluZWQgYnkgTWVtYmVyIFN0YXRlczsgaG93ZXZlciwgdGhlcmUgaXMgbm8gcmVjb21tZW5kZWQgb3ZlcmR1ZSBkYXRlLgoqLwpkZWZpbmUgIlJvdGF2aXJ1cyBkb3NlIDMgT3ZlcmR1ZSI6CiAgbnVsbAoKCi8qCkBkeW5hbWljVmFsdWU6IFJvdGF2aXJ1cyBkb3NlIDMgRXhwaXJhdGlvbgpAcHNldWRvY29kZTogIkRhdGUgb2YgYmlydGgiICsgMjQgbW9udGhzCiovCmRlZmluZSAiUm90YXZpcnVzIGRvc2UgMyBFeHBpcmF0aW9uIjoKICBQYXRpZW50LmJpcnRoRGF0ZSArIDI0IG1vbnRocwoKICAKLyoKQGNvbXBsZXRlOiBUaGlyZCByb3RhdmlydXMgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkCkBwc2V1ZG9jb2RlOiBDb3VudCBvZiB2YWNjaW5lcyBhZG1pbmlzdGVyZWQgKHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIlJvdGF2aXJ1cyB2YWNjaW5lcyIgYW5kICJUeXBlIG9mIGRvc2UiID0gIlByaW1hcnkgc2VyaWVzIikgPSAzCiovCmRlZmluZSAiVGhpcmQgcm90YXZpcnVzIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCI6CiAgRW5jb3VudGVyLiJUaHJlZSByb3RhdmlydXMgcHJpbWFyeSBzZXJpZXMgZG9zZXMgd2VyZSBhZG1pbmlzdGVyZWQiCgoKCi8qCkB0ZXN0OiBUZXN0IGV4cGVjdGVkIHJlc3VsdHMgYmFzZWQgb24gZXhhbXBsZSBwYXRpZW50cwoqLwpkZWZpbmUgIlRlc3QgVmFsaWRhdGlvbiI6CiAgY2FzZQogICAgd2hlbiBQYXRpZW50LmlkID0gJ1JvdGF2aXJ1czA3LjEnIHRoZW4gIlJvdGF2aXJ1cyBkb3NlIDEiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUm90YXZpcnVzMDguMycgdGhlbiAiUm90YXZpcnVzIGRvc2UgMSIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdSb3RhdmlydXMwOS4zJyB0aGVuICJSb3RhdmlydXMgZG9zZSAxIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1JvdGF2aXJ1czEwLjMnIHRoZW4gIlJvdGF2aXJ1cyBkb3NlIDIiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUm90YXZpcnVzMTEuMycgdGhlbiAiUm90YXZpcnVzIGRvc2UgMiIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdSb3RhdmlydXMxMi40JyB0aGVuICJSb3RhdmlydXMgZG9zZSAzIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1JvdGF2aXJ1czEzLjQnIHRoZW4gIlJvdGF2aXJ1cyBkb3NlIDMiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUm90YXZpcnVzMTQuNScgdGhlbiAiUm90YXZpcnVzIGRvc2UgMyIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdSb3RhdmlydXMxNS41JyB0aGVuICJSb3RhdmlydXMgZG9zZSAzIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1JvdGF2aXJ1czE2LjQnIHRoZW4gIlNlY29uZCByb3RhdmlydXMgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkIiBhbmQgbm90ICJSb3RhdmlydXMgZG9zZSAzIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1JvdGF2aXJ1czE3LjEnIHRoZW4gIlRoaXJkIHJvdGF2aXJ1cyBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUm90YXZpcnVzMTguMScgdGhlbiBub3QgIlJvdGF2aXJ1cyBkb3NlIDEiCiAgICBlbHNlICdObyB0ZXN0IGNhc2Ugc2V0JwogIGVuZAo="/>
  </content>
</Library>