<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>21010</bug_id>
          
          <creation_ts>2008-09-22 16:16:44 -0700</creation_ts>
          <short_desc>WebKit needs C++ Unit tests</short_desc>
          <delta_ts>2011-04-24 14:21:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>58507</dependson>
    
    <dependson>58509</dependson>
          <blocked>55853</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>levin</cc>
    
    <cc>mbelshe</cc>
    
    <cc>mjs</cc>
    
    <cc>mrowe</cc>
    
    <cc>playmobil</cc>
    
    <cc>yutak</cc>
    
    <cc>yuzo</cc>
    
    <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>92233</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-22 16:16:44 -0700</bug_when>
    <thetext>WebKit needs C++ Unit tests

Maybe Google&apos;s gtest framework?  That&apos;s what Chrome uses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92234</commentid>
    <comment_count>1</comment_count>
      <attachid>23679</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-22 16:17:20 -0700</bug_when>
    <thetext>Created attachment 23679
First stab @ unit tests

 WebCore/WebCore.base.exp                  |    6 +
 WebCore/WebCore.xcodeproj/project.pbxproj |  145 ++++++++++++++++++++++++++++-
 2 files changed, 150 insertions(+), 1 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92235</commentid>
    <comment_count>2</comment_count>
      <attachid>23679</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-22 16:18:54 -0700</bug_when>
    <thetext>Comment on attachment 23679
First stab @ unit tests

This is just a hack, was not meant for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92236</commentid>
    <comment_count>3</comment_count>
      <attachid>23680</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-22 16:19:31 -0700</bug_when>
    <thetext>Created attachment 23680
First stab @ unit tests

 WebCore/WebCore.base.exp                           |    6 +
 WebCore/WebCore.xcodeproj/project.pbxproj          |  145 +++++++++++++++++++-
 .../platform/text/RegularExpressionUnitTests.cpp   |   85 ++++++++++++
 3 files changed, 235 insertions(+), 1 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92238</commentid>
    <comment_count>4</comment_count>
      <attachid>23679</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-09-22 16:23:46 -0700</bug_when>
    <thetext>Comment on attachment 23679
First stab @ unit tests

All of the configuration settings below XCBuildConfiguration should live in an .xcconfig file within WebCore/Configurations/, rather than inline in the project file.  While doing this, you&apos;ll probably notice that you appear to have some oddly duplicated entries in FRAMEWORK_SEARCH_PATH, as well as having some settings specified that probably shouldn&apos;t be (GCC_ENABLE_FIX_AND_CONTINUE, GCC_ENABLE_CPP_RTTI).

Why do you need to export WTF-related symbols from WebCore?  These symbols are already exported from JavaScriptCore, so this seems unnecessary.

I&apos;d personally prefer to see unit tests that don&apos;t have a dependency on an external framework, so that they can work out of the box without extra work on behalf of the developer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92317</commentid>
    <comment_count>5</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-23 04:38:05 -0700</bug_when>
    <thetext>This patch has some possible licensing issues. Is the LICENSE file included in our tree? Shouldn&apos;t we just put the BSD license in the source files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115580</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-27 11:43:14 -0700</bug_when>
    <thetext>I&apos;ve been thinking about this further.  My current work refactoring work in editing would be helped greatly by being able to unit test the classes I&apos;m re-working.

Thinking through general design issues:

1.  Unit tests should work in Debug builds, but need not work in Release builds.  (This allows us to depend on debug-only functionality).

2.  I don&apos;t think we want to re-invent the wheel.  I&apos;m not familiar with all c++ testing frameworks, but there seem to be numerous (CPlusTest ships w/ OSX, gunit is what Google uses for everything, I know there are others).  The simple functionality is easy, but there are lots of bells and whistles w/ other&apos;s approaches.

3.  Unit tests should be built as part of the normal process (or even if the tests aren&apos;t built as part of a normal build, building the tests should not require a special build of WebCore/JSC, etc.)


To satisfy goal 3, I can see two solutions:
1.  If unit test code is built outside of WebCore then WebCore Debug builds will need to expose some extra symbols for the unit tests.
2.  If unit tests are built inside WebCore, a single symbol (runTests()) needs to be exported, and all the unit test code will need to be guarded in !NDEBUG #ifdefs to prevent it from getting built into a Release/Production binary.  This approach could directly conflict with goal 2 above (not re-inventing the wheel), as this would require linking in a bunch of 3rd-party code into WebCore debug builds which could be undesirable.

I&apos;d be interested to hear other&apos;s thoughts.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23679</attachid>
            <date>2008-09-22 16:17:20 -0700</date>
            <delta_ts>2008-09-22 22:52:43 -0700</delta_ts>
            <desc>First stab @ unit tests</desc>
            <filename>First-stab-unit-tests.patch</filename>
            <type>text/plain</type>
            <size>16004</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MGIzMTllYWUzMWEzOTQ3OTk3M2Y0YmRjMjJjN2Q0OTBmNTE1M2NkYwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLmJhc2UuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCmluZGV4IDc3
