<?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>215100</bug_id>
          
          <creation_ts>2020-08-03 13:33:49 -0700</creation_ts>
          <short_desc>IndexSparseSet::sort() should update m_map</short_desc>
          <delta_ts>2020-08-07 08:55:15 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=215272</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>215272</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1677393</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2020-08-03 13:33:49 -0700</bug_when>
    <thetext>IndexSparseSet is made of two fields: m_values and m_map, and the two must be kept in sync.
But its sort routine currently only sorts m_values.
This might be related to a random crash that seems to occasionally occur in the vicinity of this code in the wild.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677408</commentid>
    <comment_count>1</comment_count>
      <attachid>405862</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2020-08-03 13:38:09 -0700</bug_when>
    <thetext>Created attachment 405862
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677425</commentid>
    <comment_count>2</comment_count>
      <attachid>405862</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-08-03 14:35:54 -0700</bug_when>
    <thetext>Comment on attachment 405862
Patch

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

r=me.  Please also fix the case in IndexSparseSet::remove() where it is doing a comparison of (m_values[position] == value) when it should be comparing (EntryTypeTraits::key(m_values[position]) == value).

&gt; Source/WTF/wtf/IndexSparseSet.h:103
&gt; +    void validate();

Can you make this a no-op on !ASSERT_ENABLED builds i.e. an empty ALWAYS_INLINE function on release builds?  I&apos;m not sure it makes sense to pay the price of this validation on a release build (and paying it twice too).

&gt; Source/WTF/wtf/IndexSparseSet.h:240
&gt; +template&lt;typename EntryType, typename EntryTypeTraits, typename OverflowHandler&gt;
&gt; +void IndexSparseSet&lt;EntryType, EntryTypeTraits, OverflowHandler&gt;::validate()
&gt; +{
&gt; +    for (unsigned val : *this)
&gt; +        RELEASE_ASSERT(contains(val));
&gt;  }

Make this conditional on #if ASSERT_ENABLED.

While you&apos;re at it, can you also ASSERT that m_values.size() &lt;= m_map.size()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677442</commentid>
    <comment_count>3</comment_count>
      <attachid>405862</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-08-03 15:07:36 -0700</bug_when>
    <thetext>Comment on attachment 405862
Patch

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

r=me too.

&gt; Source/WTF/ChangeLog:10
&gt; +        This might be related to a random crash that seems to occasionally occur in the vicinity of this code in the wild (rdar://problem/64594569)

Can you add it as a part of TestWTF test which test does not crash with this change?

&gt; Source/WTF/wtf/IndexSparseSet.h:225
&gt; +    // Bring m_map back in sync with m_values
&gt; +    // Should fix rdar://problem/64594569

I think these comments are not necessary if we have a test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677597</commentid>
    <comment_count>4</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2020-08-04 02:51:44 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #2)
&gt; Comment on attachment 405862 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=405862&amp;action=review
&gt; 
&gt; r=me.  Please also fix the case in IndexSparseSet::remove() where it is
&gt; doing a comparison of (m_values[position] == value) when it should be
&gt; comparing (EntryTypeTraits::key(m_values[position]) == value).

Done, good catch.

&gt; &gt; Source/WTF/wtf/IndexSparseSet.h:103
&gt; &gt; +    void validate();
&gt; 
&gt; Can you make this a no-op on !ASSERT_ENABLED builds i.e. an empty
&gt; ALWAYS_INLINE function on release builds?  I&apos;m not sure it makes sense to
&gt; pay the price of this validation on a release build (and paying it twice
&gt; too).

I wanted this as a RELEASE_ASSERT so it could catch possible remaining problems in seed. But since this code no longer appears as a top-crasher in telemetry, I&apos;m ok with making it limited to debug builds.
Instead of changing validate() itself, I am making the calls to it conditional on ASSERT_ENABLED. This way we can still run validate() in the debugger, even if on a release build.
&gt; &gt; Source/WTF/wtf/IndexSparseSet.h:240
&gt; &gt; +template&lt;typename EntryType, typename EntryTypeTraits, typename OverflowHandler&gt;
&gt; &gt; +void IndexSparseSet&lt;EntryType, EntryTypeTraits, OverflowHandler&gt;::validate()
&gt; &gt; +{
&gt; &gt; +    for (unsigned val : *this)
&gt; &gt; +        RELEASE_ASSERT(contains(val));
&gt; &gt;  }
&gt; 
&gt; Make this conditional on #if ASSERT_ENABLED.
&gt; 
&gt; While you&apos;re at it, can you also ASSERT that m_values.size() &lt;= m_map.size()?

Added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678355</commentid>
    <comment_count>5</comment_count>
      <attachid>406102</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2020-08-06 12:38:21 -0700</bug_when>
    <thetext>Created attachment 406102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678356</commentid>
    <comment_count>6</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2020-08-06 12:39:38 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #3)
&gt; Comment on attachment 405862 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=405862&amp;action=review
&gt; 
&gt; r=me too.
&gt; 
&gt; &gt; Source/WTF/ChangeLog:10
&gt; &gt; +        This might be related to a random crash that seems to occasionally occur in the vicinity of this code in the wild (rdar://problem/64594569)
&gt; 
&gt; Can you add it as a part of TestWTF test which test does not crash with this
&gt; change?

Thanks, I had forgotten the existence of TestWTF. I found out that IndexSparseSet was fully untested, so I wrote a suite of tests for it.

&gt; &gt; Source/WTF/wtf/IndexSparseSet.h:225
&gt; &gt; +    // Bring m_map back in sync with m_values
&gt; &gt; +    // Should fix rdar://problem/64594569
&gt; 
&gt; I think these comments are not necessary if we have a test.

I removed most comments, but left some which I felt were more useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678358</commentid>
    <comment_count>7</comment_count>
      <attachid>406102</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-08-06 12:52:08 -0700</bug_when>
    <thetext>Comment on attachment 406102
Patch

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

r=me

&gt; Source/WTF/wtf/IndexSparseSet.h:225
&gt; +    }

It is nice if we have

#if ASSERT_ENABLED
validate();
#endif

here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678363</commentid>
    <comment_count>8</comment_count>
      <attachid>406102</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-08-06 13:02:28 -0700</bug_when>
    <thetext>Comment on attachment 406102
Patch

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

r=me too.

&gt;&gt; Source/WTF/wtf/IndexSparseSet.h:225
&gt;&gt; +    }
&gt; 
&gt; It is nice if we have
&gt; 
&gt; #if ASSERT_ENABLED
&gt; validate();
&gt; #endif
&gt; 
&gt; here.

+1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678564</commentid>
    <comment_count>9</comment_count>
      <attachid>406168</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2020-08-07 06:23:31 -0700</bug_when>
    <thetext>Created attachment 406168
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678566</commentid>
    <comment_count>10</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2020-08-07 06:24:13 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #7)
&gt; Comment on attachment 406102 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=406102&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WTF/wtf/IndexSparseSet.h:225
&gt; &gt; +    }
&gt; 
&gt; It is nice if we have
&gt; 
&gt; #if ASSERT_ENABLED
&gt; validate();
&gt; #endif
&gt; 
&gt; here.

Thanks for the review. I assumed that this validation was no longer necessary now that we have dedicated tests, but since both Mark and you want it I&apos;ve added it back in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678573</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-07 07:13:29 -0700</bug_when>
    <thetext>Committed r265371: &lt;https://trac.webkit.org/changeset/265371&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 406168.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678574</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-07 07:14:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/66679684&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678595</commentid>
    <comment_count>13</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2020-08-07 08:47:15 -0700</bug_when>
    <thetext>It looks like the changes in https://trac.webkit.org/changeset/265371/webkit

has caused 50+ crashes on Mac Debug: https://build.webkit.org/builders/Apple%20Mojave%20Debug%20WK1%20%28Tests%29/builds/12763</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405862</attachid>
            <date>2020-08-03 13:38:09 -0700</date>
            <delta_ts>2020-08-06 12:38:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch215100</filename>
            <type>text/plain</type>
            <size>2643</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYWVmYzc3Y2U0M2UuLjIwMDE2YzAwMWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDIw
