internal/templates/PSFModule-1.1.0.0.xml

<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
  <Obj RefId="0">
    <TN RefId="0">
      <T>PSModuleDevelopment.Template.Template</T>
      <T>System.Object</T>
    </TN>
    <ToString>PSModuleDevelopment.Template.Template</ToString>
    <Props>
      <S N="Name">PSFModule</S>
      <Obj N="Type" RefId="1">
        <TN RefId="1">
          <T>PSModuleDevelopment.Template.TemplateType</T>
          <T>System.Enum</T>
          <T>System.ValueType</T>
          <T>System.Object</T>
        </TN>
        <ToString>Project</ToString>
        <I32>1</I32>
      </Obj>
      <Version N="Version">1.1.0.0</Version>
      <S N="Description">PowerShell Framework based module scaffold</S>
      <S N="Author">Friedrich Weinmann</S>
      <DT N="CreatedOn">2018-09-29T00:00:00+00:00</DT>
      <Obj N="Tags" RefId="2">
        <TN RefId="2">
          <T>System.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]</T>
          <T>System.Object</T>
        </TN>
        <LST>
          <S>module</S>
          <S>psframework</S>
        </LST>
      </Obj>
      <Obj N="Parameters" RefId="3">
        <TNRef RefId="2" />
        <LST>
          <S>name</S>
          <S>author</S>
          <S>company</S>
          <S>description</S>
        </LST>
      </Obj>
      <Obj N="Scripts" RefId="4">
        <TN RefId="3">
          <T>System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[PSModuleDevelopment.Template.ParameterScript, PSModuleDevelopment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null]]</T>
          <T>System.Object</T>
        </TN>
        <DCT>
          <En>
            <S N="Key">psframework</S>
            <Obj N="Value" RefId="5">
              <TN RefId="4">
                <T>PSModuleDevelopment.Template.ParameterScript</T>
                <T>System.Object</T>
              </TN>
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_(Get-Module PSFramework).Version.ToString()_x000D__x000A__x0009__x0009_</S>
                <S N="Name">psframework</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_(Get-Module PSFramework).Version.ToString()_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAALcHNmcmFtZXdvcmsJBQAAAAUFAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AQMAAAAGBgAAADQNCgkJCShHZXQtTW9kdWxlIFBTRnJhbWV3b3JrKS5WZXJzaW9uLlRvU3RyaW5nKCkNCgkJCw==</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">year</S>
            <Obj N="Value" RefId="6">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_Get-Date -Format "yyyy"_x000D__x000A__x0009__x0009_</S>
                <S N="Name">year</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_Get-Date -Format "yyyy"_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAEeWVhcgkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAAIA0KCQkJR2V0LURhdGUgLUZvcm1hdCAieXl5eSINCgkJCw==</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">date</S>
            <Obj N="Value" RefId="7">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_Get-Date -Format "yyyy-MM-dd"_x000D__x000A__x0009__x0009_</S>
                <S N="Name">date</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_Get-Date -Format "yyyy-MM-dd"_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAEZGF0ZQkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAAJg0KCQkJR2V0LURhdGUgLUZvcm1hdCAieXl5eS1NTS1kZCINCgkJCw==</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">testfolder</S>
            <Obj N="Value" RefId="8">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009_</S>
                <S N="Name">testfolder</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAKdGVzdGZvbGRlcgkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAACQ0KCQkJDQoJCQs=</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">guid</S>
            <Obj N="Value" RefId="9">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_[System.Guid]::NewGuid().ToString()_x000D__x000A__x0009__x0009_</S>
                <S N="Name">guid</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_[System.Guid]::NewGuid().ToString()_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAEZ3VpZAkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAALA0KCQkJW1N5c3RlbS5HdWlkXTo6TmV3R3VpZCgpLlRvU3RyaW5nKCkNCgkJCw==</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">testresults</S>
            <Obj N="Value" RefId="10">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_@'_x000D__x000A_$results = Invoke-Pester -Script $file.FullName -Show $Show -PassThru_x000D__x000A_'@_x000D__x000A__x0009__x0009_</S>
                <S N="Name">testresults</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_@'_x000D__x000A_$results = Invoke-Pester -Script $file.FullName -Show $Show -PassThru_x000D__x000A_'@_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAALdGVzdHJlc3VsdHMJBQAAAAUFAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AQMAAAAGBgAAAFYNCgkJCUAnDQokcmVzdWx0cyA9IEludm9rZS1QZXN0ZXIgLVNjcmlwdCAkZmlsZS5GdWxsTmFtZSAtU2hvdyAkU2hvdyAtUGFzc1RocnUNCidADQoJCQs=</BA>
              </MS>
            </Obj>
          </En>
        </DCT>
      </Obj>
      <Obj N="Children" RefId="11">
        <TN RefId="5">
          <T>System.Collections.Generic.List`1[[PSModuleDevelopment.Template.TemplateItemBase, PSModuleDevelopment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null]]</T>
          <T>System.Object</T>
        </TN>
        <LST>
          <Obj RefId="12">
            <TN RefId="6">
              <T>PSModuleDevelopment.Template.TemplateItemFolder</T>
              <T>PSModuleDevelopment.Template.TemplateItemBase</T>
              <T>System.Object</T>
            </TN>
            <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString>
            <Props>
              <Obj N="Children" RefId="13">
                <TNRef RefId="5" />
                <LST>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                </LST>
              </Obj>
              <S N="Name">bin</S>
              <S N="RelativePath">bin</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="14">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="15">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAAA2JpbgYFAAAAA2JpbgYGAAAAAsO+CQcAAAAJCAAAAAQDAAAAngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZVtdAgAAAAgICQkAAAABAAAAAQAAAAQHAAAAf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgYAAAgICQoAAAAAAAAAAAAAAAEIAAAABwAAAAkKAAAAAAAAAAAAAAAHCQAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAkLAAAADQMRCgAAAAAAAAAFCwAAAC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUZpbGUJAAAABVZhbHVlCVBsYWluVGV4dBRDb250ZW50UGFyYW1ldGVyRmxhdBZDb250ZW50UGFyYW1ldGVyU2NyaXB0BE5hbWUMUmVsYXRpdmVQYXRoCklkZW50aWZpZXIXRmlsZVN5c3RlbVBhcmFtZXRlckZsYXQZRmlsZVN5c3RlbVBhcmFtZXRlclNjcmlwdAEAAwMBAQEDAwF/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAGDAAAAO4CIyBiaW4gZm9sZGVyDQoNClRoZSBiaW4gZm9sZGVyIGV4aXN0cyB0byBzdG9yZSBiaW5hcnkgZGF0YS4gQW5kIHNjcmlwdHMgcmVsYXRlZCB0byB0aGUgdHlwZSBzeXN0ZW0uDQoNClRoaXMgbWF5IGluY2x1ZGUgeW91ciBvd24gQyMtYmFzZWQgbGlicmFyeSwgdGhpcmQgcGFydHkgbGlicmFyaWVzIHlvdSB3YW50IHRvIGluY2x1ZGUgKHdhdGNoIHRoZSBsaWNlbnNlISksIG9yIGEgc2NyaXB0IGRlY2xhcmluZyB0eXBlIGFjY2VsZXJhdG9ycyAoZWZmZWN0aXZlbHkgYWxpYXNlcyBmb3IgLk5FVCB0eXBlcykNCg0KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gVHlwZSBBY2NlbGVyYXRvcnMsIHNlZSB0aGUgaGVscCBvbiBTZXQtUFNGVHlwZUFsaWFzAQkNAAAACQ4AAAAGDwAAAAlyZWFkbWUubWQGEAAAAA1iaW5ccmVhZG1lLm1kCQYAAAAJEgAAAAkTAAAAAQ0AAAAHAAAACQoAAAAAAAAAAAAAAAEOAAAABwAAAAkKAAAAAAAAAAAAAAABEgAAAAcAAAAJCgAAAAAAAAAAAAAAARMAAAAHAAAACQoAAAAAAAAAAAAAAAs=</BA>
            </MS>
          </Obj>
          <Obj RefId="16">
            <TNRef RefId="6" />
            <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString>
            <Props>
              <Obj N="Children" RefId="17">
                <TNRef RefId="5" />
                <LST>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                </LST>
              </Obj>
              <S N="Name">en-us</S>
              <S N="RelativePath">en-us</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="18">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="19">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAABWVuLXVzBgUAAAAFZW4tdXMGBgAAAALDvgkHAAAACQgAAAAEAwAAAJ4BU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAAC9QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2VbXQIAAAAICAkJAAAAAQAAAAEAAAAEBwAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24GAAAICAkKAAAAAAAAAAAAAAABCAAAAAcAAAAJCgAAAAAAAAAAAAAABwkAAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJCwAAAA0DEQoAAAAAAAAABQsAAAAtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1GaWxlCQAAAAVWYWx1ZQlQbGFpblRleHQUQ29udGVudFBhcmFtZXRlckZsYXQWQ29udGVudFBhcmFtZXRlclNjcmlwdAROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQBAAMDAQEBAwMBf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0CAAAABgwAAAClAVRPUElDDQoJYWJvdXRfw75uYW1lw74NCgkNClNIT1JUIERFU0NSSVBUSU9ODQoJRXhwbGFpbnMgaG93IHRvIHVzZSB0aGUgw75uYW1lw74gcG93ZXJzaGVsbCBtb2R1bGUNCgkNCkxPTkcgREVTQ1JJUFRJT04NCgk8SW5zZXJ0IENvbnRlbnQgaGVyZT4NCg0KS0VZV09SRFMNCgnDvm5hbWXDvgEJDQAAAAkOAAAABg8AAAAXYWJvdXRfw75uYW1lw74uaGVscC50eHQGEAAAAB1lbi11c1xhYm91dF/Dvm5hbWXDvi5oZWxwLnR4dAkGAAAACRIAAAAJEwAAAAENAAAABwAAAAkUAAAAAQAAAAEAAAABDgAAAAcAAAAJCgAAAAAAAAAAAAAAARIAAAAHAAAACRYAAAABAAAAAQAAAAETAAAABwAAAAkKAAAAAAAAAAAAAAARFAAAAAQAAAAGGAAAAARuYW1lDQMRFgAAAAQAAAAGGQAAAARuYW1lDQML</BA>
            </MS>
          </Obj>
          <Obj RefId="20">
            <TNRef RefId="6" />
            <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString>
            <Props>
              <Obj N="Children" RefId="21">
                <TNRef RefId="5" />
                <LST>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                </LST>
              </Obj>
              <S N="Name">functions</S>
              <S N="RelativePath">functions</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="22">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="23">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAACWZ1bmN0aW9ucwYFAAAACWZ1bmN0aW9ucwYGAAAAAsO+CQcAAAAJCAAAAAQDAAAAngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZVtdAgAAAAgICQkAAAABAAAAAQAAAAQHAAAAf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgYAAAgICQoAAAAAAAAAAAAAAAEIAAAABwAAAAkKAAAAAAAAAAAAAAAHCQAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAkLAAAADQMRCgAAAAAAAAAFCwAAAC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUZpbGUJAAAABVZhbHVlCVBsYWluVGV4dBRDb250ZW50UGFyYW1ldGVyRmxhdBZDb250ZW50UGFyYW1ldGVyU2NyaXB0BE5hbWUMUmVsYXRpdmVQYXRoCklkZW50aWZpZXIXRmlsZVN5c3RlbVBhcmFtZXRlckZsYXQZRmlsZVN5c3RlbVBhcmFtZXRlclNjcmlwdAEAAwMBAQEDAwF/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAGDAAAANIBIyBGdW5jdGlvbnMNCg0KVGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIHRoZSBmdW5jdGlvbnMgZ28uDQoNCkRlcGVuZGluZyBvbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgbW9kdWxlLCBpdCBpcyByZWNvbW1lbmRlZCB0byBzdWJkaXZpZGUgdGhlbSBpbnRvIHN1YmZvbGRlcnMuDQoNClRoZSBtb2R1bGUgd2lsbCBwaWNrIHVwIGFsbCAucHMxIGZpbGVzIHJlY3Vyc2l2ZWx5AQkNAAAACQ4AAAAGDwAAAAlyZWFkbWUubWQGEAAAABNmdW5jdGlvbnNccmVhZG1lLm1kCQYAAAAJEgAAAAkTAAAAAQ0AAAAHAAAACQoAAAAAAAAAAAAAAAEOAAAABwAAAAkKAAAAAAAAAAAAAAABEgAAAAcAAAAJCgAAAAAAAAAAAAAAARMAAAAHAAAACQoAAAAAAAAAAAAAAAs=</BA>
            </MS>
          </Obj>
          <Obj RefId="24">
            <TNRef RefId="6" />
            <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString>
            <Props>
              <Obj N="Children" RefId="25">
                <TNRef RefId="5" />
                <LST>
                  <S>PSModuleDevelopment.Template.TemplateItemFolder</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFolder</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFolder</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFolder</S>
                </LST>
              </Obj>
              <S N="Name">internal</S>
              <S N="RelativePath">internal</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="26">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="27">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAACGludGVybmFsBgUAAAAIaW50ZXJuYWwGBgAAAALDvgkHAAAACQgAAAAEAwAAAJ4BU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAAC9QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2VbXQIAAAAICAkJAAAABAAAAAQAAAAEBwAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24GAAAICAkKAAAAAAAAAAAAAAABCAAAAAcAAAAJCgAAAAAAAAAAAAAABwkAAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJCwAAAAkMAAAACQ0AAAAJDgAAABEKAAAAAAAAAAELAAAAAQAAAAkPAAAABhAAAAAOY29uZmlndXJhdGlvbnMGEQAAABdpbnRlcm5hbFxjb25maWd1cmF0aW9ucwkGAAAACRMAAAAJFAAAAAEMAAAAAQAAAAkVAAAABhYAAAAJZnVuY3Rpb25zBhcAAAASaW50ZXJuYWxcZnVuY3Rpb25zCQYAAAAJGQAAAAkaAAAAAQ0AAAABAAAACRsAAAAGHAAAAAdzY3JpcHRzBh0AAAAQaW50ZXJuYWxcc2NyaXB0cwkGAAAACR8AAAAJIAAAAAEOAAAAAQAAAAkhAAAABiIAAAAEdGVwcAYjAAAADWludGVybmFsXHRlcHAJBgAAAAklAAAACSYAAAABDwAAAAMAAAAJJwAAAAIAAAACAAAAARMAAAAHAAAACQoAAAAAAAAAAAAAAAEUAAAABwAAAAkKAAAAAAAAAAAAAAABFQAAAAMAAAAJKQAAAAEAAAABAAAAARkAAAAHAAAACQoAAAAAAAAAAAAAAAEaAAAABwAAAAkKAAAAAAAAAAAAAAABGwAAAAMAAAAJKwAAAAMAAAADAAAAAR8AAAAHAAAACQoAAAAAAAAAAAAAAAEgAAAABwAAAAkKAAAAAAAAAAAAAAABIQAAAAMAAAAJLQAAAAMAAAADAAAAASUAAAAHAAAACQoAAAAAAAAAAAAAAAEmAAAABwAAAAkKAAAAAAAAAAAAAAAHJwAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAkvAAAACTAAAAANAgcpAAAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACTEAAAANAwcrAAAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACTIAAAAJMwAAAAk0AAAACgctAAAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACTUAAAAJNgAAAAk3AAAACgUvAAAALVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRmlsZQkAAAAFVmFsdWUJUGxhaW5UZXh0FENvbnRlbnRQYXJhbWV0ZXJGbGF0FkNvbnRlbnRQYXJhbWV0ZXJTY3JpcHQETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AQADAwEBAQMDAX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAY4AAAAwAk8Iw0KVGhpcyBpcyBhbiBleGFtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZQ0KDQpCeSBkZWZhdWx0LCBpdCBpcyBlbm91Z2ggdG8gaGF2ZSBhIHNpbmdsZSBvbmUgb2YgdGhlbSwNCmhvd2V2ZXIgaWYgeW91IGhhdmUgZW5vdWdoIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdG8ganVzdGlmeSBoYXZpbmcgbXVsdGlwbGUgY29waWVzIG9mIGl0LA0KZmVlbCB0b3RhbGx5IGZyZWUgdG8gc3BsaXQgdGhlbSBpbnRvIG11bHRpcGxlIGZpbGVzLg0KIz4NCg0KPCMNCiMgRXhhbXBsZSBDb25maWd1cmF0aW9uDQpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ8O+bmFtZcO+JyAtTmFtZSAnRXhhbXBsZS5TZXR0aW5nJyAtVmFsdWUgMTAgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gJ2ludGVnZXInIC1IYW5kbGVyIHsgfSAtRGVzY3JpcHRpb24gIkV4YW1wbGUgY29uZmlndXJhdGlvbiBzZXR0aW5nLiBZb3VyIG1vZHVsZSBjYW4gdGhlbiB1c2UgdGhlIHNldHRpbmcgdXNpbmcgJ0dldC1QU0ZDb25maWdWYWx1ZSciDQojPg0KDQpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ8O+bmFtZcO+JyAtTmFtZSAnSW1wb3J0LkRvRG90U291cmNlJyAtVmFsdWUgJGZhbHNlIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdib29sJyAtRGVzY3JpcHRpb24gIldoZXRoZXIgdGhlIG1vZHVsZSBmaWxlcyBzaG91bGQgYmUgZG90c291cmNlZCBvbiBpbXBvcnQuIEJ5IGRlZmF1bHQsIHRoZSBmaWxlcyBvZiB0aGlzIG1vZHVsZSBhcmUgcmVhZCBhcyBzdHJpbmcgdmFsdWUgYW5kIGludm9rZWQsIHdoaWNoIGlzIGZhc3RlciBidXQgd29yc2Ugb24gZGVidWdnaW5nLiINClNldC1QU0ZDb25maWcgLU1vZHVsZSAnw75uYW1lw74nIC1OYW1lICdJbXBvcnQuSW5kaXZpZHVhbEZpbGVzJyAtVmFsdWUgJGZhbHNlIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdib29sJyAtRGVzY3JpcHRpb24gIldoZXRoZXIgdGhlIG1vZHVsZSBmaWxlcyBzaG91bGQgYmUgaW1wb3J0ZWQgaW5kaXZpZHVhbGx5LiBEdXJpbmcgdGhlIG1vZHVsZSBidWlsZCwgYWxsIG1vZHVsZSBjb2RlIGlzIGNvbXBpbGVkIGludG8gZmV3IGZpbGVzLCB3aGljaCBhcmUgaW1wb3J0ZWQgaW5zdGVhZCBieSBkZWZhdWx0LiBMb2FkaW5nIHRoZSBjb21waWxlZCB2ZXJzaW9ucyBpcyBmYXN0ZXIsIHVzaW5nIHRoZSBpbmRpdmlkdWFsIGZpbGVzIGlzIGVhc2llciBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nIG91dCBhZGp1c3RtZW50cy4iAQk5AAAACToAAAAGOwAAABFjb25maWd1cmF0aW9uLnBzMQY8AAAAKWludGVybmFsXGNvbmZpZ3VyYXRpb25zXGNvbmZpZ3VyYXRpb24ucHMxCQYAAAAJPgAAAAk/AAAAATAAAAAvAAAABkAAAAD+AyMgQ29uZmlndXJhdGlvbnMNCg0KVGhyb3VnaCB0aGUgYFBTRnJhbWV3b3JrYCB5b3UgaGF2ZSBhIHNpbXBsZSBtZXRob2QgdGhhdCBhbGxvd3MgeW91IHRvIC4uLg0KDQogLSBQdWJsaXNoIHNldHRpbmdzDQogLSBXaXRoIG9uYm9hcmQgZG9jdW1lbnRhdGlvbg0KIC0gSW5wdXQgdmFsaWRhdGlvbg0KIC0gU2NyaXB0cyB0aGF0IHJ1biBvbiBjaGFuZ2Ugb2Ygc2V0dGluZ3MNCiAtIFRoYXQgY2FuIGJlIGRpc2NvdmVyZWQgYW5kIHVwZGF0ZWQgYnkgdGhlIHVzZXINCiAtIFRoYXQgY2FuIGJlIGFkbWluaXN0cmF0ZWQgYnkgcG9saWN5ICYgRFNDDQoNClRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSBpcyBhIGJpdCB0b28gY29tcGxleCB0byBkZXNjcmliZSBpbiBhIGhlbHAgZmlsZSwgeW91IGNhbiBob3dldmVyIHZpc2l0IHVzIGF0IGh0dHA6Ly9wc2ZyYW1ld29yay5vcmcgZm9yIGRldGFpbGVkIGd1aWRhbmNlLg0KDQpBbiBleGFtcGxlIGNhbiBiZSBzZWVuIGluIHRoZSBhdHRhY2hlZCBwczEgZmlsZQEJQQAAAAlCAAAABkMAAAAJcmVhZG1lLm1kBkQAAAAhaW50ZXJuYWxcY29uZmlndXJhdGlvbnNccmVhZG1lLm1kCQYAAAAJRgAAAAlHAAAAATEAAAAvAAAABkgAAADbASMgRnVuY3Rpb25zDQoNClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zIGdvLg0KDQpEZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIG1vZHVsZSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gc3ViZGl2aWRlIHRoZW0gaW50byBzdWJmb2xkZXJzLg0KDQpUaGUgbW9kdWxlIHdpbGwgcGljayB1cCBhbGwgLnBzMSBmaWxlcyByZWN1cnNpdmVseQEJSQAAAAlKAAAABksAAAAJcmVhZG1lLm1kBkwAAAAcaW50ZXJuYWxcZnVuY3Rpb25zXHJlYWRtZS5tZAkGAAAACU4AAAAJTwAAAAEyAAAALwAAAAZQAAAA9glOZXctUFNGTGljZW5zZSAtUHJvZHVjdCAnw75uYW1lw74nIC1NYW51ZmFjdHVyZXIgJ8O+YXV0aG9yw74nIC1Qcm9kdWN0VmVyc2lvbiAkc2NyaXB0Ok1vZHVsZVZlcnNpb24gLVByb2R1Y3RUeXBlIE1vZHVsZSAtTmFtZSBNSVQgLVZlcnNpb24gIjEuMC4wLjAiIC1EYXRlIChHZXQtRGF0ZSAiw74hZGF0ZSHDviIpIC1UZXh0IEAiDQpDb3B5cmlnaHQgKGMpIMO+IXllYXIhw74gw75hdXRob3LDvg0KDQpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5DQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbA0KaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cw0KdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbA0KY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzDQpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KDQpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwNCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQoNClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwNCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQ0KQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUg0KTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwNCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFDQpTT0ZUV0FSRS4NCiJAAQlRAAAACVIAAAAGUwAAAAtsaWNlbnNlLnBzMQZUAAAAHGludGVybmFsXHNjcmlwdHNcbGljZW5zZS5wczEJBgAAAAlWAAAACVcAAAABMwAAAC8AAAAGWAAAANMEIyBBZGQgYWxsIHRoaW5ncyB5b3Ugd2FudCB0byBydW4gYWZ0ZXIgaW1wb3J0aW5nIHRoZSBtYWluIGNvZGUNCg0KIyBMb2FkIENvbmZpZ3VyYXRpb25zDQpmb3JlYWNoICgkZmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcY29uZmlndXJhdGlvbnNcKi5wczEiIC1FcnJvckFjdGlvbiBJZ25vcmUpKSB7DQoJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkZmlsZS5GdWxsTmFtZQ0KfQ0KDQojIExvYWQgVGFiIEV4cGFuc2lvbg0KZm9yZWFjaCAoJGZpbGUgaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XGludGVybmFsXHRlcHBcKi50ZXBwLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkpIHsNCgkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmaWxlLkZ1bGxOYW1lDQp9DQoNCiMgTG9hZCBUYWIgRXhwYW5zaW9uIEFzc2lnbm1lbnQNCi4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggIiRNb2R1bGVSb290XGludGVybmFsXHRlcHBcYXNzaWdubWVudC5wczEiDQoNCiMgTG9hZCBMaWNlbnNlDQouIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXGxpY2Vuc2UucHMxIgEJWQAAAAlaAAAABlsAAAAOcG9zdGltcG9ydC5wczEGXAAAAB9pbnRlcm5hbFxzY3JpcHRzXHBvc3RpbXBvcnQucHMxCQYAAAAJXgAAAAlfAAAAATQAAAAvAAAABmAAAAA/IyBBZGQgYWxsIHRoaW5ncyB5b3Ugd2FudCB0byBydW4gYmVmb3JlIGltcG9ydGluZyB0aGUgbWFpbiBjb2RlAQlhAAAACWIAAAAGYwAAAA1wcmVpbXBvcnQucHMxBmQAAAAeaW50ZXJuYWxcc2NyaXB0c1xwcmVpbXBvcnQucHMxCQYAAAAJZgAAAAlnAAAAATUAAAAvAAAABmgAAABxPCMNCiMgRXhhbXBsZToNClJlZ2lzdGVyLVBTRlRlcHBBcmd1bWVudENvbXBsZXRlciAtQ29tbWFuZCBHZXQtQWxjb2hvbCAtUGFyYW1ldGVyIFR5cGUgLU5hbWUgw75uYW1lw74uYWxjb2hvbA0KIz4BCWkAAAAJagAAAAZrAAAADmFzc2lnbm1lbnQucHMxBmwAAAAcaW50ZXJuYWxcdGVwcFxhc3NpZ25tZW50LnBzMQkGAAAACW4AAAAJbwAAAAE2AAAALwAAAAZwAAAAowE8Iw0KIyBFeGFtcGxlOg0KUmVnaXN0ZXItUFNGVGVwcFNjcmlwdGJsb2NrIC1OYW1lICLDvm5hbWXDvi5hbGNvaG9sIiAtU2NyaXB0QmxvY2sgeyAnQmVlcicsJ01lYWQnLCdXaGlza2V5JywnV2luZScsJ1ZvZGthJywnUnVtICgzeSknLCAnUnVtICg1eSknLCAnUnVtICg3eSknIH0NCiM+AQlxAAAACXIAAAAGcwAAABBleGFtcGxlLnRlcHAucHMxBnQAAAAeaW50ZXJuYWxcdGVwcFxleGFtcGxlLnRlcHAucHMxCQYAAAAJdgAAAAl3AAAAATcAAAAvAAAABngAAAC+ByMgVGFiIEV4cGFuc2lvbg0KDQojIyBEZXNjcmlwdGlvbg0KDQpNb2Rlcm4gVGFiIEV4cGFuc2lvbiB3YXMgb3BlbmVkIHRvIHVzZXJzIHdpdGggdGhlIG1vZHVsZSBgVGFiIEV4cGFuc2lvbiBQbHVzIFBsdXNgIChURVBQKS4NCg0KSXQgYWxsb3dzIHlvdSB0byBkZWZpbmUsIHdoYXQgb3B0aW9ucyBhIHVzZXIgaXMgb2ZmZXJlZCB3aGVuIHRhYmJpbmcgdGhyb3VnaCBpbnB1dCBvcHRpb25zLiBUaGlzIGNhbiBzYXZlIGEgbG90IG9mIHRpbWUgZm9yIHRoZSB1c2VyIGFuZCBpcyBjb25zaWRlcmVkIGEga2V5IGVsZW1lbnQgaW4gdXNlciBleHBlcmllbmNlLg0KDQpUaGUgYFBT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</BA>
            </MS>
          </Obj>
          <Obj RefId="28">
            <TNRef RefId="6" />
            <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString>
            <Props>
              <Obj N="Children" RefId="29">
                <TNRef RefId="5" />
                <LST>
                  <S>PSModuleDevelopment.Template.TemplateItemFolder</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFolder</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                </LST>
              </Obj>
              <S N="Name">tests</S>
              <S N="RelativePath">tests</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="30">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="31">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAABXRlc3RzBgUAAAAFdGVzdHMGBgAAAALDvgkHAAAACQgAAAAEAwAAAJ4BU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAAC9QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2VbXQIAAAAICAkJAAAABAAAAAQAAAAEBwAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24GAAAICAkKAAAAAAAAAAAAAAABCAAAAAcAAAAJCgAAAAAAAAAAAAAABwkAAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJCwAAAAkMAAAACQ0AAAAJDgAAABEKAAAAAAAAAAELAAAAAQAAAAkPAAAABhAAAAAJZnVuY3Rpb25zBhEAAAAPdGVzdHNcZnVuY3Rpb25zCQYAAAAJEwAAAAkUAAAAAQwAAAABAAAACRUAAAAGFgAAAAdnZW5lcmFsBhcAAAANdGVzdHNcZ2VuZXJhbAkGAAAACRkAAAAJGgAAAAUNAAAALVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRmlsZQkAAAAFVmFsdWUJUGxhaW5UZXh0FENvbnRlbnRQYXJhbWV0ZXJGbGF0FkNvbnRlbnRQYXJhbWV0ZXJTY3JpcHQETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AQADAwEBAQMDAX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAYbAAAA3hRwYXJhbSAoDQoJJFRlc3RHZW5lcmFsID0gJHRydWUsDQoJDQoJJFRlc3RGdW5jdGlvbnMgPSAkdHJ1ZSwNCgkNCglbVmFsaWRhdGVTZXQoJ05vbmUnLCAnRGVmYXVsdCcsICdQYXNzZWQnLCAnRmFpbGVkJywgJ1BlbmRpbmcnLCAnU2tpcHBlZCcsICdJbmNvbmNsdXNpdmUnLCAnRGVzY3JpYmUnLCAnQ29udGV4dCcsICdTdW1tYXJ5JywgJ0hlYWRlcicsICdGYWlscycsICdBbGwnKV0NCgkkU2hvdyA9ICJOb25lIiwNCgkNCgkkSW5jbHVkZSA9ICIqIiwNCgkNCgkkRXhjbHVkZSA9ICIiDQopDQoNCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiU3RhcnRpbmcgVGVzdHMiDQoNCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiSW1wb3J0aW5nIE1vZHVsZSINCg0KUmVtb3ZlLU1vZHVsZSDDvm5hbWXDviAtRXJyb3JBY3Rpb24gSWdub3JlDQpJbXBvcnQtTW9kdWxlICIkUFNTY3JpcHRSb290XC4uXMO+bmFtZcO+LnBzZDEiDQpJbXBvcnQtTW9kdWxlICIkUFNTY3JpcHRSb290XC4uXMO+bmFtZcO+LnBzbTEiIC1Gb3JjZQ0KDQrDviF0ZXN0Zm9sZGVyIcO+DQoNCiR0b3RhbEZhaWxlZCA9IDANCiR0b3RhbFJ1biA9IDANCg0KJHRlc3RyZXN1bHRzID0gQCgpDQoNCiNyZWdpb24gUnVuIEdlbmVyYWwgVGVzdHMNCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiTW9kdWxlcyBpbXBvcnRlZCwgcHJvY2VlZGluZyB3aXRoIGdlbmVyYWwgdGVzdHMiDQpmb3JlYWNoICgkZmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJFBTU2NyaXB0Um9vdFxnZW5lcmFsIiAtRmlsdGVyICIqLlRlc3RzLnBzMSIpKQ0Kew0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFNpZ25pZmljYW50IC1NZXNzYWdlICIgIEV4ZWN1dGluZyA8Yz0nZW0nPiQoJGZpbGUuTmFtZSk8L2M+Ig0KCcO+IXRlc3RyZXN1bHRzIcO+DQoJZm9yZWFjaCAoJHJlc3VsdCBpbiAkcmVzdWx0cykNCgl7DQoJCSR0b3RhbFJ1biArPSAkcmVzdWx0LlRvdGFsQ291bnQNCgkJJHRvdGFsRmFpbGVkICs9ICRyZXN1bHQuRmFpbGVkQ291bnQNCgkJJHJlc3VsdC5UZXN0UmVzdWx0IHwgV2hlcmUtT2JqZWN0IHsgLW5vdCAkXy5QYXNzZWQgfSB8IEZvckVhY2gtT2JqZWN0IHsNCgkJCSRuYW1lID0gJF8uTmFtZQ0KCQkJJHRlc3RyZXN1bHRzICs9IFtwc2N1c3RvbW9iamVjdF1Aew0KCQkJCURlc2NyaWJlICA9ICRfLkRlc2NyaWJlDQoJCQkJQ29udGV4dCAgID0gJF8uQ29udGV4dA0KCQkJCU5hbWUJICA9ICJJdCAkbmFtZSINCgkJCQlSZXN1bHQgICAgPSAkXy5SZXN1bHQNCgkJCQlNZXNzYWdlICAgPSAkXy5GYWlsdXJlTWVzc2FnZQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KI2VuZHJlZ2lvbiBSdW4gR2VuZXJhbCBUZXN0cw0KDQojcmVnaW9uIFRlc3QgQ29tbWFuZHMNCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiUHJvY2VlZGluZyB3aXRoIGluZGl2aWR1YWwgdGVzdHMiDQpmb3JlYWNoICgkZmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJFBTU2NyaXB0Um9vdFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIC1GaWx0ZXIgIipUZXN0cy5wczEiKSkNCnsNCglpZiAoJGZpbGUuTmFtZSAtbm90bGlrZSAkSW5jbHVkZSkgeyBjb250aW51ZSB9DQoJaWYgKCRmaWxlLk5hbWUgLWxpa2UgJEV4Y2x1ZGUpIHsgY29udGludWUgfQ0KCQ0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFNpZ25pZmljYW50IC1NZXNzYWdlICIgIEV4ZWN1dGluZyAkKCRmaWxlLk5hbWUpIg0KCcO+IXRlc3RyZXN1bHRzIcO+DQoJZm9yZWFjaCAoJHJlc3VsdCBpbiAkcmVzdWx0cykNCgl7DQoJCSR0b3RhbFJ1biArPSAkcmVzdWx0LlRvdGFsQ291bnQNCgkJJHRvdGFsRmFpbGVkICs9ICRyZXN1bHQuRmFpbGVkQ291bnQNCgkJJHJlc3VsdC5UZXN0UmVzdWx0IHwgV2hlcmUtT2JqZWN0IHsgLW5vdCAkXy5QYXNzZWQgfSB8IEZvckVhY2gtT2JqZWN0IHsNCgkJCSRuYW1lID0gJF8uTmFtZQ0KCQkJJHRlc3RyZXN1bHRzICs9IFtwc2N1c3RvbW9iamVjdF1Aew0KCQkJCURlc2NyaWJlICAgPSAkXy5EZXNjcmliZQ0KCQkJCUNvbnRleHQgICAgPSAkXy5Db250ZXh0DQoJCQkJTmFtZQkgICA9ICJJdCAkbmFtZSINCgkJCQlSZXN1bHQJICAgPSAkXy5SZXN1bHQNCgkJCQlNZXNzYWdlICAgID0gJF8uRmFpbHVyZU1lc3NhZ2UNCgkJCX0NCgkJfQ0KCX0NCn0NCiNlbmRyZWdpb24gVGVzdCBDb21tYW5kcw0KDQokdGVzdHJlc3VsdHMgfCBTb3J0LU9iamVjdCBEZXNjcmliZSwgQ29udGV4dCwgTmFtZSwgUmVzdWx0LCBNZXNzYWdlIHwgRm9ybWF0LUxpc3QNCg0KaWYgKCR0b3RhbEZhaWxlZCAtZXEgMCkgeyBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBDcml0aWNhbCAtTWVzc2FnZSAiQWxsIDxjPSdlbSc+JHRvdGFsUnVuPC9jPiB0ZXN0cyBleGVjdXRlZCB3aXRob3V0IGEgc2luZ2xlIGZhaWx1cmUhIiB9DQplbHNlIHsgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgQ3JpdGljYWwgLU1lc3NhZ2UgIjxjPSdlbSc+JHRvdGFsRmFpbGVkIHRlc3RzPC9jPiBvdXQgb2YgPGM9J3N1Yic+JHRvdGFsUnVuPC9jPiB0ZXN0cyBmYWlsZWQhIiB9DQoNCmlmICgkdG90YWxGYWlsZWQgLWd0IDApDQp7DQoJdGhyb3cgIiR0b3RhbEZhaWxlZCAvICR0b3RhbFJ1biB0ZXN0cyBmYWlsZWQhIg0KfQEJHAAAAAkdAAAABh4AAAAKcGVzdGVyLnBzMQYfAAAAEHRlc3RzXHBlc3Rlci5wczEJBgAAAAkhAAAACSIAAAABDgAAAA0AAAAGIwAAAKIHIyBEZXNjcmlwdGlvbg0KDQpUaGlzIGlzIHRoZSBmb2xkZXIsIHdoZXJlIGFsbCB0aGUgdGVzdHMgZ28uDQoNClRob3NlIGFyZSBzdWJkaXZpZGVkIGluIHR3byBjYXRlZ29yaWVzOg0KDQogLSBHZW5lcmFsDQogLSBGdW5jdGlvbg0KDQojIyBHZW5lcmFsIFRlc3RzDQoNCkdlbmVyYWwgdGVzdHMgYXJlIGZ1bmN0aW9uIGdlbmVyaWMgYW5kIHRlc3QgZm9yIGdlbmVyYWwgcG9saWNpZXMuDQoNClRoZXNlIHRlc3Qgc2NhbiBhbnN3ZXIgcXVlc3Rpb25zIHN1Y2ggYXM6DQoNCiAtIElzIG15IG1vZHVsZSBmb2xsb3dpbmcgbXkgc3R5bGUgZ3VpZGVzPw0KIC0gRG9lcyBhbnkgb2YgbXkgc2NyaXB0cyBoYXZlIGEgc3ludGF4IGVycm9yPw0KIC0gRG8gbXkgc2NyaXB0cyB1c2UgY29tbWFuZHMgSSBkbyBub3Qgd2FudCB0aGVtIHRvIHVzZT8NCiAtIERvIG15IGNvbW1hbmRzIGZvbGxvdyBiZXN0IHByYWN0aWNlcz8NCiAtIERvIG15IGNvbW1hbmRzIGhhdmUgcHJvcGVyIGhlbHA/DQoNCkJhc2ljYWxseSwgdGhlc2UgYWxsb3cgYSBnZW5lcmFsIG1vZHVsZSBoZWFsdGggY2hlY2suDQoNClRoZXNlIHRlc3RzIGFyZSBhbHJlYWR5IHByb3ZpZGVkIGFzIHBhcnQgb2YgdGhlIHRlbXBsYXRlLg0KDQojIyBGdW5jdGlvbiBUZXN0cw0KDQpBIGhlYWx0aHkgbW9kdWxlIHNob3VsZCBwcm92aWRlIHVuaXQgYW5kIGludGVncmF0aW9uIHRlc3RzIGZvciB0aGUgY29tbWFuZHMgJiBjb21wb25lbnRzIGl0IHNoaXBzLg0KT25seSB0aGVuIGNhbiBiZSBndWFyYW50ZWVkLCB0aGF0IHRoZXkgd2lsbCBhY3R1YWxseSBwZXJmb3JtIGFzIHByb21pc2VkLg0KDQpIb3dldmVyLCBhcyBlYWNoIHN1Y2ggdGVzdCBtdXN0IGJlIHNwZWNpZmljIHRvIHRoZSBmdW5jdGlvbiBpdCB0ZXN0cywgdGhlcmUgY2Fubm90IGJlIG11Y2ggaW4gdGhlIHdheSBvZiB0ZW1wbGF0ZXMuAQkkAAAACSUAAAAGJgAAAAlyZWFkbWUubWQGJwAAAA90ZXN0c1xyZWFkbWUubWQJBgAAAAkpAAAACSoAAAABDwAAAAMAAAAJKwAAAAEAAAABAAAAARMAAAAHAAAACQoAAAAAAAAAAAAAAAEUAAAABwAAAAkKAAAAAAAAAAAAAAABFQAAAAMAAAAJLQAAAAYAAAAGAAAAARkAAAAHAAAACQoAAAAAAAAAAAAAAAEaAAAABwAAAAkKAAAAAAAAAAAAAAABHAAAAAcAAAAJLwAAAAEAAAABAAAAAR0AAAAHAAAACTAAAAADAAAAAwAAAAEhAAAABwAAAAkKAAAAAAAAAAAAAAABIgAAAAcAAAAJCgAAAAAAAAAAAAAAASQAAAAHAAAACQoAAAAAAAAAAAAAAAElAAAABwAAAAkKAAAAAAAAAAAAAAABKQAAAAcAAAAJCgAAAAAAAAAAAAAAASoAAAAHAAAACQoAAAAAAAAAAAAAAAcrAAAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACTIAAAANAwctAAAAAAEAAAAIAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACTMAAAAJNAAAAAk1AAAACTYAAAAJNwAAAAk4AAAADQIRLwAAAAQAAAAGOQAAAARuYW1lDQMRMAAAAAQAAAAGOgAAAAp0ZXN0Zm9sZGVyBjsAAAALdGVzdHJlc3VsdHMGPAAAAAt0ZXN0cmVzdWx0cwoBMgAAAA0AAAAGPQAAANUBIyBEZXNjcmlwdGlvbg0KDQpUaGlzIGlzIHdoZXJlIHRoZSBmdW5jdGlvbiB0ZXN0cyBnby4NCg0KTWFrZSBzdXJlIHRvIHB1dCB0aGVtIGluIGZvbGRlcnMgcmVmbGVjdGluZyB0aGUgYWN0dWFsIG1vZHVsZSBzdHJ1Y3R1cmUuDQoNCkl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGludGVybmFsIGFuZCBwdWJsaWMgZnVuY3Rpb25zIGhlcmUuAQk+AAAACT8AAAAGQAAAAAlyZWFkbWUubWQGQQAAABl0ZXN0c1xmdW5jdGlvbnNccmVhZG1lLm1kCQYAAAAJQwAAAAlEAAAAATMAAAANAAAABkUAAADMBCMgTGlzdCBvZiBmb3JiaWRkZW4gY29tbWFuZHMNCiRnbG9iYWw6QmFubmVkQ29tbWFuZHMgPSBAKA0KCSdXcml0ZS1Ib3N0JywNCgknV3JpdGUtVmVyYm9zZScsDQoJJ1dyaXRlLVdhcm5pbmcnLA0KCSdXcml0ZS1FcnJvcicsDQoJJ1dyaXRlLU91dHB1dCcsDQoJJ1dyaXRlLUluZm9ybWF0aW9uJywNCgknV3JpdGUtRGVidWcnDQopDQoNCjwjDQoJQ29udGFpbnMgbGlzdCBvZiBleGNlcHRpb25zIGZvciBiYW5uZWQgY21kbGV0cy4NCglJbnNlcnQgdGhlIGZpbGUgbmFtZXMgb2YgZmlsZXMgdGhhdCBtYXkgY29udGFpbiB0aGVtLg0KCQ0KCUV4YW1wbGU6DQoJIldyaXRlLUhvc3QiICA9IEAoJ1dyaXRlLVBTRkhvc3RDb2xvci5wczEnLCdXcml0ZS1QU0ZNZXNzYWdlLnBzMScpDQojPg0KJGdsb2JhbDpNYXlDb250YWluQ29tbWFuZCA9IEB7DQoJIldyaXRlLUhvc3QiICA9IEAoKQ0KCSJXcml0ZS1WZXJib3NlIiA9IEAoKQ0KCSJXcml0ZS1XYXJuaW5nIiA9IEAoKQ0KCSJXcml0ZS1FcnJvciIgID0gQCgpDQoJIldyaXRlLU91dHB1dCIgPSBAKCkNCgkiV3JpdGUtSW5mb3JtYXRpb24iID0gQCgpDQoJIldyaXRlLURlYnVnIiA9IEAoKQ0KfQEJRgAAAAlHAAAABkgAAAAcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMQZJAAAAKnRlc3RzXGdlbmVyYWxcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMQkGAAAACUsAAAAJTAAAAAE0AAAADQAAAAZNAAAArBYkbW9kdWxlUm9vdCA9IChSZXNvbHZlLVBhdGggIiRQU1NjcmlwdFJvb3RcLi5cLi4iKS5QYXRoDQoNCi4gIiRQU1NjcmlwdFJvb3RcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMSINCg0KZnVuY3Rpb24gR2V0LUZpbGVFbmNvZGluZw0Kew0KPCMNCgkuU1lOT1BTSVMNCgkJVGVzdHMgYSBmaWxlIGZvciBlbmNvZGluZy4NCgkNCgkuREVTQ1JJUFRJT04NCgkJVGVzdHMgYSBmaWxlIGZvciBlbmNvZGluZy4NCgkNCgkuUEFSQU1FVEVSIFBhdGgNCgkJVGhlIGZpbGUgdG8gdGVzdA0KIz4NCglbQ21kbGV0QmluZGluZygpXQ0KCVBhcmFtICgNCgkJW1BhcmFtZXRlcihNYW5kYXRvcnkgPSAkVHJ1ZSwgVmFsdWVGcm9tUGlwZWxpbmVCeVByb3BlcnR5TmFtZSA9ICRUcnVlKV0NCgkJW0FsaWFzKCdGdWxsTmFtZScpXQ0KCQlbc3RyaW5nXQ0KCQkkUGF0aA0KCSkNCgkNCglbYnl0ZVtdXSRieXRlID0gZ2V0LWNvbnRlbnQgLUVuY29kaW5nIGJ5dGUgLVJlYWRDb3VudCA0IC1Ub3RhbENvdW50IDQgLVBhdGggJFBhdGgNCgkNCglpZiAoJGJ5dGVbMF0gLWVxIDB4ZWYgLWFuZCAkYnl0ZVsxXSAtZXEgMHhiYiAtYW5kICRieXRlWzJdIC1lcSAweGJmKSB7ICdVVEY4JyB9DQoJZWxzZWlmICgkYnl0ZVswXSAtZXEgMHhmZSAtYW5kICRieXRlWzFdIC1lcSAweGZmKSB7ICdVbmljb2RlJyB9DQoJZWxzZWlmICgkYnl0ZVswXSAtZXEgMCAtYW5kICRieXRlWzFdIC1lcSAwIC1hbmQgJGJ5dGVbMl0gLWVxIDB4ZmUgLWFuZCAkYnl0ZVszXSAtZXEgMHhmZikgeyAnVVRGMzInIH0NCgllbHNlaWYgKCRieXRlWzBdIC1lcSAweDJiIC1hbmQgJGJ5dGVbMV0gLWVxIDB4MmYgLWFuZCAkYnl0ZVsyXSAtZXEgMHg3NikgeyAnVVRGNycgfQ0KCWVsc2UgeyAnVW5rbm93bicgfQ0KfQ0KDQpEZXNjcmliZSAiVmVyaWZ5aW5nIGludGVncml0eSBvZiBtb2R1bGUgZmlsZXMiIHsNCglDb250ZXh0ICJWYWxpZGF0aW5nIFBTMSBTY3JpcHQgZmlsZXMiIHsNCgkJJGFsbEZpbGVzID0gR2V0LUNoaWxkSXRlbSAtUGF0aCAkbW9kdWxlUm9vdCAtUmVjdXJzZSAtRmlsdGVyICIqLnBzMSIgfCBXaGVyZS1PYmplY3QgRnVsbE5hbWUgLU5vdExpa2UgIiRtb2R1bGVSb290XHRlc3RzXCoiDQoJCQ0KCQlmb3JlYWNoICgkZmlsZSBpbiAkYWxsRmlsZXMpDQoJCXsNCgkJCSRuYW1lID0gJGZpbGUuRnVsbE5hbWUuUmVwbGFjZSgiJG1vZHVsZVJvb3RcIiwgJycpDQoJCQkNCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIFVURjggZW5jb2RpbmciIHsNCgkJCQlHZXQtRmlsZUVuY29kaW5nIC1QYXRoICRmaWxlLkZ1bGxOYW1lIHwgU2hvdWxkIC1CZSAnVVRGOCcNCgkJCX0NCgkJCQ0KCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgbm8gdHJhaWxpbmcgc3BhY2UiIHsNCgkJCQkoJGZpbGUgfCBTZWxlY3QtU3RyaW5nICJccyQiIHwgV2hlcmUtT2JqZWN0IHsgJF8uTGluZS5UcmltKCkuTGVuZ3RoIC1ndCAwfSkuTGluZU51bWJlciB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQkJfQ0KCQkJDQoJCQkkdG9rZW5zID0gJG51bGwNCgkJCSRwYXJzZUVycm9ycyA9ICRudWxsDQoJCQkkYXN0ID0gW1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uTGFuZ3VhZ2UuUGFyc2VyXTo6UGFyc2VGaWxlKCRmaWxlLkZ1bGxOYW1lLCBbcmVmXSR0b2tlbnMsIFtyZWZdJHBhcnNlRXJyb3JzKQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyBzeW50YXggZXJyb3JzIiB7DQoJCQkJJHBhcnNlRXJyb3JzIHwgU2hvdWxkIEJlICROdWxsDQoJCQl9DQoJCQkNCgkJCWZvcmVhY2ggKCRjb21tYW5kIGluICRnbG9iYWw6QmFubmVkQ29tbWFuZHMpDQoJCQl7DQoJCQkJaWYgKCRnbG9iYWw6TWF5Q29udGFpbkNvbW1hbmRbIiRjb21tYW5kIl0gLW5vdGNvbnRhaW5zICRmaWxlLk5hbWUpDQoJCQkJew0KCQkJCQlJdCAiWyRuYW1lXSBTaG91bGQgbm90IHVzZSAkY29tbWFuZCIgew0KCQkJCQkJJHRva2VucyB8IFdoZXJlLU9iamVjdCBUZXh0IC1FUSAkY29tbWFuZCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgbm90IGNvbnRhaW4gYWxpYXNlcyIgew0KCQkJCSR0b2tlbnMgfCBXaGVyZS1PYmplY3QgVG9rZW5GbGFncyAtZXEgQ29tbWFuZE5hbWUgfCBXaGVyZS1PYmplY3QgeyBUZXN0LVBhdGggImFsaWFzOlwkKCRfLlRleHQpIiB9IHwgTWVhc3VyZS1PYmplY3QgfCBTZWxlY3QtT2JqZWN0IC1FeHBhbmRQcm9wZXJ0eSBDb3VudCB8IFNob3VsZCAtQmUgMA0KCQkJfQ0KCQl9DQoJfQ0KCQ0KCUNvbnRleHQgIlZhbGlkYXRpbmcgaGVscC50eHQgaGVscCBmaWxlcyIgew0KCQkkYWxsRmlsZXMgPSBHZXQtQ2hpbGRJdGVtIC1QYXRoICRtb2R1bGVSb290IC1SZWN1cnNlIC1GaWx0ZXIgIiouaGVscC50eHQiIHwgV2hlcmUtT2JqZWN0IEZ1bGxOYW1lIC1Ob3RMaWtlICIkbW9kdWxlUm9vdFx0ZXN0c1wqIg0KCQkNCgkJZm9yZWFjaCAoJGZpbGUgaW4gJGFsbEZpbGVzKQ0KCQl7DQoJCQkkbmFtZSA9ICRmaWxlLkZ1bGxOYW1lLlJlcGxhY2UoIiRtb2R1bGVSb290XCIsICcnKQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBVVEY4IGVuY29kaW5nIiB7DQoJCQkJR2V0LUZpbGVFbmNvZGluZyAtUGF0aCAkZmlsZS5GdWxsTmFtZSB8IFNob3VsZCAtQmUgJ1VURjgnDQoJCQl9DQoJCQkNCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIG5vIHRyYWlsaW5nIHNwYWNlIiB7DQoJCQkJKCRmaWxlIHwgU2VsZWN0LVN0cmluZyAiXHMkIiB8IFdoZXJlLU9iamVjdCB7ICRfLkxpbmUuVHJpbSgpLkxlbmd0aCAtZ3QgMCB9IHwgTWVhc3VyZS1PYmplY3QpLkNvdW50IHwgU2hvdWxkIC1CZSAwDQoJCQl9DQoJCX0NCgl9DQp9AQlOAAAACU8AAAAGUAAAABdGaWxlSW50ZWdyaXR5LlRlc3RzLnBzMQZRAAAAJXRlc3RzXGdlbmVyYWxcRmlsZUludGVncml0eS5UZXN0cy5wczEJBgAAAAlTAAAACVQAAAABNQAAAA0AAAAGVQAAAJ0FIyBMaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkDQokZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zID0gQCgNCiAgICANCikNCg0KPCMNCiAgTGlzdCBvZiBhcnJheWVkIGVudW1lcmF0aW9ucy4gVGhlc2UgbmVlZCB0byBiZSB0cmVhdGVkIGRpZmZlcmVudGx5LiBBZGQgZnVsbCBuYW1lLg0KICBFeGFtcGxlOg0KDQogICJTcWxjb2xsYWJvcmF0aXZlLkRiYXRvb2xzLkNvbm5lY3Rpb24uTWFuYWdlbWVudENvbm5lY3Rpb25UeXBlW10iDQojPg0KJGdsb2JhbDpIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMgPSBAKA0KCQ0KKQ0KDQo8Iw0KICBTb21lIHR5cGVzIG9uIHBhcmFtZXRlcnMganVzdCBmYWlsIHRoZWlyIHZhbGlkYXRpb24gbm8gbWF0dGVyIHdoYXQuDQogIEZvciB0aG9zZSBpdCBiZWNvbWVzIHBvc3NpYmxlIHRvIHNraXAgdGhlbSwgYnkgYWRkaW5nIHRoZW0gdG8gdGhpcyBoYXNodGFibGUuDQogIEFkZCBieSBmb2xsb3dpbmcgdGhpcyBjb252ZW50aW9uOiA8Y29tbWFuZCBuYW1lPiA9IEAoPGxpc3Qgb2YgcGFyYW1ldGVyIG5hbWVzPikNCiAgRXhhbXBsZToNCg0KICAiR2V0LURiYUNtT2JqZWN0IiAgICAgICA9IEAoIkRvTm90VXNlIikNCiM+DQokZ2xvYmFsOkhlbHBUZXN0U2tpcFBhcmFtZXRlclR5cGUgPSBAew0KICAgIA0KfQ0KAQlWAAAACVcAAAAGWAAAABNIZWxwLkV4Y2VwdGlvbnMucHMxBlkAAAAhdGVzdHNcZ2VuZXJhbFxIZWxwLkV4Y2VwdGlvbnMucHMxCQYAAAAJWwAAAAlcAAAAATYAAAANAAAABl0AAAD/RTwjDQogICAgLk5PVEVTDQogICAgICAgIFRoZSBvcmlnaW5hbCB0ZXN0IHRoaXMgaXMgYmFzZWQgdXBvbiB3YXMgd3JpdHRlbiBieSBKdW5lIEJsZW5kZXIuDQoJCUFmdGVyIHNldmVyYWwgcm91bmRzIG9mIG1vZGlmaWNhdGlvbnMgaXQgc3RhbmRzIG5vdyBhcyBpdCBpcywgYnV0IHRoZSBob25vciByZW1haW5zIGhlcnMuDQoNCgkJVGhhbmsgeW91IEp1bmUsIGZvciBhbGwgeW91IGhhdmUgZG9uZSENCg0KICAgIC5ERVNDUklQVElPTg0KCQlUaGlzIHRlc3QgZXZhbHVhdGVzIHRoZSBoZWxwIGZvciBhbGwgY29tbWFuZHMgaW4gYSBtb2R1bGUuDQoNCgkuUEFSQU1FVEVSIFNraXBUZXN0DQoJCURpc2FibGVzIHRoaXMgdGVzdC4NCgkNCgkuUEFSQU1FVEVSIENvbW1hbmRQYXRoDQoJCUxpc3Qgb2YgcGF0aHMgdW5kZXIgd2hpY2ggdGhlIHNjcmlwdCBmaWxlcyBhcmUgc3RvcmVkLg0KCQlUaGlzIHRlc3QgYXNzdW1lcyB0aGF0IGFsbCBmdW5jdGlvbnMgaGF2ZSB0aGVpciBvd24gZmlsZSB0aGF0IGlzIG5hbWVkIGFmdGVyIHRoZW1zZWx2ZXMuDQoJCVRoZXNlIHBhdGhzIGFyZSB1c2VkIHRvIHNlYXJjaCBmb3IgY29tbWFuZHMgdGhhdCBzaG91bGQgZXhpc3QgYW5kIGJlIHRlc3RlZC4NCgkJV2lsbCBzZWFyY2ggcmVjdXJzaXZlbHkgYW5kIGFjY2VwdHMgd2lsZGNhcmRzLCBtYWtlIHN1cmUgb25seSBmdW5jdGlvbnMgYXJlIGZvdW5kDQoNCgkuUEFSQU1FVEVSIE1vZHVsZU5hbWUNCgkJTmFtZSBvZiB0aGUgbW9kdWxlIHRvIGJlIHRlc3RlZC4NCgkJVGhlIG1vZHVsZSBtdXN0IGFscmVhZHkgYmUgaW1wb3J0ZWQNCg0KCS5QQVJBTUVURVIgRXhjZXB0aW9uc0ZpbGUNCgkJRmlsZSBpbiB3aGljaCBleGNlcHRpb25zIGFuZCBhZGp1c3RtZW50cyBhcmUgY29uZmlndXJlZC4NCgkJSW4gaXQgdGhlcmUgc2hvdWxkIGJlIHR3byBhcnJheXMgYW5kIGEgaGFzaHRhYmxlIGRlZmluZWQ6DQoJCQkkZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zDQoJCQkkZ2xvYmFsOkhlbHBUZXN0RW51bWVyYXRlZEFycmF5cw0KCQkJJGdsb2JhbDpIZWxwVGVzdFNraXBQYXJhbWV0ZXJUeXBlDQoJCVRoZXNlIGNhbiBiZSB1c2VkIHRvIHR3ZWFrIHRoZSB0ZXN0cyBzbGlnaHRseSBpbiBjYXNlcyBvZiBuZWVkLg0KCQlTZWUgdGhlIGV4YW1wbGUgZmlsZSBmb3IgZXhwbGFuYXRpb25zIG9uIGVhY2ggb2YgdGhlc2UgdXNhZ2UgYW5kIGVmZmVjdC4NCiM+DQpbQ21kbGV0QmluZGluZygpXQ0KUGFyYW0gKA0KCVtzd2l0Y2hdDQoJJFNraXBUZXN0LA0KCQ0KCVtzdHJpbmdbXV0NCgkkQ29tbWFuZFBhdGggPSBAKCIkUFNTY3JpcHRSb290XC4uXC4uXGZ1bmN0aW9ucyIsICIkUFNTY3JpcHRSb290XC4uXC4uXGludGVybmFsXGZ1bmN0aW9ucyIpLA0KCQ0KCVtzdHJpbmddDQoJJE1vZHVsZU5hbWUgPSAiw75uYW1lw74iLA0KCQ0KCVtzdHJpbmddDQoJJEV4Y2VwdGlvbnNGaWxlID0gIiRQU1NjcmlwdFJvb3RcSGVscC5FeGNlcHRpb25zLnBzMSINCikNCmlmICgkU2tpcFRlc3QpIHsgcmV0dXJuIH0NCi4gJEV4Y2VwdGlvbnNGaWxlDQoNCiRpbmNsdWRlZE5hbWVzID0gKEdldC1DaGlsZEl0ZW0gJENvbW1hbmRQYXRoIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIikuQmFzZU5hbWUNCiRjb21tYW5kcyA9IEdldC1Db21tYW5kIC1Nb2R1bGUgKEdldC1Nb2R1bGUgJE1vZHVsZU5hbWUpIC1Db21tYW5kVHlwZSBDbWRsZXQsIEZ1bmN0aW9uLCBXb3JrZmxvdyB8IFdoZXJlLU9iamVjdCBOYW1lIC1pbiAkaW5jbHVkZWROYW1lcw0KDQojIyBXaGVuIHRlc3RpbmcgaGVscCwgcmVtZW1iZXIgdGhhdCBoZWxwIGlzIGNhY2hlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggc2Vzc2lvbi4NCiMjIFRvIHRlc3QsIHJlc3RhcnQgc2Vzc2lvbi4NCg0KDQpmb3JlYWNoICgkY29tbWFuZCBpbiAkY29tbWFuZHMpIHsNCiAgICAkY29tbWFuZE5hbWUgPSAkY29tbWFuZC5OYW1lDQogICAgDQogICAgIyBTa2lwIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgb24gdGhlIGV4Y2x1c2lvbnMgbGlzdA0KICAgIGlmICgkZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zIC1jb250YWlucyAkY29tbWFuZE5hbWUpIHsgY29udGludWUgfQ0KICAgIA0KICAgICMgVGhlIG1vZHVsZS1xdWFsaWZpZWQgY29tbWFuZCBmYWlscyBvbiBNaWNyb3NvZnQuUG93ZXJTaGVsbC5BcmNoaXZlIGNtZGxldHMNCiAgICAkSGVscCA9IEdldC1IZWxwICRjb21tYW5kTmFtZSAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZQ0KICAgICR0ZXN0aGVscGVycm9ycyA9IDANCiAgICAkdGVzdGhlbHBhbGwgPSAwDQogICAgRGVzY3JpYmUgIlRlc3QgaGVscCBmb3IgJGNvbW1hbmROYW1lIiB7DQogICAgICAgIA0KICAgICAgICAkdGVzdGhlbHBhbGwgKz0gMQ0KICAgICAgICBpZiAoJEhlbHAuU3lub3BzaXMgLWxpa2UgJypgW2A8Q29tbW9uUGFyYW1ldGVyc2A+YF0qJykgew0KICAgICAgICAgICAgIyBJZiBoZWxwIGlzIG5vdCBmb3VuZCwgc3lub3BzaXMgaW4gYXV0by1nZW5lcmF0ZWQgaGVscCBpcyB0aGUgc3ludGF4IGRpYWdyYW0NCiAgICAgICAgICAgIEl0ICJzaG91bGQgbm90IGJlIGF1dG8tZ2VuZXJhdGVkIiB7DQogICAgICAgICAgICAgICAgJEhlbHAuU3lub3BzaXMgfCBTaG91bGQgLU5vdCAtQmVMaWtlICcqYFtgPENvbW1vblBhcmFtZXRlcnNgPmBdKicNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0ZXN0aGVscGVycm9ycyArPSAxDQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICR0ZXN0aGVscGFsbCArPSAxDQogICAgICAgIGlmIChbU3RyaW5nXTo6SXNOdWxsT3JFbXB0eSgkSGVscC5EZXNjcmlwdGlvbi5UZXh0KSkgew0KICAgICAgICAgICAgIyBTaG91bGQgYmUgYSBkZXNjcmlwdGlvbiBmb3IgZXZlcnkgZnVuY3Rpb24NCiAgICAgICAgICAgIEl0ICJnZXRzIGRlc2NyaXB0aW9uIGZvciAkY29tbWFuZE5hbWUiIHsNCiAgICAgICAgICAgICAgICAkSGVscC5EZXNjcmlwdGlvbiB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGVzdGhlbHBlcnJvcnMgKz0gMQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAkdGVzdGhlbHBhbGwgKz0gMQ0KICAgICAgICBpZiAoW1N0cmluZ106OklzTnVsbE9yRW1wdHkoKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxKS5Db2RlKSkgew0KICAgICAgICAgICAgIyBTaG91bGQgYmUgYXQgbGVhc3Qgb25lIGV4YW1wbGUNCiAgICAgICAgICAgIEl0ICJnZXRzIGV4YW1wbGUgY29kZSBmcm9tICRjb21tYW5kTmFtZSIgew0KICAgICAgICAgICAgICAgICgkSGVscC5FeGFtcGxlcy5FeGFtcGxlIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMSkuQ29kZSB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGVzdGhlbHBlcnJvcnMgKz0gMQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAkdGVzdGhlbHBhbGwgKz0gMQ0KICAgICAgICBpZiAoW1N0cmluZ106OklzTnVsbE9yRW1wdHkoKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUuUmVtYXJrcyB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLlRleHQpKSB7DQogICAgICAgICAgICAjIFNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZXhhbXBsZSBkZXNjcmlwdGlvbg0KICAgICAgICAgICAgSXQgImdldHMgZXhhbXBsZSBoZWxwIGZyb20gJGNvbW1hbmROYW1lIiB7DQogICAgICAgICAgICAgICAgKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUuUmVtYXJrcyB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLlRleHQgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHRlc3RoZWxwZXJyb3JzICs9IDENCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgaWYgKCR0ZXN0aGVscGVycm9ycyAtZXEgMCkgew0KICAgICAgICAgICAgSXQgIlJhbiBzaWxlbnRseSAkdGVzdGhlbHBhbGwgdGVzdHMiIHsNCiAgICAgICAgICAgICAgICAkdGVzdGhlbHBlcnJvcnMgfCBTaG91bGQgLWJlIDANCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgJHRlc3RwYXJhbXNhbGwgPSAwDQogICAgICAgICR0ZXN0cGFyYW1zZXJyb3JzID0gMA0KICAgICAgICBDb250ZXh0ICJUZXN0IHBhcmFtZXRlciBoZWxwIGZvciAkY29tbWFuZE5hbWUiIHsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJENvbW1vbiA9ICdEZWJ1ZycsICdFcnJvckFjdGlvbicsICdFcnJvclZhcmlhYmxlJywgJ0luZm9ybWF0aW9uQWN0aW9uJywgJ0luZm9ybWF0aW9uVmFyaWFibGUnLCAnT3V0QnVmZmVyJywgJ091dFZhcmlhYmxlJywNCiAgICAgICAgICAgICdQaXBlbGluZVZhcmlhYmxlJywgJ1ZlcmJvc2UnLCAnV2FybmluZ0FjdGlvbicsICdXYXJuaW5nVmFyaWFibGUnDQogICAgICAgICAgICANCiAgICAgICAgICAgICRwYXJhbWV0ZXJzID0gJGNvbW1hbmQuUGFyYW1ldGVyU2V0cy5QYXJhbWV0ZXJzIHwgU29ydC1PYmplY3QgLVByb3BlcnR5IE5hbWUgLVVuaXF1ZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1ub3RpbiAkY29tbW9uDQogICAgICAgICAgICAkcGFyYW1ldGVyTmFtZXMgPSAkcGFyYW1ldGVycy5OYW1lDQogICAgICAgICAgICAkSGVscFBhcmFtZXRlck5hbWVzID0gJEhlbHAuUGFyYW1ldGVycy5QYXJhbWV0ZXIuTmFtZSB8IFNvcnQtT2JqZWN0IC1VbmlxdWUNCiAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJhbWV0ZXIgaW4gJHBhcmFtZXRlcnMpIHsNCiAgICAgICAgICAgICAgICAkcGFyYW1ldGVyTmFtZSA9ICRwYXJhbWV0ZXIuTmFtZQ0KICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJIZWxwID0gJEhlbHAucGFyYW1ldGVycy5wYXJhbWV0ZXIgfCBXaGVyZS1PYmplY3QgTmFtZSAtRVEgJHBhcmFtZXRlck5hbWUNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2FsbCArPSAxDQogICAgICAgICAgICAgICAgaWYgKFtTdHJpbmddOjpJc051bGxPckVtcHR5KCRwYXJhbWV0ZXJIZWxwLkRlc2NyaXB0aW9uLlRleHQpKSB7DQogICAgICAgICAgICAgICAgICAgICMgU2hvdWxkIGJlIGEgZGVzY3JpcHRpb24gZm9yIGV2ZXJ5IHBhcmFtZXRlcg0KICAgICAgICAgICAgICAgICAgICBJdCAiZ2V0cyBoZWxwIGZvciBwYXJhbWV0ZXI6ICRwYXJhbWV0ZXJOYW1lIDogaW4gJGNvbW1hbmROYW1lIiB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1ldGVySGVscC5EZXNjcmlwdGlvbi5UZXh0IHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2Vycm9ycyArPSAxDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICR0ZXN0cGFyYW1zYWxsICs9IDENCiAgICAgICAgICAgICAgICAkY29kZU1hbmRhdG9yeSA9ICRwYXJhbWV0ZXIuSXNNYW5kYXRvcnkudG9TdHJpbmcoKQ0KICAgICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVySGVscC5SZXF1aXJlZCAtbmUgJGNvZGVNYW5kYXRvcnkpIHsNCiAgICAgICAgICAgICAgICAgICAgIyBSZXF1aXJlZCB2YWx1ZSBpbiBIZWxwIHNob3VsZCBtYXRjaCBJc01hbmRhdG9yeSBwcm9wZXJ0eSBvZiBwYXJhbWV0ZXINCiAgICAgICAgICAgICAgICAgICAgSXQgImhlbHAgZm9yICRwYXJhbWV0ZXJOYW1lIHBhcmFtZXRlciBpbiAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgTWFuZGF0b3J5IHZhbHVlIiB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1ldGVySGVscC5SZXF1aXJlZCB8IFNob3VsZCAtQmUgJGNvZGVNYW5kYXRvcnkNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2Vycm9ycyArPSAxDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICgkSGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZVskY29tbWFuZE5hbWVdIC1jb250YWlucyAkcGFyYW1ldGVyTmFtZSkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGNvZGVUeXBlID0gJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLk5hbWUNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2FsbCArPSAxDQogICAgICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5Jc0VudW0pIHsNCiAgICAgICAgICAgICAgICAgICAgIyBFbnVtZXJhdGlvbnMgb2Z0ZW4gaGF2ZSBpc3N1ZXMgd2l0aCB0aGUgdHlwZW5hbWUgbm90IGJlaW5nIHJlbGlhYmx5IGF2YWlsYWJsZQ0KICAgICAgICAgICAgICAgICAgICAkbmFtZXMgPSAkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGU6OkdldE5hbWVzKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZSkNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlR3JvdXAucGFyYW1ldGVyVmFsdWUgLW5lICRuYW1lcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgIyBQYXJhbWV0ZXIgdHlwZSBpbiBIZWxwIHNob3VsZCBtYXRjaCBjb2RlDQogICAgICAgICAgICAgICAgICAgICAgICBJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlR3JvdXAucGFyYW1ldGVyVmFsdWUgfCBTaG91bGQgLWJlICRuYW1lcw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHRlc3RwYXJhbXNlcnJvcnMgKz0gMQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2VpZiAoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLkZ1bGxOYW1lIC1pbiAkSGVscFRlc3RFbnVtZXJhdGVkQXJyYXlzKSB7DQogICAgICAgICAgICAgICAgICAgICMgRW51bWVyYXRpb25zIG9mdGVuIGhhdmUgaXNzdWVzIHdpdGggdGhlIHR5cGVuYW1lIG5vdCBiZWluZyByZWxpYWJseSBhdmFpbGFibGUNCiAgICAgICAgICAgICAgICAgICAgJG5hbWVzID0gW0VudW1dOjpHZXROYW1lcygkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUuRGVjbGFyZWRNZW1iZXJzWzBdLlJldHVyblR5cGUpDQogICAgICAgICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZUdyb3VwLnBhcmFtZXRlclZhbHVlIC1uZSAkbmFtZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICMgUGFyYW1ldGVyIHR5cGUgaW4gSGVscCBzaG91bGQgbWF0Y2ggY29kZQ0KICAgICAgICAgICAgICAgICAgICAgICAgSXQgImhlbHAgZm9yICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBwYXJhbWV0ZXIgdHlwZSBmb3IgJHBhcmFtZXRlck5hbWUiIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZUdyb3VwLnBhcmFtZXRlclZhbHVlIHwgU2hvdWxkIC1iZSAkbmFtZXMNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICR0ZXN0cGFyYW1zZXJyb3JzICs9IDENCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgIyBUbyBhdm9pZCBjYWxsaW5nIFRyaW0gbWV0aG9kIG9uIGEgbnVsbCBvYmplY3QuDQogICAgICAgICAgICAgICAgICAgICRoZWxwVHlwZSA9IGlmICgkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZSkgeyAkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZS5UcmltKCkgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGhlbHBUeXBlIC1uZSAkY29kZVR5cGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICMgUGFyYW1ldGVyIHR5cGUgaW4gSGVscCBzaG91bGQgbWF0Y2ggY29kZQ0KICAgICAgICAgICAgICAgICAgICAgICAgSXQgImhlbHAgZm9yICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBwYXJhbWV0ZXIgdHlwZSBmb3IgJHBhcmFtZXRlck5hbWUiIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGVscFR5cGUgfCBTaG91bGQgLWJlICRjb2RlVHlwZQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHRlc3RwYXJhbXNlcnJvcnMgKz0gMQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZm9yZWFjaCAoJGhlbHBQYXJtIGluICRIZWxwUGFyYW1ldGVyTmFtZXMpIHsNCiAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2FsbCArPSAxDQogICAgICAgICAgICAgICAgaWYgKCRoZWxwUGFybSAtbm90aW4gJHBhcmFtZXRlck5hbWVzKSB7DQogICAgICAgICAgICAgICAgICAgICMgU2hvdWxkbid0IGZpbmQgZXh0cmEgcGFyYW1ldGVycyBpbiBoZWxwLg0KICAgICAgICAgICAgICAgICAgICBJdCAiZmluZHMgaGVscCBwYXJhbWV0ZXIgaW4gY29kZTogJGhlbHBQYXJtIiB7DQogICAgICAgICAgICAgICAgICAgICAgICAkaGVscFBhcm0gLWluICRwYXJhbWV0ZXJOYW1lcyB8IFNob3VsZCAtQmUgJHRydWUNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2Vycm9ycyArPSAxDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCR0ZXN0cGFyYW1zZXJyb3JzIC1lcSAwKSB7DQogICAgICAgICAgICAgICAgSXQgIlJhbiBzaWxlbnRseSAkdGVzdHBhcmFtc2FsbCB0ZXN0cyIgew0KICAgICAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2Vycm9ycyB8IFNob3VsZCAtYmUgMA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0BCV4AAAAJXwAAAAZgAAAADkhlbHAuVGVzdHMucHMxBmEAAAAcdGVzdHNcZ2VuZXJhbFxIZWxwLlRlc3RzLnBzMQkGAAAACWMAAAAJZAAAAAE3AAAADQAAAAZlAAAAnBBEZXNjcmliZSAiVmFsaWRhdGluZyB0aGUgbW9kdWxlIG1hbmlmZXN0IiB7DQoJJG1vZHVsZVJvb3QgPSAoUmVzb2x2ZS1QYXRoICIkUFNTY3JpcHRSb290XC4uXC4uIikuUGF0aA0KCSRtYW5pZmVzdCA9ICgoR2V0LUNvbnRlbnQgIiRtb2R1bGVSb290XMO+bmFtZcO+LnBzZDEiKSAtam9pbiAiYG4iKSB8IEludm9rZS1FeHByZXNzaW9uDQoJW3ZlcnNpb25dJG1vZHVsZVZlcnNpb24gPSBHZXQtSXRlbSAiJG1vZHVsZVJvb3Rcw75uYW1lw74ucHNtMSIgfCBTZWxlY3QtU3RyaW5nIC1QYXR0ZXJuICdcJHNjcmlwdDpNb2R1bGVWZXJzaW9uID0gIiguKj8pIicgfCBGb3JFYWNoLU9iamVjdCB7ICRfLk1hdGNoZXNbMF0uR3JvdXBzWzFdLlZhbHVlIH0NCglDb250ZXh0ICJCYXNpYyByZXNvdXJjZXMgdmFsaWRhdGlvbiIgew0KCQkkZmlsZXMgPSBHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIC1GaWx0ZXIgIioucHMxIg0KCQlJdCAiRXhwb3J0cyBhbGwgZnVuY3Rpb25zIGluIHRoZSBwdWJsaWMgZm9sZGVyIiB7DQoJCQkNCgkJCSRmdW5jdGlvbnMgPSAoQ29tcGFyZS1PYmplY3QgLVJlZmVyZW5jZU9iamVjdCAkZmlsZXMuQmFzZU5hbWUgLURpZmZlcmVuY2VPYmplY3QgJG1hbmlmZXN0LkZ1bmN0aW9uc1RvRXhwb3J0IHwgV2hlcmUtT2JqZWN0IFNpZGVJbmRpY2F0b3IgLUxpa2UgJzw9JykuSW5wdXRPYmplY3QNCgkJCSRmdW5jdGlvbnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkNCgkJfQ0KCQlJdCAiRXhwb3J0cyBubyBmdW5jdGlvbiB0aGF0IGlzbid0IGFsc28gcHJlc2VudCBpbiB0aGUgcHVibGljIGZvbGRlciIgew0KCQkJJGZ1bmN0aW9ucyA9IChDb21wYXJlLU9iamVjdCAtUmVmZXJlbmNlT2JqZWN0ICRmaWxlcy5CYXNlTmFtZSAtRGlmZmVyZW5jZU9iamVjdCAkbWFuaWZlc3QuRnVuY3Rpb25zVG9FeHBvcnQgfCBXaGVyZS1PYmplY3QgU2lkZUluZGljYXRvciAtTGlrZSAnPT4nKS5JbnB1dE9iamVjdA0KCQkJJGZ1bmN0aW9ucyB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQoJCQ0KCQlJdCAiRXhwb3J0cyBub25lIG9mIGl0cyBpbnRlcm5hbCBmdW5jdGlvbnMiIHsNCgkJCSRmaWxlcyA9IEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgLUZpbHRlciAiKi5wczEiDQoJCQkkZmlsZXMgfCBXaGVyZS1PYmplY3QgQmFzZU5hbWUgLUluICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQoJCQ0KCQlJdCAiSGFzIHRoZSBzYW1lIHZlcnNpb24gYXMgdGhlIHBzbTEgZmlsZSIgew0KCQkJKFt2ZXJzaW9uXSRtYW5pZmVzdC5Nb2R1bGVWZXJzaW9uKSB8IFNob3VsZCAtQmUgJG1vZHVsZVZlcnNpb24NCgkJfQ0KCX0NCgkNCglDb250ZXh0ICJJbmRpdmlkdWFsIGZpbGUgdmFsaWRhdGlvbiIgew0KCQlJdCAiVGhlIHJvb3QgbW9kdWxlIGZpbGUgZXhpc3RzIiB7DQoJCQlUZXN0LVBhdGggIiRtb2R1bGVSb290XCQoJG1hbmlmZXN0LlJvb3RNb2R1bGUpIiB8IFNob3VsZCAtQmUgJHRydWUNCgkJfQ0KCQkNCgkJZm9yZWFjaCAoJGZvcm1hdCBpbiAkbWFuaWZlc3QuRm9ybWF0c1RvUHJvY2VzcykNCgkJew0KCQkJSXQgIlRoZSBmaWxlICRmb3JtYXQgc2hvdWxkIGV4aXN0IiB7DQoJCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkZm9ybWF0IiB8IFNob3VsZCAtQmUgJHRydWUNCgkJCX0NCgkJfQ0KCQkNCgkJZm9yZWFjaCAoJHR5cGUgaW4gJG1hbmlmZXN0LlR5cGVzVG9Qcm9jZXNzKQ0KCQl7DQoJCQlJdCAiVGhlIGZpbGUgJHR5cGUgc2hvdWxkIGV4aXN0IiB7DQoJCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkdHlwZSIgfCBTaG91bGQgLUJlICR0cnVlDQoJCQl9DQoJCX0NCgkJDQoJCWZvcmVhY2ggKCRhc3NlbWJseSBpbiAkbWFuaWZlc3QuUmVxdWlyZWRBc3NlbWJsaWVzKQ0KCQl7DQoJCQlJdCAiVGhlIGZpbGUgJGFzc2VtYmx5IHNob3VsZCBleGlzdCIgew0KCQkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJGFzc2VtYmx5IiB8IFNob3VsZCAtQmUgJHRydWUNCgkJCX0NCgkJfQ0KCX0NCn0BCWYAAAAJZwAAAAZoAAAAEk1hbmlmZXN0LlRlc3RzLnBzMQZpAAAAIHRlc3RzXGdlbmVyYWxcTWFuaWZlc3QuVGVzdHMucHMxCQYAAAAJawAAAAlsAAAAATgAAAANAAAABm0AAAD1B1tDbWRsZXRCaW5kaW5nKCldDQpQYXJhbSAoDQoJW3N3aXRjaF0NCgkkU2tpcFRlc3QsDQoJDQoJW3N0cmluZ1tdXQ0KCSRDb21tYW5kUGF0aCA9IEAoIiRQU1NjcmlwdFJvb3RcLi5cLi5cZnVuY3Rpb25zIiwgIiRQU1NjcmlwdFJvb3RcLi5cLi5caW50ZXJuYWxcZnVuY3Rpb25zIikNCikNCg0KaWYgKCRTa2lwVGVzdCkgeyByZXR1cm4gfQ0KDQokbGlzdCA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KDQpEZXNjcmliZSAnSW52b2tpbmcgUFNTY3JpcHRBbmFseXplciBhZ2FpbnN0IGNvbW1hbmRiYXNlJyB7DQoJJGNvbW1hbmRGaWxlcyA9IEdldC1DaGlsZEl0ZW0gLVBhdGggJENvbW1hbmRQYXRoIC1SZWN1cnNlIC1GaWx0ZXIgIioucHMxIg0KCSRzY3JpcHRBbmFseXplclJ1bGVzID0gR2V0LVNjcmlwdEFuYWx5emVyUnVsZQ0KCQ0KCWZvcmVhY2ggKCRmaWxlIGluICRjb21tYW5kRmlsZXMpDQoJew0KCQlDb250ZXh0ICJBbmFseXppbmcgJCgkZmlsZS5CYXNlTmFtZSkiIHsNCgkJCSRhbmFseXNpcyA9IEludm9rZS1TY3JpcHRBbmFseXplciAtUGF0aCAkZmlsZS5GdWxsTmFtZSAtRXhjbHVkZVJ1bGUgUFNBdm9pZFRyYWlsaW5nV2hpdGVzcGFjZSwgUFNTaG91bGRQcm9jZXNzDQoJCQkNCgkJCWZvckVhY2ggKCRydWxlIGluICRzY3JpcHRBbmFseXplclJ1bGVzKQ0KCQkJew0KCQkJCUl0ICJTaG91bGQgcGFzcyAkcnVsZSIgew0KCQkJCQlJZiAoJGFuYWx5c2lzLlJ1bGVOYW1lIC1jb250YWlucyAkcnVsZSkNCgkJCQkJew0KCQkJCQkJJGFuYWx5c2lzIHwgV2hlcmUtT2JqZWN0IFJ1bGVOYW1lIC1FUSAkcnVsZSAtb3V0dmFyaWFibGUgZmFpbHVyZXMgfCBGb3JFYWNoLU9iamVjdCB7ICRsaXN0LkFkZCgkXykgfQ0KCQkJCQkJDQoJCQkJCQkxIHwgU2hvdWxkIEJlIDANCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCTAgfCBTaG91bGQgQmUgMA0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KDQokbGlzdCB8IE91dC1EZWZhdWx0AQluAAAACW8AAAAGcAAAABpQU1NjcmlwdEFuYWx5emVyLlRlc3RzLnBzMQZxAAAAKHRlc3RzXGdlbmVyYWxcUFNTY3JpcHRBbmFseXplci5UZXN0cy5wczEJBgAAAAlzAAAACXQAAAABPgAAAAcAAAAJCgAAAAAAAAAAAAAAAT8AAAAHAAAACQoAAAAAAAAAAAAAAAFDAAAABwAAAAkKAAAAAAAAAAAAAAABRAAAAAcAAAAJCgAAAAAAAAAAAAAAAUYAAAAHAAAACQoAAAAAAAAAAAAAAAFHAAAABwAAAAkKAAAAAAAAAAAAAAABSwAAAAcAAAAJCgAAAAAAAAAAAAAAAUwAAAAHAAAACQoAAAAAAAAAAAAAAAFOAAAABwAAAAkKAAAAAAAAAAAAAAABTwAAAAcAAAAJCgAAAAAAAAAAAAAAAVMAAAAHAAAACQoAAAAAAAAAAAAAAAFUAAAABwAAAAkKAAAAAAAAAAAAAAABVgAAAAcAAAAJCgAAAAAAAAAAAAAAAVcAAAAHAAAACQoAAAAAAAAAAAAAAAFbAAAABwAAAAkKAAAAAAAAAAAAAAABXAAAAAcAAAAJCgAAAAAAAAAAAAAAAV4AAAAHAAAACXYAAAABAAAAAQAAAAFfAAAABwAAAAkKAAAAAAAAAAAAAAABYwAAAAcAAAAJCgAAAAAAAAAAAAAAAWQAAAAHAAAACQoAAAAAAAAAAAAAAAFmAAAABwAAAAl4AAAAAQAAAAEAAAABZwAAAAcAAAAJCgAAAAAAAAAAAAAAAWsAAAAHAAAACQoAAAAAAAAAAAAAAAFsAAAABwAAAAkKAAAAAAAAAAAAAAABbgAAAAcAAAAJCgAAAAAAAAAAAAAAAW8AAAAHAAAACQoAAAAAAAAAAAAAAAFzAAAABwAAAAkKAAAAAAAAAAAAAAABdAAAAAcAAAAJCgAAAAAAAAAAAAAAEXYAAAAEAAAABnoAAAAEbmFtZQ0DEXgAAAAEAAAABnsAAAAEbmFtZQ0DCw==</BA>
            </MS>
          </Obj>
          <Obj RefId="32">
            <TNRef RefId="6" />
            <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString>
            <Props>
              <Obj N="Children" RefId="33">
                <TNRef RefId="5" />
                <LST>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                </LST>
              </Obj>
              <S N="Name">xml</S>
              <S N="RelativePath">xml</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="34">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="35">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAAA3htbAYFAAAAA3htbAYGAAAAAsO+CQcAAAAJCAAAAAQDAAAAngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZVtdAgAAAAgICQkAAAADAAAAAwAAAAQHAAAAf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgYAAAgICQoAAAAAAAAAAAAAAAEIAAAABwAAAAkKAAAAAAAAAAAAAAAHCQAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAkLAAAACQwAAAAJDQAAAAoRCgAAAAAAAAAFCwAAAC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUZpbGUJAAAABVZhbHVlCVBsYWluVGV4dBRDb250ZW50UGFyYW1ldGVyRmxhdBZDb250ZW50UGFyYW1ldGVyU2NyaXB0BE5hbWUMUmVsYXRpdmVQYXRoCklkZW50aWZpZXIXRmlsZVN5c3RlbVBhcmFtZXRlckZsYXQZRmlsZVN5c3RlbVBhcmFtZXRlclNjcmlwdAEAAwMBAQEDAwF/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAGDgAAAKwLIyBYTUwNCg0KVGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIHByb2plY3QgWE1MIGZpbGVzIGdvLCBub3RhYmx5Og0KDQogLSBGb3JtYXQgWE1MDQogLSBUeXBlIEV4dGVuc2lvbiBYTUwNCg0KRXh0ZXJuYWwgaGVscCBmaWxlcyBzaG91bGQgX25vdF8gYmUgcGxhY2VkIGluIHRoaXMgZm9sZGVyIQ0KDQojIyBOb3RlcyBvbiBGaWxlcyBhbmQgTmFtaW5nDQoNClRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBmb3JtYXQgZmlsZSBhbmQgb25lIHR5cGUgZXh0ZW5zaW9uIGZpbGUgcGVyIHByb2plY3QsIGFzIGltcG9ydGluZyB0aGVtIGhhcyBhIG5vdGFibGUgaW1wYWN0IG9uIGltcG9ydCB0aW1lcy4NCg0KIC0gVGhlIEZvcm1hdCBYTUwgc2hvdWxkIGJlIG5hbWVkIGDDvm5hbWXDvi5Gb3JtYXQucHMxeG1sYA0KIC0gVGhlIFR5cGUgRXh0ZW5zaW9uIFhNTCBzaG91bGQgYmUgbmFtZWQgYMO+bmFtZcO+LlR5cGVzLnBzMXhtbGANCg0KIyMgVG9vbHMNCg0KIyMjIE5ldy1QU01ERm9ybWF0VGFibGVEZWZpbml0aW9uDQoNClRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGFuIGlucHV0IG9iamVjdCBhbmQgZ2VuZXJhdGUgZm9ybWF0IHhtbCBmb3IgYW4gYXV0by1zaXplZCB0YWJsZS4NCg0KSXQgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IHRvIGdldCBzdGFydGVkIHdpdGggZm9ybWF0cy4NCg0KIyMjIEdldC1QU0ZUeXBlU2VyaWFsaXphdGlvbkRhdGENCg0KYGBgDQpDIyBXYXJuaW5nIQ0KVGhpcyBzZWN0aW9uIGlzIG9ubHkgaW50ZXJlc3QgaWYgeW91J3JlIHVzaW5nIEMjIHRvZ2V0aGVyIHdpdGggUG93ZXJTaGVsbC4NCmBgYA0KDQpUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyB0eXBlIGV4dGVuc2lvbiBYTUwgdGhhdCBhbGxvd3MgUG93ZXJTaGVsbCB0byBjb252ZXJ0IHR5cGVzIHdyaXR0ZW4gaW4gQyMgdG8gYmUgd3JpdHRlbiB0byBmaWxlIGFuZCByZXN0b3JlZCBmcm9tIGl0IHdpdGhvdXQgYmVpbmcgJ0Rlc2VyaWFsaXplZCcuIEFsc28gd29ya3MgZm9yIGpvYnMgb3IgcmVtb3RpbmcsIGlmIGJvdGggc2lkZXMgaGF2ZSB0aGUgYFBTRnJhbWV3b3JrYCBtb2R1bGUgYW5kIHR5cGUgZXh0ZW5zaW9uIGxvYWRlZC4NCg0KSW4gb3JkZXIgZm9yIGEgY2xhc3MgdG8gYmUgZWxpZ2libGUgZm9yIHRoaXMsIGl0IG5lZWRzIHRvIGNvbmZvcm0gdG8gdGhlIGZvbGxvd2luZyBydWxlczoNCg0KIC0gSGF2ZSB0aGUgYFtTZXJpYWxpemFibGVdYCBhdHRyaWJ1dGUNCiAtIEJlIHB1YmxpYw0KIC0gSGF2ZSBhbiBlbXB0eSBjb25zdHJ1Y3Rvcg0KIC0gQWxsb3cgYWxsIHB1YmxpYyBwcm9wZXJ0aWVzL2ZpZWxkcyB0byBiZSBzZXQgKGV2ZW4gaWYgc2V0dGluZyBpdCBkb2Vzbid0IGRvIGFueXRoaW5nKSB3aXRob3V0IHRocm93aW5nIGFuIGV4Y2VwdGlvbi4NCg0KYGBgDQpub24tcHVibGljIHByb3BlcnRpZXMgYW5kIGZpZWxkcyB3aWxsIGJlIGxvc3QgaW4gdGhpcyBwcm9jZXNzIQ0KYGBgAQkPAAAACRAAAAAGEQAAAAlyZWFkbWUubWQGEgAAAA14bWxccmVhZG1lLm1kCQYAAAAJFAAAAAkVAAAAAQwAAAALAAAABhYAAADnBTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi0xNiI/Pg0KPENvbmZpZ3VyYXRpb24+DQoJPFZpZXdEZWZpbml0aW9ucz4NCgkJPCEtLSBGb28uQmFyIC0tPg0KCQk8Vmlldz4NCgkJCTxOYW1lPkZvby5CYXI8L05hbWU+DQoJCQk8Vmlld1NlbGVjdGVkQnk+DQoJCQkJPFR5cGVOYW1lPkZvby5CYXI8L1R5cGVOYW1lPg0KCQkJPC9WaWV3U2VsZWN0ZWRCeT4NCgkJCTxUYWJsZUNvbnRyb2w+DQoJCQkJPEF1dG9TaXplLz4NCgkJCQk8VGFibGVIZWFkZXJzPg0KCQkJCQk8VGFibGVDb2x1bW5IZWFkZXIvPg0KCQkJCQk8VGFibGVDb2x1bW5IZWFkZXIvPg0KCQkJCTwvVGFibGVIZWFkZXJzPg0KCQkJCTxUYWJsZVJvd0VudHJpZXM+DQoJCQkJCTxUYWJsZVJvd0VudHJ5Pg0KCQkJCQkJPFRhYmxlQ29sdW1uSXRlbXM+DQoJCQkJCQkJPFRhYmxlQ29sdW1uSXRlbT4NCgkJCQkJCQkJPFByb3BlcnR5TmFtZT5Gb288L1Byb3BlcnR5TmFtZT4NCgkJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbT4NCgkJCQkJCQk8VGFibGVDb2x1bW5JdGVtPg0KCQkJCQkJCQk8UHJvcGVydHlOYW1lPkJhcjwvUHJvcGVydHlOYW1lPg0KCQkJCQkJCTwvVGFibGVDb2x1bW5JdGVtPg0KCQkJCQkJPC9UYWJsZUNvbHVtbkl0ZW1zPg0KCQkJCQk8L1RhYmxlUm93RW50cnk+DQoJCQkJPC9UYWJsZVJvd0VudHJpZXM+DQoJCQk8L1RhYmxlQ29udHJvbD4NCgkJPC9WaWV3Pg0KCTwvVmlld0RlZmluaXRpb25zPg0KPENvbmZpZ3VyYXRpb24+AQkXAAAACRgAAAAGGQAAABbDvm5hbWXDvi5Gb3JtYXQucHMxeG1sBhoAAAAaeG1sXMO+bmFtZcO+LkZvcm1hdC5wczF4bWwJBgAAAAkcAAAACR0AAAABDQAAAAsAAAAGHgAAAOAHPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxUeXBlcz4NCiAgPCEtLSBGb28uQmFyIC0tPg0KICA8VHlwZT4NCiAgICA8TmFtZT5EZXNlcmlhbGl6ZWQuRm9vLkJhcjwvTmFtZT4NCiAgICA8TWVtYmVycz4NCiAgICAgIDxNZW1iZXJTZXQ+DQogICAgICAgIDxOYW1lPlBTU3RhbmRhcmRNZW1iZXJzPC9OYW1lPg0KICAgICAgICA8TWVtYmVycz4NCiAgICAgICAgICA8Tm90ZVByb3BlcnR5Pg0KICAgICAgICAgICAgPE5hbWU+DQogICAgICAgICAgICAgIFRhcmdldFR5cGVGb3JEZXNlcmlhbGl6YXRpb24NCiAgICAgICAgICAgIDwvTmFtZT4NCiAgICAgICAgICAgIDxWYWx1ZT4NCiAgICAgICAgICAgICAgRm9vLkJhcg0KICAgICAgICAgICAgPC9WYWx1ZT4NCiAgICAgICAgICA8L05vdGVQcm9wZXJ0eT4NCiAgICAgICAgPC9NZW1iZXJzPg0KICAgICAgPC9NZW1iZXJTZXQ+DQogICAgPC9NZW1iZXJzPg0KICA8L1R5cGU+DQogIDxUeXBlPg0KICAgIDxOYW1lPkZvby5CYXI8L05hbWU+DQogICAgPE1lbWJlcnM+DQogICAgICA8Q29kZVByb3BlcnR5IElzSGlkZGVuPSJ0cnVlIj4NCiAgICAgICAgPE5hbWU+U2VyaWFsaXphdGlvbkRhdGE8L05hbWU+DQogICAgICAgIDxHZXRDb2RlUmVmZXJlbmNlPg0KICAgICAgICAgIDxUeXBlTmFtZT5QU0ZyYW1ld29yay5TZXJpYWxpemF0aW9uLlNlcmlhbGl6YXRpb25UeXBlQ29udmVydGVyPC9UeXBlTmFtZT4NCiAgICAgICAgICA8TWV0aG9kTmFtZT5HZXRTZXJpYWxpemF0aW9uRGF0YTwvTWV0aG9kTmFtZT4NCiAgICAgICAgPC9HZXRDb2RlUmVmZXJlbmNlPg0KICAgICAgPC9Db2RlUHJvcGVydHk+DQogICAgPC9NZW1iZXJzPg0KICAgIDxUeXBlQ29udmVydGVyPg0KICAgICAgPFR5cGVOYW1lPlBTRnJhbWV3b3JrLlNlcmlhbGl6YXRpb24uU2VyaWFsaXphdGlvblR5cGVDb252ZXJ0ZXI8L1R5cGVOYW1lPg0KICAgIDwvVHlwZUNvbnZlcnRlcj4NCiAgPC9UeXBlPg0KPC9UeXBlcz4BCR8AAAAJIAAAAAYhAAAAFcO+bmFtZcO+LlR5cGVzLnBzMXhtbAYiAAAAGXhtbFzDvm5hbWXDvi5UeXBlcy5wczF4bWwJBgAAAAkkAAAACSUAAAABDwAAAAcAAAAJJgAAAAEAAAABAAAAARAAAAAHAAAACQoAAAAAAAAAAAAAAAEUAAAABwAAAAkKAAAAAAAAAAAAAAABFQAAAAcAAAAJCgAAAAAAAAAAAAAAARcAAAAHAAAACQoAAAAAAAAAAAAAAAEYAAAABwAAAAkKAAAAAAAAAAAAAAABHAAAAAcAAAAJKAAAAAEAAAABAAAAAR0AAAAHAAAACQoAAAAAAAAAAAAAAAEfAAAABwAAAAkKAAAAAAAAAAAAAAABIAAAAAcAAAAJCgAAAAAAAAAAAAAAASQAAAAHAAAACSoAAAABAAAAAQAAAAElAAAABwAAAAkKAAAAAAAAAAAAAAARJgAAAAQAAAAGLAAAAARuYW1lDQMRKAAAAAQAAAAGLQAAAARuYW1lDQMRKgAAAAQAAAAGLgAAAARuYW1lDQML</BA>
            </MS>
          </Obj>
          <Obj RefId="36">
            <TN RefId="7">
              <T>PSModuleDevelopment.Template.TemplateItemFile</T>
              <T>PSModuleDevelopment.Template.TemplateItemBase</T>
              <T>System.Object</T>
            </TN>
            <ToString>PSModuleDevelopment.Template.TemplateItemFile</ToString>
            <Props>
              <S N="Value"># PSFModule guidance_x000D__x000A__x000D__x000A_This is a finished module layout optimized for implementing the PSFramework._x000D__x000A__x000D__x000A_If you don't care to deal with the details, this is what you need to do to get started seeing results:_x000D__x000A__x000D__x000A_ - Add the functions you want to publish to `/functions/`_x000D__x000A_ - Update the `FunctionsToExport` node in the module manifest (þnameþ.psd1). All functions you want to publish should be in a list._x000D__x000A_ - Add internal helper functions the user should not see to `/internal/functions/`_x000D__x000A_ _x000D__x000A_ ## Path Warning_x000D__x000A_ _x000D__x000A_ &gt; If you want your module to be compatible with Linux and MacOS, keep in mind that those OS are case sensitive for paths and files._x000D__x000A_ _x000D__x000A_ `Import-ModuleFile` is preconfigured to resolve the path of the files specified, so it will reliably convert weird path notations the system can't handle._x000D__x000A_ Content imported through that command thus need not mind the path separator._x000D__x000A_ If you want to make sure your code too will survive OS-specific path notations, get used to using `Resolve-path` or the more powerful `Resolve-PSFPath`.</S>
              <B N="PlainText">true</B>
              <Obj N="ContentParameterFlat" RefId="37">
                <TNRef RefId="2" />
                <LST>
                  <S>name</S>
                </LST>
              </Obj>
              <Obj N="ContentParameterScript" RefId="38">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <S N="Name">readme.md</S>
              <S N="RelativePath">readme.md</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="39">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="40">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAALVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRmlsZQkAAAAFVmFsdWUJUGxhaW5UZXh0FENvbnRlbnRQYXJhbWV0ZXJGbGF0FkNvbnRlbnRQYXJhbWV0ZXJTY3JpcHQETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AQADAwEBAQMDAX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAYDAAAAjggjIFBTRk1vZHVsZSBndWlkYW5jZQ0KDQpUaGlzIGlzIGEgZmluaXNoZWQgbW9kdWxlIGxheW91dCBvcHRpbWl6ZWQgZm9yIGltcGxlbWVudGluZyB0aGUgUFNGcmFtZXdvcmsuDQoNCklmIHlvdSBkb24ndCBjYXJlIHRvIGRlYWwgd2l0aCB0aGUgZGV0YWlscywgdGhpcyBpcyB3aGF0IHlvdSBuZWVkIHRvIGRvIHRvIGdldCBzdGFydGVkIHNlZWluZyByZXN1bHRzOg0KDQogLSBBZGQgdGhlIGZ1bmN0aW9ucyB5b3Ugd2FudCB0byBwdWJsaXNoIHRvIGAvZnVuY3Rpb25zL2ANCiAtIFVwZGF0ZSB0aGUgYEZ1bmN0aW9uc1RvRXhwb3J0YCBub2RlIGluIHRoZSBtb2R1bGUgbWFuaWZlc3QgKMO+bmFtZcO+LnBzZDEpLiBBbGwgZnVuY3Rpb25zIHlvdSB3YW50IHRvIHB1Ymxpc2ggc2hvdWxkIGJlIGluIGEgbGlzdC4NCiAtIEFkZCBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHRoZSB1c2VyIHNob3VsZCBub3Qgc2VlIHRvIGAvaW50ZXJuYWwvZnVuY3Rpb25zL2ANCiANCiAjIyBQYXRoIFdhcm5pbmcNCiANCiA+IElmIHlvdSB3YW50IHlvdXIgbW9kdWxlIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBMaW51eCBhbmQgTWFjT1MsIGtlZXAgaW4gbWluZCB0aGF0IHRob3NlIE9TIGFyZSBjYXNlIHNlbnNpdGl2ZSBmb3IgcGF0aHMgYW5kIGZpbGVzLg0KIA0KIGBJbXBvcnQtTW9kdWxlRmlsZWAgaXMgcHJlY29uZmlndXJlZCB0byByZXNvbHZlIHRoZSBwYXRoIG9mIHRoZSBmaWxlcyBzcGVjaWZpZWQsIHNvIGl0IHdpbGwgcmVsaWFibHkgY29udmVydCB3ZWlyZCBwYXRoIG5vdGF0aW9ucyB0aGUgc3lzdGVtIGNhbid0IGhhbmRsZS4NCiBDb250ZW50IGltcG9ydGVkIHRocm91Z2ggdGhhdCBjb21tYW5kIHRodXMgbmVlZCBub3QgbWluZCB0aGUgcGF0aCBzZXBhcmF0b3IuDQogSWYgeW91IHdhbnQgdG8gbWFrZSBzdXJlIHlvdXIgY29kZSB0b28gd2lsbCBzdXJ2aXZlIE9TLXNwZWNpZmljIHBhdGggbm90YXRpb25zLCBnZXQgdXNlZCB0byB1c2luZyBgUmVzb2x2ZS1wYXRoYCBvciB0aGUgbW9yZSBwb3dlcmZ1bCBgUmVzb2x2ZS1QU0ZQYXRoYC4BCQQAAAAJBQAAAAYGAAAACXJlYWRtZS5tZAYHAAAACXJlYWRtZS5tZAYIAAAAAsO+CQkAAAAJCgAAAAQEAAAAf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgYAAAgICQsAAAABAAAAAQAAAAEFAAAABAAAAAkMAAAAAAAAAAAAAAABCQAAAAQAAAAJDAAAAAAAAAAAAAAAAQoAAAAEAAAACQwAAAAAAAAAAAAAABELAAAABAAAAAYNAAAABG5hbWUNAxEMAAAAAAAAAAs=</BA>
            </MS>
          </Obj>
          <Obj RefId="41">
            <TNRef RefId="7" />
            <ToString>PSModuleDevelopment.Template.TemplateItemFile</ToString>
            <Props>
              <S N="Value">@{_x000D__x000A__x0009_# Script module or binary module file associated with this manifest_x000D__x000A__x0009_ModuleToProcess = 'þnameþ.psm1'_x000D__x000A__x0009__x000D__x000A__x0009_# Version number of this module._x000D__x000A__x0009_ModuleVersion = '1.0.0.0'_x000D__x000A__x0009__x000D__x000A__x0009_# ID used to uniquely identify this module_x000D__x000A__x0009_GUID = 'þ!guid!þ'_x000D__x000A__x0009__x000D__x000A__x0009_# Author of this module_x000D__x000A__x0009_Author = 'þauthorþ'_x000D__x000A__x0009__x000D__x000A__x0009_# Company or vendor of this module_x000D__x000A__x0009_CompanyName = 'þcompanyþ'_x000D__x000A__x0009__x000D__x000A__x0009_# Copyright statement for this module_x000D__x000A__x0009_Copyright = 'Copyright (c) þ!year!þ þauthorþ'_x000D__x000A__x0009__x000D__x000A__x0009_# Description of the functionality provided by this module_x000D__x000A__x0009_Description = 'þdescriptionþ'_x000D__x000A__x0009__x000D__x000A__x0009_# Minimum version of the Windows PowerShell engine required by this module_x000D__x000A__x0009_PowerShellVersion = '5.0'_x000D__x000A__x0009__x000D__x000A__x0009_# Modules that must be imported into the global environment prior to importing_x000D__x000A__x0009_# this module_x000D__x000A__x0009_RequiredModules = @(_x000D__x000A__x0009__x0009_@{ ModuleName='PSFramework'; ModuleVersion='þ!psframework!þ' }_x000D__x000A__x0009_)_x000D__x000A__x0009__x000D__x000A__x0009_# Assemblies that must be loaded prior to importing this module_x000D__x000A__x0009_# RequiredAssemblies = @('bin\þnameþ.dll')_x000D__x000A__x0009__x000D__x000A__x0009_# Type files (.ps1xml) to be loaded when importing this module_x000D__x000A__x0009_# TypesToProcess = @('xml\þnameþ.Types.ps1xml')_x000D__x000A__x0009__x000D__x000A__x0009_# Format files (.ps1xml) to be loaded when importing this module_x000D__x000A__x0009_# FormatsToProcess = @('xml\þnameþ.Format.ps1xml')_x000D__x000A__x0009__x000D__x000A__x0009_# Functions to export from this module_x000D__x000A__x0009_FunctionsToExport = ''_x000D__x000A__x0009__x000D__x000A__x0009_# Cmdlets to export from this module_x000D__x000A__x0009_CmdletsToExport = ''_x000D__x000A__x0009__x000D__x000A__x0009_# Variables to export from this module_x000D__x000A__x0009_VariablesToExport = ''_x000D__x000A__x0009__x000D__x000A__x0009_# Aliases to export from this module_x000D__x000A__x0009_AliasesToExport = ''_x000D__x000A__x0009__x000D__x000A__x0009_# List of all modules packaged with this module_x000D__x000A__x0009_ModuleList = @()_x000D__x000A__x0009__x000D__x000A__x0009_# List of all files packaged with this module_x000D__x000A__x0009_FileList = @()_x000D__x000A__x0009__x000D__x000A__x0009_# Private data to pass to the module specified in ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell._x000D__x000A__x0009_PrivateData = @{_x000D__x000A__x0009__x0009__x000D__x000A__x0009__x0009_#Support for PowerShellGet galleries._x000D__x000A__x0009__x0009_PSData = @{_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009__x0009_# Tags applied to this module. These help with module discovery in online galleries._x000D__x000A__x0009__x0009__x0009_# Tags = @()_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009__x0009_# A URL to the license for this module._x000D__x000A__x0009__x0009__x0009_# LicenseUri = ''_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009__x0009_# A URL to the main website for this project._x000D__x000A__x0009__x0009__x0009_# ProjectUri = ''_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009__x0009_# A URL to an icon representing this module._x000D__x000A__x0009__x0009__x0009_# IconUri = ''_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009__x0009_# ReleaseNotes of this module_x000D__x000A__x0009__x0009__x0009_# ReleaseNotes = ''_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009_} # End of PSData hashtable_x000D__x000A__x0009__x0009__x000D__x000A__x0009_} # End of PrivateData hashtable_x000D__x000A_}</S>
              <B N="PlainText">true</B>
              <Obj N="ContentParameterFlat" RefId="42">
                <TNRef RefId="2" />
                <LST>
                  <S>name</S>
                  <S>author</S>
                  <S>company</S>
                  <S>description</S>
                </LST>
              </Obj>
              <Obj N="ContentParameterScript" RefId="43">
                <TNRef RefId="2" />
                <LST>
                  <S>guid</S>
                  <S>year</S>
                  <S>psframework</S>
                </LST>
              </Obj>
              <S N="Name">þnameþ.psd1</S>
              <S N="RelativePath">þnameþ.psd1</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="44">
                <TNRef RefId="2" />
                <LST>
                  <S>name</S>
                </LST>
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="45">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAALVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRmlsZQkAAAAFVmFsdWUJUGxhaW5UZXh0FENvbnRlbnRQYXJhbWV0ZXJGbGF0FkNvbnRlbnRQYXJhbWV0ZXJTY3JpcHQETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AQADAwEBAQMDAX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAYDAAAArRJAew0KCSMgU2NyaXB0IG1vZHVsZSBvciBiaW5hcnkgbW9kdWxlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFuaWZlc3QNCglNb2R1bGVUb1Byb2Nlc3MgPSAnw75uYW1lw74ucHNtMScNCgkNCgkjIFZlcnNpb24gbnVtYmVyIG9mIHRoaXMgbW9kdWxlLg0KCU1vZHVsZVZlcnNpb24gPSAnMS4wLjAuMCcNCgkNCgkjIElEIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBtb2R1bGUNCglHVUlEID0gJ8O+IWd1aWQhw74nDQoJDQoJIyBBdXRob3Igb2YgdGhpcyBtb2R1bGUNCglBdXRob3IgPSAnw75hdXRob3LDvicNCgkNCgkjIENvbXBhbnkgb3IgdmVuZG9yIG9mIHRoaXMgbW9kdWxlDQoJQ29tcGFueU5hbWUgPSAnw75jb21wYW55w74nDQoJDQoJIyBDb3B5cmlnaHQgc3RhdGVtZW50IGZvciB0aGlzIG1vZHVsZQ0KCUNvcHlyaWdodCA9ICdDb3B5cmlnaHQgKGMpIMO+IXllYXIhw74gw75hdXRob3LDvicNCgkNCgkjIERlc2NyaXB0aW9uIG9mIHRoZSBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoaXMgbW9kdWxlDQoJRGVzY3JpcHRpb24gPSAnw75kZXNjcmlwdGlvbsO+Jw0KCQ0KCSMgTWluaW11bSB2ZXJzaW9uIG9mIHRoZSBXaW5kb3dzIFBvd2VyU2hlbGwgZW5naW5lIHJlcXVpcmVkIGJ5IHRoaXMgbW9kdWxlDQoJUG93ZXJTaGVsbFZlcnNpb24gPSAnNS4wJw0KCQ0KCSMgTW9kdWxlcyB0aGF0IG11c3QgYmUgaW1wb3J0ZWQgaW50byB0aGUgZ2xvYmFsIGVudmlyb25tZW50IHByaW9yIHRvIGltcG9ydGluZw0KCSMgdGhpcyBtb2R1bGUNCglSZXF1aXJlZE1vZHVsZXMgPSBAKA0KCQlAeyBNb2R1bGVOYW1lPSdQU0ZyYW1ld29yayc7IE1vZHVsZVZlcnNpb249J8O+IXBzZnJhbWV3b3JrIcO+JyB9DQoJKQ0KCQ0KCSMgQXNzZW1ibGllcyB0aGF0IG11c3QgYmUgbG9hZGVkIHByaW9yIHRvIGltcG9ydGluZyB0aGlzIG1vZHVsZQ0KCSMgUmVxdWlyZWRBc3NlbWJsaWVzID0gQCgnYmluXMO+bmFtZcO+LmRsbCcpDQoJDQoJIyBUeXBlIGZpbGVzICgucHMxeG1sKSB0byBiZSBsb2FkZWQgd2hlbiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUNCgkjIFR5cGVzVG9Qcm9jZXNzID0gQCgneG1sXMO+bmFtZcO+LlR5cGVzLnBzMXhtbCcpDQoJDQoJIyBGb3JtYXQgZmlsZXMgKC5wczF4bWwpIHRvIGJlIGxvYWRlZCB3aGVuIGltcG9ydGluZyB0aGlzIG1vZHVsZQ0KCSMgRm9ybWF0c1RvUHJvY2VzcyA9IEAoJ3htbFzDvm5hbWXDvi5Gb3JtYXQucHMxeG1sJykNCgkNCgkjIEZ1bmN0aW9ucyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQ0KCUZ1bmN0aW9uc1RvRXhwb3J0ID0gJycNCgkNCgkjIENtZGxldHMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUNCglDbWRsZXRzVG9FeHBvcnQgPSAnJw0KCQ0KCSMgVmFyaWFibGVzIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlDQoJVmFyaWFibGVzVG9FeHBvcnQgPSAnJw0KCQ0KCSMgQWxpYXNlcyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQ0KCUFsaWFzZXNUb0V4cG9ydCA9ICcnDQoJDQoJIyBMaXN0IG9mIGFsbCBtb2R1bGVzIHBhY2thZ2VkIHdpdGggdGhpcyBtb2R1bGUNCglNb2R1bGVMaXN0ID0gQCgpDQoJDQoJIyBMaXN0IG9mIGFsbCBmaWxlcyBwYWNrYWdlZCB3aXRoIHRoaXMgbW9kdWxlDQoJRmlsZUxpc3QgPSBAKCkNCgkNCgkjIFByaXZhdGUgZGF0YSB0byBwYXNzIHRvIHRoZSBtb2R1bGUgc3BlY2lmaWVkIGluIE1vZHVsZVRvUHJvY2Vzcy4gVGhpcyBtYXkgYWxzbyBjb250YWluIGEgUFNEYXRhIGhhc2h0YWJsZSB3aXRoIGFkZGl0aW9uYWwgbW9kdWxlIG1ldGFkYXRhIHVzZWQgYnkgUG93ZXJTaGVsbC4NCglQcml2YXRlRGF0YSA9IEB7DQoJCQ0KCQkjU3VwcG9ydCBmb3IgUG93ZXJTaGVsbEdldCBnYWxsZXJpZXMuDQoJCVBTRGF0YSA9IEB7DQoJCQkNCgkJCSMgVGFncyBhcHBsaWVkIHRvIHRoaXMgbW9kdWxlLiBUaGVzZSBoZWxwIHdpdGggbW9kdWxlIGRpc2NvdmVyeSBpbiBvbmxpbmUgZ2FsbGVyaWVzLg0KCQkJIyBUYWdzID0gQCgpDQoJCQkNCgkJCSMgQSBVUkwgdG8gdGhlIGxpY2Vuc2UgZm9yIHRoaXMgbW9kdWxlLg0KCQkJIyBMaWNlbnNlVXJpID0gJycNCgkJCQ0KCQkJIyBBIFVSTCB0byB0aGUgbWFpbiB3ZWJzaXRlIGZvciB0aGlzIHByb2plY3QuDQoJCQkjIFByb2plY3RVcmkgPSAnJw0KCQkJDQoJCQkjIEEgVVJMIHRvIGFuIGljb24gcmVwcmVzZW50aW5nIHRoaXMgbW9kdWxlLg0KCQkJIyBJY29uVXJpID0gJycNCgkJCQ0KCQkJIyBSZWxlYXNlTm90ZXMgb2YgdGhpcyBtb2R1bGUNCgkJCSMgUmVsZWFzZU5vdGVzID0gJycNCgkJCQ0KCQl9ICMgRW5kIG9mIFBTRGF0YSBoYXNodGFibGUNCgkJDQoJfSAjIEVuZCBvZiBQcml2YXRlRGF0YSBoYXNodGFibGUNCn0BCQQAAAAJBQAAAAYGAAAADcO+bmFtZcO+LnBzZDEGBwAAAA3Dvm5hbWXDvi5wc2QxBggAAAACw74JCQAAAAkKAAAABAQAAAB/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBgAACAgJCwAAAAQAAAAEAAAAAQUAAAAEAAAACQwAAAADAAAAAwAAAAEJAAAABAAAAAkNAAAAAQAAAAEAAAABCgAAAAQAAAAJDgAAAAAAAAAAAAAAEQsAAAAEAAAABg8AAAAEbmFtZQYQAAAABmF1dGhvcgYRAAAAB2NvbXBhbnkGEgAAAAtkZXNjcmlwdGlvbhEMAAAABAAAAAYTAAAABGd1aWQGFAAAAAR5ZWFyBhUAAAALcHNmcmFtZXdvcmsKEQ0AAAAEAAAABhYAAAAEbmFtZQ0DEQ4AAAAAAAAACw==</BA>
            </MS>
          </Obj>
          <Obj RefId="46">
            <TNRef RefId="7" />
            <ToString>PSModuleDevelopment.Template.TemplateItemFile</ToString>
            <Props>
              <S N="Value">$script:ModuleRoot = $PSScriptRoot_x000D__x000A_$script:ModuleVersion = "1.0.0.0"_x000D__x000A__x000D__x000A_# Detect whether at some level dotsourcing was enforced_x000D__x000A_$script:doDotSource = Get-PSFConfigValue -FullName þnameþ.Import.DoDotSource -Fallback $false_x000D__x000A_if ($þnameþ_dotsourcemodule) { $script:doDotSource = $true }_x000D__x000A__x000D__x000A_&lt;#_x000D__x000A_Note on Resolve-Path:_x000D__x000A_All paths are sent through Resolve-Path/Resolve-PSFPath in order to convert them to the correct path separator._x000D__x000A_This allows ignoring path separators throughout the import sequence, which could otherwise cause trouble depending on OS._x000D__x000A_Resolve-Path can only be used for paths that already exist, Resolve-PSFPath can accept that the last leaf my not exist._x000D__x000A_This is important when testing for paths._x000D__x000A_#&gt;_x000D__x000A__x000D__x000A_# Detect whether at some level loading individual module files, rather than the compiled module was enforced_x000D__x000A_$importIndividualFiles = Get-PSFConfigValue -FullName þnameþ.Import.IndividualFiles -Fallback $false_x000D__x000A_if ($þnameþ_importIndividualFiles) { $importIndividualFiles = $true }_x000D__x000A_if (Test-Path (Resolve-PSFPath -Path "$($script:ModuleRoot)\..\.git" -SingleItem -NewChild)) { $importIndividualFiles = $true }_x000D__x000A_if (-not (Test-Path (Resolve-PSFPath "$($script:ModuleRoot)\commands.ps1" -SingleItem -NewChild))) { $importIndividualFiles = $true }_x000D__x000A__x0009__x000D__x000A_function Import-ModuleFile_x000D__x000A_{_x000D__x000A__x0009_&lt;#_x000D__x000A__x0009__x0009_.SYNOPSIS_x000D__x000A__x0009__x0009__x0009_Loads files into the module on module import._x000D__x000A__x0009__x0009__x000D__x000A__x0009__x0009_.DESCRIPTION_x000D__x000A__x0009__x0009__x0009_This helper function is used during module initialization._x000D__x000A__x0009__x0009__x0009_It should always be dotsourced itself, in order to proper function._x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009__x0009_This provides a central location to react to files being imported, if later desired_x000D__x000A__x0009__x0009__x000D__x000A__x0009__x0009_.PARAMETER Path_x000D__x000A__x0009__x0009__x0009_The path to the file to load_x000D__x000A__x0009__x0009__x000D__x000A__x0009__x0009_.EXAMPLE_x000D__x000A__x0009__x0009__x0009_PS C:\&gt; . Import-ModuleFile -File $function.FullName_x000D__x000A__x0009__x000D__x000A__x0009__x0009__x0009_Imports the file stored in $function according to import policy_x000D__x000A__x0009_#&gt;_x000D__x000A__x0009_[CmdletBinding()]_x000D__x000A__x0009_Param (_x000D__x000A__x0009__x0009_[string]_x000D__x000A__x0009__x0009_$Path_x000D__x000A__x0009_)_x000D__x000A__x0009__x000D__x000A__x0009_if ($doDotSource) { . (Resolve-Path $Path) }_x000D__x000A__x0009_else { $ExecutionContext.InvokeCommand.InvokeScript($false, ([scriptblock]::Create([io.file]::ReadAllText((Resolve-Path $Path)))), $null, $null) }_x000D__x000A_}_x000D__x000A__x000D__x000A_if ($importIndividualFiles)_x000D__x000A_{_x000D__x000A__x0009_# Execute Preimport actions_x000D__x000A__x0009_. Import-ModuleFile -Path "$ModuleRoot\internal\scripts\preimport.ps1"_x000D__x000A__x0009__x000D__x000A__x0009_# Import all internal functions_x000D__x000A__x0009_foreach ($function in (Get-ChildItem "$ModuleRoot\internal\functions" -Filter "*.ps1" -Recurse -ErrorAction Ignore))_x000D__x000A__x0009_{_x000D__x000A__x0009__x0009_. Import-ModuleFile -Path $function.FullName_x000D__x000A__x0009_}_x000D__x000A__x0009__x000D__x000A__x0009_# Import all public functions_x000D__x000A__x0009_foreach ($function in (Get-ChildItem "$ModuleRoot\functions" -Filter "*.ps1" -Recurse -ErrorAction Ignore))_x000D__x000A__x0009_{_x000D__x000A__x0009__x0009_. Import-ModuleFile -Path $function.FullName_x000D__x000A__x0009_}_x000D__x000A__x0009__x000D__x000A__x0009_# Execute Postimport actions_x000D__x000A__x0009_. Import-ModuleFile -Path "$ModuleRoot\internal\scripts\postimport.ps1"_x000D__x000A_}_x000D__x000A_else_x000D__x000A_{_x000D__x000A__x0009_if (Test-Path (Resolve-PSFPath "$($script:ModuleRoot)\resourcesBefore.ps1" -SingleItem -NewChild))_x000D__x000A__x0009_{_x000D__x000A__x0009__x0009_. Import-ModuleFile -Path "$($script:ModuleRoot)\resourcesBefore.ps1"_x000D__x000A__x0009_}_x000D__x000A__x0009__x000D__x000A__x0009_. Import-ModuleFile -Path "$($script:ModuleRoot)\commands.ps1"_x000D__x000A__x0009__x000D__x000A__x0009_if (Test-Path (Resolve-PSFPath "$($script:ModuleRoot)\resourcesAfter.ps1" -SingleItem -NewChild))_x000D__x000A__x0009_{_x000D__x000A__x0009__x0009_. Import-ModuleFile -Path "$($script:ModuleRoot)\resourcesAfter.ps1"_x000D__x000A__x0009_}_x000D__x000A_}</S>
              <B N="PlainText">true</B>
              <Obj N="ContentParameterFlat" RefId="47">
                <TNRef RefId="2" />
                <LST>
                  <S>name</S>
                </LST>
              </Obj>
              <Obj N="ContentParameterScript" RefId="48">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <S N="Name">þnameþ.psm1</S>
              <S N="RelativePath">þnameþ.psm1</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="49">
                <TNRef RefId="2" />
                <LST>
                  <S>name</S>
                </LST>
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="50">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAALVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRmlsZQkAAAAFVmFsdWUJUGxhaW5UZXh0FENvbnRlbnRQYXJhbWV0ZXJGbGF0FkNvbnRlbnRQYXJhbWV0ZXJTY3JpcHQETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AQADAwEBAQMDAX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAYDAAAA+Rgkc2NyaXB0Ok1vZHVsZVJvb3QgPSAkUFNTY3JpcHRSb290DQokc2NyaXB0Ok1vZHVsZVZlcnNpb24gPSAiMS4wLjAuMCINCg0KIyBEZXRlY3Qgd2hldGhlciBhdCBzb21lIGxldmVsIGRvdHNvdXJjaW5nIHdhcyBlbmZvcmNlZA0KJHNjcmlwdDpkb0RvdFNvdXJjZSA9IEdldC1QU0ZDb25maWdWYWx1ZSAtRnVsbE5hbWUgw75uYW1lw74uSW1wb3J0LkRvRG90U291cmNlIC1GYWxsYmFjayAkZmFsc2UNCmlmICgkw75uYW1lw75fZG90c291cmNlbW9kdWxlKSB7ICRzY3JpcHQ6ZG9Eb3RTb3VyY2UgPSAkdHJ1ZSB9DQoNCjwjDQpOb3RlIG9uIFJlc29sdmUtUGF0aDoNCkFsbCBwYXRocyBhcmUgc2VudCB0aHJvdWdoIFJlc29sdmUtUGF0aC9SZXNvbHZlLVBTRlBhdGggaW4gb3JkZXIgdG8gY29udmVydCB0aGVtIHRvIHRoZSBjb3JyZWN0IHBhdGggc2VwYXJhdG9yLg0KVGhpcyBhbGxvd3MgaWdub3JpbmcgcGF0aCBzZXBhcmF0b3JzIHRocm91Z2hvdXQgdGhlIGltcG9ydCBzZXF1ZW5jZSwgd2hpY2ggY291bGQgb3RoZXJ3aXNlIGNhdXNlIHRyb3VibGUgZGVwZW5kaW5nIG9uIE9TLg0KUmVzb2x2ZS1QYXRoIGNhbiBvbmx5IGJlIHVzZWQgZm9yIHBhdGhzIHRoYXQgYWxyZWFkeSBleGlzdCwgUmVzb2x2ZS1QU0ZQYXRoIGNhbiBhY2NlcHQgdGhhdCB0aGUgbGFzdCBsZWFmIG15IG5vdCBleGlzdC4NClRoaXMgaXMgaW1wb3J0YW50IHdoZW4gdGVzdGluZyBmb3IgcGF0aHMuDQojPg0KDQojIERldGVjdCB3aGV0aGVyIGF0IHNvbWUgbGV2ZWwgbG9hZGluZyBpbmRpdmlkdWFsIG1vZHVsZSBmaWxlcywgcmF0aGVyIHRoYW4gdGhlIGNvbXBpbGVkIG1vZHVsZSB3YXMgZW5mb3JjZWQNCiRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSBHZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lIMO+bmFtZcO+LkltcG9ydC5JbmRpdmlkdWFsRmlsZXMgLUZhbGxiYWNrICRmYWxzZQ0KaWYgKCTDvm5hbWXDvl9pbXBvcnRJbmRpdmlkdWFsRmlsZXMpIHsgJGltcG9ydEluZGl2aWR1YWxGaWxlcyA9ICR0cnVlIH0NCmlmIChUZXN0LVBhdGggKFJlc29sdmUtUFNGUGF0aCAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXC4uXC5naXQiIC1TaW5nbGVJdGVtIC1OZXdDaGlsZCkpIHsgJGltcG9ydEluZGl2aWR1YWxGaWxlcyA9ICR0cnVlIH0NCmlmICgtbm90IChUZXN0LVBhdGggKFJlc29sdmUtUFNGUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXGNvbW1hbmRzLnBzMSIgLVNpbmdsZUl0ZW0gLU5ld0NoaWxkKSkpIHsgJGltcG9ydEluZGl2aWR1YWxGaWxlcyA9ICR0cnVlIH0NCgkNCmZ1bmN0aW9uIEltcG9ydC1Nb2R1bGVGaWxlDQp7DQoJPCMNCgkJLlNZTk9QU0lTDQoJCQlMb2FkcyBmaWxlcyBpbnRvIHRoZSBtb2R1bGUgb24gbW9kdWxlIGltcG9ydC4NCgkJDQoJCS5ERVNDUklQVElPTg0KCQkJVGhpcyBoZWxwZXIgZnVuY3Rpb24gaXMgdXNlZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLg0KCQkJSXQgc2hvdWxkIGFsd2F5cyBiZSBkb3Rzb3VyY2VkIGl0c2VsZiwgaW4gb3JkZXIgdG8gcHJvcGVyIGZ1bmN0aW9uLg0KCQkJDQoJCQlUaGlzIHByb3ZpZGVzIGEgY2VudHJhbCBsb2NhdGlvbiB0byByZWFjdCB0byBmaWxlcyBiZWluZyBpbXBvcnRlZCwgaWYgbGF0ZXIgZGVzaXJlZA0KCQkNCgkJLlBBUkFNRVRFUiBQYXRoDQoJCQlUaGUgcGF0aCB0byB0aGUgZmlsZSB0byBsb2FkDQoJCQ0KCQkuRVhBTVBMRQ0KCQkJUFMgQzpcPiAuIEltcG9ydC1Nb2R1bGVGaWxlIC1GaWxlICRmdW5jdGlvbi5GdWxsTmFtZQ0KCQ0KCQkJSW1wb3J0cyB0aGUgZmlsZSBzdG9yZWQgaW4gJGZ1bmN0aW9uIGFjY29yZGluZyB0byBpbXBvcnQgcG9saWN5DQoJIz4NCglbQ21kbGV0QmluZGluZygpXQ0KCVBhcmFtICgNCgkJW3N0cmluZ10NCgkJJFBhdGgNCgkpDQoJDQoJaWYgKCRkb0RvdFNvdXJjZSkgeyAuIChSZXNvbHZlLVBhdGggJFBhdGgpIH0NCgllbHNlIHsgJEV4ZWN1dGlvbkNvbnRleHQuSW52b2tlQ29tbWFuZC5JbnZva2VTY3JpcHQoJGZhbHNlLCAoW3NjcmlwdGJsb2NrXTo6Q3JlYXRlKFtpby5maWxlXTo6UmVhZEFsbFRleHQoKFJlc29sdmUtUGF0aCAkUGF0aCkpKSksICRudWxsLCAkbnVsbCkgfQ0KfQ0KDQppZiAoJGltcG9ydEluZGl2aWR1YWxGaWxlcykNCnsNCgkjIEV4ZWN1dGUgUHJlaW1wb3J0IGFjdGlvbnMNCgkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXHByZWltcG9ydC5wczEiDQoJDQoJIyBJbXBvcnQgYWxsIGludGVybmFsIGZ1bmN0aW9ucw0KCWZvcmVhY2ggKCRmdW5jdGlvbiBpbiAoR2V0LUNoaWxkSXRlbSAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcZnVuY3Rpb25zIiAtRmlsdGVyICIqLnBzMSIgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIElnbm9yZSkpDQoJew0KCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmdW5jdGlvbi5GdWxsTmFtZQ0KCX0NCgkNCgkjIEltcG9ydCBhbGwgcHVibGljIGZ1bmN0aW9ucw0KCWZvcmVhY2ggKCRmdW5jdGlvbiBpbiAoR2V0LUNoaWxkSXRlbSAiJE1vZHVsZVJvb3RcZnVuY3Rpb25zIiAtRmlsdGVyICIqLnBzMSIgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIElnbm9yZSkpDQoJew0KCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmdW5jdGlvbi5GdWxsTmFtZQ0KCX0NCgkNCgkjIEV4ZWN1dGUgUG9zdGltcG9ydCBhY3Rpb25zDQoJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xwb3N0aW1wb3J0LnBzMSINCn0NCmVsc2UNCnsNCglpZiAoVGVzdC1QYXRoIChSZXNvbHZlLVBTRlBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVxyZXNvdXJjZXNCZWZvcmUucHMxIiAtU2luZ2xlSXRlbSAtTmV3Q2hpbGQpKQ0KCXsNCgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXHJlc291cmNlc0JlZm9yZS5wczEiDQoJfQ0KCQ0KCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVxjb21tYW5kcy5wczEiDQoJDQoJaWYgKFRlc3QtUGF0aCAoUmVzb2x2ZS1QU0ZQYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClccmVzb3VyY2VzQWZ0ZXIucHMxIiAtU2luZ2xlSXRlbSAtTmV3Q2hpbGQpKQ0KCXsNCgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXHJlc291cmNlc0FmdGVyLnBzMSINCgl9DQp9AQkEAAAACQUAAAAGBgAAAA3Dvm5hbWXDvi5wc20xBgcAAAANw75uYW1lw74ucHNtMQYIAAAAAsO+CQkAAAAJCgAAAAQEAAAAf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgYAAAgICQsAAAABAAAAAQAAAAEFAAAABAAAAAkMAAAAAAAAAAAAAAABCQAAAAQAAAAJDQAAAAEAAAABAAAAAQoAAAAEAAAACQwAAAAAAAAAAAAAABELAAAABAAAAAYPAAAABG5hbWUNAxEMAAAAAAAAABENAAAABAAAAAYQAAAABG5hbWUNAws=</BA>
            </MS>
          </Obj>
        </LST>
      </Obj>
    </Props>
    <MS>
      <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGUKAAAABE5hbWUEVHlwZQdWZXJzaW9uC0Rlc2NyaXB0aW9uBkF1dGhvcglDcmVhdGVkT24EVGFncwpQYXJhbWV0ZXJzB1NjcmlwdHMIQ2hpbGRyZW4BBAMBAQADAwMDKVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVUeXBlAgAAAA5TeXN0ZW0uVmVyc2lvbg1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dgAJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5EaWN0aW9uYXJ5YDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0LCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQIAAAAGAwAAAAlQU0ZNb2R1bGUF/P///ylQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlVHlwZQEAAAAHdmFsdWVfXwAIAgAAAAEAAAAJBQAAAAYGAAAAKlBvd2VyU2hlbGwgRnJhbWV3b3JrIGJhc2VkIG1vZHVsZSBzY2FmZm9sZAYHAAAAEkZyaWVkcmljaCBXZWlubWFubgDA4H+eJdaICQgAAAAJCQAAAAkKAAAACQsAAAAEBQAAAA5TeXN0ZW0uVmVyc2lvbgQAAAAGX01ham9yBl9NaW5vcgZfQnVpbGQJX1JldmlzaW9uAAAAAAgICAgBAAAAAQAAAAAAAAAAAAAABAgAAAB/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBgAACAgJDAAAAAIAAAAAAAAAAQkAAAAIAAAACQ0AAAAEAAAABAAAAAQKAAAAgAJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5EaWN0aW9uYXJ5YDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0LCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dBAAAAAdWZXJzaW9uCENvbXBhcmVyCEhhc2hTaXplDUtleVZhbHVlUGFpcnMAAwADCBZTeXN0ZW0uT3JkaW5hbENvbXBhcmVyCIQCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuS2V5VmFsdWVQYWlyYDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0LCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dW10GAAAACQ4AAAAHAAAACQ8AAAAECwAAAJ4BU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAAC9QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2VbXQIAAAAICAkQAAAACQAAAAkAAAARDAAAAAIAAAAGEQAAAAZtb2R1bGUGEgAAAAtwc2ZyYW1ld29yaxENAAAABAAAAAYTAAAABG5hbWUGFAAAAAZhdXRob3IGFQAAAAdjb21wYW55BhYAAAALZGVzY3JpcHRpb24EDgAAABZTeXN0ZW0uT3JkaW5hbENvbXBhcmVyAQAAAAtfaWdub3JlQ2FzZQABAQcPAAAAAAEAAAAGAAAAA4ICU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuS2V5VmFsdWVQYWlyYDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0LCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dBOn///+CAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLktleVZhbHVlUGFpcmAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlclNjcmlwdCwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQIAAAADa2V5BXZhbHVlAQQsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABhgAAAALcHNmcmFtZXdvcmsJGQAAAAHm////6f///wYbAAAABHllYXIJHAAAAAHj////6f///wYeAAAABGRhdGUJHwAAAAHg////6f///wYhAAAACnRlc3Rmb2xkZXIJIgAAAAHd////6f///wYkAAAABGd1aWQJJQAAAAHa////6f///wYnAAAAC3Rlc3RyZXN1bHRzCSgAAAAHEAAAAAABAAAAEAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAkpAAAACSoAAAAJKwAAAAksAAAACS0AAAAJLgAAAAkvAAAACTAAAAAJMQAAAA0HDDIAAABfU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbiwgVmVyc2lvbj0zLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTMxYmYzODU2YWQzNjRlMzUFGQAAACxQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlclNjcmlwdAIAAAAETmFtZQtTY3JpcHRCbG9jawEEO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyMgAAAAIAAAAJGAAAAAk0AAAAARwAAAAZAAAACRsAAAAJNgAAAAEfAAAAGQAAAAkeAAAACTgAAAABIgAAABkAAAAJIQAAAAk6AAAAASUAAAAZAAAACSQAAAAJPAAAAAEoAAAAGQAAAAknAAAACT4AAAAFKQAAAC9QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUZvbGRlcgYAAAAIQ2hpbGRyZW4ETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AwEBAQMDngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0CAAAACT8AAAAGQAAAAANiaW4GQQAAAANiaW4GQgAAAALDvglDAAAACUQAAAABKgAAACkAAAAJRQAAAAZGAAAABWVuLXVzBkcAAAAFZW4tdXMJQgAAAAlJAAAACUoAAAABKwAAACkAAAAJSwAAAAZMAAAACWZ1bmN0aW9ucwZNAAAACWZ1bmN0aW9ucwlCAAAACU8AAAAJUAAAAAEsAAAAKQAAAAlRAAAABlIAAAAIaW50ZXJuYWwGUwAAAAhpbnRlcm5hbAlCAAAACVUAAAAJVgAAAAEtAAAAKQAAAAlXAAAABlgAAAAFdGVzdHMGWQAAAAV0ZXN0cwlCAAAACVsAAAAJXAAAAAEuAAAAKQAAAAldAAAABl4AAAADeG1sBl8AAAADeG1sCUIAAAAJYQAAAAliAAAABS8AAAAtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1GaWxlCQAAAAVWYWx1ZQlQbGFpblRleHQUQ29udGVudFBhcmFtZXRlckZsYXQWQ29udGVudFBhcmFtZXRlclNjcmlwdAROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQBAAMDAQEBAwMBf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0CAAAABmMAAACOCCMgUFNGTW9kdWxlIGd1aWRhbmNlDQoNClRoaXMgaXMgYSBmaW5pc2hlZCBtb2R1bGUgbGF5b3V0IG9wdGltaXplZCBmb3IgaW1wbGVtZW50aW5nIHRoZSBQU0ZyYW1ld29yay4NCg0KSWYgeW91IGRvbid0IGNhcmUgdG8gZGVhbCB3aXRoIHRoZSBkZXRhaWxzLCB0aGlzIGlzIHdoYXQgeW91IG5lZWQgdG8gZG8gdG8gZ2V0IHN0YXJ0ZWQgc2VlaW5nIHJlc3VsdHM6DQoNCiAtIEFkZCB0aGUgZnVuY3Rpb25zIHlvdSB3YW50IHRvIHB1Ymxpc2ggdG8gYC9mdW5jdGlvbnMvYA0KIC0gVXBkYXRlIHRoZSBgRnVuY3Rpb25zVG9FeHBvcnRgIG5vZGUgaW4gdGhlIG1vZHVsZSBtYW5pZmVzdCAow75uYW1lw74ucHNkMSkuIEFsbCBmdW5jdGlvbnMgeW91IHdhbnQgdG8gcHVibGlzaCBzaG91bGQgYmUgaW4gYSBsaXN0Lg0KIC0gQWRkIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgdGhlIHVzZXIgc2hvdWxkIG5vdCBzZWUgdG8gYC9pbnRlcm5hbC9mdW5jdGlvbnMvYA0KIA0KICMjIFBhdGggV2FybmluZw0KIA0KID4gSWYgeW91IHdhbnQgeW91ciBtb2R1bGUgdG8gYmUgY29tcGF0aWJsZSB3aXRoIExpbnV4IGFuZCBNYWNPUywga2VlcCBpbiBtaW5kIHRoYXQgdGhvc2UgT1MgYXJlIGNhc2Ugc2Vuc2l0aXZlIGZvciBwYXRocyBhbmQgZmlsZXMuDQogDQogYEltcG9ydC1Nb2R1bGVGaWxlYCBpcyBwcmVjb25maWd1cmVkIHRvIHJlc29sdmUgdGhlIHBhdGggb2YgdGhlIGZpbGVzIHNwZWNpZmllZCwgc28gaXQgd2lsbCByZWxpYWJseSBjb252ZXJ0IHdlaXJkIHBhdGggbm90YXRpb25zIHRoZSBzeXN0ZW0gY2FuJ3QgaGFuZGxlLg0KIENvbnRlbnQgaW1wb3J0ZWQgdGhyb3VnaCB0aGF0IGNvbW1hbmQgdGh1cyBuZWVkIG5vdCBtaW5kIHRoZSBwYXRoIHNlcGFyYXRvci4NCiBJZiB5b3Ugd2FudCB0byBtYWtlIHN1cmUgeW91ciBjb2RlIHRvbyB3aWxsIHN1cnZpdmUgT1Mtc3BlY2lmaWMgcGF0aCBub3RhdGlvbnMsIGdldCB1c2VkIHRvIHVzaW5nIGBSZXNvbHZlLXBhdGhgIG9yIHRoZSBtb3JlIHBvd2VyZnVsIGBSZXNvbHZlLVBTRlBhdGhgLgEJZAAAAAllAAAABmYAAAAJcmVhZG1lLm1kBmcAAAAJcmVhZG1lLm1kCUIAAAAJaQAAAAlqAAAAATAAAAAvAAAABmsAAACtEkB7DQoJIyBTY3JpcHQgbW9kdWxlIG9yIGJpbmFyeSBtb2R1bGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYW5pZmVzdA0KCU1vZHVsZVRvUHJvY2VzcyA9ICfDvm5hbWXDvi5wc20xJw0KCQ0KCSMgVmVyc2lvbiBudW1iZXIgb2YgdGhpcyBtb2R1bGUuDQoJTW9kdWxlVmVyc2lvbiA9ICcxLjAuMC4wJw0KCQ0KCSMgSUQgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIG1vZHVsZQ0KCUdVSUQgPSAnw74hZ3VpZCHDvicNCgkNCgkjIEF1dGhvciBvZiB0aGlzIG1vZHVsZQ0KCUF1dGhvciA9ICfDvmF1dGhvcsO+Jw0KCQ0KCSMgQ29tcGFueSBvciB2ZW5kb3Igb2YgdGhpcyBtb2R1bGUNCglDb21wYW55TmFtZSA9ICfDvmNvbXBhbnnDvicNCgkNCgkjIENvcHlyaWdodCBzdGF0ZW1lbnQgZm9yIHRoaXMgbW9kdWxlDQoJQ29weXJpZ2h0ID0gJ0NvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+Jw0KCQ0KCSMgRGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUNCglEZXNjcmlwdGlvbiA9ICfDvmRlc2NyaXB0aW9uw74nDQoJDQoJIyBNaW5pbXVtIHZlcnNpb24gb2YgdGhlIFdpbmRvd3MgUG93ZXJTaGVsbCBlbmdpbmUgcmVxdWlyZWQgYnkgdGhpcyBtb2R1bGUNCglQb3dlclNoZWxsVmVyc2lvbiA9ICc1LjAnDQoJDQoJIyBNb2R1bGVzIHRoYXQgbXVzdCBiZSBpbXBvcnRlZCBpbnRvIHRoZSBnbG9iYWwgZW52aXJvbm1lbnQgcHJpb3IgdG8gaW1wb3J0aW5nDQoJIyB0aGlzIG1vZHVsZQ0KCVJlcXVpcmVkTW9kdWxlcyA9IEAoDQoJCUB7IE1vZHVsZU5hbWU9J1BTRnJhbWV3b3JrJzsgTW9kdWxlVmVyc2lvbj0nw74hcHNmcmFtZXdvcmshw74nIH0NCgkpDQoJDQoJIyBBc3NlbWJsaWVzIHRoYXQgbXVzdCBiZSBsb2FkZWQgcHJpb3IgdG8gaW1wb3J0aW5nIHRoaXMgbW9kdWxlDQoJIyBSZXF1aXJlZEFzc2VtYmxpZXMgPSBAKCdiaW5cw75uYW1lw74uZGxsJykNCgkNCgkjIFR5cGUgZmlsZXMgKC5wczF4bWwpIHRvIGJlIGxvYWRlZCB3aGVuIGltcG9ydGluZyB0aGlzIG1vZHVsZQ0KCSMgVHlwZXNUb1Byb2Nlc3MgPSBAKCd4bWxcw75uYW1lw74uVHlwZXMucHMxeG1sJykNCgkNCgkjIEZvcm1hdCBmaWxlcyAoLnBzMXhtbCkgdG8gYmUgbG9hZGVkIHdoZW4gaW1wb3J0aW5nIHRoaXMgbW9kdWxlDQoJIyBGb3JtYXRzVG9Qcm9jZXNzID0gQCgneG1sXMO+bmFtZcO+LkZvcm1hdC5wczF4bWwnKQ0KCQ0KCSMgRnVuY3Rpb25zIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlDQoJRnVuY3Rpb25zVG9FeHBvcnQgPSAnJw0KCQ0KCSMgQ21kbGV0cyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQ0KCUNtZGxldHNUb0V4cG9ydCA9ICcnDQoJDQoJIyBWYXJpYWJsZXMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUNCglWYXJpYWJsZXNUb0V4cG9ydCA9ICcnDQoJDQoJIyBBbGlhc2VzIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlDQoJQWxpYXNlc1RvRXhwb3J0ID0gJycNCgkNCgkjIExpc3Qgb2YgYWxsIG1vZHVsZXMgcGFja2FnZWQgd2l0aCB0aGlzIG1vZHVsZQ0KCU1vZHVsZUxpc3QgPSBAKCkNCgkNCgkjIExpc3Qgb2YgYWxsIGZpbGVzIHBhY2thZ2VkIHdpdGggdGhpcyBtb2R1bGUNCglGaWxlTGlzdCA9IEAoKQ0KCQ0KCSMgUHJpdmF0ZSBkYXRhIHRvIHBhc3MgdG8gdGhlIG1vZHVsZSBzcGVjaWZpZWQgaW4gTW9kdWxlVG9Qcm9jZXNzLiBUaGlzIG1heSBhbHNvIGNvbnRhaW4gYSBQU0RhdGEgaGFzaHRhYmxlIHdpdGggYWRkaXRpb25hbCBtb2R1bGUgbWV0YWRhdGEgdXNlZCBieSBQb3dlclNoZWxsLg0KCVByaXZhdGVEYXRhID0gQHsNCgkJDQoJCSNTdXBwb3J0IGZvciBQb3dlclNoZWxsR2V0IGdhbGxlcmllcy4NCgkJUFNEYXRhID0gQHsNCgkJCQ0KCQkJIyBUYWdzIGFwcGxpZWQgdG8gdGhpcyBtb2R1bGUuIFRoZXNlIGhlbHAgd2l0aCBtb2R1bGUgZGlzY292ZXJ5IGluIG9ubGluZSBnYWxsZXJpZXMuDQoJCQkjIFRhZ3MgPSBAKCkNCgkJCQ0KCQkJIyBBIFVSTCB0byB0aGUgbGljZW5zZSBmb3IgdGhpcyBtb2R1bGUuDQoJCQkjIExpY2Vuc2VVcmkgPSAnJw0KCQkJDQoJCQkjIEEgVVJMIHRvIHRoZSBtYWluIHdlYnNpdGUgZm9yIHRoaXMgcHJvamVjdC4NCgkJCSMgUHJvamVjdFVyaSA9ICcnDQoJCQkNCgkJCSMgQSBVUkwgdG8gYW4gaWNvbiByZXByZXNlbnRpbmcgdGhpcyBtb2R1bGUuDQoJCQkjIEljb25VcmkgPSAnJw0KCQkJDQoJCQkjIFJlbGVhc2VOb3RlcyBvZiB0aGlzIG1vZHVsZQ0KCQkJIyBSZWxlYXNlTm90ZXMgPSAnJw0KCQkJDQoJCX0gIyBFbmQgb2YgUFNEYXRhIGhhc2h0YWJsZQ0KCQkNCgl9ICMgRW5kIG9mIFByaXZhdGVEYXRhIGhhc2h0YWJsZQ0KfQEJbAAAAAltAAAABm4AAAANw75uYW1lw74ucHNkMQZvAAAADcO+bmFtZcO+LnBzZDEJQgAAAAlxAAAACXIAAAABMQAAAC8AAAAGcwAAAPkYJHNjcmlwdDpNb2R1bGVSb290ID0gJFBTU2NyaXB0Um9vdA0KJHNjcmlwdDpNb2R1bGVWZXJzaW9uID0gIjEuMC4wLjAiDQoNCiMgRGV0ZWN0IHdoZXRoZXIgYXQgc29tZSBsZXZlbCBkb3Rzb3VyY2luZyB3YXMgZW5mb3JjZWQNCiRzY3JpcHQ6ZG9Eb3RTb3VyY2UgPSBHZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lIMO+bmFtZcO+LkltcG9ydC5Eb0RvdFNvdXJjZSAtRmFsbGJhY2sgJGZhbHNlDQppZiAoJMO+bmFtZcO+X2RvdHNvdXJjZW1vZHVsZSkgeyAkc2NyaXB0OmRvRG90U291cmNlID0gJHRydWUgfQ0KDQo8Iw0KTm90ZSBvbiBSZXNvbHZlLVBhdGg6DQpBbGwgcGF0aHMgYXJlIHNlbnQgdGhyb3VnaCBSZXNvbHZlLVBhdGgvUmVzb2x2ZS1QU0ZQYXRoIGluIG9yZGVyIHRvIGNvbnZlcnQgdGhlbSB0byB0aGUgY29ycmVjdCBwYXRoIHNlcGFyYXRvci4NClRoaXMgYWxsb3dzIGlnbm9yaW5nIHBhdGggc2VwYXJhdG9ycyB0aHJvdWdob3V0IHRoZSBpbXBvcnQgc2VxdWVuY2UsIHdoaWNoIGNvdWxkIG90aGVyd2lzZSBjYXVzZSB0cm91YmxlIGRlcGVuZGluZyBvbiBPUy4NClJlc29sdmUtUGF0aCBjYW4gb25seSBiZSB1c2VkIGZvciBwYXRocyB0aGF0IGFscmVhZHkgZXhpc3QsIFJlc29sdmUtUFNGUGF0aCBjYW4gYWNjZXB0IHRoYXQgdGhlIGxhc3QgbGVhZiBteSBub3QgZXhpc3QuDQpUaGlzIGlzIGltcG9ydGFudCB3aGVuIHRlc3RpbmcgZm9yIHBhdGhzLg0KIz4NCg0KIyBEZXRlY3Qgd2hldGhlciBhdCBzb21lIGxldmVsIGxvYWRpbmcgaW5kaXZpZHVhbCBtb2R1bGUgZmlsZXMsIHJhdGhlciB0aGFuIHRoZSBjb21waWxlZCBtb2R1bGUgd2FzIGVuZm9yY2VkDQokaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gR2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSDDvm5hbWXDvi5JbXBvcnQuSW5kaXZpZHVhbEZpbGVzIC1GYWxsYmFjayAkZmFsc2UNCmlmICgkw75uYW1lw75faW1wb3J0SW5kaXZpZHVhbEZpbGVzKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9DQppZiAoVGVzdC1QYXRoIChSZXNvbHZlLVBTRlBhdGggLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVwuLlwuZ2l0IiAtU2luZ2xlSXRlbSAtTmV3Q2hpbGQpKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9DQppZiAoLW5vdCAoVGVzdC1QYXRoIChSZXNvbHZlLVBTRlBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVxjb21tYW5kcy5wczEiIC1TaW5nbGVJdGVtIC1OZXdDaGlsZCkpKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9DQoJDQpmdW5jdGlvbiBJbXBvcnQtTW9kdWxlRmlsZQ0Kew0KCTwjDQoJCS5TWU5PUFNJUw0KCQkJTG9hZHMgZmlsZXMgaW50byB0aGUgbW9kdWxlIG9uIG1vZHVsZSBpbXBvcnQuDQoJCQ0KCQkuREVTQ1JJUFRJT04NCgkJCVRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbi4NCgkJCUl0IHNob3VsZCBhbHdheXMgYmUgZG90c291cmNlZCBpdHNlbGYsIGluIG9yZGVyIHRvIHByb3BlciBmdW5jdGlvbi4NCgkJCQ0KCQkJVGhpcyBwcm92aWRlcyBhIGNlbnRyYWwgbG9jYXRpb24gdG8gcmVhY3QgdG8gZmlsZXMgYmVpbmcgaW1wb3J0ZWQsIGlmIGxhdGVyIGRlc2lyZWQNCgkJDQoJCS5QQVJBTUVURVIgUGF0aA0KCQkJVGhlIHBhdGggdG8gdGhlIGZpbGUgdG8gbG9hZA0KCQkNCgkJLkVYQU1QTEUNCgkJCVBTIEM6XD4gLiBJbXBvcnQtTW9kdWxlRmlsZSAtRmlsZSAkZnVuY3Rpb24uRnVsbE5hbWUNCgkNCgkJCUltcG9ydHMgdGhlIGZpbGUgc3RvcmVkIGluICRmdW5jdGlvbiBhY2NvcmRpbmcgdG8gaW1wb3J0IHBvbGljeQ0KCSM+DQoJW0NtZGxldEJpbmRpbmcoKV0NCglQYXJhbSAoDQoJCVtzdHJpbmddDQoJCSRQYXRoDQoJKQ0KCQ0KCWlmICgkZG9Eb3RTb3VyY2UpIHsgLiAoUmVzb2x2ZS1QYXRoICRQYXRoKSB9DQoJZWxzZSB7ICRFeGVjdXRpb25Db250ZXh0Lkludm9rZUNvbW1hbmQuSW52b2tlU2NyaXB0KCRmYWxzZSwgKFtzY3JpcHRibG9ja106OkNyZWF0ZShbaW8uZmlsZV06OlJlYWRBbGxUZXh0KChSZXNvbHZlLVBhdGggJFBhdGgpKSkpLCAkbnVsbCwgJG51bGwpIH0NCn0NCg0KaWYgKCRpbXBvcnRJbmRpdmlkdWFsRmlsZXMpDQp7DQoJIyBFeGVjdXRlIFByZWltcG9ydCBhY3Rpb25zDQoJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xwcmVpbXBvcnQucHMxIg0KCQ0KCSMgSW1wb3J0IGFsbCBpbnRlcm5hbCBmdW5jdGlvbnMNCglmb3JlYWNoICgkZnVuY3Rpb24gaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XGludGVybmFsXGZ1bmN0aW9ucyIgLUZpbHRlciAiKi5wczEiIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBJZ25vcmUpKQ0KCXsNCgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkZnVuY3Rpb24uRnVsbE5hbWUNCgl9DQoJDQoJIyBJbXBvcnQgYWxsIHB1YmxpYyBmdW5jdGlvbnMNCglmb3JlYWNoICgkZnVuY3Rpb24gaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XGZ1bmN0aW9ucyIgLUZpbHRlciAiKi5wczEiIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBJZ25vcmUpKQ0KCXsNCgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkZnVuY3Rpb24uRnVsbE5hbWUNCgl9DQoJDQoJIyBFeGVjdXRlIFBvc3RpbXBvcnQgYWN0aW9ucw0KCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggIiRNb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNccG9zdGltcG9ydC5wczEiDQp9DQplbHNlDQp7DQoJaWYgKFRlc3QtUGF0aCAoUmVzb2x2ZS1QU0ZQYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClccmVzb3VyY2VzQmVmb3JlLnBzMSIgLVNpbmdsZUl0ZW0gLU5ld0NoaWxkKSkNCgl7DQoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVxyZXNvdXJjZXNCZWZvcmUucHMxIg0KCX0NCgkNCgkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcY29tbWFuZHMucHMxIg0KCQ0KCWlmIChUZXN0LVBhdGggKFJlc29sdmUtUFNGUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXHJlc291cmNlc0FmdGVyLnBzMSIgLVNpbmdsZUl0ZW0gLU5ld0NoaWxkKSkNCgl7DQoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVxyZXNvdXJjZXNBZnRlci5wczEiDQoJfQ0KfQEJdAAAAAl1AAAABnYAAAANw75uYW1lw74ucHNtMQZ3AAAADcO+bmFtZcO+LnBzbTEJQgAAAAl5AAAACXoAAAAFNAAAADtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgEAAAAKU2NyaXB0VGV4dAEyAAAABnsAAAA0DQoJCQkoR2V0LU1vZHVsZSBQU0ZyYW1ld29yaykuVmVyc2lvbi5Ub1N0cmluZygpDQoJCQE2AAAANAAAAAZ8AAAAIA0KCQkJR2V0LURhdGUgLUZvcm1hdCAieXl5eSINCgkJATgAAAA0AAAABn0AAAAmDQoJCQlHZXQtRGF0ZSAtRm9ybWF0ICJ5eXl5LU1NLWRkIg0KCQkBOgAAADQAAAAGfgAAAAkNCgkJCQ0KCQkBPAAAADQAAAAGfwAAACwNCgkJCVtTeXN0ZW0uR3VpZF06Ok5ld0d1aWQoKS5Ub1N0cmluZygpDQoJCQE+AAAANAAAAAaAAAAAVg0KCQkJQCcNCiRyZXN1bHRzID0gSW52b2tlLVBlc3RlciAtU2NyaXB0ICRmaWxlLkZ1bGxOYW1lIC1TaG93ICRTaG93IC1QYXNzVGhydQ0KJ0ANCgkJAT8AAAALAAAACYEAAAABAAAAAQAAAAFDAAAACAAAAAmCAAAAAAAAAAAAAAABRAAAAAgAAAAJggAAAAAAAAAAAAAAAUUAAAALAAAACYMAAAABAAAAAQAAAAFJAAAACAAAAAmCAAAAAAAAAAAAAAABSgAAAAgAAAAJggAAAAAAAAAAAAAAAUsAAAALAAAACYUAAAABAAAAAQAAAAFPAAAACAAAAAmCAAAAAAAAAAAAAAABUAAAAAgAAAAJggAAAAAAAAAAAAAAAVEAAAALAAAACYcAAAAEAAAABAAAAAFVAAAACAAAAAmCAAAAAAAAAAAAAAABVgAAAAgAAAAJggAAAAAAAAAAAAAAAVcAAAALAAAACYkAAAAEAAAABAAAAAFbAAAACAAAAAmCAAAAAAAAAAAAAAABXAAAAAgAAAAJggAAAAAAAAAAAAAAAV0AAAALAAAACYsAAAADAAAAAwAAAAFhAAAACAAAAAmCAAAAAAAAAAAAAAABYgAAAAgAAAAJggAAAAAAAAAAAAAAAWQAAAAIAAAACY0AAAABAAAAAQAAAAFlAAAACAAAAAmCAAAAAAAAAAAAAAABaQAAAAgAAAAJggAAAAAAAAAAAAAAAWoAAAAIAAAACYIAAAAAAAAAAAAAAAFsAAAACAAAAAmPAAAABAAAAAQAAAABbQAAAAgAAAAJkAAAAAMAAAADAAAAAXEAAAAIAAAACZEAAAABAAAAAQAAAAFyAAAACAAAAAmCAAAAAAAAAAAAAAABdAAAAAgAAAAJkwAAAAEAAAABAAAAAXUAAAAIAAAACYIAAAAAAAAAAAAAAAF5AAAACAAAAAmVAAAAAQAAAAEAAAABegAAAAgAAAAJggAAAAAAAAAAAAAAB4EAAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJlwAAAA0DEYIAAAAAAAAAB4MAAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJmAAAAA0DB4UAAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJmQAAAA0DB4cAAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJmgAAAAmbAAAACZwAAAAJnQAAAAeJAAAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACZ4AAAAJnwAAAAmgAAAACaEAAAAHiwAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmiAAAACaMAAAAJpAAAAAoRjQAAAAQAAAAGpQAAAARuYW1lDQMRjwAAAAQAAAAGpgAAAARuYW1lBqcAAAAGYXV0aG9yBqgAAAAHY29tcGFueQapAAAAC2Rlc2NyaXB0aW9uEZAAAAAEAAAABqoAAAAEZ3VpZAarAAAABHllYXIGrAAAAAtwc2ZyYW1ld29yawoRkQAAAAQAAAAGrQAAAARuYW1lDQMRkwAAAAQAAAAGrgAAAARuYW1lDQMRlQAAAAQAAAAGrwAAAARuYW1lDQMBlwAAAC8AAAAGsAAAAO4CIyBiaW4gZm9sZGVyDQoNClRoZSBiaW4gZm9sZGVyIGV4aXN0cyB0byBzdG9yZSBiaW5hcnkgZGF0YS4gQW5kIHNjcmlwdHMgcmVsYXRlZCB0byB0aGUgdHlwZSBzeXN0ZW0uDQoNClRoaXMgbWF5IGluY2x1ZGUgeW91ciBvd24gQyMtYmFzZWQgbGlicmFyeSwgdGhpcmQgcGFydHkgbGlicmFyaWVzIHlvdSB3YW50IHRvIGluY2x1ZGUgKHdhdGNoIHRoZSBsaWNlbnNlISksIG9yIGEgc2NyaXB0IGRlY2xhcmluZyB0eXBlIGFjY2VsZXJhdG9ycyAoZWZmZWN0aXZlbHkgYWxpYXNlcyBmb3IgLk5FVCB0eXBlcykNCg0KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gVHlwZSBBY2NlbGVyYXRvcnMsIHNlZSB0aGUgaGVscCBvbiBTZXQtUFNGVHlwZUFsaWFzAQmxAAAACbIAAAAGswAAAAlyZWFkbWUubWQGtAAAAA1iaW5ccmVhZG1lLm1kCUIAAAAJtgAAAAm3AAAAAZgAAAAvAAAABrgAAAClAVRPUElDDQoJYWJvdXRfw75uYW1lw74NCgkNClNIT1JUIERFU0NSSVBUSU9ODQoJRXhwbGFpbnMgaG93IHRvIHVzZSB0aGUgw75uYW1lw74gcG93ZXJzaGVsbCBtb2R1bGUNCgkNCkxPTkcgREVTQ1JJUFRJT04NCgk8SW5zZXJ0IENvbnRlbnQgaGVyZT4NCg0KS0VZV09SRFMNCgnDvm5hbWXDvgEJuQAAAAm6AAAABrsAAAAXYWJvdXRfw75uYW1lw74uaGVscC50eHQGvAAAAB1lbi11c1xhYm91dF/Dvm5hbWXDvi5oZWxwLnR4dAlCAAAACb4AAAAJvwAAAAGZAAAALwAAAAbAAAAA0gEjIEZ1bmN0aW9ucw0KDQpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIGZ1bmN0aW9ucyBnby4NCg0KRGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBtb2R1bGUsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHN1YmRpdmlkZSB0aGVtIGludG8gc3ViZm9sZGVycy4NCg0KVGhlIG1vZHVsZSB3aWxsIHBpY2sgdXAgYWxsIC5wczEgZmlsZXMgcmVjdXJzaXZlbHkBCcEAAAAJwgAAAAbDAAAACXJlYWRtZS5tZAbEAAAAE2Z1bmN0aW9uc1xyZWFkbWUubWQJQgAAAAnGAAAACccAAAABmgAAACkAAAAJyAAAAAbJAAAADmNvbmZpZ3VyYXRpb25zBsoAAAAXaW50ZXJuYWxcY29uZmlndXJhdGlvbnMJQgAAAAnMAAAACc0AAAABmwAAACkAAAAJzgAAAAbPAAAACWZ1bmN0aW9ucwbQAAAAEmludGVybmFsXGZ1bmN0aW9ucwlCAAAACdIAAAAJ0wAAAAGcAAAAKQAAAAnUAAAABtUAAAAHc2NyaXB0cwbWAAAAEGludGVybmFsXHNjcmlwdHMJQgAAAAnYAAAACdkAAAABnQAAACkAAAAJ2gAAAAbbAAAABHRlcHAG3AAAAA1pbnRlcm5hbFx0ZXBwCUIAAAAJ3gAAAAnfAAAAAZ4AAAApAAAACeAAAAAG4QAAAAlmdW5jdGlvbnMG4gAAAA90ZXN0c1xmdW5jdGlvbnMJQgAAAAnkAAAACeUAAAABnwAAACkAAAAJ5gAAAAbnAAAAB2dlbmVyYWwG6AAAAA10ZXN0c1xnZW5lcmFsCUIAAAAJ6gAAAAnrAAAAAaAAAAAvAAAABuwAAADeFHBhcmFtICgNCgkkVGVzdEdlbmVyYWwgPSAkdHJ1ZSwNCgkNCgkkVGVzdEZ1bmN0aW9ucyA9ICR0cnVlLA0KCQ0KCVtWYWxpZGF0ZVNldCgnTm9uZScsICdEZWZhdWx0JywgJ1Bhc3NlZCcsICdGYWlsZWQnLCAnUGVuZGluZycsICdTa2lwcGVkJywgJ0luY29uY2x1c2l2ZScsICdEZXNjcmliZScsICdDb250ZXh0JywgJ1N1bW1hcnknLCAnSGVhZGVyJywgJ0ZhaWxzJywgJ0FsbCcpXQ0KCSRTaG93ID0gIk5vbmUiLA0KCQ0KCSRJbmNsdWRlID0gIioiLA0KCQ0KCSRFeGNsdWRlID0gIiINCikNCg0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJTdGFydGluZyBUZXN0cyINCg0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJJbXBvcnRpbmcgTW9kdWxlIg0KDQpSZW1vdmUtTW9kdWxlIMO+bmFtZcO+IC1FcnJvckFjdGlvbiBJZ25vcmUNCkltcG9ydC1Nb2R1bGUgIiRQU1NjcmlwdFJvb3RcLi5cw75uYW1lw74ucHNkMSINCkltcG9ydC1Nb2R1bGUgIiRQU1NjcmlwdFJvb3RcLi5cw75uYW1lw74ucHNtMSIgLUZvcmNlDQoNCsO+IXRlc3Rmb2xkZXIhw74NCg0KJHRvdGFsRmFpbGVkID0gMA0KJHRvdGFsUnVuID0gMA0KDQokdGVzdHJlc3VsdHMgPSBAKCkNCg0KI3JlZ2lvbiBSdW4gR2VuZXJhbCBUZXN0cw0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJNb2R1bGVzIGltcG9ydGVkLCBwcm9jZWVkaW5nIHdpdGggZ2VuZXJhbCB0ZXN0cyINCmZvcmVhY2ggKCRmaWxlIGluIChHZXQtQ2hpbGRJdGVtICIkUFNTY3JpcHRSb290XGdlbmVyYWwiIC1GaWx0ZXIgIiouVGVzdHMucHMxIikpDQp7DQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgU2lnbmlmaWNhbnQgLU1lc3NhZ2UgIiAgRXhlY3V0aW5nIDxjPSdlbSc+JCgkZmlsZS5OYW1lKTwvYz4iDQoJw74hdGVzdHJlc3VsdHMhw74NCglmb3JlYWNoICgkcmVzdWx0IGluICRyZXN1bHRzKQ0KCXsNCgkJJHRvdGFsUnVuICs9ICRyZXN1bHQuVG90YWxDb3VudA0KCQkkdG90YWxGYWlsZWQgKz0gJHJlc3VsdC5GYWlsZWRDb3VudA0KCQkkcmVzdWx0LlRlc3RSZXN1bHQgfCBXaGVyZS1PYmplY3QgeyAtbm90ICRfLlBhc3NlZCB9IHwgRm9yRWFjaC1PYmplY3Qgew0KCQkJJG5hbWUgPSAkXy5OYW1lDQoJCQkkdGVzdHJlc3VsdHMgKz0gW3BzY3VzdG9tb2JqZWN0XUB7DQoJCQkJRGVzY3JpYmUgID0gJF8uRGVzY3JpYmUNCgkJCQlDb250ZXh0ICAgPSAkXy5Db250ZXh0DQoJCQkJTmFtZQkgID0gIkl0ICRuYW1lIg0KCQkJCVJlc3VsdCAgICA9ICRfLlJlc3VsdA0KCQkJCU1lc3NhZ2UgICA9ICRfLkZhaWx1cmVNZXNzYWdlDQoJCQl9DQoJCX0NCgl9DQp9DQojZW5kcmVnaW9uIFJ1biBHZW5lcmFsIFRlc3RzDQoNCiNyZWdpb24gVGVzdCBDb21tYW5kcw0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJQcm9jZWVkaW5nIHdpdGggaW5kaXZpZHVhbCB0ZXN0cyINCmZvcmVhY2ggKCRmaWxlIGluIChHZXQtQ2hpbGRJdGVtICIkUFNTY3JpcHRSb290XGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgLUZpbHRlciAiKlRlc3RzLnBzMSIpKQ0Kew0KCWlmICgkZmlsZS5OYW1lIC1ub3RsaWtlICRJbmNsdWRlKSB7IGNvbnRpbnVlIH0NCglpZiAoJGZpbGUuTmFtZSAtbGlrZSAkRXhjbHVkZSkgeyBjb250aW51ZSB9DQoJDQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgU2lnbmlmaWNhbnQgLU1lc3NhZ2UgIiAgRXhlY3V0aW5nICQoJGZpbGUuTmFtZSkiDQoJw74hdGVzdHJlc3VsdHMhw74NCglmb3JlYWNoICgkcmVzdWx0IGluICRyZXN1bHRzKQ0KCXsNCgkJJHRvdGFsUnVuICs9ICRyZXN1bHQuVG90YWxDb3VudA0KCQkkdG90YWxGYWlsZWQgKz0gJHJlc3VsdC5GYWlsZWRDb3VudA0KCQkkcmVzdWx0LlRlc3RSZXN1bHQgfCBXaGVyZS1PYmplY3QgeyAtbm90ICRfLlBhc3NlZCB9IHwgRm9yRWFjaC1PYmplY3Qgew0KCQkJJG5hbWUgPSAkXy5OYW1lDQoJCQkkdGVzdHJlc3VsdHMgKz0gW3BzY3VzdG9tb2JqZWN0XUB7DQoJCQkJRGVzY3JpYmUgICA9ICRfLkRlc2NyaWJlDQoJCQkJQ29udGV4dCAgICA9ICRfLkNvbnRleHQNCgkJCQlOYW1lCSAgID0gIkl0ICRuYW1lIg0KCQkJCVJlc3VsdAkgICA9ICRfLlJlc3VsdA0KCQkJCU1lc3NhZ2UgICAgPSAkXy5GYWlsdXJlTWVzc2FnZQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KI2VuZHJlZ2lvbiBUZXN0IENvbW1hbmRzDQoNCiR0ZXN0cmVzdWx0cyB8IFNvcnQtT2JqZWN0IERlc2NyaWJlLCBDb250ZXh0LCBOYW1lLCBSZXN1bHQsIE1lc3NhZ2UgfCBGb3JtYXQtTGlzdA0KDQppZiAoJHRvdGFsRmFpbGVkIC1lcSAwKSB7IFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIENyaXRpY2FsIC1NZXNzYWdlICJBbGwgPGM9J2VtJz4kdG90YWxSdW48L2M+IHRlc3RzIGV4ZWN1dGVkIHdpdGhvdXQgYSBzaW5nbGUgZmFpbHVyZSEiIH0NCmVsc2UgeyBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBDcml0aWNhbCAtTWVzc2FnZSAiPGM9J2VtJz4kdG90YWxGYWlsZWQgdGVzdHM8L2M+IG91dCBvZiA8Yz0nc3ViJz4kdG90YWxSdW48L2M+IHRlc3RzIGZhaWxlZCEiIH0NCg0KaWYgKCR0b3RhbEZhaWxlZCAtZ3QgMCkNCnsNCgl0aHJvdyAiJHRvdGFsRmFpbGVkIC8gJHRvdGFsUnVuIHRlc3RzIGZhaWxlZCEiDQp9AQntAAAACe4AAAAG7wAAAApwZXN0ZXIucHMxBvAAAAAQdGVzdHNccGVzdGVyLnBzMQlCAAAACfIAAAAJ8wAAAAGhAAAALwAAAAb0AAAAogcjIERlc2NyaXB0aW9uDQoNClRoaXMgaXMgdGhlIGZvbGRlciwgd2hlcmUgYWxsIHRoZSB0ZXN0cyBnby4NCg0KVGhvc2UgYXJlIHN1YmRpdmlkZWQgaW4gdHdvIGNhdGVnb3JpZXM6DQoNCiAtIEdlbmVyYWwNCiAtIEZ1bmN0aW9uDQoNCiMjIEdlbmVyYWwgVGVzdHMNCg0KR2VuZXJhbCB0ZXN0cyBhcmUgZnVuY3Rpb24gZ2VuZXJpYyBhbmQgdGVzdCBmb3IgZ2VuZXJhbCBwb2xpY2llcy4NCg0KVGhlc2UgdGVzdCBzY2FuIGFuc3dlciBxdWVzdGlvbnMgc3VjaCBhczoNCg0KIC0gSXMgbXkgbW9kdWxlIGZvbGxvd2luZyBteSBzdHlsZSBndWlkZXM/DQogLSBEb2VzIGFueSBvZiBteSBzY3JpcHRzIGhhdmUgYSBzeW50YXggZXJyb3I/DQogLSBEbyBteSBzY3JpcHRzIHVzZSBjb21tYW5kcyBJIGRvIG5vdCB3YW50IHRoZW0gdG8gdXNlPw0KIC0gRG8gbXkgY29tbWFuZHMgZm9sbG93IGJlc3QgcHJhY3RpY2VzPw0KIC0gRG8gbXkgY29tbWFuZHMgaGF2ZSBwcm9wZXIgaGVscD8NCg0KQmFzaWNhbGx5LCB0aGVzZSBhbGxvdyBhIGdlbmVyYWwgbW9kdWxlIGhlYWx0aCBjaGVjay4NCg0KVGhlc2UgdGVzdHMgYXJlIGFscmVhZHkgcHJvdmlkZWQgYXMgcGFydCBvZiB0aGUgdGVtcGxhdGUuDQoNCiMjIEZ1bmN0aW9uIFRlc3RzDQoNCkEgaGVhbHRoeSBtb2R1bGUgc2hvdWxkIHByb3ZpZGUgdW5pdCBhbmQgaW50ZWdyYXRpb24gdGVzdHMgZm9yIHRoZSBjb21tYW5kcyAmIGNvbXBvbmVudHMgaXQgc2hpcHMuDQpPbmx5IHRoZW4gY2FuIGJlIGd1YXJhbnRlZWQsIHRoYXQgdGhleSB3aWxsIGFjdHVhbGx5IHBlcmZvcm0gYXMgcHJvbWlzZWQuDQoNCkhvd2V2ZXIsIGFzIGVhY2ggc3VjaCB0ZXN0IG11c3QgYmUgc3BlY2lmaWMgdG8gdGhlIGZ1bmN0aW9uIGl0IHRlc3RzLCB0aGVyZSBjYW5ub3QgYmUgbXVjaCBpbiB0aGUgd2F5IG9mIHRlbXBsYXRlcy4BCfUAAAAJ9gAAAAb3AAAACXJlYWRtZS5tZAb4AAAAD3Rlc3RzXHJlYWRtZS5tZAlCAAAACfoAAAAJ+wAAAAGiAAAALwAAAAb8AAAArAsjIFhNTA0KDQpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgcHJvamVjdCBYTUwgZmlsZXMgZ28sIG5vdGFibHk6DQoNCiAtIEZvcm1hdCBYTUwNCiAtIFR5cGUgRXh0ZW5zaW9uIFhNTA0KDQpFeHRlcm5hbCBoZWxwIGZpbGVzIHNob3VsZCBfbm90XyBiZSBwbGFjZWQgaW4gdGhpcyBmb2xkZXIhDQoNCiMjIE5vdGVzIG9uIEZpbGVzIGFuZCBOYW1pbmcNCg0KVGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGZvcm1hdCBmaWxlIGFuZCBvbmUgdHlwZSBleHRlbnNpb24gZmlsZSBwZXIgcHJvamVjdCwgYXMgaW1wb3J0aW5nIHRoZW0gaGFzIGEgbm90YWJsZSBpbXBhY3Qgb24gaW1wb3J0IHRpbWVzLg0KDQogLSBUaGUgRm9ybWF0IFhNTCBzaG91bGQgYmUgbmFtZWQgYMO+bmFtZcO+LkZvcm1hdC5wczF4bWxgDQogLSBUaGUgVHlwZSBFeHRlbnNpb24gWE1MIHNob3VsZCBiZSBuYW1lZCBgw75uYW1lw74uVHlwZXMucHMxeG1sYA0KDQojIyBUb29scw0KDQojIyMgTmV3LVBTTURGb3JtYXRUYWJsZURlZmluaXRpb24NCg0KVGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYW4gaW5wdXQgb2JqZWN0IGFuZCBnZW5lcmF0ZSBmb3JtYXQgeG1sIGZvciBhbiBhdXRvLXNpemVkIHRhYmxlLg0KDQpJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgdG8gZ2V0IHN0YXJ0ZWQgd2l0aCBmb3JtYXRzLg0KDQojIyMgR2V0LVBTRlR5cGVTZXJpYWxpemF0aW9uRGF0YQ0KDQpgYGANCkMjIFdhcm5pbmchDQpUaGlzIHNlY3Rpb24gaXMgb25seSBpbnRlcmVzdCBpZiB5b3UncmUgdXNpbmcgQyMgdG9nZXRoZXIgd2l0aCBQb3dlclNoZWxsLg0KYGBgDQoNClRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHR5cGUgZXh0ZW5zaW9uIFhNTCB0aGF0IGFsbG93cyBQb3dlclNoZWxsIHRvIGNvbnZlcnQgdHlwZXMgd3JpdHRlbiBpbiBDIyB0byBiZSB3cml0dGVuIHRvIGZpbGUgYW5kIHJlc3RvcmVkIGZyb20gaXQgd2l0aG91dCBiZWluZyAnRGVzZXJpYWxpemVkJy4gQWxzbyB3b3JrcyBmb3Igam9icyBvciByZW1vdGluZywgaWYgYm90aCBzaWRlcyBoYXZlIHRoZSBgUFNGcmFtZXdvcmtgIG1vZHVsZSBhbmQgdHlwZSBleHRlbnNpb24gbG9hZGVkLg0KDQpJbiBvcmRlciBmb3IgYSBjbGFzcyB0byBiZSBlbGlnaWJsZSBmb3IgdGhpcywgaXQgbmVlZHMgdG8gY29uZm9ybSB0byB0aGUgZm9sbG93aW5nIHJ1bGVzOg0KDQogLSBIYXZlIHRoZSBgW1NlcmlhbGl6YWJsZV1gIGF0dHJpYnV0ZQ0KIC0gQmUgcHVibGljDQogLSBIYXZlIGFuIGVtcHR5IGNvbnN0cnVjdG9yDQogLSBBbGxvdyBhbGwgcHVibGljIHByb3BlcnRpZXMvZmllbGRzIHRvIGJlIHNldCAoZXZlbiBpZiBzZXR0aW5nIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcpIHdpdGhvdXQgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLg0KDQpgYGANCm5vbi1wdWJsaWMgcHJvcGVydGllcyBhbmQgZmllbGRzIHdpbGwgYmUgbG9zdCBpbiB0aGlzIHByb2Nlc3MhDQpgYGABCf0AAAAJ/gAAAAb/AAAACXJlYWRtZS5tZAYAAQAADXhtbFxyZWFkbWUubWQJQgAAAAkCAQAACQMBAAABowAAAC8AAAAGBAEAAOcFPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTE2Ij8+DQo8Q29uZmlndXJhdGlvbj4NCgk8Vmlld0RlZmluaXRpb25zPg0KCQk8IS0tIEZvby5CYXIgLS0+DQoJCTxWaWV3Pg0KCQkJPE5hbWU+Rm9vLkJhcjwvTmFtZT4NCgkJCTxWaWV3U2VsZWN0ZWRCeT4NCgkJCQk8VHlwZU5hbWU+Rm9vLkJhcjwvVHlwZU5hbWU+DQoJCQk8L1ZpZXdTZWxlY3RlZEJ5Pg0KCQkJPFRhYmxlQ29udHJvbD4NCgkJCQk8QXV0b1NpemUvPg0KCQkJCTxUYWJsZUhlYWRlcnM+DQoJCQkJCTxUYWJsZUNvbHVtbkhlYWRlci8+DQoJCQkJCTxUYWJsZUNvbHVtbkhlYWRlci8+DQoJCQkJPC9UYWJsZUhlYWRlcnM+DQoJCQkJPFRhYmxlUm93RW50cmllcz4NCgkJCQkJPFRhYmxlUm93RW50cnk+DQoJCQkJCQk8VGFibGVDb2x1bW5JdGVtcz4NCgkJCQkJCQk8VGFibGVDb2x1bW5JdGVtPg0KCQkJCQkJCQk8UHJvcGVydHlOYW1lPkZvbzwvUHJvcGVydHlOYW1lPg0KCQkJCQkJCTwvVGFibGVDb2x1bW5JdGVtPg0KCQkJCQkJCTxUYWJsZUNvbHVtbkl0ZW0+DQoJCQkJCQkJCTxQcm9wZXJ0eU5hbWU+QmFyPC9Qcm9wZXJ0eU5hbWU+DQoJCQkJCQkJPC9UYWJsZUNvbHVtbkl0ZW0+DQoJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbXM+DQoJCQkJCTwvVGFibGVSb3dFbnRyeT4NCgkJCQk8L1RhYmxlUm93RW50cmllcz4NCgkJCTwvVGFibGVDb250cm9sPg0KCQk8L1ZpZXc+DQoJPC9WaWV3RGVmaW5pdGlvbnM+DQo8Q29uZmlndXJhdGlvbj4BCQUBAAAJBgEAAAYHAQAAFsO+bmFtZcO+LkZvcm1hdC5wczF4bWwGCAEAABp4bWxcw75uYW1lw74uRm9ybWF0LnBzMXhtbAlCAAAACQoBAAAJCwEAAAGkAAAALwAAAAYMAQAA4Ac8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KPFR5cGVzPg0KICA8IS0tIEZvby5CYXIgLS0+DQogIDxUeXBlPg0KICAgIDxOYW1lPkRlc2VyaWFsaXplZC5Gb28uQmFyPC9OYW1lPg0KICAgIDxNZW1iZXJzPg0KICAgICAgPE1lbWJlclNldD4NCiAgICAgICAgPE5hbWU+UFNTdGFuZGFyZE1lbWJlcnM8L05hbWU+DQogICAgICAgIDxNZW1iZXJzPg0KICAgICAgICAgIDxOb3RlUHJvcGVydHk+DQogICAgICAgICAgICA8TmFtZT4NCiAgICAgICAgICAgICAgVGFyZ2V0VHlwZUZvckRlc2VyaWFsaXphdGlvbg0KICAgICAgICAgICAgPC9OYW1lPg0KICAgICAgICAgICAgPFZhbHVlPg0KICAgICAgICAgICAgICBGb28uQmFyDQogICAgICAgICAgICA8L1ZhbHVlPg0KICAgICAgICAgIDwvTm90ZVByb3BlcnR5Pg0KICAgICAgICA8L01lbWJlcnM+DQogICAgICA8L01lbWJlclNldD4NCiAgICA8L01lbWJlcnM+DQogIDwvVHlwZT4NCiAgPFR5cGU+DQogICAgPE5hbWU+Rm9vLkJhcjwvTmFtZT4NCiAgICA8TWVtYmVycz4NCiAgICAgIDxDb2RlUHJvcGVydHkgSXNIaWRkZW49InRydWUiPg0KICAgICAgICA8TmFtZT5TZXJpYWxpemF0aW9uRGF0YTwvTmFtZT4NCiAgICAgICAgPEdldENvZGVSZWZlcmVuY2U+DQogICAgICAgICAgPFR5cGVOYW1lPlBTRnJhbWV3b3JrLlNlcmlhbGl6YXRpb24uU2VyaWFsaXphdGlvblR5cGVDb252ZXJ0ZXI8L1R5cGVOYW1lPg0KICAgICAgICAgIDxNZXRob2ROYW1lPkdldFNlcmlhbGl6YXRpb25EYXRhPC9NZXRob2ROYW1lPg0KICAgICAgICA8L0dldENvZGVSZWZlcmVuY2U+DQogICAgICA8L0NvZGVQcm9wZXJ0eT4NCiAgICA8L01lbWJlcnM+DQogICAgPFR5cGVDb252ZXJ0ZXI+DQogICAgICA8VHlwZU5hbWU+UFNGcmFtZXdvcmsuU2VyaWFsaXphdGlvbi5TZXJpYWxpemF0aW9uVHlwZUNvbnZlcnRlcjwvVHlwZU5hbWU+DQogICAgPC9UeXBlQ29udmVydGVyPg0KICA8L1R5cGU+DQo8L1R5cGVzPgEJDQEAAAkOAQAABg8BAAAVw75uYW1lw74uVHlwZXMucHMxeG1sBhABAAAZeG1sXMO+bmFtZcO+LlR5cGVzLnBzMXhtbAlCAAAACRIBAAAJEwEAAAGxAAAACAAAAAmCAAAAAAAAAAAAAAABsgAAAAgAAAAJggAAAAAAAAAAAAAAAbYAAAAIAAAACYIA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YXZlIGEgc2luZ2xlIG9uZSBvZiB0aGVtLA0KaG93ZXZlciBpZiB5b3UgaGF2ZSBlbm91Z2ggY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0byBqdXN0aWZ5IGhhdmluZyBtdWx0aXBsZSBjb3BpZXMgb2YgaXQsDQpmZWVsIHRvdGFsbHkgZnJlZSB0byBzcGxpdCB0aGVtIGludG8gbXVsdGlwbGUgZmlsZXMuDQojPg0KDQo8Iw0KIyBFeGFtcGxlIENvbmZpZ3VyYXRpb24NClNldC1QU0ZDb25maWcgLU1vZHVsZSAnw75uYW1lw74nIC1OYW1lICdFeGFtcGxlLlNldHRpbmcnIC1WYWx1ZSAxMCAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnaW50ZWdlcicgLUhhbmRsZXIgeyB9IC1EZXNjcmlwdGlvbiAiRXhhbXBsZSBjb25maWd1cmF0aW9uIHNldHRpbmcuIFlvdXIgbW9kdWxlIGNhbiB0aGVuIHVzZSB0aGUgc2V0dGluZyB1c2luZyAnR2V0LVBTRkNvbmZpZ1ZhbHVlJyINCiM+DQoNClNldC1QU0ZDb25maWcgLU1vZHVsZSAnw75uYW1lw74nIC1OYW1lICdJbXBvcnQuRG9Eb3RTb3VyY2UnIC1WYWx1ZSAkZmFsc2UgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gJ2Jvb2wnIC1EZXNjcmlwdGlvbiAiV2hldGhlciB0aGUgbW9kdWxlIGZpbGVzIHNob3VsZCBiZSBkb3Rzb3VyY2VkIG9uIGltcG9ydC4gQnkgZGVmYXVsdCwgdGhlIGZpbGVzIG9mIHRoaXMgbW9kdWxlIGFyZSByZWFkIGFzIHN0cmluZyB2YWx1ZSBhbmQgaW52b2tlZCwgd2hpY2ggaXMgZmFzdGVyIGJ1dCB3b3JzZSBvbiBkZWJ1Z2dpbmcuIg0KU2V0LVBTRkNvbmZpZyAtTW9kdWxlICfDvm5hbWXDvicgLU5hbWUgJ0ltcG9ydC5JbmRpdmlkdWFsRmlsZXMnIC1WYWx1ZSAkZmFsc2UgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gJ2Jvb2wnIC1EZXNjcmlwdGlvbiAiV2hldGhlciB0aGUgbW9kdWxlIGZpbGVzIHNob3VsZCBiZSBpbXBvcnRlZCBpbmRpdmlkdWFsbHkuIER1cmluZyB0aGUgbW9kdWxlIGJ1aWxkLCBhbGwgbW9kdWxlIGNvZGUgaXMgY29tcGlsZWQgaW50byBmZXcgZmlsZXMsIHdoaWNoIGFyZSBpbXBvcnRlZCBpbnN0ZWFkIGJ5IGRlZmF1bHQuIExvYWRpbmcgdGhlIGNvbXBpbGVkIHZlcnNpb25zIGlzIGZhc3RlciwgdXNpbmcgdGhlIGluZGl2aWR1YWwgZmlsZXMgaXMgZWFzaWVyIGZvciBkZWJ1Z2dpbmcgYW5kIHRlc3Rpbmcgb3V0IGFkanVzdG1lbnRzLiIBCUgBAAAJSQEAAAZKAQAAEWNvbmZpZ3VyYXRpb24ucHMxBksBAAApaW50ZXJuYWxcY29uZmlndXJhdGlvbnNcY29uZmlndXJhdGlvbi5wczEJQgAAAAlNAQAACU4BAAABMQEAAC8AAAAGTwEAAP4DIyBDb25maWd1cmF0aW9ucw0KDQpUaHJvdWdoIHRoZSBgUFNGcmFtZXdvcmtgIHlvdSBoYXZlIGEgc2ltcGxlIG1ldGhvZCB0aGF0IGFsbG93cyB5b3UgdG8gLi4uDQoNCiAtIFB1Ymxpc2ggc2V0dGluZ3MNCiAtIFdpdGggb25ib2FyZCBkb2N1bWVudGF0aW9uDQogLSBJbnB1dCB2YWxpZGF0aW9uDQogLSBTY3JpcHRzIHRoYXQgcnVuIG9uIGNoYW5nZSBvZiBzZXR0aW5ncw0KIC0gVGhhdCBjYW4gYmUgZGlzY292ZXJlZCBhbmQgdXBkYXRlZCBieSB0aGUgdXNlcg0KIC0gVGhhdCBjYW4gYmUgYWRtaW5pc3RyYXRlZCBieSBwb2xpY3kgJiBEU0MNCg0KVGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGlzIGEgYml0IHRvbyBjb21wbGV4IHRvIGRlc2NyaWJlIGluIGEgaGVscCBmaWxlLCB5b3UgY2FuIGhvd2V2ZXIgdmlzaXQgdXMgYXQgaHR0cDovL3BzZnJhbWV3b3JrLm9yZyBmb3IgZGV0YWlsZWQgZ3VpZGFuY2UuDQoNCkFuIGV4YW1wbGUgY2FuIGJlIHNlZW4gaW4gdGhlIGF0dGFjaGVkIHBzMSBmaWxlAQlQAQAACVEBAAAGUgEAAAlyZWFkbWUubWQGUwEAACFpbnRlcm5hbFxjb25maWd1cmF0aW9uc1xyZWFkbWUubWQJQgAAAAlVAQAACVYBAAABMgEAAC8AAAAGVwEAANsBIyBGdW5jdGlvbnMNCg0KVGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIHRoZSBpbnRlcm5hbCBmdW5jdGlvbnMgZ28uDQoNCkRlcGVuZGluZyBvbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgbW9kdWxlLCBpdCBpcyByZWNvbW1lbmRlZCB0byBzdWJkaXZpZGUgdGhlbSBpbnRvIHN1YmZvbGRlcnMuDQoNClRoZSBtb2R1bGUgd2lsbCBwaWNrIHVwIGFsbCAucHMxIGZpbGVzIHJlY3Vyc2l2ZWx5AQlYAQAACVkBAAAGWgEAAAlyZWFkbWUubWQGWwEAABxpbnRlcm5hbFxmdW5jdGlvbnNccmVhZG1lLm1kCUIAAAAJXQEAAAleAQAAATMBAAAvAAAABl8BAAD2CU5ldy1QU0ZMaWNlbnNlIC1Qcm9kdWN0ICfDvm5hbWXDvicgLU1hbnVmYWN0dXJlciAnw75hdXRob3LDvicgLVByb2R1Y3RWZXJzaW9uICRzY3JpcHQ6TW9kdWxlVmVyc2lvbiAtUHJvZHVjdFR5cGUgTW9kdWxlIC1OYW1lIE1JVCAtVmVyc2lvbiAiMS4wLjAuMCIgLURhdGUgKEdldC1EYXRlICLDviFkYXRlIcO+IikgLVRleHQgQCINCkNvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+DQoNClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkNCm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsDQppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzDQp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsDQpjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMNCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQoNClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbA0KY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCg0KVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0KRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFDQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSDQpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLA0KT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUNClNPRlRXQVJFLg0KIkABCWABAAAJYQEAAAZiAQAAC2xpY2Vuc2UucHMxBmMBAAAcaW50ZXJuYWxcc2NyaXB0c1xsaWNlbnNlLnBzMQlCAAAACWUBAAAJZgEAAAE0AQAALwAAAAZnAQAA0wQjIEFkZCBhbGwgdGhpbmdzIHlvdSB3YW50IHRvIHJ1biBhZnRlciBpbXBvcnRpbmcgdGhlIG1haW4gY29kZQ0KDQojIExvYWQgQ29uZmlndXJhdGlvbnMNCmZvcmVhY2ggKCRmaWxlIGluIChHZXQtQ2hpbGRJdGVtICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxjb25maWd1cmF0aW9uc1wqLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkpIHsNCgkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmaWxlLkZ1bGxOYW1lDQp9DQoNCiMgTG9hZCBUYWIgRXhwYW5zaW9uDQpmb3JlYWNoICgkZmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcdGVwcFwqLnRlcHAucHMxIiAtRXJyb3JBY3Rpb24gSWdub3JlKSkgew0KCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJGZpbGUuRnVsbE5hbWUNCn0NCg0KIyBMb2FkIFRhYiBFeHBhbnNpb24gQXNzaWdubWVudA0KLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcdGVwcFxhc3NpZ25tZW50LnBzMSINCg0KIyBMb2FkIExpY2Vuc2UNCi4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggIiRNb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNcbGljZW5zZS5wczEiAQloAQAACWkBAAAGagEAAA5wb3N0aW1wb3J0LnBzMQZrAQAAH2ludGVybmFsXHNjcmlwdHNccG9zdGltcG9ydC5wczEJQgAAAAltAQAACW4BAAABNQEAAC8AAAAGbwEAAD8jIEFkZCBhbGwgdGhpbmdzIHlvdSB3YW50IHRvIHJ1biBiZWZvcmUgaW1wb3J0aW5nIHRoZSBtYWluIGNvZGUBCXABAAAJcQEAAAZyAQAADXByZWltcG9ydC5wczEGcwEAAB5pbnRlcm5hbFxzY3JpcHRzXHByZWltcG9ydC5wczEJQgAAAAl1AQAACXYBAAABNgEAAC8AAAAGdwEAAHE8Iw0KIyBFeGFtcGxlOg0KUmVnaXN0ZXItUFNGVGVwcEFyZ3VtZW50Q29tcGxldGVyIC1Db21tYW5kIEdldC1BbGNvaG9sIC1QYXJhbWV0ZXIgVHlwZSAtTmFtZSDDvm5hbWXDvi5hbGNvaG9sDQojPgEJeAEAAAl5AQAABnoBAAAOYXNzaWdubWVudC5wczEGewEAABxpbnRlcm5hbFx0ZXBwXGFzc2lnbm1lbnQucHMxCUIAAAAJfQEAAAl+AQAAATcBAAAvAAAABn8BAACjATwjDQojIEV4YW1wbGU6DQpSZWdpc3Rlci1QU0ZUZXBwU2NyaXB0YmxvY2sgLU5hbWUgIsO+bmFtZcO+LmFsY29ob2wiIC1TY3JpcHRCbG9jayB7ICdCZWVyJywnTWVhZCcsJ1doaXNrZXknLCdXaW5lJywnVm9ka2EnLCdSdW0gKDN5KScsICdSdW0gKDV5KScsICdSdW0gKDd5KScgfQ0KIz4BCYABAAAJgQEAAAaCAQAAEGV4YW1wbGUudGVwcC5wczEGgwEAAB5pbnRlcm5hbFx0ZXBwXGV4YW1wbGUudGVwcC5wczEJQgAAAAmFAQAACYYBAAABOAEAAC8AAAAGhwEAAL4HIyBUYWIgRXhwYW5zaW9uDQoNCiMjIERlc2NyaXB0aW9uDQoNCk1vZGVybiBUYWIgRXhwYW5zaW9uIHdhcyBvcGVuZWQgdG8gdXNlcnMgd2l0aCB0aGUgbW9kdWxlIGBUYWIgRXhwYW5zaW9uIFBsdXMgUGx1c2AgKFRFUFApLg0KDQpJdCBhbGxvd3MgeW91IHRvIGRlZmluZSwgd2hhdCBvcHRpb25zIGEgdXNlciBpcyBvZmZlcmVkIHdoZW4gdGFiYmluZyB0aHJvdWdoIGlucHV0IG9wdGlvbnMuIFRoaXMgY2FuIHNhdmUgYSBsb3Qgb2YgdGltZSBmb3IgdGhlIHVzZXIgYW5kIGlzIGNvbnNpZGVyZWQgYSBrZXkgZWxlbWVudCBpbiB1c2VyIGV4cGVyaWVuY2UuDQoNClRoZSBgUFNGcmFtZXdvcmtgIG9mZmVycyBhIHNpbXBsaWZpZWQgd2F5IG9mIG9mZmVyaW5nIGp1c3QgdGhpcywgYXMgdGhlIHR3byBleGFtcGxlIGZpbGVzIHNob3cuDQoNCiMjIENvbmNlcHQNCg0KQ3VzdG9tIHRhYiBjb21wbGV0aW9uIGlzIGRlZmluZWQgaW4gdHdvIHN0ZXBzOg0KDQogLSBEZWZpbmUgYSBzY3JpcHRibG9jayB0aGF0IGlzIHJ1biB3aGVuIHRoZSB1c2VyIGhpdHMgYFRBQmAgYW5kIHByb3ZpZGVzIHRoZSBzdHJpbmdzIHRoYXQgYXJlIGhpcyBvcHRpb25zLg0KIC0gQXNzaWduIHRoYXQgc2NyaXB0YmxvY2sgdG8gdGhlIHBhcmFtZXRlciBvZiBhIGNvbW1hbmQuIFlvdSBjYW4gYXNzaWduIHRoZSBzYW1lIHNjcmlwdGJsb2NrIG11bHRpcGxlIHRpbWVzLg0KDQojIyBTdHJ1Y3R1cmUNCg0KSW1wb3J0IG9yZGVyIG1hdHRlcnMuIEluIG9yZGVyIHRvIG1ha2UgdGhpbmdzIHdvcmsgd2l0aCB0aGUgZGVmYXVsdCBzY2FmZm9sZCwgZm9sbG93IHRob3NlIHJ1bGVzOg0KDQogLSBBbGwgc2NyaXB0ZmlsZXMgX2RlZmluaW5nXyBjb21wbGV0aW9uIHNjcmlwdGJsb2NrcyBsaWtlIHRoaXM6IGAqLnRlcHAucHMxYA0KIC0gUHV0IGFsbCB5b3VyIGNvbXBsZXRpb24gYXNzaWdubWVudHMgaW4gYGFzc2lnbm1lbnQucHMxYAEJiAEAAAmJAQAABooBAAAJcmVhZG1lLm1kBosBAAAXaW50ZXJuYWxcdGVwcFxyZWFkbWUubWQJQgAAAAmNAQAACY4BAAABOQEAAC8AAAAGjwEAANUBIyBEZXNjcmlwdGlvbg0KDQpUaGlzIGlzIHdoZXJlIHRoZSBmdW5jdGlvbiB0ZXN0cyBnby4NCg0KTWFrZSBzdXJlIHRvIHB1dCB0aGVtIGluIGZvbGRlcnMgcmVmbGVjdGluZyB0aGUgYWN0dWFsIG1vZHVsZSBzdHJ1Y3R1cmUuDQoNCkl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGludGVybmFsIGFuZCBwdWJsaWMgZnVuY3Rpb25zIGhlcmUuAQmQAQAACZEBAAAGkgEAAAlyZWFkbWUubWQGkwEAABl0ZXN0c1xmdW5jdGlvbnNccmVhZG1lLm1kCUIAAAAJlQEAAAmWAQAAAToBAAAvAAAABpcBAADMBCMgTGlzdCBvZiBmb3JiaWRkZW4gY29tbWFuZHMNCiRnbG9iYWw6QmFubmVkQ29tbWFuZHMgPSBAKA0KCSdXcml0ZS1Ib3N0JywNCgknV3JpdGUtVmVyYm9zZScsDQoJJ1dyaXRlLVdhcm5pbmcnLA0KCSdXcml0ZS1FcnJvcicsDQoJJ1dyaXRlLU91dHB1dCcsDQoJJ1dyaXRlLUluZm9ybWF0aW9uJywNCgknV3JpdGUtRGVidWcnDQopDQoNCjwjDQoJQ29udGFpbnMgbGlzdCBvZiBleGNlcHRpb25zIGZvciBiYW5uZWQgY21kbGV0cy4NCglJbnNlcnQgdGhlIGZpbGUgbmFtZXMgb2YgZmlsZXMgdGhhdCBtYXkgY29udGFpbiB0aGVtLg0KCQ0KCUV4YW1wbGU6DQoJIldyaXRlLUhvc3QiICA9IEAoJ1dyaXRlLVBTRkhvc3RDb2xvci5wczEnLCdXcml0ZS1QU0ZNZXNzYWdlLnBzMScpDQojPg0KJGdsb2JhbDpNYXlDb250YWluQ29tbWFuZCA9IEB7DQoJIldyaXRlLUhvc3QiICA9IEAoKQ0KCSJXcml0ZS1WZXJib3NlIiA9IEAoKQ0KCSJXcml0ZS1XYXJuaW5nIiA9IEAoKQ0KCSJXcml0ZS1FcnJvciIgID0gQCgpDQoJIldyaXRlLU91dHB1dCIgPSBAKCkNCgkiV3JpdGUtSW5mb3JtYXRpb24iID0gQCgpDQoJIldyaXRlLURlYnVnIiA9IEAoKQ0KfQEJmAEAAAmZAQAABpoBAAAcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMQabAQAAKnRlc3RzXGdlbmVyYWxcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMQlCAAAACZ0BAAAJngEAAAE7AQAALwAAAAafAQAArBYkbW9kdWxlUm9vdCA9IChSZXNvbHZlLVBhdGggIiRQU1NjcmlwdFJvb3RcLi5cLi4iKS5QYXRoDQoNCi4gIiRQU1NjcmlwdFJvb3RcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMSINCg0KZnVuY3Rpb24gR2V0LUZpbGVFbmNvZGluZw0Kew0KPCMNCgkuU1lOT1BTSVMNCgkJVGVzdHMgYSBmaWxlIGZvciBlbmNvZGluZy4NCgkNCgkuREVTQ1JJUFRJT04NCgkJVGVzdHMgYSBmaWxlIGZvciBlbmNvZGluZy4NCgkNCgkuUEFSQU1FVEVSIFBhdGgNCgkJVGhlIGZpbGUgdG8gdGVzdA0KIz4NCglbQ21kbGV0QmluZGluZygpXQ0KCVBhcmFtICgNCgkJW1BhcmFtZXRlcihNYW5kYXRvcnkgPSAkVHJ1ZSwgVmFsdWVGcm9tUGlwZWxpbmVCeVByb3BlcnR5TmFtZSA9ICRUcnVlKV0NCgkJW0FsaWFzKCdGdWxsTmFtZScpXQ0KCQlbc3RyaW5nXQ0KCQkkUGF0aA0KCSkNCgkNCglbYnl0ZVtdXSRieXRlID0gZ2V0LWNvbnRlbnQgLUVuY29kaW5nIGJ5dGUgLVJlYWRDb3VudCA0IC1Ub3RhbENvdW50IDQgLVBhdGggJFBhdGgNCgkNCglpZiAoJGJ5dGVbMF0gLWVxIDB4ZWYgLWFuZCAkYnl0ZVsxXSAtZXEgMHhiYiAtYW5kICRieXRlWzJdIC1lcSAweGJmKSB7ICdVVEY4JyB9DQoJZWxzZWlmICgkYnl0ZVswXSAtZXEgMHhmZSAtYW5kICRieXRlWzFdIC1lcSAweGZmKSB7ICdVbmljb2RlJyB9DQoJZWxzZWlmICgkYnl0ZVswXSAtZXEgMCAtYW5kICRieXRlWzFdIC1lcSAwIC1hbmQgJGJ5dGVbMl0gLWVxIDB4ZmUgLWFuZCAkYnl0ZVszXSAtZXEgMHhmZikgeyAnVVRGMzInIH0NCgllbHNlaWYgKCRieXRlWzBdIC1lcSAweDJiIC1hbmQgJGJ5dGVbMV0gLWVxIDB4MmYgLWFuZCAkYnl0ZVsyXSAtZXEgMHg3NikgeyAnVVRGNycgfQ0KCWVsc2UgeyAnVW5rbm93bicgfQ0KfQ0KDQpEZXNjcmliZSAiVmVyaWZ5aW5nIGludGVncml0eSBvZiBtb2R1bGUgZmlsZXMiIHsNCglDb250ZXh0ICJWYWxpZGF0aW5nIFBTMSBTY3JpcHQgZmlsZXMiIHsNCgkJJGFsbEZpbGVzID0gR2V0LUNoaWxkSXRlbSAtUGF0aCAkbW9kdWxlUm9vdCAtUmVjdXJzZSAtRmlsdGVyICIqLnBzMSIgfCBXaGVyZS1PYmplY3QgRnVsbE5hbWUgLU5vdExpa2UgIiRtb2R1bGVSb290XHRlc3RzXCoiDQoJCQ0KCQlmb3JlYWNoICgkZmlsZSBpbiAkYWxsRmlsZXMpDQoJCXsNCgkJCSRuYW1lID0gJGZpbGUuRnVsbE5hbWUuUmVwbGFjZSgiJG1vZHVsZVJvb3RcIiwgJycpDQoJCQkNCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIFVURjggZW5jb2RpbmciIHsNCgkJCQlHZXQtRmlsZUVuY29kaW5nIC1QYXRoICRmaWxlLkZ1bGxOYW1lIHwgU2hvdWxkIC1CZSAnVVRGOCcNCgkJCX0NCgkJCQ0KCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgbm8gdHJhaWxpbmcgc3BhY2UiIHsNCgkJCQkoJGZpbGUgfCBTZWxlY3QtU3RyaW5nICJccyQiIHwgV2hlcmUtT2JqZWN0IHsgJF8uTGluZS5UcmltKCkuTGVuZ3RoIC1ndCAwfSkuTGluZU51bWJlciB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQkJfQ0KCQkJDQoJCQkkdG9rZW5zID0gJG51bGwNCgkJCSRwYXJzZUVycm9ycyA9ICRudWxsDQoJCQkkYXN0ID0gW1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uTGFuZ3VhZ2UuUGFyc2VyXTo6UGFyc2VGaWxlKCRmaWxlLkZ1bGxOYW1lLCBbcmVmXSR0b2tlbnMsIFtyZWZdJHBhcnNlRXJyb3JzKQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyBzeW50YXggZXJyb3JzIiB7DQoJCQkJJHBhcnNlRXJyb3JzIHwgU2hvdWxkIEJlICROdWxsDQoJCQl9DQoJCQkNCgkJCWZvcmVhY2ggKCRjb21tYW5kIGluICRnbG9iYWw6QmFubmVkQ29tbWFuZHMpDQoJCQl7DQoJCQkJaWYgKCRnbG9iYWw6TWF5Q29udGFpbkNvbW1hbmRbIiRjb21tYW5kIl0gLW5vdGNvbnRhaW5zICRmaWxlLk5hbWUpDQoJCQkJew0KCQkJCQlJdCAiWyRuYW1lXSBTaG91bGQgbm90IHVzZSAkY29tbWFuZCIgew0KCQkJCQkJJHRva2VucyB8IFdoZXJlLU9iamVjdCBUZXh0IC1FUSAkY29tbWFuZCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgbm90IGNvbnRhaW4gYWxpYXNlcyIgew0KCQkJCSR0b2tlbnMgfCBXaGVyZS1PYmplY3QgVG9rZW5GbGFncyAtZXEgQ29tbWFuZE5hbWUgfCBXaGVyZS1PYmplY3QgeyBUZXN0LVBhdGggImFsaWFzOlwkKCRfLlRleHQpIiB9IHwgTWVhc3VyZS1PYmplY3QgfCBTZWxlY3QtT2JqZWN0IC1FeHBhbmRQcm9wZXJ0eSBDb3VudCB8IFNob3VsZCAtQmUgMA0KCQkJfQ0KCQl9DQoJfQ0KCQ0KCUNvbnRleHQgIlZhbGlkYXRpbmcgaGVscC50eHQgaGVscCBmaWxlcyIgew0KCQkkYWxsRmlsZXMgPSBHZXQtQ2hpbGRJdGVtIC1QYXRoICRtb2R1bGVSb290IC1SZWN1cnNlIC1GaWx0ZXIgIiouaGVscC50eHQiIHwgV2hlcmUtT2JqZWN0IEZ1bGxOYW1lIC1Ob3RMaWtlICIkbW9kdWxlUm9vdFx0ZXN0c1wqIg0KCQkNCgkJZm9yZWFjaCAoJGZpbGUgaW4gJGFsbEZpbGVzKQ0KCQl7DQoJCQkkbmFtZSA9ICRmaWxlLkZ1bGxOYW1lLlJlcGxhY2UoIiRtb2R1bGVSb290XCIsICcnKQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBVVEY4IGVuY29kaW5nIiB7DQoJCQkJR2V0LUZpbGVFbmNvZGluZyAtUGF0aCAkZmlsZS5GdWxsTmFtZSB8IFNob3VsZCAtQmUgJ1VURjgnDQoJCQl9DQoJCQkNCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIG5vIHRyYWlsaW5nIHNwYWNlIiB7DQoJCQkJKCRmaWxlIHwgU2VsZWN0LVN0cmluZyAiXHMkIiB8IFdoZXJlLU9iamVjdCB7ICRfLkxpbmUuVHJpbSgpLkxlbmd0aCAtZ3QgMCB9IHwgTWVhc3VyZS1PYmplY3QpLkNvdW50IHwgU2hvdWxkIC1CZSAwDQoJCQl9DQoJCX0NCgl9DQp9AQmgAQAACaEBAAAGogEAABdGaWxlSW50ZWdyaXR5LlRlc3RzLnBzMQajAQAAJXRlc3RzXGdlbmVyYWxcRmlsZUludGVncml0eS5UZXN0cy5wczEJQgAAAAmlAQAACaYBAAABPAEAAC8AAAAGpwEAAJ0FIyBMaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkDQokZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zID0gQCgNCiAgICANCikNCg0KPCMNCiAgTGlzdCBvZiBhcnJheWVkIGVudW1lcmF0aW9ucy4gVGhlc2UgbmVlZCB0byBiZSB0cmVhdGVkIGRpZmZlcmVudGx5LiBBZGQgZnVsbCBuYW1lLg0KICBFeGFtcGxlOg0KDQogICJTcWxjb2xsYWJvcmF0aXZlLkRiYXRvb2xzLkNvbm5lY3Rpb24uTWFuYWdlbWVudENvbm5lY3Rpb25UeXBlW10iDQojPg0KJGdsb2JhbDpIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMgPSBAKA0KCQ0KKQ0KDQo8Iw0KICBTb21lIHR5cGVzIG9uIHBhcmFtZXRlcnMganVzdCBmYWlsIHRoZWlyIHZhbGlkYXRpb24gbm8gbWF0dGVyIHdoYXQuDQogIEZvciB0aG9zZSBpdCBiZWNvbWVzIHBvc3NpYmxlIHRvIHNraXAgdGhlbSwgYnkgYWRkaW5nIHRoZW0gdG8gdGhpcyBoYXNodGFibGUuDQogIEFkZCBieSBmb2xsb3dpbmcgdGhpcyBjb252ZW50aW9uOiA8Y29tbWFuZCBuYW1lPiA9IEAoPGxpc3Qgb2YgcGFyYW1ldGVyIG5hbWVzPikNCiAgRXhhbXBsZToNCg0KICAiR2V0LURiYUNtT2JqZWN0IiAgICAgICA9IEAoIkRvTm90VXNlIikNCiM+DQokZ2xvYmFsOkhlbHBUZXN0U2tpcFBhcmFtZXRlclR5cGUgPSBAew0KICAgIA0KfQ0KAQmoAQAACakBAAAGqgEAABNIZWxwLkV4Y2VwdGlvbnMucHMxBqsBAAAhdGVzdHNcZ2VuZXJhbFxIZWxwLkV4Y2VwdGlvbnMucHMxCUIAAAAJrQEAAAmuAQAAAT0BAAAvAAAABq8BAAD/RTwjDQogICAgLk5PVEVTDQogICAgICAgIFRoZSBvcmlnaW5hbCB0ZXN0IHRoaXMgaXMgYmFzZWQgdXBvbiB3YXMgd3JpdHRlbiBieSBKdW5lIEJsZW5kZXIuDQoJCUFmdGVyIHNldmVyYWwgcm91bmRzIG9mIG1vZGlmaWNhdGlvbnMgaXQgc3RhbmRzIG5vdyBhcyBpdCBpcywgYnV0IHRoZSBob25vciByZW1haW5zIGhlcnMuDQoNCgkJVGhhbmsgeW91IEp1bmUsIGZvciBhbGwgeW91IGhhdmUgZG9uZSENCg0KICAgIC5ERVNDUklQVElPTg0KCQlUaGlzIHRlc3QgZXZhbHVhdGVzIHRoZSBoZWxwIGZvciBhbGwgY29tbWFuZHMgaW4gYSBtb2R1bGUuDQoNCgkuUEFSQU1FVEVSIFNraXBUZXN0DQoJCURpc2FibGVzIHRoaXMgdGVzdC4NCgkNCgkuUEFSQU1FVEVSIENvbW1hbmRQYXRoDQoJCUxpc3Qgb2YgcGF0aHMgdW5kZXIgd2hpY2ggdGhlIHNjcmlwdCBmaWxlcyBhcmUgc3RvcmVkLg0KCQlUaGlzIHRlc3QgYXNzdW1lcyB0aGF0IGFsbCBmdW5jdGlvbnMgaGF2ZSB0aGVpciBvd24gZmlsZSB0aGF0IGlzIG5hbWVkIGFmdGVyIHRoZW1zZWx2ZXMuDQoJCVRoZXNlIHBhdGhzIGFyZSB1c2VkIHRvIHNlYXJjaCBmb3IgY29tbWFuZHMgdGhhdCBzaG91bGQgZXhpc3QgYW5kIGJlIHRlc3RlZC4NCgkJV2lsbCBzZWFyY2ggcmVjdXJzaXZlbHkgYW5kIGFjY2VwdHMgd2lsZGNhcmRzLCBtYWtlIHN1cmUgb25seSBmdW5jdGlvbnMgYXJlIGZvdW5kDQoNCgkuUEFSQU1FVEVSIE1vZHVsZU5hbWUNCgkJTmFtZSBvZiB0aGUgbW9kdWxlIHRvIGJlIHRlc3RlZC4NCgkJVGhlIG1vZHVsZSBtdXN0IGFscmVhZHkgYmUgaW1wb3J0ZWQNCg0KCS5QQVJBTUVURVIgRXhjZXB0aW9uc0ZpbGUNCgkJRmlsZSBpbiB3aGljaCBleGNlcHRpb25zIGFuZCBhZGp1c3RtZW50cyBhcmUgY29uZmlndXJlZC4NCgkJSW4gaXQgdGhlcmUgc2hvdWxkIGJlIHR3byBhcnJheXMgYW5kIGEgaGFzaHRhYmxlIGRlZmluZWQ6DQoJCQkkZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zDQoJCQkkZ2xvYmFsOkhlbHBUZXN0RW51bWVyYXRlZEFycmF5cw0KCQkJJGdsb2JhbDpIZWxwVGVzdFNraXBQYXJhbWV0ZXJUeXBlDQoJCVRoZXNlIGNhbiBiZSB1c2VkIHRvIHR3ZWFrIHRoZSB0ZXN0cyBzbGlnaHRseSBpbiBjYXNlcyBvZiBuZWVkLg0KCQlTZWUgdGhlIGV4YW1wbGUgZmlsZSBmb3IgZXhwbGFuYXRpb25zIG9uIGVhY2ggb2YgdGhlc2UgdXNhZ2UgYW5kIGVmZmVjdC4NCiM+DQpbQ21kbGV0QmluZGluZygpXQ0KUGFyYW0gKA0KCVtzd2l0Y2hdDQoJJFNraXBUZXN0LA0KCQ0KCVtzdHJpbmdbXV0NCgkkQ29tbWFuZFBhdGggPSBAKCIkUFNTY3JpcHRSb290XC4uXC4uXGZ1bmN0aW9ucyIsICIkUFNTY3JpcHRSb290XC4uXC4uXGludGVybmFsXGZ1bmN0aW9ucyIpLA0KCQ0KCVtzdHJpbmddDQoJJE1vZHVsZU5hbWUgPSAiw75uYW1lw74iLA0KCQ0KCVtzdHJpbmddDQoJJEV4Y2VwdGlvbnNGaWxlID0gIiRQU1NjcmlwdFJvb3RcSGVscC5FeGNlcHRpb25zLnBzMSINCikNCmlmICgkU2tpcFRlc3QpIHsgcmV0dXJuIH0NCi4gJEV4Y2VwdGlvbnNGaWxlDQoNCiRpbmNsdWRlZE5hbWVzID0gKEdldC1DaGlsZEl0ZW0gJENvbW1hbmRQYXRoIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIikuQmFzZU5hbWUNCiRjb21tYW5kcyA9IEdldC1Db21tYW5kIC1Nb2R1bGUgKEdldC1Nb2R1bGUgJE1vZHVsZU5hbWUpIC1Db21tYW5kVHlwZSBDbWRsZXQsIEZ1bmN0aW9uLCBXb3JrZmxvdyB8IFdoZXJlLU9iamVjdCBOYW1lIC1pbiAkaW5jbHVkZWROYW1lcw0KDQojIyBXaGVuIHRlc3RpbmcgaGVscCwgcmVtZW1iZXIgdGhhdCBoZWxwIGlzIGNhY2hlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggc2Vzc2lvbi4NCiMjIFRvIHRlc3QsIHJlc3RhcnQgc2Vzc2lvbi4NCg0KDQpmb3JlYWNoICgkY29tbWFuZCBpbiAkY29tbWFuZHMpIHsNCiAgICAkY29tbWFuZE5hbWUgPSAkY29tbWFuZC5OYW1lDQogICAgDQogICAgIyBTa2lwIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgb24gdGhlIGV4Y2x1c2lvbnMgbGlzdA0KICAgIGlmICgkZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zIC1jb250YWlucyAkY29tbWFuZE5hbWUpIHsgY29udGludWUgfQ0KICAgIA0KICAgICMgVGhlIG1vZHVsZS1xdWFsaWZpZWQgY29tbWFuZCBmYWlscyBvbiBNaWNyb3NvZnQuUG93ZXJTaGVsbC5BcmNoaXZlIGNtZGxldHMNCiAgICAkSGVscCA9IEdldC1IZWxwICRjb21tYW5kTmFtZSAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZQ0KICAgICR0ZXN0aGVscGVycm9ycyA9IDANCiAgICAkdGVzdGhlbHBhbGwgPSAwDQogICAgRGVzY3JpYmUgIlRlc3QgaGVscCBmb3IgJGNvbW1hbmROYW1lIiB7DQogICAgICAgIA0KICAgICAgICAkdGVzdGhlbHBhbGwgKz0gMQ0KICAgICAgICBpZiAoJEhlbHAuU3lub3BzaXMgLWxpa2UgJypgW2A8Q29tbW9uUGFyYW1ldGVyc2A+YF0qJykgew0KICAgICAgICAgICAgIyBJZiBoZWxwIGlzIG5vdCBmb3VuZCwgc3lub3BzaXMgaW4gYXV0by1nZW5lcmF0ZWQgaGVscCBpcyB0aGUgc3ludGF4IGRpYWdyYW0NCiAgICAgICAgICAgIEl0ICJzaG91bGQgbm90IGJlIGF1dG8tZ2VuZXJhdGVkIiB7DQogICAgICAgICAgICAgICAgJEhlbHAuU3lub3BzaXMgfCBTaG91bGQgLU5vdCAtQmVMaWtlICcqYFtgPENvbW1vblBhcmFtZXRlcnNgPmBdKicNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0ZXN0aGVscGVycm9ycyArPSAxDQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICR0ZXN0aGVscGFsbCArPSAxDQogICAgICAgIGlmIChbU3RyaW5nXTo6SXNOdWxsT3JFbXB0eSgkSGVscC5EZXNjcmlwdGlvbi5UZXh0KSkgew0KICAgICAgICAgICAgIyBTaG91bGQgYmUgYSBkZXNjcmlwdGlvbiBmb3IgZXZlcnkgZnVuY3Rpb24NCiAgICAgICAgICAgIEl0ICJnZXRzIGRlc2NyaXB0aW9uIGZvciAkY29tbWFuZE5hbWUiIHsNCiAgICAgICAgICAgICAgICAkSGVscC5EZXNjcmlwdGlvbiB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGVzdGhlbHBlcnJvcnMgKz0gMQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAkdGVzdGhlbHBhbGwgKz0gMQ0KICAgICAgICBpZiAoW1N0cmluZ106OklzTnVsbE9yRW1wdHkoKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxKS5Db2RlKSkgew0KICAgICAgICAgICAgIyBTaG91bGQgYmUgYXQgbGVhc3Qgb25lIGV4YW1wbGUNCiAgICAgICAgICAgIEl0ICJnZXRzIGV4YW1wbGUgY29kZSBmcm9tICRjb21tYW5kTmFtZSIgew0KICAgICAgICAgICAgICAgICgkSGVscC5FeGFtcGxlcy5FeGFtcGxlIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMSkuQ29kZSB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGVzdGhlbHBlcnJvcnMgKz0gMQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAkdGVzdGhlbHBhbGwgKz0gMQ0KICAgICAgICBpZiAoW1N0cmluZ106OklzTnVsbE9yRW1wdHkoKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUuUmVtYXJrcyB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLlRleHQpKSB7DQogICAgICAgICAgICAjIFNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZXhhbXBsZSBkZXNjcmlwdGlvbg0KICAgICAgICAgICAgSXQgImdldHMgZXhhbXBsZSBoZWxwIGZyb20gJGNvbW1hbmROYW1lIiB7DQogICAgICAgICAgICAgICAgKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUuUmVtYXJrcyB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLlRleHQgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHRlc3RoZWxwZXJyb3JzICs9IDENCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgaWYgKCR0ZXN0aGVscGVycm9ycyAtZXEgMCkgew0KICAgICAgICAgICAgSXQgIlJhbiBzaWxlbnRseSAkdGVzdGhlbHBhbGwgdGVzdHMiIHsNCiAgICAgICAgICAgICAgICAkdGVzdGhlbHBlcnJvcnMgfCBTaG91bGQgLWJlIDANCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgJHRlc3RwYXJhbXNhbGwgPSAwDQogICAgICAgICR0ZXN0cGFyYW1zZXJyb3JzID0gMA0KICAgICAgICBDb250ZXh0ICJUZXN0IHBhcmFtZXRlciBoZWxwIGZvciAkY29tbWFuZE5hbWUiIHsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJENvbW1vbiA9ICdEZWJ1ZycsICdFcnJvckFjdGlvbicsICdFcnJvclZhcmlhYmxlJywgJ0luZm9ybWF0aW9uQWN0aW9uJywgJ0luZm9ybWF0aW9uVmFyaWFibGUnLCAnT3V0QnVmZmVyJywgJ091dFZhcmlhYmxlJywNCiAgICAgICAgICAgICdQaXBlbGluZVZhcmlhYmxlJywgJ1ZlcmJvc2UnLCAnV2FybmluZ0FjdGlvbicsICdXYXJuaW5nVmFyaWFibGUnDQogICAgICAgICAgICANCiAgICAgICAgICAgICRwYXJhbWV0ZXJzID0gJGNvbW1hbmQuUGFyYW1ldGVyU2V0cy5QYXJhbWV0ZXJzIHwgU29ydC1PYmplY3QgLVByb3BlcnR5IE5hbWUgLVVuaXF1ZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1ub3RpbiAkY29tbW9uDQogICAgICAgICAgICAkcGFyYW1ldGVyTmFtZXMgPSAkcGFyYW1ldGVycy5OYW1lDQogICAgICAgICAgICAkSGVscFBhcmFtZXRlck5hbWVzID0gJEhlbHAuUGFyYW1ldGVycy5QYXJhbWV0ZXIuTmFtZSB8IFNvcnQtT2JqZWN0IC1VbmlxdWUNCiAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJhbWV0ZXIgaW4gJHBhcmFtZXRlcnMpIHsNCiAgICAgICAgICAgICAgICAkcGFyYW1ldGVyTmFtZSA9ICRwYXJhbWV0ZXIuTmFtZQ0KICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJIZWxwID0gJEhlbHAucGFyYW1ldGVycy5wYXJhbWV0ZXIgfCBXaGVyZS1PYmplY3QgTmFtZSAtRVEgJHBhcmFtZXRlck5hbWUNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2FsbCArPSAxDQogICAgICAgICAgICAgICAgaWYgKFtTdHJpbmddOjpJc051bGxPckVtcHR5KCRwYXJhbWV0ZXJIZWxwLkRlc2NyaXB0aW9uLlRleHQpKSB7DQogICAgICAgICAgICAgICAgICAgICMgU2hvdWxkIGJlIGEgZGVzY3JpcHRpb24gZm9yIGV2ZXJ5IHBhcmFtZXRlcg0KICAgICAgICAgICAgICAgICAgICBJdCAiZ2V0cyBoZWxwIGZvciBwYXJhbWV0ZXI6ICRwYXJhbWV0ZXJOYW1lIDogaW4gJGNvbW1hbmROYW1lIiB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1ldGVySGVscC5EZXNjcmlwdGlvbi5UZXh0IHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2Vycm9ycyArPSAxDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICR0ZXN0cGFyYW1zYWxsICs9IDENCiAgICAgICAgICAgICAgICAkY29kZU1hbmRhdG9yeSA9ICRwYXJhbWV0ZXIuSXNNYW5kYXRvcnkudG9TdHJpbmcoKQ0KICAgICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVySGVscC5SZXF1aXJlZCAtbmUgJGNvZGVNYW5kYXRvcnkpIHsNCiAgICAgICAgICAgICAgICAgICAgIyBSZXF1aXJlZCB2YWx1ZSBpbiBIZWxwIHNob3VsZCBtYXRjaCBJc01hbmRhdG9yeSBwcm9wZXJ0eSBvZiBwYXJhbWV0ZXINCiAgICAgICAgICAgICAgICAgICAgSXQgImhlbHAgZm9yICRwYXJhbWV0ZXJOYW1lIHBhcmFtZXRlciBpbiAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgTWFuZGF0b3J5IHZhbHVlIiB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1ldGVySGVscC5SZXF1aXJlZCB8IFNob3VsZCAtQmUgJGNvZGVNYW5kYXRvcnkNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2Vycm9ycyArPSAxDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICgkSGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZVskY29tbWFuZE5hbWVdIC1jb250YWlucyAkcGFyYW1ldGVyTmFtZSkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGNvZGVUeXBlID0gJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLk5hbWUNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2FsbCArPSAxDQogICAgICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5Jc0VudW0pIHsNCiAgICAgICAgICAgICAgICAgICAgIyBFbnVtZXJhdGlvbnMgb2Z0ZW4gaGF2ZSBpc3N1ZXMgd2l0aCB0aGUgdHlwZW5hbWUgbm90IGJlaW5nIHJlbGlhYmx5IGF2YWlsYWJsZQ0KICAgICAgICAgICAgICAgICAgICAkbmFtZXMgPSAkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGU6OkdldE5hbWVzKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZSkNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlR3JvdXAucGFyYW1ldGVyVmFsdWUgLW5lICRuYW1lcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgIyBQYXJhbWV0ZXIgdHlwZSBpbiBIZWxwIHNob3VsZCBtYXRjaCBjb2RlDQogICAgICAgICAgICAgICAgICAgICAgICBJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlR3JvdXAucGFyYW1ldGVyVmFsdWUgfCBTaG91bGQgLWJlICRuYW1lcw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHRlc3RwYXJhbXNlcnJvcnMgKz0gMQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2VpZiAoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLkZ1bGxOYW1lIC1pbiAkSGVscFRlc3RFbnVtZXJhdGVkQXJyYXlzKSB7DQogICAgICAgICAgICAgICAgICAgICMgRW51bWVyYXRpb25zIG9mdGVuIGhhdmUgaXNzdWVzIHdpdGggdGhlIHR5cGVuYW1lIG5vdCBiZWluZyByZWxpYWJseSBhdmFpbGFibGUNCiAgICAgICAgICAgICAgICAgICAgJG5hbWVzID0gW0VudW1dOjpHZXROYW1lcygkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUuRGVjbGFyZWRNZW1iZXJzWzBdLlJldHVyblR5cGUpDQogICAgICAgICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZUdyb3VwLnBhcmFtZXRlclZhbHVlIC1uZSAkbmFtZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICMgUGFyYW1ldGVyIHR5cGUgaW4gSGVscCBzaG91bGQgbWF0Y2ggY29kZQ0KICAgICAgICAgICAgICAgICAgICAgICAgSXQgImhlbHAgZm9yICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBwYXJhbWV0ZXIgdHlwZSBmb3IgJHBhcmFtZXRlck5hbWUiIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZUdyb3VwLnBhcmFtZXRlclZhbHVlIHwgU2hvdWxkIC1iZSAkbmFtZXMNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICR0ZXN0cGFyYW1zZXJyb3JzICs9IDENCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgIyBUbyBhdm9pZCBjYWxsaW5nIFRyaW0gbWV0aG9kIG9uIGEgbnVsbCBvYmplY3QuDQogICAgICAgICAgICAgICAgICAgICRoZWxwVHlwZSA9IGlmICgkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZSkgeyAkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZS5UcmltKCkgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGhlbHBUeXBlIC1uZSAkY29kZVR5cGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICMgUGFyYW1ldGVyIHR5cGUgaW4gSGVscCBzaG91bGQgbWF0Y2ggY29kZQ0KICAgICAgICAgICAgICAgICAgICAgICAgSXQgImhlbHAgZm9yICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBwYXJhbWV0ZXIgdHlwZSBmb3IgJHBhcmFtZXRlck5hbWUiIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGVscFR5cGUgfCBTaG91bGQgLWJlICRjb2RlVHlwZQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHRlc3RwYXJhbXNlcnJvcnMgKz0gMQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZm9yZWFjaCAoJGhlbHBQYXJtIGluICRIZWxwUGFyYW1ldGVyTmFtZXMpIHsNCiAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2FsbCArPSAxDQogICAgICAgICAgICAgICAgaWYgKCRoZWxwUGFybSAtbm90aW4gJHBhcmFtZXRlck5hbWVzKSB7DQogICAgICAgICAgICAgICAgICAgICMgU2hvdWxkbid0IGZpbmQgZXh0cmEgcGFyYW1ldGVycyBpbiBoZWxwLg0KICAgICAgICAgICAgICAgICAgICBJdCAiZmluZHMgaGVscCBwYXJhbWV0ZXIgaW4gY29kZTogJGhlbHBQYXJtIiB7DQogICAgICAgICAgICAgICAgICAgICAgICAkaGVscFBhcm0gLWluICRwYXJhbWV0ZXJOYW1lcyB8IFNob3VsZCAtQmUgJHRydWUNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2Vycm9ycyArPSAxDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCR0ZXN0cGFyYW1zZXJyb3JzIC1lcSAwKSB7DQogICAgICAgICAgICAgICAgSXQgIlJhbiBzaWxlbnRseSAkdGVzdHBhcmFtc2FsbCB0ZXN0cyIgew0KICAgICAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2Vycm9ycyB8IFNob3VsZCAtYmUgMA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0BCbABAAAJsQEAAAayAQAADkhlbHAuVGVzdHMucHMxBrMBAAAcdGVzdHNcZ2VuZXJhbFxIZWxwLlRlc3RzLnBzMQlCAAAACbUBAAAJtgEAAAE+AQAALwAAAAa3AQAAnBBEZXNjcmliZSAiVmFsaWRhdGluZyB0aGUgbW9kdWxlIG1hbmlmZXN0IiB7DQoJJG1vZHVsZVJvb3QgPSAoUmVzb2x2ZS1QYXRoICIkUFNTY3JpcHRSb290XC4uXC4uIikuUGF0aA0KCSRtYW5pZmVzdCA9ICgoR2V0LUNvbnRlbnQgIiRtb2R1bGVSb290XMO+bmFtZcO+LnBzZDEiKSAtam9pbiAiYG4iKSB8IEludm9rZS1FeHByZXNzaW9uDQoJW3ZlcnNpb25dJG1vZHVsZVZlcnNpb24gPSBHZXQtSXRlbSAiJG1vZHVsZVJvb3Rcw75uYW1lw74ucHNtMSIgfCBTZWxlY3QtU3RyaW5nIC1QYXR0ZXJuICdcJHNjcmlwdDpNb2R1bGVWZXJzaW9uID0gIiguKj8pIicgfCBGb3JFYWNoLU9iamVjdCB7ICRfLk1hdGNoZXNbMF0uR3JvdXBzWzFdLlZhbHVlIH0NCglDb250ZXh0ICJCYXNpYyByZXNvdXJjZXMgdmFsaWRhdGlvbiIgew0KCQkkZmlsZXMgPSBHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIC1GaWx0ZXIgIioucHMxIg0KCQlJdCAiRXhwb3J0cyBhbGwgZnVuY3Rpb25zIGluIHRoZSBwdWJsaWMgZm9sZGVyIiB7DQoJCQkNCgkJCSRmdW5jdGlvbnMgPSAoQ29tcGFyZS1PYmplY3QgLVJlZmVyZW5jZU9iamVjdCAkZmlsZXMuQmFzZU5hbWUgLURpZmZlcmVuY2VPYmplY3QgJG1hbmlmZXN0LkZ1bmN0aW9uc1RvRXhwb3J0IHwgV2hlcmUtT2JqZWN0IFNpZGVJbmRpY2F0b3IgLUxpa2UgJzw9JykuSW5wdXRPYmplY3QNCgkJCSRmdW5jdGlvbnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkNCgkJfQ0KCQlJdCAiRXhwb3J0cyBubyBmdW5jdGlvbiB0aGF0IGlzbid0IGFsc28gcHJlc2VudCBpbiB0aGUgcHVibGljIGZvbGRlciIgew0KCQkJJGZ1bmN0aW9ucyA9IChDb21wYXJlLU9iamVjdCAtUmVmZXJlbmNlT2JqZWN0ICRmaWxlcy5CYXNlTmFtZSAtRGlmZmVyZW5jZU9iamVjdCAkbWFuaWZlc3QuRnVuY3Rpb25zVG9FeHBvcnQgfCBXaGVyZS1PYmplY3QgU2lkZUluZGljYXRvciAtTGlrZSAnPT4nKS5JbnB1dE9iamVjdA0KCQkJJGZ1bmN0aW9ucyB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQoJCQ0KCQlJdCAiRXhwb3J0cyBub25lIG9mIGl0cyBpbnRlcm5hbCBmdW5jdGlvbnMiIHsNCgkJCSRmaWxlcyA9IEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgLUZpbHRlciAiKi5wczEiDQoJCQkkZmlsZXMgfCBXaGVyZS1PYmplY3QgQmFzZU5hbWUgLUluICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQoJCQ0KCQlJdCAiSGFzIHRoZSBzYW1lIHZlcnNpb24gYXMgdGhlIHBzbTEgZmlsZSIgew0KCQkJKFt2ZXJzaW9uXSRtYW5pZmVzdC5Nb2R1bGVWZXJzaW9uKSB8IFNob3VsZCAtQmUgJG1vZHVsZVZlcnNpb24NCgkJfQ0KCX0NCgkNCglDb250ZXh0ICJJbmRpdmlkdWFsIGZpbGUgdmFsaWRhdGlvbiIgew0KCQlJdCAiVGhlIHJvb3QgbW9kdWxlIGZpbGUgZXhpc3RzIiB7DQoJCQlUZXN0LVBhdGggIiRtb2R1bGVSb290XCQoJG1hbmlmZXN0LlJvb3RNb2R1bGUpIiB8IFNob3VsZCAtQmUgJHRydWUNCgkJfQ0KCQkNCgkJZm9yZWFjaCAoJGZvcm1hdCBpbiAkbWFuaWZlc3QuRm9ybWF0c1RvUHJvY2VzcykNCgkJew0KCQkJSXQgIlRoZSBmaWxlICRmb3JtYXQgc2hvdWxkIGV4aXN0IiB7DQoJCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkZm9ybWF0IiB8IFNob3VsZCAtQmUgJHRydWUNCgkJCX0NCgkJfQ0KCQkNCgkJZm9yZWFjaCAoJHR5cGUgaW4gJG1hbmlmZXN0LlR5cGVzVG9Qcm9jZXNzKQ0KCQl7DQoJCQlJdCAiVGhlIGZpbGUgJHR5cGUgc2hvdWxkIGV4aXN0IiB7DQoJCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkdHlwZSIgfCBTaG91bGQgLUJlICR0cnVlDQoJCQl9DQoJCX0NCgkJDQoJCWZvcmVhY2ggKCRhc3NlbWJseSBpbiAkbWFuaWZlc3QuUmVxdWlyZWRBc3NlbWJsaWVzKQ0KCQl7DQoJCQlJdCAiVGhlIGZpbGUgJGFzc2VtYmx5IHNob3VsZCBleGlzdCIgew0KCQkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJGFzc2VtYmx5IiB8IFNob3VsZCAtQmUgJHRydWUNCgkJCX0NCgkJfQ0KCX0NCn0BCbgBAAAJuQEAAAa6AQAAEk1hbmlmZXN0LlRlc3RzLnBzMQa7AQAAIHRlc3RzXGdlbmVyYWxcTWFuaWZlc3QuVGVzdHMucHMxCUIAAAAJvQEAAAm+AQAAAT8BAAAvAAAABr8BAAD1B1tDbWRsZXRCaW5kaW5nKCldDQpQYXJhbSAoDQoJW3N3aXRjaF0NCgkkU2tpcFRlc3QsDQoJDQoJW3N0cmluZ1tdXQ0KCSRDb21tYW5kUGF0aCA9IEAoIiRQU1NjcmlwdFJvb3RcLi5cLi5cZnVuY3Rpb25zIiwgIiRQU1NjcmlwdFJvb3RcLi5cLi5caW50ZXJuYWxcZnVuY3Rpb25zIikNCikNCg0KaWYgKCRTa2lwVGVzdCkgeyByZXR1cm4gfQ0KDQokbGlzdCA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KDQpEZXNjcmliZSAnSW52b2tpbmcgUFNTY3JpcHRBbmFseXplciBhZ2FpbnN0IGNvbW1hbmRiYXNlJyB7DQoJJGNvbW1hbmRGaWxlcyA9IEdldC1DaGlsZEl0ZW0gLVBhdGggJENvbW1hbmRQYXRoIC1SZWN1cnNlIC1GaWx0ZXIgIioucHMxIg0KCSRzY3JpcHRBbmFseXplclJ1bGVzID0gR2V0LVNjcmlwdEFuYWx5emVyUnVsZQ0KCQ0KCWZvcmVhY2ggKCRmaWxlIGluICRjb21tYW5kRmlsZXMpDQoJew0KCQlDb250ZXh0ICJBbmFseXppbmcgJCgkZmlsZS5CYXNlTmFtZSkiIHsNCgkJCSRhbmFseXNpcyA9IEludm9rZS1TY3JpcHRBbmFseXplciAtUGF0aCAkZmlsZS5GdWxsTmFtZSAtRXhjbHVkZVJ1bGUgUFNBdm9pZFRyYWlsaW5n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</BA>
    </MS>
  </Obj>
</Objs>