NTkxZTMuLjVkZjQ1MDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAorKysg
Yi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKQEAgLTEsMyArMSw5IEBACitfX1pON1dlYkNvcmUx
N1JlZ3VsYXJFeHByZXNzaW9uQzFFUktOU182U3RyaW5nRWIKK19fWk4zV1RGOGZhc3RGcmVlRVB2
CitfX1pOSzdXZWJDb3JlMTdSZWd1bGFyRXhwcmVzc2lvbjVtYXRjaEVSS05TXzZTdHJpbmdFaVBp
CitfX1pON1dlYkNvcmUxN1JlZ3VsYXJFeHByZXNzaW9uRDFFdgorX1dURlJlcG9ydEFzc2VydGlv
bkZhaWx1cmUKK19fWk4zV1RGMTBmYXN0TWFsbG9jRW0KIC5vYmpjX2NsYXNzX25hbWVfRE9NQWJz
dHJhY3RWaWV3CiAub2JqY19jbGFzc19uYW1lX0RPTUF0dHIKIC5vYmpjX2NsYXNzX25hbWVfRE9N
Q0RBVEFTZWN0aW9uCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGU4NmJiYjYuLmEyNDA2NGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0yMjUzLDEyICsyMjUzLDE2IEBACiAJCUE4NEVCRDc4MENCOEM4OTIwMDA3
OTYwOSAvKiBKU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NEVCRDc3MENCOEM4OTIwMDA3OTYwOSAvKiBKU1N0
eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQTg0RUJEODMwQ0I4Qzk3NzAwMDc5NjA5
IC8qIEpTU3R5bGVTaGVldExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4NEVCRDgxMENCOEM5NzcwMDA3OTYwOSAvKiBKU1N0eWxlU2hlZXRMaXN0
LmggKi87IH07CiAJCUE4NEVCRDg0MENCOEM5NzcwMDA3OTYwOSAvKiBKU1N0eWxlU2hlZXRMaXN0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NEVC
RDgyMENCOEM5NzcwMDA3OTYwOSAvKiBKU1N0eWxlU2hlZXRMaXN0LmNwcCAqLzsgfTsKKwkJQTg0
RjY3MDAwRTg0NjlGNzAwQzg5RkJFIC8qIFdlYktpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODRGNjZGRjBFODQ2OUY3MDBDODlG
QkUgLyogV2ViS2l0LmZyYW1ld29yayAqLzsgfTsKKwkJQTg0RjY4QTcwRTg0NkMzNzAwQzg5RkJF
IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY4MjE2Mjk5MDI5RjRGQjUwMTAwMDEzMSAvKiBKYXZhU2Ny
aXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CiAJCUE4NjYyOUNGMDlEQTJCNDcwMDk2MzNBNSAvKiBK
U1VJRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4NjYyOUM5MDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuaCAqLzsgfTsKIAkJQTg2NjI5
RDAwOURBMkI0ODAwOTYzM0E1IC8qIEpTVUlFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODY2MjlDQTA5REEyQjQ3MDA5NjMzQTUgLyogSlNV
SUV2ZW50LmNwcCAqLzsgfTsKIAkJQTg2NjI5RDEwOURBMkI0ODAwOTYzM0E1IC8qIEpTTW91c2VF
dmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg2
NjI5Q0IwOURBMkI0NzAwOTYzM0E1IC8qIEpTTW91c2VFdmVudC5oICovOyB9OwogCQlBODY2MjlE
MjA5REEyQjQ4MDA5NjMzQTUgLyogSlNNb3VzZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NjYyOUNDMDlEQTJCNDcwMDk2MzNBNSAvKiBK
U01vdXNlRXZlbnQuY3BwICovOyB9OwogCQlBODY2MjlEMzA5REEyQjQ4MDA5NjMzQTUgLyogSlNL
ZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODY2MjlDRDA5REEyQjQ3MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2ZW50LmggKi87IH07
CiAJCUE4NjYyOUQ0MDlEQTJCNDgwMDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg2NjI5Q0UwOURBMkI0
NzAwOTYzM0E1IC8qIEpTS2V5Ym9hcmRFdmVudC5jcHAgKi87IH07CisJCUE4NkQyRkE3MEU4MzNE
NDgwMDBCQzM5NSAvKiBndGVzdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODZEMkZBNjBFODMzRDQ4MDAwQkMzOTUgLyogZ3Rlc3Qu
ZnJhbWV3b3JrICovOyB9OworCQlBODZEMkZBRTBFODMzREQ2MDAwQkMzOTUgLyogUmVndWxhckV4
cHJlc3Npb25Vbml0VGVzdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTg2RDJGQUQwRTgzM0RENjAwMEJDMzk1IC8qIFJlZ3VsYXJFeHByZXNzaW9u
VW5pdFRlc3RzLmNwcCAqLzsgfTsKIAkJQTg3MUQ0NTYwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxQ
bHVnSW5FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODcxRDQ0QzBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTFBsdWdJbkVsZW1lbnQuaCAqLzsg
fTsKIAkJQTg3MUQ0NTcwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxQbHVnSW5FbGVtZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzFENDREMEEx
MjdDQkMwMEIxMkE2OCAvKiBIVE1MUGx1Z0luRWxlbWVudC5jcHAgKi87IH07CiAJCUE4NzFENDU4
MEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MUGFyYW1FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODcxRDQ0RTBBMTI3Q0JDMDBCMTJBNjggLyog
SFRNTFBhcmFtRWxlbWVudC5oICovOyB9OwpAQCAtNDE5Myw2ICs0MTk3LDEzIEBACiAvKiBFbmQg
UEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5
IHNlY3Rpb24gKi8KKwkJQTgyMjQ3MjIwRTg0NUFDMTAwOTQ0NTI5IC8qIFBCWENvbnRhaW5lckl0
ZW1Qcm94eSAqLyA9IHsKKwkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKKwkJCWNvbnRh
aW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAq
LzsKKwkJCXByb3h5VHlwZSA9IDE7CisJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDkzRjE5OEE1
MDgyNDVFNTkwMDFFOUFCQzsKKwkJCXJlbW90ZUluZm8gPSBXZWJDb3JlOworCQl9OwogCQlERDA0
MUZGMDA5RDlFMzI1MDAxMEFGMkEgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewogCQkJ
aXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwogCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2
OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOwpAQCAtNjY5OSw2ICs2NzEw
LDcgQEAKIAkJQTgxODcyMTgwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVkTm9kZU1hcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmFtZWROb2RlTWFwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE4MTg3MjE5MDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lTm9kZUxp
c3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hbWVOb2RlTGlz
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MTg3MjFBMDk3N0QzQzAwMDU4
MjZEOSAvKiBDaGlsZE5vZGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDaGlsZE5vZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTgyMjRFOTcwRTg0NUMwQjAwOTQ0NTI5IC8qIFdlYkNvcmVVbml0VGVzdHMueGNjb25maWcgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gV2ViQ29yZVVuaXRUZXN0cy54Y2NvbmZpZzsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgyMzlERkUwOUIzQ0Y4QTAwQjYwNjQxIC8q
IExvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvZ2dp
bmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODIzOURGRjA5QjNDRjhBMDBC
NjA2NDEgLyogTG9nZ2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9n
Z2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODI0QjQ2NDBFMkVGMkVBMDA4
MUE3QjcgLyogVGV4dFJ1bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0
UnVuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NzM2LDYgKzY3NDgsNyBAQAog
CQlBODRFQkQ3NzBDQjhDODkyMDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0eWxlU2hlZXRMaXN0Q3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg0RUJEODEwQ0I4Qzk3NzAw
MDc5NjA5IC8qIEpTU3R5bGVTaGVldExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNTdHlsZVNoZWV0TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
ODRFQkQ4MjBDQjhDOTc3MDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0eWxlU2hlZXRMaXN0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTg0RjY2RkYwRTg0NjlGNzAwQzg5RkJFIC8qIFdlYktp
dC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IFdlYktpdC5mcmFtZXdvcms7IHBhdGggPSAu
Li8uLi9idWlsZC9EZWJ1Zy9XZWJLaXQuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gU09VUkNFX1JP
T1Q7IH07CiAJCUE4NUQ3QTJGMDg3OUVCQTkwMDZBOTE3MiAvKiBRdWFydHpDb3JlLmZyYW1ld29y
ayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBw
ZXIuZnJhbWV3b3JrOyBuYW1lID0gUXVhcnR6Q29yZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVt
L0xpYnJhcnkvRnJhbWV3b3Jrcy9RdWFydHpDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8
YWJzb2x1dGU+IjsgfTsKIAkJQTg2NjI5QzkwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVSUV2ZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NjYyOUNBMDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVUlFdmVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NzQzLDYgKzY3NTYsOSBAQAogCQlB
ODY2MjlDQzA5REEyQjQ3MDA5NjMzQTUgLyogSlNNb3VzZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01vdXNlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODY2MjlDRDA5REEyQjQ3MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0tleWJvYXJkRXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg2NjI5Q0UwOURBMkI0NzAwOTYzM0E1
IC8qIEpTS2V5Ym9hcmRFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNLZXlib2FyZEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTg2RDJGQTAwRTgzM0QxMzAwMEJDMzk1IC8qIFdlYkNvcmVVbml0VGVzdHMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhl
Y3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdlYkNvcmVVbml0VGVzdHM7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUE4NkQyRkE2MEU4MzNENDgwMDBC
QzM5NSAvKiBndGVzdC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IGd0ZXN0LmZyYW1ld29y
azsgcGF0aCA9IC4uLy4uL2J1aWxkL0RlYnVnL2d0ZXN0LmZyYW1ld29yazsgc291cmNlVHJlZSA9
IFNPVVJDRV9ST09UOyB9OworCQlBODZEMkZBRDBFODMzREQ2MDAwQkMzOTUgLyogUmVndWxhckV4
cHJlc3Npb25Vbml0VGVzdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVndWxhckV4cHJlc3Npb25Vbml0VGVzdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBODcxRDQ0QzBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTFBsdWdJbkVsZW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxQbHVnSW5FbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NzFENDREMEExMjdDQkMwMEIxMkE2OCAvKiBI
VE1MUGx1Z0luRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSFRNTFBsdWdJbkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
ODcxRDQ0RTBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTFBhcmFtRWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFBhcmFtRWxlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtODc5MCw2ICs4ODA2LDE2IEBACiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CisJCUE4NkQyRjlFMEU4MzNEMTMw
MDBCQzM5NSAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxk
UGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJ
CQkJQTg0RjY4QTcwRTg0NkMzNzAwQzg5RkJFIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBp
biBGcmFtZXdvcmtzICovLAorCQkJCUE4NkQyRkE3MEU4MzNENDgwMDBCQzM5NSAvKiBndGVzdC5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQlBODRGNjcwMDBFODQ2OUY3MDBDODlGQkUg
LyogV2ViS2l0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogLyogRW5kIFBCWEZyYW1ld29y
a3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAqLwpA
QCAtODc5Nyw2ICs4ODIzLDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CiAJCQkJOTNGMTlCMUEwODI0NUU1QTAwMUU5QUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovLAor
CQkJCUE4NkQyRkEwMEU4MzNEMTMwMDBCQzM5NSAvKiBXZWJDb3JlVW5pdFRlc3RzICovLAogCQkJ
KTsKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsKQEAg
LTg4MzgsNiArODg2NSw3IEBACiAJCTA4NjdENjlBRkU4NDAyOEZDMDJBQUMwNyAvKiBGcmFtZXdv
cmtzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBODZE
MkZBNjBFODMzRDQ4MDAwQkMzOTUgLyogZ3Rlc3QuZnJhbWV3b3JrICovLAogCQkJCUY1QzI4Njkz
MDI4NDZEQ0QwMTg2MzVDQSAvKiBBcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yayAqLywKIAkJ
CQlGNUMyODY5NDAyODQ2RENEMDE4NjM1Q0EgLyogQ2FyYm9uLmZyYW1ld29yayAqLywKIAkJCQlG
NUMyODY5NTAyODQ2RENEMDE4NjM1Q0EgLyogQ29jb2EuZnJhbWV3b3JrICovLApAQCAtODg0NSw2
ICs4ODczLDcgQEAKIAkJCQk5M0YxRDMxQTA1NThDQzVDMDA4MjFCQzAgLyogbGliaWN1Y29yZS5k
eWxpYiAqLywKIAkJCQkxQ0ZBRTMyMjBBNkQ2QTNGMDAzMjU5M0QgLyogbGlib2JqYy5keWxpYiAq
LywKIAkJCQlERDc2M0JCMTA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5keWxpYiAqLywKKwkJ
CQlBODRGNjZGRjBFODQ2OUY3MDBDODlGQkUgLyogV2ViS2l0LmZyYW1ld29yayAqLywKIAkJCQlB
ODVEN0EyRjA4NzlFQkE5MDA2QTkxNzIgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgKi8sCiAJCQkJ
MUE3RkE3Q0IwRERBNEI3NzAwMjhGOEE1IC8qIFN5c3RlbUNvbmZpZ3VyYXRpb24uZnJhbWV3b3Jr
ICovLAogCQkJKTsKQEAgLTkxNDEsOCArOTE3MCw5IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkx
Q0RENDVFNjBCQTlDODQ2MDBGOTAxNDcgLyogQmFzZS54Y2NvbmZpZyAqLywKIAkJCQkxQ0RENDVF
NDBCQTlDODQ2MDBGOTAxNDcgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovLAotCQkJCTFDREQ0
NUU1MEJBOUM4NDYwMEY5MDE0NyAvKiBXZWJDb3JlLnhjY29uZmlnICovLAogCQkJCTFDOTA0REY5
MEJBOUQyQzgwMDgxRTlEMCAvKiBWZXJzaW9uLnhjY29uZmlnICovLAorCQkJCTFDREQ0NUU1MEJB
OUM4NDYwMEY5MDE0NyAvKiBXZWJDb3JlLnhjY29uZmlnICovLAorCQkJCUE4MjI0RTk3MEU4NDVD
MEIwMDk0NDUyOSAvKiBXZWJDb3JlVW5pdFRlc3RzLnhjY29uZmlnICovLAogCQkJKTsKIAkJCXBh
dGggPSBDb25maWd1cmF0aW9uczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMjUz
Miw2ICsxMjU2Miw3IEBACiAJCUIyQzNEOUVDMEQwMDZDMUQwMEVGNkYyNiAvKiB0ZXh0ICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBODZEMkZBRDBFODMz
REQ2MDAwQkMzOTUgLyogUmVndWxhckV4cHJlc3Npb25Vbml0VGVzdHMuY3BwICovLAogCQkJCUIy
QjI2NDU5MEQwMEE3N0UwMDBBQ0MxRCAvKiBjZiAqLywKIAkJCQlCMkMzRDlGOTBEMDA2QzFEMDBF
RjZGMjYgLyogbWFjICovLAogCQkJCUIyQzNEOUVEMEQwMDZDMUQwMEVGNkYyNiAvKiBBdG9taWNT
dHJpbmcuY3BwICovLApAQCAtMTU4OTIsNiArMTU5MjMsMjMgQEAKIAkJCXByb2R1Y3RSZWZlcmVu
Y2UgPSA5M0YxOUIxQTA4MjQ1RTVBMDAxRTlBQkMgLyogV2ViQ29yZS5mcmFtZXdvcmsgKi87CiAJ
CQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmZyYW1ld29yayI7CiAJCX07
CisJCUE4NkQyRjlGMEU4MzNEMTMwMDBCQzM5NSAvKiBXZWJDb3JlVW5pdFRlc3RzICovID0gewor
CQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEE4
NkQyRkE1MEU4MzNEM0QwMDBCQzM5NSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WE5hdGl2ZVRhcmdldCAiV2ViQ29yZVVuaXRUZXN0cyIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgK
KwkJCQlBODZEMkY5RDBFODMzRDEzMDAwQkMzOTUgLyogU291cmNlcyAqLywKKwkJCQlBODZEMkY5
RTBFODMzRDEzMDAwQkMzOTUgLyogRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlidWlsZFJ1bGVz
ID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCQlBODIyNDcyMzBFODQ1QUMxMDA5
NDQ1MjkgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKKwkJCSk7CisJCQluYW1lID0gV2ViQ29y
ZVVuaXRUZXN0czsKKwkJCXByb2R1Y3ROYW1lID0gV2ViQ29yZVVuaXRUZXN0czsKKwkJCXByb2R1
Y3RSZWZlcmVuY2UgPSBBODZEMkZBMDBFODMzRDEzMDAwQkMzOTUgLyogV2ViQ29yZVVuaXRUZXN0
cyAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7CisJ
CX07CiAvKiBFbmQgUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYUHJv
amVjdCBzZWN0aW9uICovCkBAIC0xNTkxNiw2ICsxNTk2NCw3IEBACiAJCQl0YXJnZXRzID0gKAog
CQkJCTkzRjE5OEE1MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlICovLAogCQkJCUREMDQxRkJF
MDlEOUREQkUwMDEwQUYyQSAvKiBEZXJpdmVkIFNvdXJjZXMgKi8sCisJCQkJQTg2RDJGOUYwRTgz
M0QxMzAwMEJDMzk1IC8qIFdlYkNvcmVVbml0VGVzdHMgKi8sCiAJCQkpOwogCQl9OwogLyogRW5k
IFBCWFByb2plY3Qgc2VjdGlvbiAqLwpAQCAtMTc2OTcsOSArMTc3NDYsMjIgQEAKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKKwkJQTg2RDJG
OUQwRTgzM0QxMzAwMEJDMzk1IC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2Vz
QnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9
ICgKKwkJCQlBODZEMkZBRTBFODMzREQ2MDAwQkMzOTUgLyogUmVndWxhckV4cHJlc3Npb25Vbml0
VGVzdHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAvKiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwogCiAvKiBCZWdpbiBQQlhUYXJnZXREZXBlbmRlbmN5IHNlY3Rpb24gKi8KKwkJQTgy
MjQ3MjMwRTg0NUFDMTAwOTQ0NTI5IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CisJCQlp
c2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0gOTNGMTk4QTUwODI0NUU1OTAw
MUU5QUJDIC8qIFdlYkNvcmUgKi87CisJCQl0YXJnZXRQcm94eSA9IEE4MjI0NzIyMEU4NDVBQzEw
MDk0NDUyOSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CiAJCUREMDQxRkYxMDlE
OUUzMjUwMDEwQUYyQSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewogCQkJaXNhID0gUEJY
VGFyZ2V0RGVwZW5kZW5jeTsKIAkJCXRhcmdldCA9IEREMDQxRkJFMDlEOUREQkUwMDEwQUYyQSAv
KiBEZXJpdmVkIFNvdXJjZXMgKi87CkBAIC0xNzc3OCw2ICsxNzg0MCw3NyBAQAogCQkJfTsKIAkJ
CW5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQlBODZEMkZBMjBFODMzRDE0MDAwQkMzOTUgLyog
RGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25m
aWd1cmF0aW9uUmVmZXJlbmNlID0gQTgyMjRFOTcwRTg0NUMwQjAwOTQ0NTI5IC8qIFdlYkNvcmVV
bml0VGVzdHMueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUFMV0FZU19T
RUFSQ0hfVVNFUl9QQVRIUyA9IE5POworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsKKwkJCQlG
UkFNRVdPUktfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkiJChpbmhlcml0ZWQpIiwKKwkJCQkJIiQo
RlJBTUVXT1JLX1NFQVJDSF9QQVRIU19RVU9URURfRk9SX1RBUkdFVF8xKSIsCisJCQkJCSIkKEZS
QU1FV09SS19TRUFSQ0hfUEFUSFNfUVVPVEVEX0ZPUl9UQVJHRVRfMikiLAorCQkJCQkiJChGUkFN
RVdPUktfU0VBUkNIX1BBVEhTX1FVT1RFRF9GT1JfVEFSR0VUXzMpIiwKKwkJCQkpOworCQkJCUZS
QU1FV09SS19TRUFSQ0hfUEFUSFNfUVVPVEVEX0ZPUl9UQVJHRVRfMSA9ICJcIiQoU1JDUk9PVCkv
Li4vLi4vYnVpbGQvRGVidWdcIiI7CisJCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIU19RVU9URURf
Rk9SX1RBUkdFVF8yID0gIlwiJChTUkNST09UKS8uLi8uLi9idWlsZC9EZWJ1Z1wiIjsKKwkJCQlG
UkFNRVdPUktfU0VBUkNIX1BBVEhTX1FVT1RFRF9GT1JfVEFSR0VUXzMgPSAiXCIkKFNSQ1JPT1Qp
Ly4uLy4uL2J1aWxkL0RlYnVnXCIiOworCQkJCUdDQ19EWU5BTUlDX05PX1BJQyA9IE5POworCQkJ
CUdDQ19FTkFCTEVfQ1BQX1JUVEkgPSBZRVM7CisJCQkJR0NDX0VOQUJMRV9GSVhfQU5EX0NPTlRJ
TlVFID0gWUVTOworCQkJCUdDQ19NT0RFTF9UVU5JTkcgPSBHNTsKKwkJCQlHQ0NfT1BUSU1JWkFU
SU9OX0xFVkVMID0gMDsKKwkJCQlJTlNUQUxMX1BBVEggPSAvdXNyL2xvY2FsL2JpbjsKKwkJCQlQ
UkVCSU5ESU5HID0gTk87CisJCQkJUFJPRFVDVF9OQU1FID0gV2ViQ29yZVVuaXRUZXN0czsKKwkJ
CX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCUE4NkQyRkEzMEU4MzNEMTQwMDBCQzM5NSAv
KiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWls
ZFNldHRpbmdzID0geworCQkJCUFMV0FZU19TRUFSQ0hfVVNFUl9QQVRIUyA9IE5POworCQkJCUNP
UFlfUEhBU0VfU1RSSVAgPSBZRVM7CisJCQkJREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0gImR3
YXJmLXdpdGgtZHN5bSI7CisJCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJIiQo
aW5oZXJpdGVkKSIsCisJCQkJCSIkKEZSQU1FV09SS19TRUFSQ0hfUEFUSFNfUVVPVEVEXzEpIiwK
KwkJCQkJIiQoRlJBTUVXT1JLX1NFQVJDSF9QQVRIU19RVU9URURfRk9SX1RBUkdFVF8xKSIsCisJ
CQkJCSIkKEZSQU1FV09SS19TRUFSQ0hfUEFUSFNfUVVPVEVEX0ZPUl9UQVJHRVRfMikiLAorCQkJ
CSk7CisJCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIU19RVU9URURfMSA9ICJcIiQoU1JDUk9PVCkv
Li4vLi4vYnVpbGQvRGVidWdcIiI7CisJCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIU19RVU9URURf
Rk9SX1RBUkdFVF8xID0gIlwiJChTUkNST09UKS8uLi8uLi9idWlsZC9EZWJ1Z1wiIjsKKwkJCQlG
UkFNRVdPUktfU0VBUkNIX1BBVEhTX1FVT1RFRF9GT1JfVEFSR0VUXzIgPSAiXCIkKFNSQ1JPT1Qp
Ly4uLy4uL2J1aWxkL0RlYnVnXCIiOworCQkJCUdDQ19FTkFCTEVfRklYX0FORF9DT05USU5VRSA9
IE5POworCQkJCUdDQ19NT0RFTF9UVU5JTkcgPSBHNTsKKwkJCQlJTlNUQUxMX1BBVEggPSAvdXNy
L2xvY2FsL2JpbjsKKwkJCQlQUkVCSU5ESU5HID0gTk87CisJCQkJUFJPRFVDVF9OQU1FID0gV2Vi
Q29yZVVuaXRUZXN0czsKKwkJCQlaRVJPX0xJTksgPSBOTzsKKwkJCX07CisJCQluYW1lID0gUmVs
ZWFzZTsKKwkJfTsKKwkJQTg2RDJGQTQwRTgzM0QxNDAwMEJDMzk1IC8qIFByb2R1Y3Rpb24gKi8g
PSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7
CisJCQkJQUxXQVlTX1NFQVJDSF9VU0VSX1BBVEhTID0gTk87CisJCQkJRlJBTUVXT1JLX1NFQVJD
SF9QQVRIUyA9ICgKKwkJCQkJIiQoaW5oZXJpdGVkKSIsCisJCQkJCSIkKEZSQU1FV09SS19TRUFS
Q0hfUEFUSFNfUVVPVEVEXzEpIiwKKwkJCQkJIiQoRlJBTUVXT1JLX1NFQVJDSF9QQVRIU19RVU9U
RURfRk9SX1RBUkdFVF8xKSIsCisJCQkJCSIkKEZSQU1FV09SS19TRUFSQ0hfUEFUSFNfUVVPVEVE
X0ZPUl9UQVJHRVRfMikiLAorCQkJCSk7CisJCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIU19RVU9U
RURfMSA9ICJcIiQoU1JDUk9PVCkvLi4vLi4vYnVpbGQvRGVidWdcIiI7CisJCQkJRlJBTUVXT1JL
X1NFQVJDSF9QQVRIU19RVU9URURfRk9SX1RBUkdFVF8xID0gIlwiJChTUkNST09UKS8uLi8uLi9i
dWlsZC9EZWJ1Z1wiIjsKKwkJCQlGUkFNRVdPUktfU0VBUkNIX1BBVEhTX1FVT1RFRF9GT1JfVEFS
R0VUXzIgPSAiXCIkKFNSQ1JPT1QpLy4uLy4uL2J1aWxkL0RlYnVnXCIiOworCQkJCUdDQ19FTkFC
TEVfRklYX0FORF9DT05USU5VRSA9IFlFUzsKKwkJCQlHQ0NfTU9ERUxfVFVOSU5HID0gRzU7CisJ
CQkJSU5TVEFMTF9QQVRIID0gL3Vzci9sb2NhbC9iaW47CisJCQkJUFJFQklORElORyA9IE5POwor
CQkJCVBST0RVQ1RfTkFNRSA9IFdlYkNvcmVVbml0VGVzdHM7CisJCQl9OworCQkJbmFtZSA9IFBy
b2R1Y3Rpb247CisJCX07CiAJCUREMDQxRkMyMDlEOUREREMwMDEwQUYyQSAvKiBEZWJ1ZyAqLyA9
IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25S
ZWZlcmVuY2UgPSAxQ0RENDVFNTBCQTlDODQ2MDBGOTAxNDcgLyogV2ViQ29yZS54Y2NvbmZpZyAq
LzsKQEAgLTE3ODI1LDYgKzE3OTU4LDE2IEBACiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlz
aWJsZSA9IDA7CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwogCQl9
OworCQlBODZEMkZBNTBFODMzRDNEMDAwQkMzOTUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhOYXRpdmVUYXJnZXQgIldlYkNvcmVVbml0VGVzdHMiICovID0geworCQkJaXNhID0g
WENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJQTg2
RDJGQTIwRTgzM0QxNDAwMEJDMzk1IC8qIERlYnVnICovLAorCQkJCUE4NkQyRkEzMEU4MzNEMTQw
MDBCQzM5NSAvKiBSZWxlYXNlICovLAorCQkJCUE4NkQyRkE0MEU4MzNEMTQwMDBCQzM5NSAvKiBQ
cm9kdWN0aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0g
MDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCURE
MDQxRkMxMDlEOUREREMwMDEwQUYyQSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WEFnZ3JlZ2F0ZVRhcmdldCAiRGVyaXZlZCBTb3VyY2VzIiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29u
ZmlndXJhdGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23680</attachid>
            <date>2008-09-22 16:19:31 -0700</date>
            <delta_ts>2010-06-11 10:40:16 -0700</delta_ts>
            <desc>First stab @ unit tests</desc>
            <filename>First-stab-unit-tests.patch</filename>
            <type>text/plain</type>
            <size>18813</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">N2YyZGJmMTM2NjAzMjYxMjYxYmVhYjRiZGMzNTRhODI2ZWY1N2YyZApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLmJhc2UuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCmluZGV4IDc3