LTA4LTAzICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAg
SW5kZXhTcGFyc2VTZXQ6OnNvcnQoKSBzaG91bGQgdXBkYXRlIG1fbWFwCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUxMDAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbmRleFNwYXJzZVNldCBpcyBtYWRl
IG9mIHR3byBmaWVsZHM6IG1fdmFsdWVzIGFuZCBtX21hcCwgYW5kIHRoZSB0d28gbXVzdCBiZSBr
ZXB0IGluIHN5bmMuCisgICAgICAgIEJ1dCBpdHMgc29ydCByb3V0aW5lIGN1cnJlbnRseSBvbmx5
IHNvcnRzIG1fdmFsdWVzLgorICAgICAgICBUaGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gYSByYW5k
b20gY3Jhc2ggdGhhdCBzZWVtcyB0byBvY2Nhc2lvbmFsbHkgb2NjdXIgaW4gdGhlIHZpY2luaXR5
IG9mIHRoaXMgY29kZSBpbiB0aGUgd2lsZCAocmRhcjovL3Byb2JsZW0vNjQ1OTQ1NjkpCisKKyAg
ICAgICAgSSBhZGRlZCBhIHZhbGlkYXRpb24gcm91dGluZSwgdGhhdCBJIHJ1biBiZWZvcmUgYW5k
IGFmdGVyIHRoZSBzb3J0aW5nLgorICAgICAgICBJIHZlcmlmaWVkLCBhbmQgd2l0aG91dCB0aGUg
Zml4LCB0aGUgdmFsaWRhdGlvbiByb3V0aW5lIGZhaWxzIGFmdGVyIHRoZSBzb3J0aW5nIG9uIGxv
dHMgb2YgdGVzdHMuCisKKyAgICAgICAgKiB3dGYvSW5kZXhTcGFyc2VTZXQuaDoKKyAgICAgICAg
KFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6c29ydCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFu
ZGxlcj46OnZhbGlkYXRlKToKKwogMjAyMC0wOC0wMSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1
ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNjUwOTcs
IHIyNjUxMTMsIGFuZCByMjY1MTIyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSW5kZXhT
cGFyc2VTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0LmgKaW5kZXggZjM4MGVm
ZGU1YjMuLjkxNzBkMmM4YjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9JbmRleFNwYXJz
ZVNldC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0LmgKQEAgLTk5LDYgKzk5
LDggQEAgcHVibGljOgogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0OwogICAgIAogICAg
IHZvaWQgc29ydCgpOworCisgICAgdm9pZCB2YWxpZGF0ZSgpOwogICAgIAogICAgIGNvbnN0IFZh
bHVlTGlzdCYgdmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KIApAQCAtMjEwLDEx
ICsyMTIsMzEgQEAgYXV0byBJbmRleFNwYXJzZVNldDxFbnRyeVR5cGUsIEVudHJ5VHlwZVRyYWl0
cywgT3ZlcmZsb3dIYW5kbGVyPjo6Z2V0KHVuc2lnbmVkIHYKIHRlbXBsYXRlPHR5cGVuYW1lIEVu
dHJ5VHlwZSwgdHlwZW5hbWUgRW50cnlUeXBlVHJhaXRzLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+CiB2b2lkIEluZGV4U3BhcnNlU2V0PEVudHJ5VHlwZSwgRW50cnlUeXBlVHJhaXRzLCBPdmVy
Zmxvd0hhbmRsZXI+Ojpzb3J0KCkKIHsKKyAgICAvLyBDaGVjayBhZGRlZCB0byBkZWJ1ZyByZGFy
Oi8vcHJvYmxlbS82NDU5NDU2OQorICAgIHZhbGlkYXRlKCk7CisKICAgICBzdGQ6OnNvcnQoCiAg
ICAgICAgIG1fdmFsdWVzLmJlZ2luKCksIG1fdmFsdWVzLmVuZCgpLAogICAgICAgICBbJl0gKGNv
bnN0IEVudHJ5VHlwZSYgYSwgY29uc3QgRW50cnlUeXBlJiBiKSB7CiAgICAgICAgICAgICByZXR1
cm4gRW50cnlUeXBlVHJhaXRzOjprZXkoYSkgPCBFbnRyeVR5cGVUcmFpdHM6OmtleShiKTsKICAg
ICAgICAgfSk7CisKKyAgICAvLyBCcmluZyBtX21hcCBiYWNrIGluIHN5bmMgd2l0aCBtX3ZhbHVl
cworICAgIC8vIFNob3VsZCBmaXggcmRhcjovL3Byb2JsZW0vNjQ1OTQ1NjkKKyAgICBmb3IgKHVu
c2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtX3ZhbHVlcy5zaXplKCk7ICsraW5kZXgpIHsKKyAg
ICAgICAgdW5zaWduZWQgdmFsdWUgPSBtX3ZhbHVlc1tpbmRleF07CisgICAgICAgIG1fbWFwW3Zh
bHVlXSA9IGluZGV4OworICAgIH0KKworICAgIC8vIENoZWNrIGFkZGVkIHRvIGRlYnVnIHJkYXI6
Ly9wcm9ibGVtLzY0NTk0NTY5CisgICAgdmFsaWRhdGUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgRW50cnlUeXBlLCB0eXBlbmFtZSBFbnRyeVR5cGVUcmFpdHMsIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4KK3ZvaWQgSW5kZXhTcGFyc2VTZXQ8RW50cnlUeXBlLCBFbnRyeVR5cGVUcmFpdHMs
IE92ZXJmbG93SGFuZGxlcj46OnZhbGlkYXRlKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIHZhbCA6
ICp0aGlzKQorICAgICAgICBSRUxFQVNFX0FTU0VSVChjb250YWlucyh2YWwpKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgRW50cnlUeXBlLCB0eXBlbmFtZSBFbnRyeVR5cGVUcmFpdHMsIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlcj4K
</data>
<flag name="review"
          id="421265"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
    <flag name="commit-queue"
          id="421271"
          type_id="3"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406102</attachid>
            <date>2020-08-06 12:38:21 -0700</date>
            <delta_ts>2020-08-07 06:23:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch215100</filename>
            <type>text/plain</type>
            <size>14547</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggNzgyZWIxYmEyYzkuLjY1MDZjYmQ1MmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIw
