<?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>49991</bug_id>
          
          <creation_ts>2010-11-23 14:03:03 -0800</creation_ts>
          <short_desc>Rebaseline server: list current baselines and platforms</short_desc>
          <delta_ts>2010-11-29 18:04:37 -0800</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>Other</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</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>
          
          <blocked>47761</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mihai Parparita">mihaip</reporter>
          <assigned_to name="Mihai Parparita">mihaip</assigned_to>
          <cc>dpranke</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>313010</commentid>
    <comment_count>0</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-23 14:03:03 -0800</bug_when>
    <thetext>Rebaseline server: list current baselines and platforms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313011</commentid>
    <comment_count>1</comment_count>
      <attachid>74695</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-23 14:04:05 -0800</bug_when>
    <thetext>Created attachment 74695
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313041</commentid>
    <comment_count>2</comment_count>
      <attachid>74695</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-11-23 15:32:07 -0800</bug_when>
    <thetext>Comment on attachment 74695
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=74695&amp;action=review

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py:65
&gt; +        return &apos;/&apos;.join(trimmed_comps)

I guess unittests hard code the expectation of &apos;/&apos; instead of using os.sep?

&gt; WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:93
&gt; +        platforms.platforms.forEach(function(platform) {
&gt; +          var platformOption = document.createElement(&apos;option&apos;);
&gt; +          platformOption.value = platform;

Nit: 4 space indent

&gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:202
&gt; +    for baseline_extension in [&apos;.txt&apos;, &apos;.checksum&apos;, &apos;.png&apos;]:

Nit: () instead of []

&gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver_unittest.py:65
&gt; +                &apos;base&apos;: [&apos;.txt&apos;],
&gt; +                &apos;mac&apos;: [&apos;.checksum&apos;, &apos;.png&apos;],
&gt; +                &apos;win&apos;: [&apos;.checksum&apos;, &apos;.png&apos;],

() is normally preferred over [] (it&apos;s a tiny bit faster and enforces const-ness), but for single item lists, it&apos;s a bit more error prone since you need to remember the trailing comma.  Anyway, either way is fine here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313064</commentid>
    <comment_count>3</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-23 16:12:46 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 74695 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74695&amp;action=review
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py:65
&gt; &gt; +        return &apos;/&apos;.join(trimmed_comps)
&gt; 
&gt; I guess unittests hard code the expectation of &apos;/&apos; instead of using os.sep?

I guess so. Dirk can say for sure, MockFileSystem was recently added by him.

&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:93
&gt; &gt; +        platforms.platforms.forEach(function(platform) {
&gt; &gt; +          var platformOption = document.createElement(&apos;option&apos;);
&gt; &gt; +          platformOption.value = platform;
&gt; 
&gt; Nit: 4 space indent

Fixed.

&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:202
&gt; &gt; +    for baseline_extension in [&apos;.txt&apos;, &apos;.checksum&apos;, &apos;.png&apos;]:
&gt; 
&gt; Nit: () instead of []

Fixed.

&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver_unittest.py:65
&gt; &gt; +                &apos;base&apos;: [&apos;.txt&apos;],
&gt; &gt; +                &apos;mac&apos;: [&apos;.checksum&apos;, &apos;.png&apos;],
&gt; &gt; +                &apos;win&apos;: [&apos;.checksum&apos;, &apos;.png&apos;],
&gt; 
&gt; () is normally preferred over [] (it&apos;s a tiny bit faster and enforces const-ness), but for single item lists, it&apos;s a bit more error prone since you need to remember the trailing comma.  Anyway, either way is fine here.

Switched to ().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313065</commentid>
    <comment_count>4</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-23 16:12:54 -0800</bug_when>
    <thetext>Committed r72640: &lt;http://trac.webkit.org/changeset/72640&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313071</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-23 16:20:37 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 74695 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74695&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py:65
&gt; &gt; &gt; +        return &apos;/&apos;.join(trimmed_comps)
&gt; &gt; 
&gt; &gt; I guess unittests hard code the expectation of &apos;/&apos; instead of using os.sep?
&gt; 
&gt; I guess so. Dirk can say for sure, MockFileSystem was recently added by him.
&gt;

I&apos;m not quite sure which &quot;unittests&quot; are being referred to here, but filesystem_mock is intended to provide predictable deterministic output regardless of what platform you&apos;re actually running on. At some point I was thinking that this made writing tests easier because you could assume &apos;/&apos; in the output, as you say. Thinking about it now, though, it might&apos;ve been better to expose a filesystem.sep and use something like &quot;--SEPARATOR--&quot; as the value provided by the Mock, just to catch people that were assuming &quot;/&quot; in their paths.

Thoughts?

-- Dirk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313076</commentid>
    <comment_count>6</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-23 16:30:05 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Thinking about it now, though, it might&apos;ve been better to expose a filesystem.sep and use something like &quot;--SEPARATOR--&quot; as the value provided by the Mock, just to catch people that were assuming &quot;/&quot; in their paths.

Sure, I like that plan. Might as well do it before too many usages of (Mock)Filesystem crop up. Want me to do it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313077</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-23 16:34:44 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Thinking about it now, though, it might&apos;ve been better to expose a filesystem.sep and use something like &quot;--SEPARATOR--&quot; as the value provided by the Mock, just to catch people that were assuming &quot;/&quot; in their paths.
&gt; 
&gt; Sure, I like that plan. Might as well do it before too many usages of (Mock)Filesystem crop up. Want me to do it?

Sure, if you like, that would be great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313078</commentid>
    <comment_count>8</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-11-23 16:36:45 -0800</bug_when>
    <thetext>FWIW, I think it&apos;s always safe to use &apos;/&apos; as a path separator (works fine on Windows too).  However if a test has a call to os.path.abspath or os.path.normpath, the test might have a different result on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313082</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-23 16:43:11 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; FWIW, I think it&apos;s always safe to use &apos;/&apos; as a path separator (works fine on Windows too).  However if a test has a call to os.path.abspath or os.path.normpath, the test might have a different result on Windows.

I think it depends on the context. I&apos;ve certainly seen bugs where I&apos;ve called out to the shell and passed it filenames with a &apos;/&apos; and the binary wanted &apos;\&apos;. I think you need to be careful about in-cygwin vs. not-in-cygwin code paths and cygwin vs. win32 binaries. I think cygwin is supposed to convert paths in some cases but it doesn&apos;t/can&apos;t always do the right thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313087</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-23 16:52:23 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Thinking about it now, though, it might&apos;ve been better to expose a filesystem.sep and use something like &quot;--SEPARATOR--&quot; as the value provided by the Mock, just to catch people that were assuming &quot;/&quot; in their paths.
&gt; 
&gt; Sure, I like that plan. Might as well do it before too many usages of (Mock)Filesystem crop up. Want me to do it?

Hm. I remember now. It is partially because it&apos;s a pain to create sample data for a mock filesystem otherwise.

I make extensive use of the mock filesystem in the patch to bug 48072 (which hasn&apos;t landed yet). At that point, the filesystem wasn&apos;t really a mock anymore, and so I renamed it to in_memory_filesystem, where I felt comfortable using &apos;/&apos; as the separator. 

Given that, we can still make the --SEPARATOR-- change as described above, because it might still catch some bugs. The downside is that we might end up with more scaffolding code to maintain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313449</commentid>
    <comment_count>11</comment_count>
      <attachid>74695</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-24 13:54:49 -0800</bug_when>
    <thetext>Comment on attachment 74695
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=74695&amp;action=review

&gt;&gt;&gt;&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py:65
&gt;&gt;&gt;&gt; +        return &apos;/&apos;.join(trimmed_comps)
&gt;&gt;&gt; 
&gt;&gt;&gt; I guess unittests hard code the expectation of &apos;/&apos; instead of using os.sep?
&gt;&gt; 
&gt;&gt; I guess so. Dirk can say for sure, MockFileSystem was recently added by him.
&gt; 
&gt; I&apos;m not quite sure which &quot;unittests&quot; are being referred to here, but filesystem_mock is intended to provide predictable deterministic output regardless of what platform you&apos;re actually running on. At some point I was thinking that this made writing tests easier because you could assume &apos;/&apos; in the output, as you say. Thinking about it now, though, it might&apos;ve been better to expose a filesystem.sep and use something like &quot;--SEPARATOR--&quot; as the value provided by the Mock, just to catch people that were assuming &quot;/&quot; in their paths.
&gt; 
&gt; Thoughts?
&gt; 
&gt; -- Dirk

Thinking about this more, what was the code path that triggered the need for this change? The only place I see you doing this is in rebaseline_unittest:_assertBaselines, which doesn&apos;t look like the comps should have a trailing slash (I don&apos;t think layout_test_dir() returns something with a trailing slash). My concern is that this is possibly papering over incorrect usage of paths with hard-coded forward slashes.

Did I miss something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314781</commentid>
    <comment_count>12</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-29 17:57:10 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Thinking about this more, what was the code path that triggered the need for this change? 
&gt;
&gt;The only place I see you doing this is in rebaseline_unittest:_assertBaselines, which doesn&apos;t look like the comps should have a trailing slash (I don&apos;t think layout_test_dir() returns something with a trailing slash). 
&gt;
&gt; My concern is that this is possibly papering over incorrect usage of paths with hard-coded forward slashes.
&gt; 
&gt; Did I miss something?

Digging more into this, it&apos;s because config.webkit_base_dir returns a path with a trailing slash. We then join that with &apos;LayoutTests&apos; in layout_tests_dir/path_from_webkit_base, so we would end up with path/to/webkitcheckout//layouttests.

I can make config.webkit_base_dir chop off the trailing slash, since that seems more correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314786</commentid>
    <comment_count>13</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-29 18:04:37 -0800</bug_when>
    <thetext>(In reply to comment #12):
&gt; I can make config.webkit_base_dir chop off the trailing slash, since that seems more correct.

Uploaded a patch to bug 50197 to make this change.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74695</attachid>
            <date>2010-11-23 14:04:05 -0800</date>
            <delta_ts>2010-11-24 13:54:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49991-20101123140404.patch</filename>
            <type>text/plain</type>
            <size>19254</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA1MWM3MDA5NjRkOWQ1MzliMmQ0Y2VkZWU4MjY0MTI5ZWM5YmU2OGNhLi5jM2VhY2Rm
ZDUzNjg0OThiY2U5MTQ3Y2JiY2M2YjFmN2ZiNzA4YjA2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAK
KzIwMTAtMTEtMjMgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmViYXNlbGluZSBz
ZXJ2ZXI6IGxpc3QgY3VycmVudCBiYXNlbGluZXMgYW5kIHBsYXRmb3JtcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk5OTEKKyAgICAgICAgCisgICAg
ICAgIExpc3QgZXhpc3RpbmcgYmFzZWxpbmVzICh3aXRoIFRyYWMgbGlua3MpIGZvciB0ZXN0cy4K
KyAgICAgICAgCisgICAgICAgIEFkZCBkcm9wZG93bnMgZm9yIGNob29zaW5nIHdpdGggcGxhdGZv
cm0gYmFzZWxpbmVzIHRvIHRhcmdldCAoYW5kIHdoYXQKKyAgICAgICAgdG8gZG8gd2l0aCBleGlz
dGluZyBvbmVzKS4KKworICAgICAgICBBbHNvIGZpeCBNb2NrRmlsZVN5c3RlbS5qb2luIHRvIGJl
aGF2ZSBtb3JlIGxpa2Ugb3MucGF0aC5qb2luICh1bml0CisgICAgICAgIHRlc3Qgd2FzIGVuZGlu
ZyB1cCB3aXRoIHR3byBjb25zZWN1dGl2ZSBzbGFzaGVzIGluIGEgbGF5b3V0IHRlc3QKKyAgICAg
ICAgcGF0aCkuICAgICAgICAKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9maWxlc3lzdGVtX21vY2sucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29s
L2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9pbmRleC5odG1sOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvbWFpbi5j
c3M6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNl
bGluZXNlcnZlci9tYWluLmpzOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvcXVldWUuanM6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci91dGlsLmpzOgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lc2VydmVyLnB5
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lc2Vy
dmVyX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKwogMjAxMC0xMS0yMiAgSGF5YXRvIEl0byAgPGhheWF0
b0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2hpbmljaGlybyBIYW1hamku
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZXN5c3RlbV9tb2NrLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weQppbmRleCBkMmNkZTRmNTJlYmIzZTM2NDlkOTkyZTYy
ZTc5ODYxMDAxODkxYTExLi40OTM2ZWM1MDQxNzk3MmEzZTAwODNkNGJkOWJlNzNjM2E3YTNmMjA2
IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZXN5c3RlbV9tb2NrLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkKQEAgLTUzLDcgKzUzLDE2IEBAIGNsYXNzIE1v
Y2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgZGVmIGpv
aW4oc2VsZiwgKmNvbXBzKToKLSAgICAgICAgcmV0dXJuICcvJy5qb2luKGNvbXBzKQorICAgICAg
ICAjIG9zLnBhdGguam9pbiBpZ25vcmVzIHRyYWlsaW5nIHNsYXNoZXMgb24gY29tcG9uZW50cyAo
aS5lLgorICAgICAgICAjIGpvaW4oJ2Zvby8nLCAnYmFyJykgYW5kIGpvaW4oJ2ZvbycsICdiYXIn
KSBwcm9kdWNlIHRoZSBzYW1lIHJlc3VsdCksCisgICAgICAgICMgd2UgZW11bGF0ZSB0aGF0IGJl
aGF2aW9yLgorICAgICAgICB0cmltbWVkX2NvbXBzID0gW10KKyAgICAgICAgZm9yIGNvbXAgaW4g
Y29tcHM6CisgICAgICAgICAgICBpZiBsZW4oY29tcCkgYW5kIGNvbXBbLTFdID09ICcvJzoKKyAg
ICAgICAgICAgICAgICB0cmltbWVkX2NvbXBzLmFwcGVuZChjb21wWzA6LTFdKQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cmltbWVkX2NvbXBzLmFwcGVuZChjb21wKQorICAg
ICAgICByZXR1cm4gJy8nLmpvaW4odHJpbW1lZF9jb21wcykKIAogICAgIGRlZiBtYXliZV9tYWtl
X2RpcmVjdG9yeShzZWxmLCAqcGF0aCk6CiAgICAgICAgICMgRklYTUU6IEltcGxlbWVudCBzdWNo
IHRoYXQgc3Vic2VxdWVudCBjYWxscyB0byBpc2RpcigpIHdvcms/CmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2Vy
dmVyL2luZGV4Lmh0bWwgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFu
ZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVyL2luZGV4Lmh0bWwKaW5kZXggNTEzM2RkYjYxODUwYTM4
MDdkNTYyYjk2MDA1M2VjZTZiNjNmZTI1ZS4uNWI1ODMwMWJlNzQyZjg4NWM4NmExNjdlZGMxOWNk
MWJlNGE2YTQ1ZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29s
L2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9pbmRleC5odG1sCisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIv
aW5kZXguaHRtbApAQCAtNzMsNyArNzMsNyBAQAogICAgIDwvbGFiZWw+CiAgIDwvc3Bhbj4KIAot
ICA8YSBpZD0idGVzdC1saW5rIj5WaWV3IHRlc3Q8L2E+CisgIDxhIGlkPSJ0ZXN0LWxpbmsiIHRh
cmdldD0iX2JsYW5rIj5WaWV3IHRlc3Q8L2E+CiAKICAgPHNwYW4gaWQ9Im5hdi1idXR0b25zIj4K
ICAgICA8YnV0dG9uIGlkPSJwcmV2aW91cy10ZXN0Ij4mbGFxdW87PC9idXR0b24+CkBAIC0xMjEs
OSArMTIxLDIwIEBACiAKIDxkaXYgaWQ9ImZvb3RlciI+CiAgIDxsYWJlbD5TdGF0ZTogPHNwYW4g
aWQ9InN0YXRlIj48L3NwYW4+PC9sYWJlbD4KLQotICA8IS0tIEFkZCBhIGR1bW15IDxidXR0b24+
IG5vZGUgc28gdGhhdCB0aGlzIGxpbmVzIHVwIHdpdGggdGhlIHRleHQgb24gdGhlIGxlZnQgLS0+
Ci0gIDxidXR0b24gc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbiI+PC9idXR0b24+CisgIDxsYWJl
bD5FeGlzdGluZyBiYXNlbGluZXM6IDxzcGFuIGlkPSJjdXJyZW50LWJhc2VsaW5lcyI+PC9zcGFu
PjwvbGFiZWw+CisgIDxsYWJlbD4KKyAgICBCYXNlbGluZSB0YXJnZXQ6CisgICAgPHNlbGVjdCBp
ZD0iYmFzZWxpbmUtdGFyZ2V0Ij48L3NlbGVjdD4KKyAgPC9sYWJlbD4KKyAgPGxhYmVsPgorICAg
IE1vdmUgY3VycmVudCBiYXNlbGluZXMgdG86CisgICAgPHNlbGVjdCBpZD0iYmFzZWxpbmUtbW92
ZS10byI+CisgICAgICA8b3B0aW9uIHZhbHVlPSJub25lIj5Ob3doZXJlIChyZXBsYWNlKTwvb3B0
aW9uPgorICAgIDwvc2VsZWN0PgorICA8L2xhYmVsPgorCisgIDwhLS0gQWRkIGEgZHVtbXkgPGJ1
dHRvbj4gbm9kZSBzbyB0aGF0IHRoaXMgbGluZXMgdXAgd2l0aCB0aGUgdGV4dCBvbiB0aGUgcmln
aHQgLS0+CisgIDxidXR0b24gc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsgcGFkZGluZy1sZWZ0
OiAwOyBwYWRkaW5nLXJpZ2h0OiAwOyI+PC9idXR0b24+CiAKICAgPGRpdiBpZD0iYWN0aW9uLWJ1
dHRvbnMiPgogICAgIDxzcGFuIGlkPSJ0b2dnbGUtcXVldWUiIGNsYXNzPSJsaW5rIj5RdWV1ZTwv
c3Bhbj4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvbWFpbi5jc3MgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVyL21haW4uY3NzCmlu
ZGV4IDgxOTgzYWI0MjhmYzY4NjliMWZhNmE3N2JjNzdjNzE3NmJiYjU5OTMuLjYyYWZkYTY4YjU4
YWM2NDRkZmEwZDM4ODI3NGE3ZGU5ZGZiMDNhYTYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvbWFpbi5j
c3MKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEv
cmViYXNlbGluZXNlcnZlci9tYWluLmNzcwpAQCAtMTA5LDcgKzEwOSw4IEBAIGEsIC5saW5rIHsK
ICAgbWFyZ2luLXJpZ2h0OiAxZW07CiB9CiAKLSNoZWFkZXIgbGFiZWwgc3BhbiB7CisjaGVhZGVy
IGxhYmVsIHNwYW4sCisjZm9vdGVyIGxhYmVsIHNwYW4gewogICBjb2xvcjogI2ZmZjsKICAgZm9u
dC13ZWlnaHQ6IGJvbGQ7CiB9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVyL21haW4uanMgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVy
L21haW4uanMKaW5kZXggYzVkY2IzNjRmOTQzOWZhMDI2Nzg2Zjk1NzA5ZTY1M2FjYzYxYzMzNy4u
MzEwOTdhZmVmYjcxOTRmYzIzNTkxZWNlNWMxMTFmMmRjNDM3ODY1MCAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNl
cnZlci9tYWluLmpzCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvbWFpbi5qcwpAQCAtODYsNiArODYsMjAgQEAgZnVu
Y3Rpb24gbWFpbigpCiAgICAgICAgIH0KICAgICB9KTsKIAorICAgIGxvYWRUZXh0KCcvcGxhdGZv
cm1zLmpzb24nLCBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgIHZhciBwbGF0Zm9ybXMgPSBKU09O
LnBhcnNlKHRleHQpOworICAgICAgICBwbGF0Zm9ybXMucGxhdGZvcm1zLmZvckVhY2goZnVuY3Rp
b24ocGxhdGZvcm0pIHsKKyAgICAgICAgICB2YXIgcGxhdGZvcm1PcHRpb24gPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdvcHRpb24nKTsKKyAgICAgICAgICBwbGF0Zm9ybU9wdGlvbi52YWx1ZSA9
IHBsYXRmb3JtOworICAgICAgICAgIHBsYXRmb3JtT3B0aW9uLnRleHRDb250ZW50ID0gcGxhdGZv
cm07CisKKyAgICAgICAgICB2YXIgdGFyZ2V0T3B0aW9uID0gcGxhdGZvcm1PcHRpb24uY2xvbmVO
b2RlKHRydWUpOworICAgICAgICAgIHRhcmdldE9wdGlvbi5zZWxlY3RlZCA9IHBsYXRmb3JtID09
IHBsYXRmb3Jtcy5kZWZhdWx0UGxhdGZvcm07CisgICAgICAgICAgJCgnYmFzZWxpbmUtdGFyZ2V0
JykuYXBwZW5kQ2hpbGQodGFyZ2V0T3B0aW9uKTsKKyAgICAgICAgICAkKCdiYXNlbGluZS1tb3Zl
LXRvJykuYXBwZW5kQ2hpbGQocGxhdGZvcm1PcHRpb24uY2xvbmVOb2RlKHRydWUpKTsKKyAgICAg
ICAgfSk7CisgICAgfSk7CisKICAgICBsb2FkVGV4dCgnL3Jlc3VsdHMuanNvbicsIGZ1bmN0aW9u
KHRleHQpIHsKICAgICAgICAgcmVzdWx0cyA9IEpTT04ucGFyc2UodGV4dCk7CiAgICAgICAgIGRp
c3BsYXlSZXN1bHRzKCk7CkBAIC0yMzUsNiArMjQ5LDM3IEBAIGZ1bmN0aW9uIHNlbGVjdFRlc3Qo
KQogICAgICAgICAkKCd0ZXh0LW91dHB1dHMnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAg
IH0KIAorICAgIHZhciBjdXJyZW50QmFzZWxpbmVzID0gJCgnY3VycmVudC1iYXNlbGluZXMnKTsK
KyAgICBjdXJyZW50QmFzZWxpbmVzLnRleHRDb250ZW50ID0gJyc7CisgICAgdmFyIGJhc2VsaW5l
cyA9IHJlc3VsdHMudGVzdHNbc2VsZWN0ZWRUZXN0XS5iYXNlbGluZXM7CisgICAgdmFyIHRlc3RO
YW1lID0gc2VsZWN0ZWRUZXN0LnNwbGl0KCcuJykuc2xpY2UoMCwgLTEpLmpvaW4oJy4nKTsKKyAg
ICBmb3IgKHZhciBwbGF0Zm9ybSBpbiBiYXNlbGluZXMpIHsKKyAgICAgICAgaWYgKGN1cnJlbnRC
YXNlbGluZXMuZmlyc3RDaGlsZCkgeworICAgICAgICAgICAgY3VycmVudEJhc2VsaW5lcy5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnOyAnKSk7CisgICAgICAgIH0KKyAgICAg
ICAgY3VycmVudEJhc2VsaW5lcy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShw
bGF0Zm9ybSArICcgKCcpKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGV4dGVuc2lvbjsgZXh0
ZW5zaW9uID0gYmFzZWxpbmVzW3BsYXRmb3JtXVtpXTsgaSsrKSB7CisgICAgICAgICAgICBpZiAo
aSAhPSAwKSB7CisgICAgICAgICAgICAgICAgY3VycmVudEJhc2VsaW5lcy5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnLCAnKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKKyAgICAgICAgICAgIHZh
ciBiYXNlbGluZVBhdGggPSAnJzsKKyAgICAgICAgICAgIGlmIChwbGF0Zm9ybSAhPSAnYmFzZScp
IHsKKyAgICAgICAgICAgICAgICBiYXNlbGluZVBhdGggKz0gJ3BsYXRmb3JtLycgKyBwbGF0Zm9y
bSArICcvJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJhc2VsaW5lUGF0aCArPSB0ZXN0
TmFtZSArICctZXhwZWN0ZWQnICsgZXh0ZW5zaW9uOworICAgICAgICAgICAgbGluay5ocmVmID0g
Z2V0VHJhY1VybChiYXNlbGluZVBhdGgpOworICAgICAgICAgICAgaWYgKGV4dGVuc2lvbiA9PSAn
LmNoZWNrc3VtJykgeworICAgICAgICAgICAgICAgIGxpbmsudGV4dENvbnRlbnQgPSAnY2hrJzsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbGluay50ZXh0Q29udGVudCA9
IGV4dGVuc2lvbi5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsaW5r
LnRhcmdldCA9ICdfYmxhbmsnOworICAgICAgICAgICAgY3VycmVudEJhc2VsaW5lcy5hcHBlbmRD
aGlsZChsaW5rKTsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50QmFzZWxpbmVzLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcpJykpOworICAgIH0KKwogICAgIHVwZGF0ZVN0
YXRlKCk7CiAgICAgbG91cGUuaGlkZSgpOwogCkBAIC0yNjUsOCArMzEwLDcgQEAgZnVuY3Rpb24g
dXBkYXRlU3RhdGUoKQogICAgICQoJ25leHQtdGVzdCcpLmRpc2FibGVkID0gdGVzdEluZGV4ID09
IHRlc3RDb3VudCAtIDE7CiAgICAgJCgncHJldmlvdXMtdGVzdCcpLmRpc2FibGVkID0gdGVzdElu
ZGV4ID09IDA7CiAKLSAgICAkKCd0ZXN0LWxpbmsnKS5ocmVmID0KLSAgICAgICAgJ2h0dHA6Ly90
cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9MYXlvdXRUZXN0cy8nICsgdGVzdE5hbWU7Cisg
ICAgJCgndGVzdC1saW5rJykuaHJlZiA9IGdldFRyYWNVcmwodGVzdE5hbWUpOwogCiAgICAgdmFy
IHN0YXRlID0gcmVzdWx0cy50ZXN0c1t0ZXN0TmFtZV0uc3RhdGU7CiAgICAgJCgnc3RhdGUnKS5j
bGFzc05hbWUgPSBzdGF0ZTsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9jb21tYW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvcXVldWUuanMgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVy
L3F1ZXVlLmpzCmluZGV4IDMyODIzNjJiYWRlY2I2NjU1OWM1MmQzZmYzNWIwNjNmZjc5ZDdjNzgu
LmY1N2M5MTk1OTllMjc4MDBiODk4Y2Q5M2Y3Y2NhYzhhODg3NjlkOTkgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL3JlYmFzZWxpbmVz
ZXJ2ZXIvcXVldWUuanMKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2Nv
bW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9xdWV1ZS5qcwpAQCAtMTQzLDEzICsxNDMsMTYg
QEAgUmViYXNlbGluZVF1ZXVlLnByb3RvdHlwZS5yZWJhc2VsaW5lID0gZnVuY3Rpb24oKQogCiBS
ZWJhc2VsaW5lUXVldWUucHJvdG90eXBlLl9yZWJhc2VsaW5lVGVzdCA9IGZ1bmN0aW9uKHRlc3RO
YW1lKQogeworICAgIHZhciBiYXNlbGluZVRhcmdldCA9IGdldFNlbGVjdFZhbHVlKCdiYXNlbGlu
ZS10YXJnZXQnKTsKKyAgICB2YXIgYmFzZWxpbmVNb3ZlVG8gPSBnZXRTZWxlY3RWYWx1ZSgnYmFz
ZWxpbmUtbW92ZS10bycpOworCiAgICAgLy8gRklYTUU6IGFjdHVhbGx5IHJlYmFzZWxpbmUKLSAg
ICBsb2coJ1JlYmFzZWxpbmluZyAnICsgdGVzdE5hbWUgKyAnLi4uJyk7CisgICAgbG9nKCdSZWJh
c2VsaW5pbmcgJyArIHRlc3ROYW1lICsgJyBmb3IgcGxhdGZvcm0gJyArIGJhc2VsaW5lVGFyZ2V0
ICsgJy4uLicpOwogICAgIHZhciB0ZXN0ID0gcmVzdWx0cy50ZXN0c1t0ZXN0TmFtZV07CiAgICAg
dGhpcy5fcmVtb3ZlVGVzdCh0ZXN0TmFtZSk7CiAgICAgdGhpcy5faW5Qcm9ncmVzc1JlYmFzZWxp
bmVDb3VudC0tOwogICAgIHRlc3Quc3RhdGUgPSBTVEFURV9SRUJBU0VMSU5FX1NVQ0NFRURFRDsK
ICAgICB1cGRhdGVTdGF0ZSgpOwogICAgIGxvZygnUmViYXNlbGluZWQgYWRkIHRlc3Qgd2l0aCBz
dGF0ZSAnICsgdGVzdC5zdGF0ZSArICcgdG8gcXVldWUnLAotICAgICAgICBsb2cuU1VDQ0VTUyk7
ICAgIAorICAgICAgICBsb2cuU1VDQ0VTUyk7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci91dGls
LmpzIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmVi
YXNlbGluZXNlcnZlci91dGlsLmpzCmluZGV4IDIxM2VlZDk3NDg5ZjZmZTI0MWYyODRlM2JmZDM5
ODMyZTkwNjRhZDMuLmIzNDg0NjIxMTlhMzhmMmYzNDYzOGRiYzkyNjU0ZTNiNGFiMTI0MGYgMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRh
L3JlYmFzZWxpbmVzZXJ2ZXIvdXRpbC5qcworKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVyL3V0aWwuanMKQEAgLTg3LDMg
Kzg3LDggQEAgZnVuY3Rpb24gdG9nZ2xlKGlkKQogICAgICAgICB0b2dnbGVyLmNsYXNzTmFtZSA9
ICdsaW5rJzsKICAgICB9CiB9CisKK2Z1bmN0aW9uIGdldFRyYWNVcmwobGF5b3V0VGVzdFBhdGgp
Cit7CisgIHJldHVybiAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL0xheW91
dFRlc3RzLycgKyBsYXlvdXRUZXN0UGF0aDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMv
cmViYXNlbGluZXNlcnZlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9j
b21tYW5kcy9yZWJhc2VsaW5lc2VydmVyLnB5CmluZGV4IDhiNDI2YTg0MGRkY2Y0M2RhM2MwMTE3
MzdlNzU3OWM0NDcwZWU5MWEuLjU1YzdmYjBmOGU0NzM5MmE3YzAzMjJjNGI2Mjc3NDZhMTA0N2Fm
YjkgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9yZWJhc2VsaW5lc2VydmVyLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lc2VydmVyLnB5CkBAIC00NSwxOCArNDUsMjIgQEAgaW1w
b3J0IEJhc2VIVFRQU2VydmVyCiBmcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbgogZnJv
bSB3c2dpcmVmLmhhbmRsZXJzIGltcG9ydCBmb3JtYXRfZGF0ZV90aW1lCiAKK2Zyb20gd2Via2l0
cHkuY29tbW9uIGltcG9ydCBzeXN0ZW0KK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQg
aW1wb3J0IGZhY3RvcnkKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQud2Via2l0IGlt
cG9ydCBXZWJLaXRQb3J0CiBmcm9tIHdlYmtpdHB5LnRvb2wubXVsdGljb21tYW5kdG9vbCBpbXBv
cnQgQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQKLWltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5
LnNpbXBsZWpzb24gYXMgc2ltcGxlanNvbgorZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5IGltcG9y
dCBzaW1wbGVqc29uCiAKIFNUQVRFX05FRURTX1JFQkFTRUxJTkUgPSAnbmVlZHNfcmViYXNlbGlu
ZScKIFNUQVRFX1JFQkFTRUxJTkVfRkFJTEVEID0gJ3JlYmFzZWxpbmVfZmFpbGVkJwogU1RBVEVf
UkVCQVNFTElORV9TVUNDRUVERUQgPSAncmViYXNlbGluZV9zdWNjZWVkZWQnCiAKIGNsYXNzIFJl
YmFzZWxpbmVIVFRQU2VydmVyKEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBodHRwZF9wb3J0LCByZXN1bHRzX2RpcmVjdG9yeSwgcmVzdWx0c19qc29u
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaHR0cGRfcG9ydCwgcmVzdWx0c19kaXJlY3Rvcnks
IHJlc3VsdHNfanNvbiwgcGxhdGZvcm1zX2pzb24pOgogICAgICAgICBCYXNlSFRUUFNlcnZlci5I
VFRQU2VydmVyLl9faW5pdF9fKHNlbGYsICgiIiwgaHR0cGRfcG9ydCksIFJlYmFzZWxpbmVIVFRQ
UmVxdWVzdEhhbmRsZXIpCiAgICAgICAgIHNlbGYucmVzdWx0c19kaXJlY3RvcnkgPSByZXN1bHRz
X2RpcmVjdG9yeQogICAgICAgICBzZWxmLnJlc3VsdHNfanNvbiA9IHJlc3VsdHNfanNvbgorICAg
ICAgICBzZWxmLnBsYXRmb3Jtc19qc29uID0gcGxhdGZvcm1zX2pzb24KIAogCiBjbGFzcyBSZWJh
c2VsaW5lSFRUUFJlcXVlc3RIYW5kbGVyKEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhh
bmRsZXIpOgpAQCAtMTQ2LDEwICsxNTAsMTYgQEAgY2xhc3MgUmViYXNlbGluZUhUVFBSZXF1ZXN0
SGFuZGxlcihCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyKToKICAgICAgICAg
c2VsZi5fc2VydmVfZmlsZShmaWxlX3BhdGgsIGNhY2hlYWJsZV9zZWNvbmRzPTYwKQogCiAgICAg
ZGVmIHJlc3VsdHNfanNvbihzZWxmKToKKyAgICAgICAgc2VsZi5fc2VydmVfanNvbihzZWxmLnNl
cnZlci5yZXN1bHRzX2pzb24pCisKKyAgICBkZWYgcGxhdGZvcm1zX2pzb24oc2VsZik6CisgICAg
ICAgIHNlbGYuX3NlcnZlX2pzb24oc2VsZi5zZXJ2ZXIucGxhdGZvcm1zX2pzb24pCisKKyAgICBk
ZWYgX3NlcnZlX2pzb24oc2VsZiwganNvbik6CiAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgy
MDApCiAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlv
bi9qc29uJykKICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCi0gICAgICAgIHNpbXBsZWpzb24u
ZHVtcChzZWxmLnNlcnZlci5yZXN1bHRzX2pzb24sIHNlbGYud2ZpbGUpCisgICAgICAgIHNpbXBs
ZWpzb24uZHVtcChqc29uLCBzZWxmLndmaWxlKQogCiAgICAgZGVmIF9zZXJ2ZV9maWxlKHNlbGYs
IGZpbGVfcGF0aCwgY2FjaGVhYmxlX3NlY29uZHM9MCk6CiAgICAgICAgIGlmIG5vdCBvcy5wYXRo
LmV4aXN0cyhmaWxlX3BhdGgpOgpAQCAtMTczLDYgKzE4Myw0MCBAQCBjbGFzcyBSZWJhc2VsaW5l
SFRUUFJlcXVlc3RIYW5kbGVyKEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIp
OgogICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlb2JqKHN0YXRpY19maWxlLCBzZWxmLndmaWxl
KQogCiAKK2RlZiBfZ2V0X3Rlc3RfYmFzZWxpbmVzKHRlc3RfZmlsZSwgbGF5b3V0X3Rlc3RzX2Rp
cmVjdG9yeSwgcGxhdGZvcm1zLCBmaWxlc3lzdGVtKToKKyAgICBjbGFzcyBBbGxQbGF0Zm9ybXNQ
b3J0KFdlYktpdFBvcnQpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAg
ICBXZWJLaXRQb3J0Ll9faW5pdF9fKHNlbGYsIGZpbGVzeXN0ZW09ZmlsZXN5c3RlbSkKKyAgICAg
ICAgICAgIHNlbGYuX3BsYXRmb3Jtc19ieV9kaXJlY3RvcnkgPSBkaWN0KAorICAgICAgICAgICAg
ICAgIFsoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgocCksIHApIGZvciBwIGluIHBsYXRmb3Jt
c10pCisKKyAgICAgICAgZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuX3BsYXRmb3Jtc19ieV9kaXJlY3Rvcnkua2V5cygpCisKKyAgICAgICAg
ZGVmIHBsYXRmb3JtX2Zyb21fZGlyZWN0b3J5KHNlbGYsIGRpcmVjdG9yeSk6CisgICAgICAgICAg
ICByZXR1cm4gc2VsZi5fcGxhdGZvcm1zX2J5X2RpcmVjdG9yeVtkaXJlY3RvcnldCisKKyAgICBh
bGxfcGxhdGZvcm1zX3BvcnQgPSBBbGxQbGF0Zm9ybXNQb3J0KCkKKworICAgIHRlc3RfYmFzZWxp
bmVzID0ge30KKyAgICBmb3IgYmFzZWxpbmVfZXh0ZW5zaW9uIGluIFsnLnR4dCcsICcuY2hlY2tz
dW0nLCAnLnBuZyddOgorICAgICAgICB0ZXN0X3BhdGggPSBmaWxlc3lzdGVtLmpvaW4obGF5b3V0
X3Rlc3RzX2RpcmVjdG9yeSwgdGVzdF9maWxlKQorICAgICAgICBiYXNlbGluZXMgPSBhbGxfcGxh
dGZvcm1zX3BvcnQuZXhwZWN0ZWRfYmFzZWxpbmVzKAorICAgICAgICAgICAgdGVzdF9wYXRoLCBi
YXNlbGluZV9leHRlbnNpb24sIGFsbF9iYXNlbGluZXM9VHJ1ZSkKKyAgICAgICAgZm9yIHBsYXRm
b3JtX2RpcmVjdG9yeSwgZXhwZWN0ZWRfZmlsZW5hbWUgaW4gYmFzZWxpbmVzOgorICAgICAgICAg
ICAgaWYgbm90IHBsYXRmb3JtX2RpcmVjdG9yeToKKyAgICAgICAgICAgICAgICBjb250aW51ZQor
ICAgICAgICAgICAgaWYgcGxhdGZvcm1fZGlyZWN0b3J5ID09IGxheW91dF90ZXN0c19kaXJlY3Rv
cnk6CisgICAgICAgICAgICAgICAgcGxhdGZvcm0gPSAnYmFzZScKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgcGxhdGZvcm0gPSBhbGxfcGxhdGZvcm1zX3BvcnQucGxhdGZvcm1f
ZnJvbV9kaXJlY3RvcnkoCisgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtX2RpcmVjdG9yeSkK
KyAgICAgICAgICAgIGlmIHBsYXRmb3JtIG5vdCBpbiB0ZXN0X2Jhc2VsaW5lczoKKyAgICAgICAg
ICAgICAgICB0ZXN0X2Jhc2VsaW5lc1twbGF0Zm9ybV0gPSBbXQorICAgICAgICAgICAgdGVzdF9i
YXNlbGluZXNbcGxhdGZvcm1dLmFwcGVuZChiYXNlbGluZV9leHRlbnNpb24pCisKKyAgICByZXR1
cm4gdGVzdF9iYXNlbGluZXMKKwogY2xhc3MgUmViYXNlbGluZVNlcnZlcihBYnN0cmFjdERlY2xh
cmF0aXZlQ29tbWFuZCk6CiAgICAgbmFtZSA9ICJyZWJhc2VsaW5lLXNlcnZlciIKICAgICBoZWxw
X3RleHQgPSBfX2RvY19fCkBAIC0xODYsMTYgKzIzMCwyNSBAQCBjbGFzcyBSZWJhc2VsaW5lU2Vy
dmVyKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKIAogICAgIGRlZiBleGVjdXRlKHNlbGYs
IG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgogICAgICAgICByZXN1bHRzX2RpcmVjdG9yeSA9IGFyZ3Nb
MF0KKyAgICAgICAgZmlsZXN5c3RlbSA9IHN5c3RlbS5maWxlc3lzdGVtLkZpbGVTeXN0ZW0oKQog
CiAgICAgICAgIHByaW50ICdQYXJzaW5nIHVuZXhwZWN0ZWRfcmVzdWx0cy5qc29uLi4uJwotICAg
ICAgICByZXN1bHRzX2pzb25fcGF0aCA9IG9zLnBhdGguam9pbigKKyAgICAgICAgcmVzdWx0c19q
c29uX3BhdGggPSBmaWxlc3lzdGVtLmpvaW4oCiAgICAgICAgICAgICByZXN1bHRzX2RpcmVjdG9y
eSwgJ3VuZXhwZWN0ZWRfcmVzdWx0cy5qc29uJykKICAgICAgICAgd2l0aCBjb2RlY3Mub3Blbihy
ZXN1bHRzX2pzb25fcGF0aCwgInIiKSBhcyByZXN1bHRzX2pzb25fZmlsZToKICAgICAgICAgICAg
IHJlc3VsdHNfanNvbl9maWxlID0gZmlsZShyZXN1bHRzX2pzb25fcGF0aCkKICAgICAgICAgICAg
IHJlc3VsdHNfanNvbiA9IHNpbXBsZWpzb24ubG9hZChyZXN1bHRzX2pzb25fZmlsZSkKIAorICAg
ICAgICBwb3J0ID0gZmFjdG9yeS5nZXQoKQorICAgICAgICBsYXlvdXRfdGVzdHNfZGlyZWN0b3J5
ID0gcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkKKyAgICAgICAgcGxhdGZvcm1zID0gZmlsZXN5c3Rl
bS5saXN0ZGlyKAorICAgICAgICAgICAgZmlsZXN5c3RlbS5qb2luKGxheW91dF90ZXN0c19kaXJl
Y3RvcnksICdwbGF0Zm9ybScpKQorCisgICAgICAgIHByaW50ICdHYXRoZXJpbmcgY3VycmVudCBi
YXNlbGluZXMuLi4nCiAgICAgICAgIGZvciB0ZXN0X2ZpbGUsIHRlc3RfanNvbiBpbiByZXN1bHRz
X2pzb25bJ3Rlc3RzJ10uaXRlbXMoKToKICAgICAgICAgICAgIHRlc3RfanNvblsnc3RhdGUnXSA9
IFNUQVRFX05FRURTX1JFQkFTRUxJTkUKKyAgICAgICAgICAgIHRlc3RfanNvblsnYmFzZWxpbmVz
J10gPSBfZ2V0X3Rlc3RfYmFzZWxpbmVzKAorICAgICAgICAgICAgICAgIHRlc3RfZmlsZSwgbGF5
b3V0X3Rlc3RzX2RpcmVjdG9yeSwgcGxhdGZvcm1zLCBmaWxlc3lzdGVtKQogCiAgICAgICAgIHBy
aW50ICJTdGFydGluZyBzZXJ2ZXIgYXQgaHR0cDovL2xvY2FsaG9zdDolZC8iICUgb3B0aW9ucy5o
dHRwZF9wb3J0CiAgICAgICAgIHByaW50ICgiVXNlIHRoZSAnRXhpdCcgbGluayBpbiB0aGUgVUks
IGh0dHA6Ly9sb2NhbGhvc3Q6JWQvIgpAQCAtMjA0LDUgKzI1Nyw5IEBAIGNsYXNzIFJlYmFzZWxp
bmVTZXJ2ZXIoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQpOgogICAgICAgICBodHRwZCA9IFJl
YmFzZWxpbmVIVFRQU2VydmVyKAogICAgICAgICAgICAgaHR0cGRfcG9ydD1vcHRpb25zLmh0dHBk
X3BvcnQsCiAgICAgICAgICAgICByZXN1bHRzX2RpcmVjdG9yeT1yZXN1bHRzX2RpcmVjdG9yeSwK
LSAgICAgICAgICAgIHJlc3VsdHNfanNvbj1yZXN1bHRzX2pzb24pCisgICAgICAgICAgICByZXN1
bHRzX2pzb249cmVzdWx0c19qc29uLAorICAgICAgICAgICAgcGxhdGZvcm1zX2pzb249eworICAg
ICAgICAgICAgICAgICdwbGF0Zm9ybXMnOiBwbGF0Zm9ybXMsCisgICAgICAgICAgICAgICAgJ2Rl
ZmF1bHRQbGF0Zm9ybSc6IHBvcnQubmFtZSgpLAorICAgICAgICAgICAgfSkKICAgICAgICAgaHR0
cGQuc2VydmVfZm9yZXZlcigpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZXNlcnZlcl91bml0dGVzdC5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lc2VydmVyX3VuaXR0
ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjA5MjA3YzQ4MDA2ZTM1ZmNmYzM4NTk0MmIzMzA3YjM1ZTEyYmE3
ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
Y29tbWFuZHMvcmViYXNlbGluZXNlcnZlcl91bml0dGVzdC5weQpAQCAtMCwwICsxLDg4IEBACisj
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbSBpbXBvcnQgZmlsZXN5c3RlbV9tb2NrCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0IGltcG9ydCBiYXNlCitmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMgaW1wb3J0IHJlYmFz
ZWxpbmVzZXJ2ZXIKKworCitjbGFzcyBHZXRCYXNlbGluZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKKyAgICBkZWYgdGVzdF9ub19iYXNlbGluZXMoc2VsZik6CisgICAgICAgIHNlbGYuX2Fzc2Vy
dEJhc2VsaW5lcygKKyAgICAgICAgICAgIHRlc3RfZmlsZXM9W10sCisgICAgICAgICAgICB0ZXN0
PSdmYXN0L21pc3NpbmcuaHRtbCcsCisgICAgICAgICAgICBleHBlY3RlZF9iYXNlbGluZXM9e30p
CisKKyAgICBkZWYgdGVzdF90ZXh0X2Jhc2VsaW5lcyhzZWxmKToKKyAgICAgICAgc2VsZi5fYXNz
ZXJ0QmFzZWxpbmVzKAorICAgICAgICAgICAgdGVzdF9maWxlcz1bCisgICAgICAgICAgICAgICAg
J2Zhc3QvdGV4dC1leHBlY3RlZC50eHQnLAorICAgICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMv
ZmFzdC90ZXh0LWV4cGVjdGVkLnR4dCcsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdGVz
dD0nZmFzdC90ZXh0Lmh0bWwnLAorICAgICAgICAgICAgZXhwZWN0ZWRfYmFzZWxpbmVzPXsnbWFj
JzogWycudHh0J10sICdiYXNlJzogWycudHh0J119KQorCisgICAgZGVmIHRlc3RfaW1hZ2VfYW5k
X3RleHRfYmFzZWxpbmVzKHNlbGYpOgorICAgICAgICBzZWxmLl9hc3NlcnRCYXNlbGluZXMoCisg
ICAgICAgICAgICB0ZXN0X2ZpbGVzPVsKKyAgICAgICAgICAgICAgICAnZmFzdC9pbWFnZS1leHBl
Y3RlZC50eHQnLAorICAgICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvZmFzdC9pbWFnZS1leHBl
Y3RlZC5wbmcnLAorICAgICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvZmFzdC9pbWFnZS1leHBl
Y3RlZC5jaGVja3N1bScsCisgICAgICAgICAgICAgICAgJ3BsYXRmb3JtL3dpbi9mYXN0L2ltYWdl
LWV4cGVjdGVkLnBuZycsCisgICAgICAgICAgICAgICAgJ3BsYXRmb3JtL3dpbi9mYXN0L2ltYWdl
LWV4cGVjdGVkLmNoZWNrc3VtJywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB0ZXN0PSdm
YXN0L2ltYWdlLmh0bWwnLAorICAgICAgICAgICAgZXhwZWN0ZWRfYmFzZWxpbmVzPXsKKyAgICAg
ICAgICAgICAgICAnYmFzZSc6IFsnLnR4dCddLAorICAgICAgICAgICAgICAgICdtYWMnOiBbJy5j
aGVja3N1bScsICcucG5nJ10sCisgICAgICAgICAgICAgICAgJ3dpbic6IFsnLmNoZWNrc3VtJywg
Jy5wbmcnXSwKKyAgICAgICAgICAgIH0pCisKKyAgICBkZWYgdGVzdF9leHRyYV9iYXNlbGluZXMo
c2VsZik6CisgICAgICAgIHNlbGYuX2Fzc2VydEJhc2VsaW5lcygKKyAgICAgICAgICAgIHRlc3Rf
ZmlsZXM9WworICAgICAgICAgICAgICAgICdmYXN0L3RleHQtZXhwZWN0ZWQudHh0JywKKyAgICAg
ICAgICAgICAgICAncGxhdGZvcm0vbm9zdWNocGxhdGZvcm0vZmFzdC90ZXh0LWV4cGVjdGVkLnR4
dCcsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdGVzdD0nZmFzdC90ZXh0Lmh0bWwnLAor
ICAgICAgICAgICAgZXhwZWN0ZWRfYmFzZWxpbmVzPXsnYmFzZSc6IFsnLnR4dCddfSkKKworICAg
IGRlZiBfYXNzZXJ0QmFzZWxpbmVzKHNlbGYsIHRlc3RfZmlsZXMsIHRlc3QsIGV4cGVjdGVkX2Jh
c2VsaW5lcyk6CisgICAgICAgIGxheW91dF90ZXN0c19kaXJlY3RvcnkgPSBiYXNlLlBvcnQoKS5s
YXlvdXRfdGVzdHNfZGlyKCkKKyAgICAgICAgbW9ja19maWxlc3lzdGVtID0gZmlsZXN5c3RlbV9t
b2NrLk1vY2tGaWxlU3lzdGVtKCkKKyAgICAgICAgZm9yIGZpbGUgaW4gdGVzdF9maWxlcyArIFt0
ZXN0XToKKyAgICAgICAgICAgIGZpbGVfcGF0aCA9IG1vY2tfZmlsZXN5c3RlbS5qb2luKGxheW91
dF90ZXN0c19kaXJlY3RvcnksIGZpbGUpCisgICAgICAgICAgICBtb2NrX2ZpbGVzeXN0ZW0uZmls
ZXNbZmlsZV9wYXRoXSA9ICcnCisgICAgICAgIGFjdHVhbF9iYXNlbGluZXMgPSByZWJhc2VsaW5l
c2VydmVyLl9nZXRfdGVzdF9iYXNlbGluZXMoCisgICAgICAgICAgICB0ZXN0LAorICAgICAgICAg
ICAgbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSwKKyAgICAgICAgICAgIFsnbWFjJywgJ3dpbicsICds
aW51eCddLAorICAgICAgICAgICAgbW9ja19maWxlc3lzdGVtKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGFjdHVhbF9iYXNlbGluZXMsIGV4cGVjdGVkX2Jhc2VsaW5lcykK
</data>
<flag name="review"
          id="65365"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>