NTkxZTMuLjVkZjQ1MDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAorKysg
Yi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKQEAgLTEsMyArMSw5IEBACitfX1pON1dlYkNvcmUx
N1JlZ3VsYXJFeHByZXNzaW9uQzFFUktOU182U3RyaW5nRWIKK19fWk4zV1RGOGZhc3RGcmVlRVB2
CitfX1pOSzdXZWJDb3JlMTdSZWd1bGFyRXhwcmVzc2lvbjVtYXRjaEVSS05TXzZTdHJpbmdFaVBp
CitfX1pON1dlYkNvcmUxN1JlZ3VsYXJFeHByZXNzaW9uRDFFdgorX1dURlJlcG9ydEFzc2VydGlv
bkZhaWx1cmUKK19fWk4zV1RGMTBmYXN0TWFsbG9jRW0KIC5vYmpjX2NsYXNzX25hbWVfRE9NQWJz
dHJhY3RWaWV3CiAub2JqY19jbGFzc19uYW1lX0RPTUF0dHIKIC5vYmpjX2NsYXNzX25hbWVfRE9N
Q0RBVEFTZWN0aW9uCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGU4NmJiYjYuLmEyNDA2NGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0yMjUzLDEyICsyMjUzLDE2IEBACiAJCUE4NEVCRDc4MENCOEM4OTIwMDA3
OTYwOSAvKiBKU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NEVCRDc3MENCOEM4OTIwMDA3OTYwOSAvKiBKU1N0
eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQTg0RUJEODMwQ0I4Qzk3NzAwMDc5NjA5
IC8qIEpTU3R5bGVTaGVldExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4NEVCRDgxMENCOEM5NzcwMDA3OTYwOSAvKiBKU1N0eWxlU2hlZXRMaXN0
LmggKi87IH07CiAJCUE4NEVCRDg0MENCOEM5NzcwMDA3OTYwOSAvKiBKU1N0eWxlU2hlZXRMaXN0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NEVC
RDgyMENCOEM5NzcwMDA3OTYwOSAvKiBKU1N0eWxlU2hlZXRMaXN0LmNwcCAqLzsgfTsKKwkJQTg0
RjY3MDAwRTg0NjlGNzAwQzg5RkJFIC8qIFdlYktpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODRGNjZGRjBFODQ2OUY3MDBDODlG
QkUgLyogV2ViS2l0LmZyYW1ld29yayAqLzsgfTsKKwkJQTg0RjY4QTcwRTg0NkMzNzAwQzg5RkJF
IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY4MjE2Mjk5MDI5RjRGQjUwMTAwMDEzMSAvKiBKYXZhU2Ny
aXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CiAJCUE4NjYyOUNGMDlEQTJCNDcwMDk2MzNBNSAvKiBK
U1VJRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4NjYyOUM5MDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuaCAqLzsgfTsKIAkJQTg2NjI5
RDAwOURBMkI0ODAwOTYzM0E1IC8qIEpTVUlFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODY2MjlDQTA5REEyQjQ3MDA5NjMzQTUgLyogSlNV
SUV2ZW50LmNwcCAqLzsgfTsKIAkJQTg2NjI5RDEwOURBMkI0ODAwOTYzM0E1IC8qIEpTTW91c2VF
dmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg2
NjI5Q0IwOURBMkI0NzAwOTYzM0E1IC8qIEpTTW91c2VFdmVudC5oICovOyB9OwogCQlBODY2MjlE
MjA5REEyQjQ4MDA5NjMzQTUgLyogSlNNb3VzZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NjYyOUNDMDlEQTJCNDcwMDk2MzNBNSAvKiBK
U01vdXNlRXZlbnQuY3BwICovOyB9OwogCQlBODY2MjlEMzA5REEyQjQ4MDA5NjMzQTUgLyogSlNL
ZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODY2MjlDRDA5REEyQjQ3MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2ZW50LmggKi87IH07
CiAJCUE4NjYyOUQ0MDlEQTJCNDgwMDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg2NjI5Q0UwOURBMkI0
NzAwOTYzM0E1IC8qIEpTS2V5Ym9hcmRFdmVudC5jcHAgKi87IH07CisJCUE4NkQyRkE3MEU4MzNE
NDgwMDBCQzM5NSAvKiBndGVzdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODZEMkZBNjBFODMzRDQ4MDAwQkMzOTUgLyogZ3Rlc3Qu
ZnJhbWV3b3JrICovOyB9OworCQlBODZEMkZBRTBFODMzREQ2MDAwQkMzOTUgLyogUmVndWxhckV4
cHJlc3Npb25Vbml0VGVzdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTg2RDJGQUQwRTgzM0RENjAwMEJDMzk1IC8qIFJlZ3VsYXJFeHByZXNzaW9u
VW5pdFRlc3RzLmNwcCAqLzsgfTsKIAkJQTg3MUQ0NTYwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxQ
bHVnSW5FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODcxRDQ0QzBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTFBsdWdJbkVsZW1lbnQuaCAqLzsg
fTsKIAkJQTg3MUQ0NTcwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxQbHVnSW5FbGVtZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzFENDREMEEx
MjdDQkMwMEIxMkE2OCAvKiBIVE1MUGx1Z0luRWxlbWVudC5jcHAgKi87IH07CiAJCUE4NzFENDU4
MEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MUGFyYW1FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODcxRDQ0RTBBMTI3Q0JDMDBCMTJBNjggLyog
SFRNTFBhcmFtRWxlbWVudC5oICovOyB9OwpAQCAtNDE5Myw2ICs0MTk3LDEzIEBACiAvKiBFbmQg
UEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5
IHNlY3Rpb24gKi8KKwkJQTgyMjQ3MjIwRTg0NUFDMTAwOTQ0NTI5IC8qIFBCWENvbnRhaW5lckl0
ZW1Qcm94eSAqLyA9IHsKKwkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKKwkJCWNvbnRh
aW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAq
LzsKKwkJCXByb3h5VHlwZSA9IDE7CisJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDkzRjE5OEE1
MDgyNDVFNTkwMDFFOUFCQzsKKwkJCXJlbW90ZUluZm8gPSBXZWJDb3JlOworCQl9OwogCQlERDA0
MUZGMDA5RDlFMzI1MDAxMEFGMkEgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewogCQkJ
aXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwogCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2
OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOwpAQCAtNjY5OSw2ICs2NzEw
LDcgQEAKIAkJQTgxODcyMTgwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVkTm9kZU1hcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmFtZWROb2RlTWFwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE4MTg3MjE5MDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lTm9kZUxp
c3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hbWVOb2RlTGlz
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MTg3MjFBMDk3N0QzQzAwMDU4
MjZEOSAvKiBDaGlsZE5vZGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDaGlsZE5vZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTgyMjRFOTcwRTg0NUMwQjAwOTQ0NTI5IC8qIFdlYkNvcmVVbml0VGVzdHMueGNjb25maWcgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gV2ViQ29yZVVuaXRUZXN0cy54Y2NvbmZpZzsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgyMzlERkUwOUIzQ0Y4QTAwQjYwNjQxIC8q
IExvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvZ2dp
bmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODIzOURGRjA5QjNDRjhBMDBC
NjA2NDEgLyogTG9nZ2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9n
Z2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODI0QjQ2NDBFMkVGMkVBMDA4
MUE3QjcgLyogVGV4dFJ1bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0
UnVuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NzM2LDYgKzY3NDgsNyBAQAog
CQlBODRFQkQ3NzBDQjhDODkyMDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0eWxlU2hlZXRMaXN0Q3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg0RUJEODEwQ0I4Qzk3NzAw
MDc5NjA5IC8qIEpTU3R5bGVTaGVldExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNTdHlsZVNoZWV0TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
ODRFQkQ4MjBDQjhDOTc3MDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0eWxlU2hlZXRMaXN0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTg0RjY2RkYwRTg0NjlGNzAwQzg5RkJFIC8qIFdlYktp
dC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IFdlYktpdC5mcmFtZXdvcms7IHBhdGggPSAu
Li8uLi9idWlsZC9EZWJ1Zy9XZWJLaXQuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gU09VUkNFX1JP
T1Q7IH07CiAJCUE4NUQ3QTJGMDg3OUVCQTkwMDZBOTE3MiAvKiBRdWFydHpDb3JlLmZyYW1ld29y
ayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBw
ZXIuZnJhbWV3b3JrOyBuYW1lID0gUXVhcnR6Q29yZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVt
L0xpYnJhcnkvRnJhbWV3b3Jrcy9RdWFydHpDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8
YWJzb2x1dGU+IjsgfTsKIAkJQTg2NjI5QzkwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVSUV2ZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NjYyOUNBMDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVUlFdmVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NzQzLDYgKzY3NTYsOSBAQAogCQlB
ODY2MjlDQzA5REEyQjQ3MDA5NjMzQTUgLyogSlNNb3VzZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01vdXNlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODY2MjlDRDA5REEyQjQ3MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0tleWJvYXJkRXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg2NjI5Q0UwOURBMkI0NzAwOTYzM0E1
IC8qIEpTS2V5Ym9hcmRFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNLZXlib2FyZEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTg2RDJGQTAwRTgzM0QxMzAwMEJDMzk1IC8qIFdlYkNvcmVVbml0VGVzdHMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhl
Y3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdlYkNvcmVVbml0VGVzdHM7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUE4NkQyRkE2MEU4MzNENDgwMDBC
QzM5NSAvKiBndGVzdC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IGd0ZXN0LmZyYW1ld29y
azsgcGF0aCA9IC4uLy4uL2J1aWxkL0RlYnVnL2d0ZXN0LmZyYW1ld29yazsgc291cmNlVHJlZSA9
IFNPVVJDRV9ST09UOyB9OworCQlBODZEMkZBRDBFODMzREQ2MDAwQkMzOTUgLyogUmVndWxhckV4
cHJlc3Npb25Vbml0VGVzdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVndWxhckV4cHJlc3Npb25Vbml0VGVzdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBODcxRDQ0QzBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTFBsdWdJbkVsZW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxQbHVnSW5FbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NzFENDREMEExMjdDQkMwMEIxMkE2OCAvKiBI
VE1MUGx1Z0luRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSFRNTFBsdWdJbkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
ODcxRDQ0RTBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTFBhcmFtRWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFBhcmFtRWxlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtODc5MCw2ICs4ODA2LDE2IEBACiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CisJCUE4NkQyRjlFMEU4MzNEMTMw
MDBCQzM5NSAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxk
UGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJ
CQkJQTg0RjY4QTcwRTg0NkMzNzAwQzg5RkJFIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBp
biBGcmFtZXdvcmtzICovLAorCQkJCUE4NkQyRkE3MEU4MzNENDgwMDBCQzM5NSAvKiBndGVzdC5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQlBODRGNjcwMDBFODQ2OUY3MDBDODlGQkUg
LyogV2ViS2l0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogLyogRW5kIFBCWEZyYW1ld29y
a3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAqLwpA
QCAtODc5Nyw2ICs4ODIzLDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CiAJCQkJOTNGMTlCMUEwODI0NUU1QTAwMUU5QUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovLAor
CQkJCUE4NkQyRkEwMEU4MzNEMTMwMDBCQzM5NSAvKiBXZWJDb3JlVW5pdFRlc3RzICovLAogCQkJ
KTsKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsKQEAg
LTg4MzgsNiArODg2NSw3IEBACiAJCTA4NjdENjlBRkU4NDAyOEZDMDJBQUMwNyAvKiBGcmFtZXdv
cmtzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBODZE
MkZBNjBFODMzRDQ4MDAwQkMzOTUgLyogZ3Rlc3QuZnJhbWV3b3JrICovLAogCQkJCUY1QzI4Njkz
MDI4NDZEQ0QwMTg2MzVDQSAvKiBBcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yayAqLywKIAkJ
CQlGNUMyODY5NDAyODQ2RENEMDE4NjM1Q0EgLyogQ2FyYm9uLmZyYW1ld29yayAqLywKIAkJCQlG
NUMyODY5NTAyODQ2RENEMDE4NjM1Q0EgLyogQ29jb2EuZnJhbWV3b3JrICovLApAQCAtODg0NSw2
ICs4ODczLDcgQEAKIAkJCQk5M0YxRDMxQTA1NThDQzVDMDA4MjFCQzAgLyogbGliaWN1Y29yZS5k
eWxpYiAqLywKIAkJCQkxQ0ZBRTMyMjBBNkQ2QTNGMDAzMjU5M0QgLyogbGlib2JqYy5keWxpYiAq
LywKIAkJCQlERDc2M0JCMTA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5keWxpYiAqLywKKwkJ
CQlBODRGNjZGRjBFODQ2OUY3MDBDODlGQkUgLyogV2ViS2l0LmZyYW1ld29yayAqLywKIAkJCQlB
ODVEN0EyRjA4NzlFQkE5MDA2QTkxNzIgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgKi8sCiAJCQkJ
MUE3RkE3Q0IwRERBNEI3NzAwMjhGOEE1IC8qIFN5c3RlbUNvbmZpZ3VyYXRpb24uZnJhbWV3b3Jr
ICovLAogCQkJKTsKQEAgLTkxNDEsOCArOTE3MCw5IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkx
Q0RENDVFNjBCQTlDODQ2MDBGOTAxNDcgLyogQmFzZS54Y2NvbmZpZyAqLywKIAkJCQkxQ0RENDVF
NDBCQTlDODQ2MDBGOTAxNDcgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovLAotCQkJCTFDREQ0
NUU1MEJBOUM4NDYwMEY5MDE0NyAvKiBXZWJDb3JlLnhjY29uZmlnICovLAogCQkJCTFDOTA0REY5
MEJBOUQyQzgwMDgxRTlEMCAvKiBWZXJzaW9uLnhjY29uZmlnICovLAorCQkJCTFDREQ0NUU1MEJB
OUM4NDYwMEY5MDE0NyAvKiBXZWJDb3JlLnhjY29uZmlnICovLAorCQkJCUE4MjI0RTk3MEU4NDVD
MEIwMDk0NDUyOSAvKiBXZWJDb3JlVW5pdFRlc3RzLnhjY29uZmlnICovLAogCQkJKTsKIAkJCXBh
dGggPSBDb25maWd1cmF0aW9uczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMjUz
Miw2ICsxMjU2Miw3IEBACiAJCUIyQzNEOUVDMEQwMDZDMUQwMEVGNkYyNiAvKiB0ZXh0ICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBODZEMkZBRDBFODMz
REQ2MDAwQkMzOTUgLyogUmVndWxhckV4cHJlc3Npb25Vbml0VGVzdHMuY3BwICovLAogCQkJCUIy
QjI2NDU5MEQwMEE3N0UwMDBBQ0MxRCAvKiBjZiAqLywKIAkJCQlCMkMzRDlGOTBEMDA2QzFEMDBF
RjZGMjYgLyogbWFjICovLAogCQkJCUIyQzNEOUVEMEQwMDZDMUQwMEVGNkYyNiAvKiBBdG9taWNT
dHJpbmcuY3BwICovLApAQCAtMTU4OTIsNiArMTU5MjMsMjMgQEAKIAkJCXByb2R1Y3RSZWZlcmVu
Y2UgPSA5M0YxOUIxQTA4MjQ1RTVBMDAxRTlBQkMgLyogV2ViQ29yZS5mcmFtZXdvcmsgKi87CiAJ
CQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmZyYW1ld29yayI7CiAJCX07
CisJCUE4NkQyRjlGMEU4MzNEMTMwMDBCQzM5NSAvKiBXZWJDb3JlVW5pdFRlc3RzICovID0gewor
CQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEE4
NkQyRkE1MEU4MzNEM0QwMDBCQzM5NSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WE5hdGl2ZVRhcmdldCAiV2ViQ29yZVVuaXRUZXN0cyIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgK
KwkJCQlBODZEMkY5RDBFODMzRDEzMDAwQkMzOTUgLyogU291cmNlcyAqLywKKwkJCQlBODZEMkY5
RTBFODMzRDEzMDAwQkMzOTUgLyogRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlidWlsZFJ1bGVz
ID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCQlBODIyNDcyMzBFODQ1QUMxMDA5
NDQ1MjkgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKKwkJCSk7CisJCQluYW1lID0gV2ViQ29y
ZVVuaXRUZXN0czsKKwkJCXByb2R1Y3ROYW1lID0gV2ViQ29yZVVuaXRUZXN0czsKKwkJCXByb2R1
Y3RSZWZlcmVuY2UgPSBBODZEMkZBMDBFODMzRDEzMDAwQkMzOTUgLyogV2ViQ29yZVVuaXRUZXN0
cyAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7CisJ
CX07CiAvKiBFbmQgUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYUHJv
amVjdCBzZWN0aW9uICovCkBAIC0xNTkxNiw2ICsxNTk2NCw3IEBACiAJCQl0YXJnZXRzID0gKAog
CQkJCTkzRjE5OEE1MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlICovLAogCQkJCUREMDQxRkJF
MDlEOUREQkUwMDEwQUYyQSAvKiBEZXJpdmVkIFNvdXJjZXMgKi8sCisJCQkJQTg2RDJGOUYwRTgz
M0QxMzAwMEJDMzk1IC8qIFdlYkNvcmVVbml0VGVzdHMgKi8sCiAJCQkpOwogCQl9OwogLyogRW5k
IFBCWFByb2plY3Qgc2VjdGlvbiAqLwpAQCAtMTc2OTcsOSArMTc3NDYsMjIgQEAKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKKwkJQTg2RDJG
OUQwRTgzM0QxMzAwMEJDMzk1IC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2Vz
QnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9
ICgKKwkJCQlBODZEMkZBRTBFODMzREQ2MDAwQkMzOTUgLyogUmVndWxhckV4cHJlc3Npb25Vbml0
VGVzdHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAvKiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwogCiAvKiBCZWdpbiBQQlhUYXJnZXREZXBlbmRlbmN5IHNlY3Rpb24gKi8KKwkJQTgy
MjQ3MjMwRTg0NUFDMTAwOTQ0NTI5IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CisJCQlp
c2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0gOTNGMTk4QTUwODI0NUU1OTAw
MUU5QUJDIC8qIFdlYkNvcmUgKi87CisJCQl0YXJnZXRQcm94eSA9IEE4MjI0NzIyMEU4NDVBQzEw
MDk0NDUyOSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CiAJCUREMDQxRkYxMDlE
OUUzMjUwMDEwQUYyQSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewogCQkJaXNhID0gUEJY
VGFyZ2V0RGVwZW5kZW5jeTsKIAkJCXRhcmdldCA9IEREMDQxRkJFMDlEOUREQkUwMDEwQUYyQSAv
KiBEZXJpdmVkIFNvdXJjZXMgKi87CkBAIC0xNzc3OCw2ICsxNzg0MCw3NyBAQAogCQkJfTsKIAkJ
CW5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQlBODZEMkZBMjBFODMzRDE0MDAwQkMzOTUgLyog
RGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25m
aWd1cmF0aW9uUmVmZXJlbmNlID0gQTgyMjRFOTcwRTg0NUMwQjAwOTQ0NTI5IC8qIFdlYkNvcmVV
bml0VGVzdHMueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUFMV0FZU19T
RUFSQ0hfVVNFUl9QQVRIUyA9IE5POworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsKKwkJCQlG
UkFNRVdPUktfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkiJChpbmhlcml0ZWQpIiwKKwkJCQkJIiQo
RlJBTUVXT1JLX1NFQVJDSF9QQVRIU19RVU9URURfRk9SX1RBUkdFVF8xKSIsCisJCQkJCSIkKEZS
QU1FV09SS19TRUFSQ0hfUEFUSFNfUVVPVEVEX0ZPUl9UQVJHRVRfMikiLAorCQkJCQkiJChGUkFN
RVdPUktfU0VBUkNIX1BBVEhTX1FVT1RFRF9GT1JfVEFSR0VUXzMpIiwKKwkJCQkpOworCQkJCUZS
QU1FV09SS19TRUFSQ0hfUEFUSFNfUVVPVEVEX0ZPUl9UQVJHRVRfMSA9ICJcIiQoU1JDUk9PVCkv
Li4vLi4vYnVpbGQvRGVidWdcIiI7CisJCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIU19RVU9URURf
Rk9SX1RBUkdFVF8yID0gIlwiJChTUkNST09UKS8uLi8uLi9idWlsZC9EZWJ1Z1wiIjsKKwkJCQlG
UkFNRVdPUktfU0VBUkNIX1BBVEhTX1FVT1RFRF9GT1JfVEFSR0VUXzMgPSAiXCIkKFNSQ1JPT1Qp
Ly4uLy4uL2J1aWxkL0RlYnVnXCIiOworCQkJCUdDQ19EWU5BTUlDX05PX1BJQyA9IE5POworCQkJ
CUdDQ19FTkFCTEVfQ1BQX1JUVEkgPSBZRVM7CisJCQkJR0NDX0VOQUJMRV9GSVhfQU5EX0NPTlRJ
TlVFID0gWUVTOworCQkJCUdDQ19NT0RFTF9UVU5JTkcgPSBHNTsKKwkJCQlHQ0NfT1BUSU1JWkFU
SU9OX0xFVkVMID0gMDsKKwkJCQlJTlNUQUxMX1BBVEggPSAvdXNyL2xvY2FsL2JpbjsKKwkJCQlQ
UkVCSU5ESU5HID0gTk87CisJCQkJUFJPRFVDVF9OQU1FID0gV2ViQ29yZVVuaXRUZXN0czsKKwkJ
CX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCUE4NkQyRkEzMEU4MzNEMTQwMDBCQzM5NSAv
KiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWls
ZFNldHRpbmdzID0geworCQkJCUFMV0FZU19TRUFSQ0hfVVNFUl9QQVRIUyA9IE5POworCQkJCUNP
UFlfUEhBU0VfU1RSSVAgPSBZRVM7CisJCQkJREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0gImR3
YXJmLXdpdGgtZHN5bSI7CisJCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJIiQo
aW5oZXJpdGVkKSIsCisJCQkJCSIkKEZSQU1FV09SS19TRUFSQ0hfUEFUSFNfUVVPVEVEXzEpIiwK
KwkJCQkJIiQoRlJBTUVXT1JLX1NFQVJDSF9QQVRIU19RVU9URURfRk9SX1RBUkdFVF8xKSIsCisJ
CQkJCSIkKEZSQU1FV09SS19TRUFSQ0hfUEFUSFNfUVVPVEVEX0ZPUl9UQVJHRVRfMikiLAorCQkJ
CSk7CisJCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIU19RVU9URURfMSA9ICJcIiQoU1JDUk9PVCkv
Li4vLi4vYnVpbGQvRGVidWdcIiI7CisJCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIU19RVU9URURf
Rk9SX1RBUkdFVF8xID0gIlwiJChTUkNST09UKS8uLi8uLi9idWlsZC9EZWJ1Z1wiIjsKKwkJCQlG
UkFNRVdPUktfU0VBUkNIX1BBVEhTX1FVT1RFRF9GT1JfVEFSR0VUXzIgPSAiXCIkKFNSQ1JPT1Qp
Ly4uLy4uL2J1aWxkL0RlYnVnXCIiOworCQkJCUdDQ19FTkFCTEVfRklYX0FORF9DT05USU5VRSA9
IE5POworCQkJCUdDQ19NT0RFTF9UVU5JTkcgPSBHNTsKKwkJCQlJTlNUQUxMX1BBVEggPSAvdXNy
L2xvY2FsL2JpbjsKKwkJCQlQUkVCSU5ESU5HID0gTk87CisJCQkJUFJPRFVDVF9OQU1FID0gV2Vi
Q29yZVVuaXRUZXN0czsKKwkJCQlaRVJPX0xJTksgPSBOTzsKKwkJCX07CisJCQluYW1lID0gUmVs
ZWFzZTsKKwkJfTsKKwkJQTg2RDJGQTQwRTgzM0QxNDAwMEJDMzk1IC8qIFByb2R1Y3Rpb24gKi8g
PSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7
CisJCQkJQUxXQVlTX1NFQVJDSF9VU0VSX1BBVEhTID0gTk87CisJCQkJRlJBTUVXT1JLX1NFQVJD
SF9QQVRIUyA9ICgKKwkJCQkJIiQoaW5oZXJpdGVkKSIsCisJCQkJCSIkKEZSQU1FV09SS19TRUFS
Q0hfUEFUSFNfUVVPVEVEXzEpIiwKKwkJCQkJIiQoRlJBTUVXT1JLX1NFQVJDSF9QQVRIU19RVU9U
RURfRk9SX1RBUkdFVF8xKSIsCisJCQkJCSIkKEZSQU1FV09SS19TRUFSQ0hfUEFUSFNfUVVPVEVE
X0ZPUl9UQVJHRVRfMikiLAorCQkJCSk7CisJCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIU19RVU9U
RURfMSA9ICJcIiQoU1JDUk9PVCkvLi4vLi4vYnVpbGQvRGVidWdcIiI7CisJCQkJRlJBTUVXT1JL
X1NFQVJDSF9QQVRIU19RVU9URURfRk9SX1RBUkdFVF8xID0gIlwiJChTUkNST09UKS8uLi8uLi9i
dWlsZC9EZWJ1Z1wiIjsKKwkJCQlGUkFNRVdPUktfU0VBUkNIX1BBVEhTX1FVT1RFRF9GT1JfVEFS
R0VUXzIgPSAiXCIkKFNSQ1JPT1QpLy4uLy4uL2J1aWxkL0RlYnVnXCIiOworCQkJCUdDQ19FTkFC
TEVfRklYX0FORF9DT05USU5VRSA9IFlFUzsKKwkJCQlHQ0NfTU9ERUxfVFVOSU5HID0gRzU7CisJ
CQkJSU5TVEFMTF9QQVRIID0gL3Vzci9sb2NhbC9iaW47CisJCQkJUFJFQklORElORyA9IE5POwor
CQkJCVBST0RVQ1RfTkFNRSA9IFdlYkNvcmVVbml0VGVzdHM7CisJCQl9OworCQkJbmFtZSA9IFBy
b2R1Y3Rpb247CisJCX07CiAJCUREMDQxRkMyMDlEOUREREMwMDEwQUYyQSAvKiBEZWJ1ZyAqLyA9
IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25S
ZWZlcmVuY2UgPSAxQ0RENDVFNTBCQTlDODQ2MDBGOTAxNDcgLyogV2ViQ29yZS54Y2NvbmZpZyAq
LzsKQEAgLTE3ODI1LDYgKzE3OTU4LDE2IEBACiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlz
aWJsZSA9IDA7CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwogCQl9
OworCQlBODZEMkZBNTBFODMzRDNEMDAwQkMzOTUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhOYXRpdmVUYXJnZXQgIldlYkNvcmVVbml0VGVzdHMiICovID0geworCQkJaXNhID0g
WENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJQTg2
RDJGQTIwRTgzM0QxNDAwMEJDMzk1IC8qIERlYnVnICovLAorCQkJCUE4NkQyRkEzMEU4MzNEMTQw
MDBCQzM5NSAvKiBSZWxlYXNlICovLAorCQkJCUE4NkQyRkE0MEU4MzNEMTQwMDBCQzM5NSAvKiBQ
cm9kdWN0aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0g
MDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCURE
MDQxRkMxMDlEOUREREMwMDEwQUYyQSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WEFnZ3JlZ2F0ZVRhcmdldCAiRGVyaXZlZCBTb3VyY2VzIiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29u
ZmlndXJhdGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1JlZ3VsYXJFeHByZXNzaW9uVW5pdFRlc3RzLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9SZWd1bGFyRXhwcmVzc2lvblVuaXRUZXN0cy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0NTM0YgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9SZWd1bGFyRXhwcmVzc2lvblVuaXRUZXN0cy5jcHAKQEAg
LTAsMCArMSw4NSBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDA2LTIwMDggVGhlIENocm9taXVtIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgor
Cit1c2luZyBXZWJDb3JlOjpSZWd1bGFyRXhwcmVzc2lvbjsKK3VzaW5nIFdlYkNvcmU6OlN0cmlu
ZzsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgUmVnZXhUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRl
c3QgeworfTsKKworc3RydWN0IE1hdGNoIHsKKyAgICBTdHJpbmcgdGV4dDsKKyAgICBjb25zdCBp
bnQgcG9zaXRpb247CisgICAgY29uc3QgaW50IGxlbmd0aDsKK307CisKK3N0YXRpYyBpbmxpbmUg
U3RyaW5nIHN0cmluZ0Zyb21VQ1MzMihjb25zdCB3Y2hhcl90KiBzdHIpCit7CisgICAgcmV0dXJu
IFN0cmluZygpOworfQorCit9ICAvLyBuYW1lc3BhY2UKKworVEVTVChSZWdleFRlc3QsIEJhc2lj
KSB7CisgICAgLy8gSnVzdCBtYWtlIHN1cmUgd2UncmUgbm90IGNvbXBsZXRlbHkgYnJva2VuLgor
ICAgIGNvbnN0IFN0cmluZyBwYXR0ZXJuKCJ0aGUgcXVpY2sgYnJvd24gZm94Iik7CisgICAgUmVn
dWxhckV4cHJlc3Npb24gcmVnZXgocGF0dGVybiwgLyogY2FzZSBzZW5zaXRpdmUgKi8gdHJ1ZSk7
CisgICAgRVhQRUNUX0VRKDAsIHJlZ2V4Lm1hdGNoKCJ0aGUgcXVpY2sgYnJvd24gZm94IikpOwor
ICAgIEVYUEVDVF9FUSgxLCByZWdleC5tYXRjaCgiIHRoZSBxdWljayBicm93biBmb3giKSk7Cisg
ICAgRVhQRUNUX0VRKDMsIHJlZ2V4Lm1hdGNoKCJmb290aGUgcXVpY2sgYnJvd24gZm94YmFyIikp
OworCisgICAgRVhQRUNUX0VRKC0xLCByZWdleC5tYXRjaCgiVGhlIHF1aWNrIGJyb3duIEZPWCIp
KTsKKyAgICBFWFBFQ1RfRVEoLTEsIHJlZ2V4Lm1hdGNoKCJ0aGUgcXVpY2sgYnJvd24gZm8iKSk7
Cit9CisKKyNpZiAwCitURVNUKFJlZ2V4VGVzdCwgVW5pY29kZSkgeworICAgIC8vIE1ha2Ugc3Vy
ZSB3ZSBnZXQgdGhlIHJpZ2h0IG9mZnNldHMgZm9yIHVuaWNvZGUgc3RyaW5ncy4KKworICAgIC8v
IFRlc3QgMQorICAgIFN0cmluZyBwYXR0ZXJuID0gc3RyaW5nRnJvbVVDUzMyKEwiXHg2MjQwXHg2
NzA5XHg3ZjUxXHg5ODc1Iik7CisgICAgUmVndWxhckV4cHJlc3Npb24gcmVnZXgocGF0dGVybiwg
LyogY2FzZSBzZW5zaXRpdmUgKi8gZmFsc2UpOworCisgICAgRVhQRUNUX0VRKDAsIHJlZ2V4Lm1h
dGNoKHBhdHRlcm4pKTsKKyAgICBFWFBFQ1RfRVEoMSwgcmVnZXgubWF0Y2goU3RyaW5nKCIgIikg
KyBwYXR0ZXJuKSk7CisgICAgRVhQRUNUX0VRKDMsIHJlZ2V4Lm1hdGNoKChTdHJpbmcoImZvbyIp
ICsgcGF0dGVybiArIFN0cmluZygiYmFyIikpKSk7CisgICAgRVhQRUNUX0VRKDQsIHJlZ2V4Lm1h
dGNoKHN0cmluZ0Zyb21VQ1MzMihMIlx4NGUyZFx4NjU4N1x4N2Y1MVx4OTg3NSIpICsgcGF0dGVy
bikpOworCisgICAgLy8gVGVzdCAyLCBtaXhlZCBsZW5ndGgKKyAgICByZWdleCA9IFJlZ3VsYXJF
eHByZXNzaW9uKEwiOlsgXHgyMDAwXSs6IiksIC8qIGNhc2Ugc2Vuc2l0aXZlICovIGZhbHNlKTsK
KworICAgIGNvbnN0IE1hdGNoIG1hdGNoZXNbXSA9IHsKKyAgICAgICAgeyAiOiAgOiIsIDAsIDQg
fSwKKyAgICAgICAgeyAiICA6ICAgIDogICIsIDIsIDYgfSwKKyAgICAgICAgeyBzdHJpbmdGcm9t
VUNTMzIoTCIgOiBceDIwMDAgOiAiKSwgMSwgNSB9LAorICAgICAgICB7IHN0cmluZ0Zyb21VQ1Mz
MihMIlx4NjI0MFx4NjcwOVx4N2Y1MVx4OTg3NSA6IFx4MjAwMCBceDIwMDAgOiAiKSwgNSwgNyB9
LAorICAgICAgICB7ICIiLCAtMSwgLTEgfSwKKyAgICAgICAgeyAiOjoiLCAtMSwgLTEgfSwKKyAg
ICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKG1hdGNoZXMpOyArK2kp
IHsKKyAgICAgICAgRVhQRUNUX0VRKG1hdGNoZXNbaV0ucG9zaXRpb24sIHJlZ2V4Lm1hdGNoKG1h
dGNoZXNbaV0udGV4dCkpOworICAgICAgICBFWFBFQ1RfRVEobWF0Y2hlc1tpXS5sZW5ndGgsIHJl
Z2V4Lm1hdGNoZWRMZW5ndGgoKSk7CisgICAgfQorCisgICAgLy8gVGVzdCAzLCBlbXB0eSBtYXRj
aAorICAgIHJlZ2V4ID0gUmVndWxhckV4cHJlc3Npb24oInx4IiwgLyogY2FzZSBzZW5zaXRpdmUg
Ki8gZmFsc2UpOworCisgICAgY29uc3QgTWF0Y2ggbWF0Y2hlczJbXSA9IHsKKyAgICAgICAgeyAi
IiwgMCwgMCB9LAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheXNpemUo
bWF0Y2hlczIpOyArK2kpIHsKKyAgICAgICAgRVhQRUNUX0VRKG1hdGNoZXMyW2ldLnBvc2l0aW9u
LCByZWdleC5tYXRjaChtYXRjaGVzMltpXS50ZXh0KSk7CisgICAgICAgIEVYUEVDVF9FUShtYXRj
aGVzMltpXS5sZW5ndGgsIHJlZ2V4Lm1hdGNoZWRMZW5ndGgoKSk7CisgICAgfQorfQorI2VuZGlm
CisK
</data>

          </attachment>
      

    </bug>

</bugzilla>