LTA4LTA2ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAg
SW5kZXhTcGFyc2VTZXQ6OnNvcnQoKSBzaG91bGQgdXBkYXRlIG1fbWFwCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUxMDAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbmRleFNwYXJzZVNldCBpcyBtYWRl
IG9mIHR3byBmaWVsZHM6IG1fdmFsdWVzIGFuZCBtX21hcCwgYW5kIHRoZSB0d28gbXVzdCBiZSBr
ZXB0IGluIHN5bmMuCisgICAgICAgIEJ1dCBpdHMgc29ydCByb3V0aW5lIGN1cnJlbnRseSBvbmx5
IHNvcnRzIG1fdmFsdWVzLgorICAgICAgICBUaGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gYSByYW5k
b20gY3Jhc2ggdGhhdCBzZWVtcyB0byBvY2Nhc2lvbmFsbHkgb2NjdXIgaW4gdGhlIHZpY2luaXR5
IG9mIHRoaXMgY29kZSBpbiB0aGUgd2lsZCAocmRhcjovL3Byb2JsZW0vNjQ1OTQ1NjkpCisKKyAg
ICAgICAgSSBhZGRlZCBhIHZhbGlkYXRpb24gcm91dGluZSwgdGhhdCBJIHJ1biBpbiB0aGUgdGVz
dHMgdGhhdCBJIGFkZGVkIHRvIFRlc3RXVEYuCisgICAgICAgIEkgdmVyaWZpZWQsIGFuZCB3aXRo
b3V0IHRoZSBmaXgsIHRoZSB2YWxpZGF0aW9uIHJvdXRpbmUgZmFpbHMgYWZ0ZXIgdGhlIHNvcnRp
bmcuCisKKyAgICAgICAgSSBhbHNvIGZpeGVkIHJlbW92ZSgpIHdoaWNoIHdhcyB3cm9uZyBvbiBu
b24tdHJpdmlhbCB0eXBlcyAodGhhbmtzIHRvIE1hcmsgZm9yIGNhdGNoaW5nIHRoaXMgb3RoZXIg
YnVnKS4KKworICAgICAgICAqIHd0Zi9JbmRleFNwYXJzZVNldC5oOgorICAgICAgICAoV1RGOjpP
dmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+
Ojpzb3J0KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dmFsaWRhdGUpOgorCiAy
MDIwLTA4LTA1ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byBub24tZXhpc3RlbnQgMTAuMTYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9JbmRl
eFNwYXJzZVNldC5oCmluZGV4IGYzODBlZmRlNWIzLi42NGVhMDcwNDk3MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9JbmRl
eFNwYXJzZVNldC5oCkBAIC05OSw2ICs5OSw4IEBAIHB1YmxpYzoKICAgICBjb25zdF9pdGVyYXRv
ciBlbmQoKSBjb25zdDsKICAgICAKICAgICB2b2lkIHNvcnQoKTsKKworICAgIHZvaWQgdmFsaWRh
dGUoKTsKICAgICAKICAgICBjb25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzOyB9CiAKQEAgLTE0OCw3ICsxNTAsNyBAQCBpbmxpbmUgYm9vbCBJbmRleFNwYXJz
ZVNldDxFbnRyeVR5cGUsIEVudHJ5VHlwZVRyYWl0cywgT3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3Zl
KAogICAgIGlmIChwb3NpdGlvbiA+PSBtX3ZhbHVlcy5zaXplKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmIChtX3ZhbHVlc1twb3NpdGlvbl0gPT0gdmFsdWUpIHsKKyAgICBpZiAo
RW50cnlUeXBlVHJhaXRzOjprZXkobV92YWx1ZXNbcG9zaXRpb25dKSA9PSB2YWx1ZSkgewogICAg
ICAgICBFbnRyeVR5cGUgbGFzdFZhbHVlID0gbV92YWx1ZXMubGFzdCgpOwogICAgICAgICBtX3Zh
bHVlc1twb3NpdGlvbl0gPSBXVEZNb3ZlKGxhc3RWYWx1ZSk7CiAgICAgICAgIG1fbWFwW0VudHJ5
VHlwZVRyYWl0czo6a2V5KGxhc3RWYWx1ZSldID0gcG9zaXRpb247CkBAIC0yMTUsNiArMjE3LDIw
IEBAIHZvaWQgSW5kZXhTcGFyc2VTZXQ8RW50cnlUeXBlLCBFbnRyeVR5cGVUcmFpdHMsIE92ZXJm
bG93SGFuZGxlcj46OnNvcnQoKQogICAgICAgICBbJl0gKGNvbnN0IEVudHJ5VHlwZSYgYSwgY29u
c3QgRW50cnlUeXBlJiBiKSB7CiAgICAgICAgICAgICByZXR1cm4gRW50cnlUeXBlVHJhaXRzOjpr
ZXkoYSkgPCBFbnRyeVR5cGVUcmFpdHM6OmtleShiKTsKICAgICAgICAgfSk7CisKKyAgICAvLyBC
cmluZyBtX21hcCBiYWNrIGluIHN5bmMgd2l0aCBtX3ZhbHVlcworICAgIGZvciAodW5zaWduZWQg
aW5kZXggPSAwOyBpbmRleCA8IG1fdmFsdWVzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICB1
bnNpZ25lZCBrZXkgPSBFbnRyeVR5cGVUcmFpdHM6OmtleShtX3ZhbHVlc1tpbmRleF0pOworICAg
ICAgICBtX21hcFtrZXldID0gaW5kZXg7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBF
bnRyeVR5cGUsIHR5cGVuYW1lIEVudHJ5VHlwZVRyYWl0cywgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyPgordm9pZCBJbmRleFNwYXJzZVNldDxFbnRyeVR5cGUsIEVudHJ5VHlwZVRyYWl0cywgT3Zl
cmZsb3dIYW5kbGVyPjo6dmFsaWRhdGUoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdmFsdWVz
LnNpemUoKSA8IG1fbWFwLnNpemUoKSk7CisgICAgZm9yIChjb25zdCBFbnRyeVR5cGUmIGVudHJ5
IDogKnRoaXMpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnRhaW5zKEVudHJ5VHlwZVRyYWl0
czo6a2V5KGVudHJ5KSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeVR5cGUsIHR5cGVu
YW1lIEVudHJ5VHlwZVRyYWl0cywgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgpkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGZlOWMzNmNlNmFiLi40
Y2U2MDBhMTU5NyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA4LTA2ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jp
c3NldEBhcHBsZS5jb20+CisKKyAgICAgICAgSW5kZXhTcGFyc2VTZXQ6OnNvcnQoKSBzaG91bGQg
dXBkYXRlIG1fbWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTUxMDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUZXN0V1RGIHdhcyBub3QgdGVzdGluZyBJbmRleFNwYXJzZVNldCBhdCBhbGwuIEl0IG5v
dyBkb2VzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9JbmRleFNwYXJzZVNldC5jcHA6
IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMjAtMDgtMDUgIEFh
a2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBCaWdT
dXIgRVdTIHRvIEFwcGxlU2lsaWNvbiBFV1MKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvQ01ha2VMaXN0cy50eHQgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDQ0NzdhZjMwMTIyLi5iNWY3M2MxOTE3YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMu
dHh0CkBAIC00OSw2ICs0OSw3IEBAIHNldChUZXN0V1RGX1NPVVJDRVMKICAgICBUZXN0cy9XVEYv
SGFzaFNldC5jcHAKICAgICBUZXN0cy9XVEYvSGFzaGVyLmNwcAogICAgIFRlc3RzL1dURi9IZXhO
dW1iZXIuY3BwCisgICAgVGVzdHMvV1RGL0luZGV4U3BhcnNlU2V0LmNwcAogICAgIFRlc3RzL1dU
Ri9JbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmNwcAogICAgIFRlc3RzL1dURi9JdGVyYXRvclJh
bmdlLmNwcAogICAgIFRlc3RzL1dURi9KU09OVmFsdWUuY3BwCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDRlOThhMDE4NTg5Li4wODEyYmZhZDY3OCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTE5Niw2ICsxOTYsNyBAQAogCQkzMUI3NkU0NTIzMjk5QkRDMDA3RkVEMkMgLyogc3lzdGVt
LXByZXZpZXctdHJpZ2dlci5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxQjc2RTQ0MjMyOTlCQTMwMDdGRUQyQyAvKiBzeXN0ZW0tcHJl
dmlldy10cmlnZ2VyLmh0bWwgKi87IH07CiAJCTMxRTlCREExMjQ3RjRDNjIwMDJFNTFBMiAvKiBX
ZWJHTFByZXBhcmVEaXNwbGF5T25XZWJUaHJlYWQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUU5QkRBMDI0N0Y0QzYyMDAyRTUxQTIgLyogV2ViR0xQ
cmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkLm1tICovOyB9OwogCQkzMUU5QkRBMzI0N0Y1NzI5MDAy
RTUxQTIgLyogd2ViZ2wuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMUU5QkRBMjI0N0Y0REQwMDAyRTUxQTIgLyogd2ViZ2wuaHRtbCAq
LzsgfTsKKwkJMzM5NzZEODMyNERDNDc5QjAwODEyMzA0IC8qIEluZGV4U3BhcnNlU2V0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOTc2RDgyMjRE
QzQ3OUIwMDgxMjMwNCAvKiBJbmRleFNwYXJzZVNldC5jcHAgKi87IH07CiAJCTMzQkU1QUY5MTM3
QjVBQUUwMDcwNTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0JFNUFGODEzN0I1QUFFMDA3
MDU4MTMgLyogTW91c2VNb3ZlQWZ0ZXJDcmFzaF9CdW5kbGUuY3BwICovOyB9OwogCQkzM0RDODkx
MjE0MTk1NUZFMDA3NDdFRjcgLyogc2ltcGxlLWlmcmFtZS5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzREM4OTBFMTQxOTUzOTMwMDc0
N0VGNyAvKiBzaW1wbGUtaWZyYW1lLmh0bWwgKi87IH07CiAJCTMzREM4OTE0MTQxOTU3OUYwMDc0
N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1NlcnZlclJlZGlyZWN0Q2FsbGJhY2tfQnVuZGxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzREM4OTEzMTQx
OTU3OUYwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1NlcnZlclJlZGlyZWN0Q2FsbGJhY2tfQnVu
ZGxlLmNwcCAqLzsgfTsKQEAgLTE4NjksNiArMTg3MCw3IEBACiAJCTMxRTlCREEwMjQ3RjRDNjIw
MDJFNTFBMiAvKiBXZWJHTFByZXBhcmVEaXNwbGF5T25XZWJUaHJlYWQubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXZWJHTFByZXBhcmVEaXNwbGF5T25XZWJUaHJlYWQubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMxRTlCREEyMjQ3RjRERDAwMDJFNTFBMiAvKiB3ZWJnbC5odG1s
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5o
dG1sOyBwYXRoID0gd2ViZ2wuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzMz
QjlDRTExMjc3RjIzMTAwRkVGQ0UzIC8qIFByZXZlbnRFbXB0eVVzZXJBZ2VudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcmV2ZW50RW1wdHlVc2VyQWdlbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMzk3NkQ4MjI0REM0NzlCMDA4MTIzMDQg
LyogSW5kZXhTcGFyc2VTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5kZXhTcGFyc2VTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzM0JF
NUFGNDEzN0I1QTZDMDA3MDU4MTMgLyogTW91c2VNb3ZlQWZ0ZXJDcmFzaC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb3VzZU1vdmVBZnRlckNyYXNoLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzNCRTVBRjgxMzdCNUFBRTAwNzA1ODEzIC8qIE1v
dXNlTW92ZUFmdGVyQ3Jhc2hfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE1vdXNlTW92ZUFmdGVyQ3Jhc2hfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzNEQzg5MEUxNDE5NTM5MzAwNzQ3RUY3IC8qIHNpbXBsZS1pZnJhbWUu
aHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJzaW1wbGUtaWZyYW1lLmh0bWwiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDEzOCw2ICs0MTQwLDcgQEAKIAkJCQkwQkNE
ODMzNDE0ODU3Q0U0MDBFQTIwMDMgLyogSGFzaE1hcC5jcHAgKi8sCiAJCQkJMjZCMkRGRjgxNUJE
RTU5OTAwNEY2OTFEIC8qIEhhc2hTZXQuY3BwICovLAogCQkJCTdDOEJGRjcwMjNDMDEwNjcwMEMw
MDlCMyAvKiBIZXhOdW1iZXIuY3BwICovLAorCQkJCTMzOTc2RDgyMjREQzQ3OUIwMDgxMjMwNCAv
KiBJbmRleFNwYXJzZVNldC5jcHAgKi8sCiAJCQkJMjY2RkFGRDIxNUU1Nzc1MjAwRjYxRDVCIC8q
IEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uY3BwICovLAogCQkJCTdDRUI2MkE5MjIzNjA4NkMw
MDY5Q0JCMCAvKiBJdGVyYXRvclJhbmdlLmNwcCAqLywKIAkJCQk3QTA1MDk0MDFGQjlGMDQ0MDBC
MzNGQjggLyogSlNPTlZhbHVlLmNwcCAqLywKQEAgLTQ4NjQsNiArNDg2Nyw3IEBACiAJCQkJN0M4
QkZGNzEyM0MwMTA3QTAwQzAwOUIzIC8qIEhleE51bWJlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3QzgzREVFMDFEMEE1OTBDMDBGRUJDRjMgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1M0ZDREU2QjIyOUVGRkI5MDA1OThFQ0YgLyogSXNvSGVh
cC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMzk3NkQ4MzI0REM0NzlCMDA4MTIzMDQgLyogSW5k
ZXhTcGFyc2VTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NFQjYyQUIyMjM2MDlERTAwNjlD
QkIwIC8qIEl0ZXJhdG9yUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0EwNTA5NDExRkI5
RjA2NDAwQjMzRkI4IC8qIEpTT05WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzFDMUQ4
RTFERjhFRjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0luZGV4U3BhcnNlU2V0LmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0luZGV4U3BhcnNlU2V0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWIzODE2MGYyN2YKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9JbmRleFNwYXJzZVNldC5jcHAK
QEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJUZXN0LmgiCisjaW5jbHVkZSA8d3RmL0luZGV4U3BhcnNlU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL0tleVZhbHVlUGFpci5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK1RF
U1QoV1RGX0luZGV4U3BhcnNlU2V0LCBBZGRSZW1vdmUpCit7CisgICAgSW5kZXhTcGFyc2VTZXQg
dGVzdFNldCgxMDApOworCisgICAgLy8gU3RhcnRzIGVtcHR5CisgICAgRVhQRUNUX0ZBTFNFKHRl
c3RTZXQuY29udGFpbnMoMCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0U2V0LmNvbnRhaW5zKDQy
KSk7CisgICAgRVhQRUNUX0VRKHRlc3RTZXQuc2l6ZSgpLCAwdSk7CisgICAgRVhQRUNUX1RSVUUo
dGVzdFNldC5pc0VtcHR5KCkpOworCisgICAgLy8gQWZ0ZXIgYWRkaW5nIGEgdmFsdWUsIHRoYXQg
dmFsdWUgYW5kIG5vdGhpbmcgZWxzZSBpcyBpbgorICAgIEVYUEVDVF9UUlVFKHRlc3RTZXQuYWRk
KDQyKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RTZXQuY29udGFpbnMoMTMpKTsKKyAgICBFWFBF
Q1RfVFJVRSh0ZXN0U2V0LmNvbnRhaW5zKDQyKSk7CisgICAgRVhQRUNUX1RSVUUodGVzdFNldC5n
ZXQoMTMpID09IG51bGxwdHIpOworICAgIEVYUEVDVF9UUlVFKHRlc3RTZXQuZ2V0KDQyKSAhPSBu
dWxscHRyKTsKKyAgICBFWFBFQ1RfRVEoKnRlc3RTZXQuZ2V0KDQyKSwgNDJ1KTsKKyAgICBFWFBF
Q1RfRVEodGVzdFNldC5zaXplKCksIDF1KTsKKyAgICB0ZXN0U2V0LnZhbGlkYXRlKCk7CisKKyAg
ICAvLyBBZGRpbmcgYW4gYWxyZWFkeSBleGlzdGluZyB2YWx1ZSBpcyBhIG5vLW9wIHRoYXQgcmV0
dXJucyBmYWxzZQorICAgIEVYUEVDVF9GQUxTRSh0ZXN0U2V0LmFkZCg0MikpOworICAgIEVYUEVD
VF9UUlVFKHRlc3RTZXQuY29udGFpbnMoNDIpKTsKKyAgICBFWFBFQ1RfRVEodGVzdFNldC5zaXpl
KCksIDF1KTsKKyAgICB0ZXN0U2V0LnZhbGlkYXRlKCk7CisKKyAgICAvLyBSZW1vdmUgZmFpbHMg
b24gbm9uLWV4aXN0aW5nIHZhbHVlcworICAgIEVYUEVDVF9GQUxTRSh0ZXN0U2V0LnJlbW92ZSg5
MCkpOworICAgIEVYUEVDVF9FUSh0ZXN0U2V0LnNpemUoKSwgMXUpOworICAgIHRlc3RTZXQudmFs
aWRhdGUoKTsKKworICAgIC8vIEJ1dCBzdWNjZWVkcyBvbiBhbiBleGlzdGluZyBvbmUKKyAgICBF
WFBFQ1RfVFJVRSh0ZXN0U2V0LnJlbW92ZSg0MikpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0U2V0
LmNvbnRhaW5zKDQyKSk7CisgICAgRVhQRUNUX0VRKHRlc3RTZXQuZ2V0KDQyKSwgbnVsbHB0cik7
CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RTZXQucmVtb3ZlKDQyKSk7CisgICAgRVhQRUNUX0VRKHRl
c3RTZXQuc2l6ZSgpLCAwdSk7CisgICAgdGVzdFNldC52YWxpZGF0ZSgpOworCisgICAgLy8gQW5k
IGl0IGlzIHBvc3NpYmxlIHRvIGFkZCBhIHZhbHVlIGJhY2sgaW4KKyAgICBFWFBFQ1RfVFJVRSh0
ZXN0U2V0LmFkZCg0MikpOworICAgIEVYUEVDVF9UUlVFKHRlc3RTZXQuY29udGFpbnMoNDIpKTsK
KyAgICBFWFBFQ1RfRVEodGVzdFNldC5zaXplKCksIDF1KTsKKyAgICB0ZXN0U2V0LnZhbGlkYXRl
KCk7Cit9CisKK1RFU1QoV1RGX0luZGV4U3BhcnNlU2V0LCBOb25Ucml2aWFsVHlwZSkKK3sKKyAg
ICBJbmRleFNwYXJzZVNldDxLZXlWYWx1ZVBhaXI8dW5zaWduZWQsIGRvdWJsZT4+IHRlc3RTZXQo
MTAwKTsKKworICAgIC8vIFN0YXJ0cyBlbXB0eQorICAgIEVYUEVDVF9GQUxTRSh0ZXN0U2V0LmNv
bnRhaW5zKDApKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdFNldC5jb250YWlucyg0MikpOworICAg
IEVYUEVDVF9FUSh0ZXN0U2V0LnNpemUoKSwgMHUpOworICAgIEVYUEVDVF9UUlVFKHRlc3RTZXQu
aXNFbXB0eSgpKTsKKworICAgIC8vIEFmdGVyIGFkZGluZyBhIHZhbHVlLCB0aGF0IHZhbHVlIGFu
ZCBub3RoaW5nIGVsc2UgaXMgaW4KKyAgICBFWFBFQ1RfVFJVRSh0ZXN0U2V0LmFkZCg0MiwgMy4x
NCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0U2V0LmNvbnRhaW5zKDEzKSk7CisgICAgRVhQRUNU
X1RSVUUodGVzdFNldC5jb250YWlucyg0MikpOworICAgIEVYUEVDVF9UUlVFKHRlc3RTZXQuZ2V0
KDEzKSA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0U2V0LmdldCg0MikgIT0gbnVs
bHB0cik7CisgICAgRVhQRUNUX0VRKHRlc3RTZXQuZ2V0KDQyKS0+dmFsdWUsIDMuMTQpOworICAg
IEVYUEVDVF9FUSh0ZXN0U2V0LnNpemUoKSwgMXUpOworICAgIHRlc3RTZXQudmFsaWRhdGUoKTsK
KworICAgIC8vIEFkZGluZyBhbiBhbHJlYWR5IGV4aXN0aW5nIHZhbHVlIGlzIGEgbm8tb3AgdGhh
dCByZXR1cm5zIGZhbHNlCisgICAgRVhQRUNUX0ZBTFNFKHRlc3RTZXQuYWRkKDQyLCA1LjE5KSk7
CisgICAgRVhQRUNUX1RSVUUodGVzdFNldC5jb250YWlucyg0MikpOworICAgIEVYUEVDVF9FUSh0
ZXN0U2V0LmdldCg0MiktPnZhbHVlLCAzLjE0KTsKKyAgICBFWFBFQ1RfRVEodGVzdFNldC5zaXpl
KCksIDF1KTsKKyAgICB0ZXN0U2V0LnZhbGlkYXRlKCk7CisKKyAgICAvLyBTZXQgY29ycmVjdGx5
IHVwZGF0ZXMgdGhlIHZhbHVlIGFuZCByZXR1cm5zIGZhbHNlIGluIHRoYXQgY2FzZQorICAgIEVY
UEVDVF9GQUxTRSh0ZXN0U2V0LnNldCg0MiwgMTcuMTgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0
U2V0LmNvbnRhaW5zKDQyKSk7CisgICAgRVhQRUNUX0VRKHRlc3RTZXQuZ2V0KDQyKS0+dmFsdWUs
IDE3LjE4KTsKKyAgICBFWFBFQ1RfRVEodGVzdFNldC5zaXplKCksIDF1KTsKKyAgICB0ZXN0U2V0
LnZhbGlkYXRlKCk7CisKKyAgICAvLyBTZXQgb24gYSBuZXcga2V5IGFjdHMgbGlrZSBhZGQKKyAg
ICBFWFBFQ1RfVFJVRSh0ZXN0U2V0LnNldCgxMywgMTMuMTQpKTsKKyAgICBFWFBFQ1RfVFJVRSh0
ZXN0U2V0LmNvbnRhaW5zKDEzKSk7CisgICAgRVhQRUNUX0VRKHRlc3RTZXQuZ2V0KDEzKS0+dmFs
dWUsIDEzLjE0KTsKKyAgICBFWFBFQ1RfRVEodGVzdFNldC5zaXplKCksIDJ1KTsKKyAgICB0ZXN0
U2V0LnZhbGlkYXRlKCk7CisKKyAgICAvLyBSZW1vdmUgZmFpbHMgb24gbm9uLWV4aXN0aW5nIHZh
bHVlcworICAgIEVYUEVDVF9GQUxTRSh0ZXN0U2V0LnJlbW92ZSg5MCkpOworICAgIEVYUEVDVF9F
USh0ZXN0U2V0LnNpemUoKSwgMnUpOworICAgIHRlc3RTZXQudmFsaWRhdGUoKTsKKworICAgIC8v
IEJ1dCBzdWNjZWVkcyBvbiBhbiBleGlzdGluZyBvbmUKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0U2V0
LnJlbW92ZSg0MikpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0U2V0LmNvbnRhaW5zKDQyKSk7Cisg
ICAgRVhQRUNUX0VRKHRlc3RTZXQuZ2V0KDQyKSwgbnVsbHB0cik7CisgICAgRVhQRUNUX0ZBTFNF
KHRlc3RTZXQucmVtb3ZlKDQyKSk7CisgICAgRVhQRUNUX0VRKHRlc3RTZXQuc2l6ZSgpLCAxdSk7
CisgICAgdGVzdFNldC52YWxpZGF0ZSgpOworCisgICAgLy8gQW5kIGl0IGlzIHBvc3NpYmxlIHRv
IGFkZCBhIHZhbHVlIGJhY2sgaW4KKyAgICBFWFBFQ1RfVFJVRSh0ZXN0U2V0LmFkZCg0MiwgMS4x
KSk7CisgICAgRVhQRUNUX1RSVUUodGVzdFNldC5jb250YWlucyg0MikpOworICAgIEVYUEVDVF9F
USh0ZXN0U2V0LmdldCg0MiktPnZhbHVlLCAxLjEpOworICAgIEVYUEVDVF9FUSh0ZXN0U2V0LnNp
emUoKSwgMnUpOworICAgIHRlc3RTZXQudmFsaWRhdGUoKTsKK30KKworVEVTVChXVEZfSW5kZXhT
cGFyc2VTZXQsIFNvcnRDbGVhcikKK3sKKyAgICBJbmRleFNwYXJzZVNldCB0ZXN0U2V0KDEwMCk7
CisgICAgdW5zaWduZWQgdmFsdWVzW10gPSB7MSwgNCwgMzIsIDEzLCAyLCAyNSwgNTQsIDIsIDN9
OworCisgICAgZm9yICh1bnNpZ25lZCB2YWx1ZSA6IHZhbHVlcykKKyAgICAgICAgdGVzdFNldC5h
ZGQodmFsdWUpOworCisgICAgdGVzdFNldC5zb3J0KCk7CisgICAgdGVzdFNldC52YWxpZGF0ZSgp
OworCisgICAgLy8gVGhlIHNhbWUgdmFsdWVzIGFyZSBpbiB0aGUgc2V0IGFmdGVyIGl0IGlzIHNv
cnRlZAorICAgIGZvciAodW5zaWduZWQgdmFsdWUgOiB2YWx1ZXMpCisgICAgICAgIEVYUEVDVF9U
UlVFKHRlc3RTZXQuY29udGFpbnModmFsdWUpKTsKKyAgICBFWFBFQ1RfRVEodGVzdFNldC5zaXpl
KCksIDh1KTsKKworICAgIC8vIEFuZCBpdGVyYXRpbmcgdGhlIHNldCByZXR1cm5zIHRoZW0gaW4g
c29ydGVkIG9yZGVyCisgICAgdW5zaWduZWQgc29ydGVkVmFsdWVzWzIwXTsKKyAgICB1bnNpZ25l
ZCBpbmRleCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCB2YWx1ZSA6IHRlc3RTZXQpCisgICAgICAg
IHNvcnRlZFZhbHVlc1tpbmRleCsrXSA9IHZhbHVlOworICAgIEVYUEVDVF9FUShpbmRleCwgOHUp
OworICAgIEVYUEVDVF9FUShzb3J0ZWRWYWx1ZXNbMF0sIDF1KTsKKyAgICBFWFBFQ1RfRVEoc29y
dGVkVmFsdWVzWzFdLCAydSk7CisgICAgRVhQRUNUX0VRKHNvcnRlZFZhbHVlc1syXSwgM3UpOwor
ICAgIEVYUEVDVF9FUShzb3J0ZWRWYWx1ZXNbM10sIDR1KTsKKyAgICBFWFBFQ1RfRVEoc29ydGVk
VmFsdWVzWzRdLCAxM3UpOworICAgIEVYUEVDVF9FUShzb3J0ZWRWYWx1ZXNbNV0sIDI1dSk7Cisg
ICAgRVhQRUNUX0VRKHNvcnRlZFZhbHVlc1s2XSwgMzJ1KTsKKyAgICBFWFBFQ1RfRVEoc29ydGVk
VmFsdWVzWzddLCA1NHUpOworCisgICAgdGVzdFNldC5jbGVhcigpOworICAgIHRlc3RTZXQudmFs
aWRhdGUoKTsKKworICAgIC8vIEFmdGVyIGNsZWFyaW5nIHRoZSBzZXQgaXQgaXMgdHJ1bHkgZW1w
dHkKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0U2V0LmlzRW1wdHkoKSk7CisgICAgZm9yICh1bnNpZ25l
ZCB2YWx1ZSA9IDA7IHZhbHVlIDwgMTAwOyArK3ZhbHVlKQorICAgICAgICBFWFBFQ1RfRkFMU0Uo
dGVzdFNldC5jb250YWlucyh2YWx1ZSkpOworICAgIHVuc2lnbmVkIG51bWJlck9mSXRlcmF0aW9u
cyA9IDA7CisgICAgZm9yICh1bnNpZ25lZCB2YWx1ZSA6IHRlc3RTZXQpIHsKKyAgICAgICAgKHZv
aWQpIHZhbHVlOworICAgICAgICArK251bWJlck9mSXRlcmF0aW9uczsKKyAgICB9CisgICAgRVhQ
RUNUX0VRKG51bWJlck9mSXRlcmF0aW9ucywgMHUpOworCit9CisKK30gLy8gbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkK
</data>
<flag name="review"
          id="421523"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406168</attachid>
            <date>2020-08-07 06:23:31 -0700</date>
            <delta_ts>2020-08-07 07:13:29 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>patch215100</filename>
            <type>text/plain</type>
            <size>14618</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggNzgyZWIxYmEyYzkuLmI1Y2ZlNWZhYmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIw
LTA4LTA2ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAg
SW5kZXhTcGFyc2VTZXQ6OnNvcnQoKSBzaG91bGQgdXBkYXRlIG1fbWFwCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUxMDAKKworICAgICAgICBSZXZp
ZXdlZCBieSBZdXN1a2UgU3V6dWtpIGFuZCBNYXJrIExhbS4KKworICAgICAgICBJbmRleFNwYXJz
ZVNldCBpcyBtYWRlIG9mIHR3byBmaWVsZHM6IG1fdmFsdWVzIGFuZCBtX21hcCwgYW5kIHRoZSB0
d28gbXVzdCBiZSBrZXB0IGluIHN5bmMuCisgICAgICAgIEJ1dCBpdHMgc29ydCByb3V0aW5lIGN1
cnJlbnRseSBvbmx5IHNvcnRzIG1fdmFsdWVzLgorICAgICAgICBUaGlzIG1pZ2h0IGJlIHJlbGF0
ZWQgdG8gYSByYW5kb20gY3Jhc2ggdGhhdCBzZWVtcyB0byBvY2Nhc2lvbmFsbHkgb2NjdXIgaW4g
dGhlIHZpY2luaXR5IG9mIHRoaXMgY29kZSBpbiB0aGUgd2lsZCAocmRhcjovL3Byb2JsZW0vNjQ1
OTQ1NjkpCisKKyAgICAgICAgSSBhZGRlZCBhIHZhbGlkYXRpb24gcm91dGluZSwgdGhhdCBJIHJ1
biBpbiB0aGUgdGVzdHMgdGhhdCBJIGFkZGVkIHRvIFRlc3RXVEYuCisgICAgICAgIEkgdmVyaWZp
ZWQsIGFuZCB3aXRob3V0IHRoZSBmaXgsIHRoZSB2YWxpZGF0aW9uIHJvdXRpbmUgZmFpbHMgYWZ0
ZXIgdGhlIHNvcnRpbmcuCisKKyAgICAgICAgSSBhbHNvIGZpeGVkIHJlbW92ZSgpIHdoaWNoIHdh
cyB3cm9uZyBvbiBub24tdHJpdmlhbCB0eXBlcyAodGhhbmtzIHRvIE1hcmsgZm9yIGNhdGNoaW5n
IHRoaXMgb3RoZXIgYnVnKS4KKworICAgICAgICAqIHd0Zi9JbmRleFNwYXJzZVNldC5oOgorICAg
ICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpPdmVy
Zmxvd0hhbmRsZXI+Ojpzb3J0KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dmFs
aWRhdGUpOgorCiAyMDIwLTA4LTA1ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUu
Y29tPgogCiAgICAgICAgIFJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byBub24tZXhpc3RlbnQgMTAu
MTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0LmggYi9Tb3VyY2Uv
V1RGL3d0Zi9JbmRleFNwYXJzZVNldC5oCmluZGV4IGYzODBlZmRlNWIzLi5lOGJlNzQyMTE1MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VTZXQuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9JbmRleFNwYXJzZVNldC5oCkBAIC05OSw2ICs5OSw4IEBAIHB1YmxpYzoKICAgICBj
b25zdF9pdGVyYXRvciBlbmQoKSBjb25zdDsKICAgICAKICAgICB2b2lkIHNvcnQoKTsKKworICAg
IHZvaWQgdmFsaWRhdGUoKTsKICAgICAKICAgICBjb25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CiAKQEAgLTE0OCw3ICsxNTAsNyBAQCBpbmxpbmUgYm9v
bCBJbmRleFNwYXJzZVNldDxFbnRyeVR5cGUsIEVudHJ5VHlwZVRyYWl0cywgT3ZlcmZsb3dIYW5k
bGVyPjo6cmVtb3ZlKAogICAgIGlmIChwb3NpdGlvbiA+PSBtX3ZhbHVlcy5zaXplKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX3ZhbHVlc1twb3NpdGlvbl0gPT0gdmFsdWUp
IHsKKyAgICBpZiAoRW50cnlUeXBlVHJhaXRzOjprZXkobV92YWx1ZXNbcG9zaXRpb25dKSA9PSB2
YWx1ZSkgewogICAgICAgICBFbnRyeVR5cGUgbGFzdFZhbHVlID0gbV92YWx1ZXMubGFzdCgpOwog
ICAgICAgICBtX3ZhbHVlc1twb3NpdGlvbl0gPSBXVEZNb3ZlKGxhc3RWYWx1ZSk7CiAgICAgICAg
IG1fbWFwW0VudHJ5VHlwZVRyYWl0czo6a2V5KGxhc3RWYWx1ZSldID0gcG9zaXRpb247CkBAIC0y
MTUsNiArMjE3LDI0IEBAIHZvaWQgSW5kZXhTcGFyc2VTZXQ8RW50cnlUeXBlLCBFbnRyeVR5cGVU
cmFpdHMsIE92ZXJmbG93SGFuZGxlcj46OnNvcnQoKQogICAgICAgICBbJl0gKGNvbnN0IEVudHJ5
VHlwZSYgYSwgY29uc3QgRW50cnlUeXBlJiBiKSB7CiAgICAgICAgICAgICByZXR1cm4gRW50cnlU
eXBlVHJhaXRzOjprZXkoYSkgPCBFbnRyeVR5cGVUcmFpdHM6OmtleShiKTsKICAgICAgICAgfSk7
CisKKyAgICAvLyBCcmluZyBtX21hcCBiYWNrIGluIHN5bmMgd2l0aCBtX3ZhbHVlcworICAgIGZv
ciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1fdmFsdWVzLnNpemUoKTsgKytpbmRleCkg
eworICAgICAgICB1bnNpZ25lZCBrZXkgPSBFbnRyeVR5cGVUcmFpdHM6OmtleShtX3ZhbHVlc1tp
bmRleF0pOworICAgICAgICBtX21hcFtrZXldID0gaW5kZXg7CisgICAgfQorCisjaWYgQVNTRVJU
X0VOQUJMRUQKKyAgICB2YWxpZGF0ZSgpOworI2VuZGlmCit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEVudHJ5VHlwZSwgdHlwZW5hbWUgRW50cnlUeXBlVHJhaXRzLCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXI+Cit2b2lkIEluZGV4U3BhcnNlU2V0PEVudHJ5VHlwZSwgRW50cnlUeXBlVHJhaXRzLCBP
dmVyZmxvd0hhbmRsZXI+Ojp2YWxpZGF0ZSgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV92YWx1
ZXMuc2l6ZSgpIDwgbV9tYXAuc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IEVudHJ5VHlwZSYgZW50
cnkgOiAqdGhpcykKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29udGFpbnMoRW50cnlUeXBlVHJh
aXRzOjprZXkoZW50cnkpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5VHlwZSwgdHlw
ZW5hbWUgRW50cnlUeXBlVHJhaXRzLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmU5YzM2Y2U2YWIu
LjhkN2RlODQwYjQ2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAtMDgtMDYgIFJvYmluIE1vcmlzc2V0ICA8cm1v
cmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBJbmRleFNwYXJzZVNldDo6c29ydCgpIHNob3Vs
ZCB1cGRhdGUgbV9tYXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNTEwMAorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kgYW5kIE1h
cmsgTGFtLgorCisgICAgICAgIFRlc3RXVEYgd2FzIG5vdCB0ZXN0aW5nIEluZGV4U3BhcnNlU2V0
IGF0IGFsbC4gSXQgbm93IGRvZXMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0NNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0luZGV4
U3BhcnNlU2V0LmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwog
MjAyMC0wOC0wNSAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVuYW1lIEJpZ1N1ciBFV1MgdG8gQXBwbGVTaWxpY29uIEVXUwpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01h
a2VMaXN0cy50eHQKaW5kZXggNDQ3N2FmMzAxMjIuLmI1ZjczYzE5MTdiIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvQ01ha2VMaXN0cy50eHQKQEAgLTQ5LDYgKzQ5LDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwog
ICAgIFRlc3RzL1dURi9IYXNoU2V0LmNwcAogICAgIFRlc3RzL1dURi9IYXNoZXIuY3BwCiAgICAg
VGVzdHMvV1RGL0hleE51bWJlci5jcHAKKyAgICBUZXN0cy9XVEYvSW5kZXhTcGFyc2VTZXQuY3Bw
CiAgICAgVGVzdHMvV1RGL0ludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uY3BwCiAgICAgVGVzdHMv
V1RGL0l0ZXJhdG9yUmFuZ2UuY3BwCiAgICAgVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggNGU5OGEwMTg1ODkuLjA4MTJiZmFkNjc4IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTk2LDYgKzE5Niw3IEBACiAJCTMxQjc2RTQ1MjMyOTlCREMwMDdG
RUQyQyAvKiBzeXN0ZW0tcHJldmlldy10cmlnZ2VyLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFCNzZFNDQyMzI5OUJBMzAwN0ZFRDJD
IC8qIHN5c3RlbS1wcmV2aWV3LXRyaWdnZXIuaHRtbCAqLzsgfTsKIAkJMzFFOUJEQTEyNDdGNEM2
MjAwMkU1MUEyIC8qIFdlYkdMUHJlcGFyZURpc3BsYXlPbldlYlRocmVhZC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRTlCREEwMjQ3RjRDNjIwMDJF
NTFBMiAvKiBXZWJHTFByZXBhcmVEaXNwbGF5T25XZWJUaHJlYWQubW0gKi87IH07CiAJCTMxRTlC
REEzMjQ3RjU3MjkwMDJFNTFBMiAvKiB3ZWJnbC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRTlCREEyMjQ3RjRERDAwMDJFNTFBMiAv
KiB3ZWJnbC5odG1sICovOyB9OworCQkzMzk3NkQ4MzI0REM0NzlCMDA4MTIzMDQgLyogSW5kZXhT
cGFyc2VTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzM5NzZEODIyNERDNDc5QjAwODEyMzA0IC8qIEluZGV4U3BhcnNlU2V0LmNwcCAqLzsgfTsK
IAkJMzNCRTVBRjkxMzdCNUFBRTAwNzA1ODEzIC8qIE1vdXNlTW92ZUFmdGVyQ3Jhc2hfQnVuZGxl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzQkU1
QUY4MTM3QjVBQUUwMDcwNTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5jcHAgKi87
IH07CiAJCTMzREM4OTEyMTQxOTU1RkUwMDc0N0VGNyAvKiBzaW1wbGUtaWZyYW1lLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNEQzg5
MEUxNDE5NTM5MzAwNzQ3RUY3IC8qIHNpbXBsZS1pZnJhbWUuaHRtbCAqLzsgfTsKIAkJMzNEQzg5
MTQxNDE5NTc5RjAwNzQ3RUY3IC8qIExvYWRDYW5jZWxlZE5vU2VydmVyUmVkaXJlY3RDYWxsYmFj
a19CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzNEQzg5MTMxNDE5NTc5RjAwNzQ3RUY3IC8qIExvYWRDYW5jZWxlZE5vU2VydmVyUmVkaXJl
Y3RDYWxsYmFja19CdW5kbGUuY3BwICovOyB9OwpAQCAtMTg2OSw2ICsxODcwLDcgQEAKIAkJMzFF
OUJEQTAyNDdGNEM2MjAwMkU1MUEyIC8qIFdlYkdMUHJlcGFyZURpc3BsYXlPbldlYlRocmVhZC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkdMUHJlcGFyZURpc3BsYXlPbldlYlRocmVhZC5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFFOUJEQTIyNDdGNEREMDAwMkU1MUEy
IC8qIHdlYmdsLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSB3ZWJnbC5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzMzNCOUNFMTEyNzdGMjMxMDBGRUZDRTMgLyogUHJldmVudEVtcHR5VXNlckFn
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXZlbnRFbXB0
eVVzZXJBZ2VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzOTc2RDgyMjRE
QzQ3OUIwMDgxMjMwNCAvKiBJbmRleFNwYXJzZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbmRleFNwYXJzZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTMzQkU1QUY0MTM3QjVBNkMwMDcwNTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNo
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vdXNlTW92ZUFmdGVy
Q3Jhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzM0JFNUFGODEzN0I1QUFF
MDA3MDU4MTMgLyogTW91c2VNb3ZlQWZ0ZXJDcmFzaF9CdW5kbGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW91c2VNb3ZlQWZ0ZXJDcmFzaF9CdW5kbGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzM0RDODkwRTE0MTk1MzkzMDA3NDdFRjcgLyog
c2ltcGxlLWlmcmFtZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gInNpbXBsZS1p
ZnJhbWUuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MTM4LDYgKzQxNDAs
NyBAQAogCQkJCTBCQ0Q4MzM0MTQ4NTdDRTQwMEVBMjAwMyAvKiBIYXNoTWFwLmNwcCAqLywKIAkJ
CQkyNkIyREZGODE1QkRFNTk5MDA0RjY5MUQgLyogSGFzaFNldC5jcHAgKi8sCiAJCQkJN0M4QkZG
NzAyM0MwMTA2NzAwQzAwOUIzIC8qIEhleE51bWJlci5jcHAgKi8sCisJCQkJMzM5NzZEODIyNERD
NDc5QjAwODEyMzA0IC8qIEluZGV4U3BhcnNlU2V0LmNwcCAqLywKIAkJCQkyNjZGQUZEMjE1RTU3
NzUyMDBGNjFENUIgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5jcHAgKi8sCiAJCQkJN0NF
QjYyQTkyMjM2MDg2QzAwNjlDQkIwIC8qIEl0ZXJhdG9yUmFuZ2UuY3BwICovLAogCQkJCTdBMDUw
OTQwMUZCOUYwNDQwMEIzM0ZCOCAvKiBKU09OVmFsdWUuY3BwICovLApAQCAtNDg2NCw2ICs0ODY3
LDcgQEAKIAkJCQk3QzhCRkY3MTIzQzAxMDdBMDBDMDA5QjMgLyogSGV4TnVtYmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTdDODNERUUwMUQwQTU5MEMwMEZFQkNGMyAvKiBJbnRlZ2VyVG9TdHJp
bmdDb252ZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzRkNERTZCMjI5RUZGQjkwMDU5
OEVDRiAvKiBJc29IZWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMzOTc2RDgzMjREQzQ3OUIw
MDgxMjMwNCAvKiBJbmRleFNwYXJzZVNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0VCNjJB
QjIyMzYwOURFMDA2OUNCQjAgLyogSXRlcmF0b3JSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3QTA1MDk0MTFGQjlGMDY0MDBCMzNGQjggLyogSlNPTlZhbHVlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUzMUMxRDhFMURGOEVGNzIwMDZFOTc5RiAvKiBMRUJEZWNvZGVyLmNwcCBpbiBTb3Vy
Y2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSW5kZXhT
cGFyc2VTZXQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSW5kZXhTcGFyc2VT
ZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYjM4MTYwZjI3
ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0luZGV4
U3BhcnNlU2V0LmNwcApAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIlRlc3QuaCIKKyNpbmNsdWRlIDx3dGYvSW5kZXhTcGFyc2VT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvS2V5VmFsdWVQYWlyLmg+CisKK25hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJIHsKKworVEVTVChXVEZfSW5kZXhTcGFyc2VTZXQsIEFkZFJlbW92ZSkKK3sKKyAgICBJ
bmRleFNwYXJzZVNldCB0ZXN0U2V0KDEwMCk7CisKKyAgICAvLyBTdGFydHMgZW1wdHkKKyAgICBF
WFBFQ1RfRkFMU0UodGVzdFNldC5jb250YWlucygwKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RT
ZXQuY29udGFpbnMoNDIpKTsKKyAgICBFWFBFQ1RfRVEodGVzdFNldC5zaXplKCksIDB1KTsKKyAg
ICBFWFBFQ1RfVFJVRSh0ZXN0U2V0LmlzRW1wdHkoKSk7CisKKyAgICAvLyBBZnRlciBhZGRpbmcg
YSB2YWx1ZSwgdGhhdCB2YWx1ZSBhbmQgbm90aGluZyBlbHNlIGlzIGluCisgICAgRVhQRUNUX1RS
VUUodGVzdFNldC5hZGQoNDIpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdFNldC5jb250YWlucygx
MykpOworICAgIEVYUEVDVF9UUlVFKHRlc3RTZXQuY29udGFpbnMoNDIpKTsKKyAgICBFWFBFQ1Rf
VFJVRSh0ZXN0U2V0LmdldCgxMykgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX1RSVUUodGVzdFNl
dC5nZXQoNDIpICE9IG51bGxwdHIpOworICAgIEVYUEVDVF9FUSgqdGVzdFNldC5nZXQoNDIpLCA0
MnUpOworICAgIEVYUEVDVF9FUSh0ZXN0U2V0LnNpemUoKSwgMXUpOworICAgIHRlc3RTZXQudmFs
aWRhdGUoKTsKKworICAgIC8vIEFkZGluZyBhbiBhbHJlYWR5IGV4aXN0aW5nIHZhbHVlIGlzIGEg
bm8tb3AgdGhhdCByZXR1cm5zIGZhbHNlCisgICAgRVhQRUNUX0ZBTFNFKHRlc3RTZXQuYWRkKDQy
KSk7CisgICAgRVhQRUNUX1RSVUUodGVzdFNldC5jb250YWlucyg0MikpOworICAgIEVYUEVDVF9F
USh0ZXN0U2V0LnNpemUoKSwgMXUpOworICAgIHRlc3RTZXQudmFsaWRhdGUoKTsKKworICAgIC8v
IFJlbW92ZSBmYWlscyBvbiBub24tZXhpc3RpbmcgdmFsdWVzCisgICAgRVhQRUNUX0ZBTFNFKHRl
c3RTZXQucmVtb3ZlKDkwKSk7CisgICAgRVhQRUNUX0VRKHRlc3RTZXQuc2l6ZSgpLCAxdSk7Cisg
ICAgdGVzdFNldC52YWxpZGF0ZSgpOworCisgICAgLy8gQnV0IHN1Y2NlZWRzIG9uIGFuIGV4aXN0
aW5nIG9uZQorICAgIEVYUEVDVF9UUlVFKHRlc3RTZXQucmVtb3ZlKDQyKSk7CisgICAgRVhQRUNU
X0ZBTFNFKHRlc3RTZXQuY29udGFpbnMoNDIpKTsKKyAgICBFWFBFQ1RfRVEodGVzdFNldC5nZXQo
NDIpLCBudWxscHRyKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdFNldC5yZW1vdmUoNDIpKTsKKyAg
ICBFWFBFQ1RfRVEodGVzdFNldC5zaXplKCksIDB1KTsKKyAgICB0ZXN0U2V0LnZhbGlkYXRlKCk7
CisKKyAgICAvLyBBbmQgaXQgaXMgcG9zc2libGUgdG8gYWRkIGEgdmFsdWUgYmFjayBpbgorICAg
IEVYUEVDVF9UUlVFKHRlc3RTZXQuYWRkKDQyKSk7CisgICAgRVhQRUNUX1RSVUUodGVzdFNldC5j
b250YWlucyg0MikpOworICAgIEVYUEVDVF9FUSh0ZXN0U2V0LnNpemUoKSwgMXUpOworICAgIHRl
c3RTZXQudmFsaWRhdGUoKTsKK30KKworVEVTVChXVEZfSW5kZXhTcGFyc2VTZXQsIE5vblRyaXZp
YWxUeXBlKQoreworICAgIEluZGV4U3BhcnNlU2V0PEtleVZhbHVlUGFpcjx1bnNpZ25lZCwgZG91
YmxlPj4gdGVzdFNldCgxMDApOworCisgICAgLy8gU3RhcnRzIGVtcHR5CisgICAgRVhQRUNUX0ZB
TFNFKHRlc3RTZXQuY29udGFpbnMoMCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0U2V0LmNvbnRh
aW5zKDQyKSk7CisgICAgRVhQRUNUX0VRKHRlc3RTZXQuc2l6ZSgpLCAwdSk7CisgICAgRVhQRUNU
X1RSVUUodGVzdFNldC5pc0VtcHR5KCkpOworCisgICAgLy8gQWZ0ZXIgYWRkaW5nIGEgdmFsdWUs
IHRoYXQgdmFsdWUgYW5kIG5vdGhpbmcgZWxzZSBpcyBpbgorICAgIEVYUEVDVF9UUlVFKHRlc3RT
ZXQuYWRkKDQyLCAzLjE0KSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RTZXQuY29udGFpbnMoMTMp
KTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0U2V0LmNvbnRhaW5zKDQyKSk7CisgICAgRVhQRUNUX1RS
VUUodGVzdFNldC5nZXQoMTMpID09IG51bGxwdHIpOworICAgIEVYUEVDVF9UUlVFKHRlc3RTZXQu
Z2V0KDQyKSAhPSBudWxscHRyKTsKKyAgICBFWFBFQ1RfRVEodGVzdFNldC5nZXQoNDIpLT52YWx1
ZSwgMy4xNCk7CisgICAgRVhQRUNUX0VRKHRlc3RTZXQuc2l6ZSgpLCAxdSk7CisgICAgdGVzdFNl
dC52YWxpZGF0ZSgpOworCisgICAgLy8gQWRkaW5nIGFuIGFscmVhZHkgZXhpc3RpbmcgdmFsdWUg
aXMgYSBuby1vcCB0aGF0IHJldHVybnMgZmFsc2UKKyAgICBFWFBFQ1RfRkFMU0UodGVzdFNldC5h
ZGQoNDIsIDUuMTkpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0U2V0LmNvbnRhaW5zKDQyKSk7Cisg
ICAgRVhQRUNUX0VRKHRlc3RTZXQuZ2V0KDQyKS0+dmFsdWUsIDMuMTQpOworICAgIEVYUEVDVF9F
USh0ZXN0U2V0LnNpemUoKSwgMXUpOworICAgIHRlc3RTZXQudmFsaWRhdGUoKTsKKworICAgIC8v
IFNldCBjb3JyZWN0bHkgdXBkYXRlcyB0aGUgdmFsdWUgYW5kIHJldHVybnMgZmFsc2UgaW4gdGhh
dCBjYXNlCisgICAgRVhQRUNUX0ZBTFNFKHRlc3RTZXQuc2V0KDQyLCAxNy4xOCkpOworICAgIEVY
UEVDVF9UUlVFKHRlc3RTZXQuY29udGFpbnMoNDIpKTsKKyAgICBFWFBFQ1RfRVEodGVzdFNldC5n
ZXQoNDIpLT52YWx1ZSwgMTcuMTgpOworICAgIEVYUEVDVF9FUSh0ZXN0U2V0LnNpemUoKSwgMXUp
OworICAgIHRlc3RTZXQudmFsaWRhdGUoKTsKKworICAgIC8vIFNldCBvbiBhIG5ldyBrZXkgYWN0
cyBsaWtlIGFkZAorICAgIEVYUEVDVF9UUlVFKHRlc3RTZXQuc2V0KDEzLCAxMy4xNCkpOworICAg
IEVYUEVDVF9UUlVFKHRlc3RTZXQuY29udGFpbnMoMTMpKTsKKyAgICBFWFBFQ1RfRVEodGVzdFNl
dC5nZXQoMTMpLT52YWx1ZSwgMTMuMTQpOworICAgIEVYUEVDVF9FUSh0ZXN0U2V0LnNpemUoKSwg
MnUpOworICAgIHRlc3RTZXQudmFsaWRhdGUoKTsKKworICAgIC8vIFJlbW92ZSBmYWlscyBvbiBu
b24tZXhpc3RpbmcgdmFsdWVzCisgICAgRVhQRUNUX0ZBTFNFKHRlc3RTZXQucmVtb3ZlKDkwKSk7
CisgICAgRVhQRUNUX0VRKHRlc3RTZXQuc2l6ZSgpLCAydSk7CisgICAgdGVzdFNldC52YWxpZGF0
ZSgpOworCisgICAgLy8gQnV0IHN1Y2NlZWRzIG9uIGFuIGV4aXN0aW5nIG9uZQorICAgIEVYUEVD
VF9UUlVFKHRlc3RTZXQucmVtb3ZlKDQyKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RTZXQuY29u
dGFpbnMoNDIpKTsKKyAgICBFWFBFQ1RfRVEodGVzdFNldC5nZXQoNDIpLCBudWxscHRyKTsKKyAg
ICBFWFBFQ1RfRkFMU0UodGVzdFNldC5yZW1vdmUoNDIpKTsKKyAgICBFWFBFQ1RfRVEodGVzdFNl
dC5zaXplKCksIDF1KTsKKyAgICB0ZXN0U2V0LnZhbGlkYXRlKCk7CisKKyAgICAvLyBBbmQgaXQg
aXMgcG9zc2libGUgdG8gYWRkIGEgdmFsdWUgYmFjayBpbgorICAgIEVYUEVDVF9UUlVFKHRlc3RT
ZXQuYWRkKDQyLCAxLjEpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0U2V0LmNvbnRhaW5zKDQyKSk7
CisgICAgRVhQRUNUX0VRKHRlc3RTZXQuZ2V0KDQyKS0+dmFsdWUsIDEuMSk7CisgICAgRVhQRUNU
X0VRKHRlc3RTZXQuc2l6ZSgpLCAydSk7CisgICAgdGVzdFNldC52YWxpZGF0ZSgpOworfQorCitU
RVNUKFdURl9JbmRleFNwYXJzZVNldCwgU29ydENsZWFyKQoreworICAgIEluZGV4U3BhcnNlU2V0
IHRlc3RTZXQoMTAwKTsKKyAgICB1bnNpZ25lZCB2YWx1ZXNbXSA9IHsxLCA0LCAzMiwgMTMsIDIs
IDI1LCA1NCwgMiwgM307CisKKyAgICBmb3IgKHVuc2lnbmVkIHZhbHVlIDogdmFsdWVzKQorICAg
ICAgICB0ZXN0U2V0LmFkZCh2YWx1ZSk7CisKKyAgICB0ZXN0U2V0LnNvcnQoKTsKKyAgICB0ZXN0
U2V0LnZhbGlkYXRlKCk7CisKKyAgICAvLyBUaGUgc2FtZSB2YWx1ZXMgYXJlIGluIHRoZSBzZXQg
YWZ0ZXIgaXQgaXMgc29ydGVkCisgICAgZm9yICh1bnNpZ25lZCB2YWx1ZSA6IHZhbHVlcykKKyAg
ICAgICAgRVhQRUNUX1RSVUUodGVzdFNldC5jb250YWlucyh2YWx1ZSkpOworICAgIEVYUEVDVF9F
USh0ZXN0U2V0LnNpemUoKSwgOHUpOworCisgICAgLy8gQW5kIGl0ZXJhdGluZyB0aGUgc2V0IHJl
dHVybnMgdGhlbSBpbiBzb3J0ZWQgb3JkZXIKKyAgICB1bnNpZ25lZCBzb3J0ZWRWYWx1ZXNbMjBd
OworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIHZhbHVlIDogdGVz
dFNldCkKKyAgICAgICAgc29ydGVkVmFsdWVzW2luZGV4KytdID0gdmFsdWU7CisgICAgRVhQRUNU
X0VRKGluZGV4LCA4dSk7CisgICAgRVhQRUNUX0VRKHNvcnRlZFZhbHVlc1swXSwgMXUpOworICAg
IEVYUEVDVF9FUShzb3J0ZWRWYWx1ZXNbMV0sIDJ1KTsKKyAgICBFWFBFQ1RfRVEoc29ydGVkVmFs
dWVzWzJdLCAzdSk7CisgICAgRVhQRUNUX0VRKHNvcnRlZFZhbHVlc1szXSwgNHUpOworICAgIEVY
UEVDVF9FUShzb3J0ZWRWYWx1ZXNbNF0sIDEzdSk7CisgICAgRVhQRUNUX0VRKHNvcnRlZFZhbHVl
c1s1XSwgMjV1KTsKKyAgICBFWFBFQ1RfRVEoc29ydGVkVmFsdWVzWzZdLCAzMnUpOworICAgIEVY
UEVDVF9FUShzb3J0ZWRWYWx1ZXNbN10sIDU0dSk7CisKKyAgICB0ZXN0U2V0LmNsZWFyKCk7Cisg
ICAgdGVzdFNldC52YWxpZGF0ZSgpOworCisgICAgLy8gQWZ0ZXIgY2xlYXJpbmcgdGhlIHNldCBp
dCBpcyB0cnVseSBlbXB0eQorICAgIEVYUEVDVF9UUlVFKHRlc3RTZXQuaXNFbXB0eSgpKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIHZhbHVlID0gMDsgdmFsdWUgPCAxMDA7ICsrdmFsdWUpCisgICAgICAg
IEVYUEVDVF9GQUxTRSh0ZXN0U2V0LmNvbnRhaW5zKHZhbHVlKSk7CisgICAgdW5zaWduZWQgbnVt
YmVyT2ZJdGVyYXRpb25zID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIHZhbHVlIDogdGVzdFNldCkg
eworICAgICAgICAodm9pZCkgdmFsdWU7CisgICAgICAgICsrbnVtYmVyT2ZJdGVyYXRpb25zOwor
ICAgIH0KKyAgICBFWFBFQ1RfRVEobnVtYmVyT2ZJdGVyYXRpb25zLCAwdSk7CisKK30KKworfSAv
LyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>